ABAP 选择画面SELECT-OPTIONS必输项检查&图标设置

目录

1. 如何将选择画面中SELECT-OPTIONS设置成必输项

2. 如何在点击“复选框”按钮时不报系统MSG

3. 如何在写入手动判断后,仍然在画面上显示必输项小图标


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: 这个代码编辑器的显示看起来不大准确的样子...


版权声明:本文为nancyln9711原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。