如何跳过ABAP上的必填字段

时间:2013-02-26 08:56:46

标签: button sap abap skip dynpro

我希望它在点击“İptal”按钮时跳过必填字段。

但我不想在没有“强制性”的情况下控制强制性字段。 我希望在文本框中看到复选标记,如截图。

通常,'İptal'按钮在没有必填字段时调用不同的屏幕。

When i clicked on İptal button, i want it to skip this mandatory fields

注意:屏幕是标准选择屏幕。

3 个答案:

答案 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)

您可以执行以下操作来达到您的要求。

<强>先决条件:

  1. 首先是最重要的! 不要使用OBLIGATORY子句声明您的参数。此约束将覆盖选择屏幕处理期间的所有内部检查和验证。

  2. 这里我假设您使用标准GUI状态和在应用工具栏上激活的按钮。标准执行按钮具有标准ONLI fcode,而İptal具有IPT

  3. 要操纵目标字段,我们需要为其分配ID:

    PARAMETERS: p_matnr TYPE mara-matnr MODIF ID OBL,
                p_mtart TYPE mara-mtart MODIF ID OBL.
    
  4. 解决方案详情:

    1. 声明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.
      
    2. 在AT SELECTION-SCREEN事件中处理功能代码。

      AT SELECTION-SCREEN.
      
       IF sy-ucomm = 'ONLI'.
        LEAVE TO SCREEN 1000.
       ENDIF.
       IF sy-ucomm = 'IPT'.
        "<do whatever you want>
       ENDIF.
      
    3. 说明:在程序启动时,您的字段的required属性设置为2,这意味着它们必须有强制滴答声,但并不是真正的强制行为,即这正是你所需要的。您可以完美按下İptal按钮并运行任何其他程序 但是,如果要启用强制性约束,只需按标准执行,它再次调用我们的选择屏幕(LEAVE TO SCREEN 1000),但使用另一个fcode(ONLI),其中required属性被覆盖,瞧!在填写这些字段之前,不可能再往前走了。