ABAP 选择画面SELECT-OPTIONS必输项检查&图标设置
目录
1. 如何将选择画面中SELECT-OPTIONS设置成必输项
1. 如何将选择画面中SELECT-OPTIONS设置成必输项
不论是PARAMETERS还是SELECT-OPTIONS,在report程序定义时,后面添加OBLIGATORY即可将其定义成必输项目。
SELECTION-SCREEN BEGIN OF BLOCK B_01 WITH FRAME TITLE TEXT-B01.
PARAMETERS: P_WERKS TYPE T001W-WERKS OBLIGATORY. "必输项
SELECT-OPTIONS: S_MATNR FOR G_WRK_MATNR OBLIGATORY. "必输项
SELECTION-SCREEN END OF BLOCK B_01.
在Dynpro程序中,在画面Layout里双击选择想要设置的项目,在Program的Tab页中Input Field设置成Required即可。
这样写入的必输项检查,此时如果用户在使用时未输入,则会触发系统报错消息(Message no. 00055)
光标定在出错的字段上,不会锁住其他输入框,且其他输入框的字是黑色的。
上面这两种情况是通过"系统的逻辑"将画面项目设置成了必输项,虽然比较便捷,但有一定的局限性。
对于SELECT-OPTIONS来说,在LOW值没有填写的情况下点击“复数条选择”也会触发系统报错消息。
显然,这样的设置对于用户来说并不友好。
那么为了规避这种情况的发生,在开发中我们会对SELECT-OPTIONS的选择项目手动写入CHECK。
2. 如何在点击“复选框”按钮时不报系统MSG
在AT-SELECTION-SCREEN事件中写入‘空值时报错的逻辑’,并且在检查前CHECK一下“复选框”按钮对应的SY-UCOMM即可。
如何判断屏幕上按钮的SY-UCOMM呢?
在Report程序中手动写入选择画面其实相当于系统自动创建了一个编号为1000的Dynpro画面,由此,画面上每一个项目都有自己对应的ID、画面上的按钮也有自己对应的触发key。为了查找该“复选框”按钮对应的触发key,我们在选择屏幕上/h进入Debug模式后,查看当前的SY-UCOMM参数值即可。
经过查看发现,系统自定义的“复选框”的SY-UCOMM均以%打头,后面的数字会有所不同。
所以我们在手动写入代码时,可以添加如下CHECK,去避免点击“复选框”时即触发检查的情况。
(应用截取字符串的方式,如果SY-UCOMM的第一位是%,就说明是画面上的按钮项目)
* 判断是否为点击复选框的情况
CHECK SY-UCOMM+0(1) <> '%'.
* 客户为空值时
IF S_LIFNR[] IS INITIAL.
SET CURSOR FIELD 'S_LIFNR-LOW'.
* 【Fill in all required entry fields】
MESSAGE E055(00).
ENDIF.
此时,当画面中的客户字段没有输入值时,会触发手动写入的自定义检查。
光标定在出错的字段上,不会锁住其他输入框,且其他输入框的字是红色的。
(因为红黑不太影响使用,所以我在这里为了将Cursor set到出错的字段上,直接用了E型的消息)
3. 如何在写入手动判断后,仍然在画面上显示必输项小图标
细心的小伙伴可能已经发现了,既然Vendor字段没有写OBLIGATORY,为什么会有必输项小图标呢?
当然是手动编辑上去的啦~
为了保证写出来的选择画面与客户需求一致,在这个Vendor字段上画上了假图标。
这是如何实现的呢?我在百度上用中文搜'必输项假图标'类似的没找到,用英文检索了一下,找到了SAP QA里面的回答。
简单来说就是将该字段的SCREEN-REQUIRED参数设置为 2 即可。设定为1时所实现的功能与在后面写OBLIGATORY的效果一致,设定为2的时候只是将该字段展示为必输项(一个幌子),但其实系统层面并不对这个字段进行必输项检查。
这样就完美解决了“又想要图标,又想自定义写检查逻辑”的需求。
具体代码如下:
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
* 将客户字段设置成必输项
IF SCREEN-NAME = 'S_LIFNR-LOW'. "要确定好屏幕字段的名字
SCREEN-REQUIRED = 2.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
以上就是关于选择画面SELECT-OPTIONS必输项设定的一些思路,初入行有些表述不太准确,欢迎指正讨论:)
ps: 这个代码编辑器的显示看起来不大准确的样子...
文章来自于网络,如果侵犯了您的权益,请联系站长删除!