写入后如何用f12退出程序

how to leave program with f12 after write

一旦我离开 ABAP 中的选择屏幕,例如by write: 如何重写取消按钮的行为?在我下面的缩短代码中,每次我单击执行然后取消时,我都会回到选择屏幕 :( 我不想这种行为,而是希望在单击写入输出时完全离开程序红色按钮。

    PARAMETERS p_output AS CHECKBOX DEFAULT ' '.

    SELECTION-SCREEN BEGIN OF SCREEN 101 AS SUBSCREEN.
    SELECTION-SCREEN BEGIN OF BLOCK such WITH FRAME TITLE text-001.
    "...
    SELECTION-SCREEN END OF BLOCK such.
    SELECTION-SCREEN END OF SCREEN 101.

    SELECTION-SCREEN BEGIN OF SCREEN 102 AS SUBSCREEN.
    SELECTION-SCREEN BEGIN OF BLOCK such2 WITH FRAME TITLE text-002.
    "...
    SELECTION-SCREEN END OF BLOCK such2.
    SELECTION-SCREEN END OF SCREEN 102.


    SELECTION-SCREEN BEGIN OF TABBED BLOCK searchtab FOR 20 LINES.
    SELECTION-SCREEN TAB (15) expert USER-COMMAND ucomm1
    DEFAULT SCREEN 101.
    SELECTION-SCREEN TAB (17) common USER-COMMAND ucomm2
    DEFAULT SCREEN 102.
    SELECTION-SCREEN END OF BLOCK searchtab.

    INITIALIZATION.
      expert = text-001.
      common = text-002.
      searchtab-prog = sy-repid.
      searchtab-dynnr = 101.
      searchtab-activetab = 'EXPERT_SEARCH'.

      "...
       AT SELECTION-SCREEN ON EXIT-COMMAND.

      CASE sy-dynnr.
        WHEN 1000."main screen number
          CASE sy-ucomm.
            WHEN 'ECAN'.
               LEAVE PROGRAM.
            WHEN 'DBAC' OR 'ENDE'. "execute go back
               LEAVE TO SCREEN 1000." SELECTION-SCREEN 1000.
            WHEN 'UCOMM1'.
               searchtab-dynnr = 101."subscreen number 1
               searchtab-activetab = 'EXPERT'.
            WHEN 'UCOMM2'.
              searchtab-dynnr = 102."subscreen number 2
              searchtab-activetab = 'COMMON'.
            ENDCASE.
        WHEN Others.
            CASE sy-ucomm.
               WHEN 'ECAN'.
              LEAVE PROGRAM.
             WHEN 'DBAC' OR 'ENDE'. "execute go back
                LEAVE TO SCREEN 1000." SELECTION-SCREEN 1000.
              ENDCASE.
        ENDCASE.

        START-OF-SELECTION.
        PERFORM say_hello.

     FORM say_hello .
        WRITE: 'from the write output screen I want to navigate by Cancel button or key f12', 
       'not back to selection screen but leave the program entirely.'.
      ENDFORM.                    " SAY_HELLO

这是有效的方法,它并不漂亮。

  1. 将 GUI 状态 INLI 从程序 SAPMSSY0 复制到您自己的程序
  2. 更改取消按钮的确定代码。要使用您的示例代码,请将其更改为 ECAN。还要把Edit菜单里的那个改成complete
  3. 作为 START-OF-SELECTION 使用中的第一个命令 SET PF-STATUS 'INLI'. 这是假设您将其命名为相同
  4. AT SELECTION-SCREEN 更改为 AT USER-COMMAND
  5. 激活,测试,惊喜

之所以有效,是因为它删除了列表的标准行为,并用您自己的行为替换了它,仅针对取消按钮请注意。如果不更改取消的 OK 代码,标准 SAP 代码将接管,您无法控制该行为。