我希望它在点击“İptal”按钮时跳过必填字段。
但我不想在没有“强制性”的情况下控制强制性字段。 我希望在文本框中看到复选标记,如截图。
通常,'İptal'按钮在没有必填字段时调用不同的屏幕。
注意:屏幕是标准选择屏幕。
答案 0 :(得分:1)
您需要做的是在屏幕上的按钮上分配一个功能代码,其功能类型为“退出”。
然后您可以在报告中使用事件AT SELECTION-SCREEN ON EXIT-COMMAND
(我假设您正在谈论报告,因为您谈论选择屏幕)。在验证屏幕上的字段之前,系统会调用此事件。在这里,您可以实现所有必要的逻辑。
但是,我能想到如何做到这一点的唯一方法是将标准GUI状态%_00
从程序RSSYSTDB
复制到您的程序并添加您的功能代码并使其成为“退出”类型。然后在AT SELECTION-SCREEN OUTPUT
中,您可以使用SET PF-STATUS
命令覆盖标准GUI状态。 (否则,如果您为按钮指定了功能代码,但它不会受到特殊处理以触发ON EXIT-COMMAND
事件)。
修改强> 的
我只是尝试了这个并且它可以工作,但不是在将功能代码分配给按钮时(使用SELECTION-SCREEN PUSHBUTTON
)。相反,我必须将功能代码添加为工具栏上的按钮。然后它会触发AT SELECTION-SCREEN OUTPUT
事件。
编辑2: (刚刚将我的评论从下方复制到此处,因为重要的是要注意)顺便说一句,我不得不在复制时,将%_00 GUI状态重命名为其他内容。否则,即使在SET PF-STATUS中指定添加FROM PROGRAM,它仍将使用来自RSSYSTDB的旧GUI状态。
答案 1 :(得分:1)
我解决这个问题的方法不是让字段在布局中强制使用,而是在代码中创建一些条件示例我有一个名为ekpo-ebeln的输入输出字段:
IF ekpo-ebeln IS INITIAL.
CASE ok_code.
WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'BACK'.
CALL SCREEN 100.
ENDCASE.
MESSAGE 'Fill both of the fields' TYPE 'I'.
这解决了我的问题,而且有效!
答案 2 :(得分:0)
您可以执行以下操作来达到您的要求。
<强>先决条件:强>
首先是最重要的! 不要使用OBLIGATORY
子句声明您的参数。此约束将覆盖选择屏幕处理期间的所有内部检查和验证。
这里我假设您使用标准GUI状态和在应用工具栏上激活的按钮。标准执行按钮具有标准ONLI
fcode,而İptal具有IPT
。
要操纵目标字段,我们需要为其分配ID:
PARAMETERS: p_matnr TYPE mara-matnr MODIF ID OBL,
p_mtart TYPE mara-mtart MODIF ID OBL.
解决方案详情:
声明AT SELECTION-SCREEN OUTPUT事件,其中将编辑字段的属性。
AT SELECTION-SCREEN OUTPUT.
SET PF-STATUS 'SSCR'. "<<- our GUI-status
LOOP AT SCREEN.
IF screen-group1 = 'OBL'.
screen-required = '2'. "<<- default obligatory-like field appearance
MODIFY SCREEN.
ENDIF.
ENDLOOP.
IF sy-ucomm = 'ONLI'. "<<- making fields really obligatory
LOOP AT SCREEN.
IF screen-group1 = 'OBL'.
screen-required = '1'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
在AT SELECTION-SCREEN事件中处理功能代码。
AT SELECTION-SCREEN.
IF sy-ucomm = 'ONLI'.
LEAVE TO SCREEN 1000.
ENDIF.
IF sy-ucomm = 'IPT'.
"<do whatever you want>
ENDIF.
说明:在程序启动时,您的字段的required
属性设置为2,这意味着它们必须有强制滴答声,但并不是真正的强制行为,即这正是你所需要的。您可以完美按下İptal按钮并运行任何其他程序
但是,如果要启用强制性约束,只需按标准执行,它再次调用我们的选择屏幕(LEAVE TO SCREEN 1000
),但使用另一个fcode(ONLI
),其中required
属性被覆盖,瞧!在填写这些字段之前,不可能再往前走了。