二维码

dialog中如何避免select多次取数

Twilight发表于 2014-03-30 14:59Twilight 最后回复于 2014-03-30 14:59 [复制链接] 3189 0

逻辑:
1.先建立一个包含主key的数据结构
2.在select取数之前添加一个if条件

程序执行结果:
嵌套子屏幕.jpg

主程序代码:
  1. TABLES:SFLIGHT.
  2. TABLES:SPFLI.
  3. DATA:OK_CODE TYPE SY-UCOMM.
  4. TYPES:BEGIN OF TY_KEY,
  5.        CARRID TYPE SPFLI-CARRID,
  6.        CONNID TYPE SPFLI-CONNID,
  7.       END OF TY_KEY.
  8. DATA:WA_KEY TYPE TY_KEY.

  9. CALL SCREEN 100.
  10. *&---------------------------------------------------------------------*
  11. *&      Module  STATUS_0100  OUTPUT
  12. *&---------------------------------------------------------------------*
  13. *       text
  14. *----------------------------------------------------------------------*
  15. MODULE STATUS_0100 OUTPUT.
  16.   SET PF-STATUS 'STATUS_100'.
  17. *  SET TITLEBAR 'xxx'.

  18. ENDMODULE.                 " STATUS_0100  OUTPUT
  19. *&---------------------------------------------------------------------*
  20. *&      Module  USER_COMMAND_0100  INPUT
  21. *&---------------------------------------------------------------------*
  22. *       text
  23. *----------------------------------------------------------------------*
  24. MODULE USER_COMMAND_0100 INPUT.
  25. CASE OK_CODE.
  26.   WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
  27.     LEAVE TO SCREEN 0.
  28. ENDCASE.
  29. ENDMODULE.                 " USER_COMMAND_0100  INPUT
  30. *&---------------------------------------------------------------------*
  31. *&      Module  CHECK_FLDATE  INPUT
  32. *&---------------------------------------------------------------------*
  33. *       text
  34. *----------------------------------------------------------------------*
  35. MODULE CHECK_FLDATE INPUT.
  36. SELECT SINGLE *
  37.   FROM SFLIGHT
  38.   INTO SFLIGHT
  39.   WHERE CARRID = SFLIGHT-CARRID
  40.   AND   CONNID = SFLIGHT-CONNID
  41.   AND   FLDATE = SFLIGHT-FLDATE.

  42. IF SY-SUBRC <> 0.
  43. MESSAGE ID 'ZVINO' TYPE 'E' NUMBER '008' WITH SFLIGHT-FLDATE.
  44. ENDIF.
  45. ENDMODULE.                 " CHECK_FLDATE  INPUT

  46. INCLUDE ZLXG_011_110_PBO.
复制代码
INCLUDE ZLXG_011_110_PBO.
  1. *----------------------------------------------------------------------*
  2. ***INCLUDE ZLXG_011_110_PBO .
  3. *----------------------------------------------------------------------*
  4. *&---------------------------------------------------------------------*
  5. *&      Module  GET_SPFLI_DATA  OUTPUT
  6. *&---------------------------------------------------------------------*
  7. *       text
  8. *----------------------------------------------------------------------*
  9. MODULE GET_SPFLI_DATA OUTPUT.
  10. *IF SFLIGHT-CARRID IS NOT INITIAL AND SFLIGHT-CONNID IS NOT INITIAL.
  11. IF SFLIGHT-CARRID NE WA_KEY-CARRID AND SFLIGHT-CONNID NE WA_KEY-CONNID. "NE = '<>'
  12.   MOVE-CORRESPONDING SFLIGHT TO WA_KEY.
  13. SELECT SINGLE * FROM SPFLI
  14.   INTO SPFLI
  15.   WHERE CARRID = WA_KEY-CARRID AND CONNID = WA_KEY-CONNID.
  16. ENDIF.
  17. *ENDIF.
  18. ENDMODULE.                 " GET_SPFLI_DATA  OUTPUT
复制代码

注意:
一.screen 100
1.attributes->normal screen
2.element list->定义ok_code
3.flow logic
  1. PROCESS BEFORE OUTPUT.
  2. MODULE STATUS_0100.
  3. CALL SUBSCREEN SCHEDULE
  4. INCLUDING SY-repid '0110'.  "SY-repid = SY-cprog
  5. *
  6. PROCESS AFTER INPUT.
  7. MODULE USER_COMMAND_0100 AT EXIT-COMMAND.
  8. CALL SUBSCREEN SCHEDULE.
  9. CHAIN.
  10. FIELD: SFLIGHT-CARRID,SFLIGHT-CONNID,SFLIGHT-FLDATE.
  11. MODULE CHECK_FLDATE ON CHAIN-REQUEST.
  12. ENDCHAIN.
复制代码
4.screen painter
screen 100 painter.jpg
5.画painter时 可以用数据字典的结构 拖拽添加 (把主键都选上,别的字段随便加几个)

二.screen 110
1.attributes->subscreen
2.flow logic
  1. PROCESS BEFORE OUTPUT.
  2. * MODULE STATUS_0110.
  3. *
  4. MODULE GET_SPFLI_DATA.
  5. PROCESS AFTER INPUT.
  6. * MODULE USER_COMMAND_0110.
复制代码
3.画painter时 可以用数据字典的结构 拖拽添加 (把主键都选上,别的字段随便加几个)

三.退出按钮 ,避免chain endchain 校验的优先级大于普通按钮的优先级 造成的退出时不成功的小bug
1.MODULE EXIT 后面需要添加AT EXIT-COMMAND
2.按钮类型 选择E(exit) 退出类型
Exit command.jpg
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表