二维码

SAP中程序实现向导创建Wizard creation

Twilight发表于 2014-12-29 16:41Twilight 最后回复于 2014-12-29 16:41 [复制链接] 4281 0

向导是sap中指导用户一步一步地完成某种工作,他和我们电脑中安装软件时的向导差不多,主要包含以下function modules:
  • SWF_WIZARD_CALL  
  • SWF_WIZARD_Dialog_DATA_GET  
  • SWF_WIZARD_DIALOG_DATA_SET  
  • SWF_WIZARD_DIALOG_MODIFY  
  • SWF_WIZARD_DIALOG_OKCODE_GET  
  • SWF_WIZARD_DIALOG_OKCODE_SET  
  • SWF_WIZARD_DIALOG_REFRESH  
  • SWF_WIZARD_PROCESS  
  • SWF_WIZARD_PROCESS_INTERNAL  
  • SWF_WIZARD_PROCESS_MODIFY  
  • SWF_WIZARD_PROCESS_READ

下面我们以加减计算的小例子讲解,程序逻辑如下
logical_img.jpg
一、创建三个子屏幕500、501、502;子屏幕没有ok_code
Wizard creation 1.jpg
1、500 subscreen 格式:
Wizard creation 2.jpg
Wizard creation 3.jpg
Add/Subtract加减radio button实现方法:dialog中使用单选按钮Radio buttons
逻辑流
  1. PROCESS BEFORE OUTPUT.
  2. * MODULE STATUS_0500.
  3. *
  4. PROCESS AFTER INPUT.
  5.   MODULE user_command_0500.
复制代码

2、501 subscreen 格式:
Wizard creation 4.jpg
逻辑流
  1. PROCESS BEFORE OUTPUT.
  2. MODULE STATUS_0501.
  3. *
  4. PROCESS AFTER INPUT.
  5. * MODULE USER_COMMAND_0501.
复制代码

3、502 subscreen 格式:
Wizard creation 5.jpg
逻辑流
  1. PROCESS BEFORE OUTPUT.
  2. MODULE STATUS_0502.
  3. *
  4. PROCESS AFTER INPUT.
  5. * MODULE USER_COMMAND_0502.
复制代码

二、se61创建一个dialog text对象
Wizard creation 6.jpg
Wizard creation 7.jpg
三、新建程序
  1. REPORT  ydamon_095.
  2. INCLUDE : <wizard>.

  3. DATA : it_wizdef TYPE TABLE OF swf_wizdef,
  4.         wa_wizdef TYPE swf_wizdef,
  5.         wa_wizard TYPE swf_wizard,
  6.         result TYPE i,
  7.         rad1 TYPE xfeld,
  8.         rad2 TYPE xfeld,
  9.         num1 TYPE i,
  10.         num2 TYPE i,
  11.         answer TYPE i.

  12. PERFORM wizard_append USING :
  13.        'YDAMON_095' 'START' 'START_WIZARD',
  14.        'YDAMON_095' 'USER INPUT' 'SHOW_SCREEN_0500',
  15.        'YDAMON_095' 'ADDITION RESULT' 'SHOW_SCREEN_0501',
  16.        'YDAMON_095' 'SUBTRACTION RESULT' 'SHOW_SCREEN_0502',
  17.        'YDAMON_095' 'COMPLETE' 'END_WIZARD'.

  18. CALL FUNCTION 'SWF_WIZARD_PROCESS'
  19.   EXPORTING
  20.    container_compensation            = 'X'
  21. *   PROCESS_LOGGING                   = 'X'
  22. *   ROADMAP                           = 'X'
  23. *   START_COLUMN                      = 2
  24. *   START_ROW                         = 2
  25. *   AMODAL                            = ' '
  26. *   DO_INIT                           = ' '
  27.    TABLES
  28.      definition                        = it_wizdef
  29. *   CONTAINER_PARAMETER               =
  30.   EXCEPTIONS
  31.     operation_cancelled_by_user       = 1
  32.     process_in_error                  = 2
  33.     OTHERS                            = 3
  34.            .
  35. IF sy-subrc <> 0.
  36. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  37. *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  38. ENDIF.
  39. *&---------------------------------------------------------------------*
  40. *&      Form  WIZARD_APPEND
  41. *&---------------------------------------------------------------------*
  42. *       text
  43. *----------------------------------------------------------------------*
  44. *      -->P_0022   text
  45. *      -->P_0023   text
  46. *      -->P_0024   text
  47. *----------------------------------------------------------------------*
  48. FORM wizard_append  USING lv_program TYPE c
  49.                            lv_text TYPE c
  50.                            lv_subroutine TYPE c.
  51.   CLEAR wa_wizdef.
  52.   wa_wizdef-program = lv_program.
  53.   wa_wizdef-text = lv_text.
  54.   wa_wizdef-form = lv_subroutine.
  55.   APPEND wa_wizdef TO it_wizdef.
  56. ENDFORM.                    " WIZARD_APPEND

  57. *&---------------------------------------------------------------------*
  58. *&      Form  START_WIZARD
  59. *&---------------------------------------------------------------------*
  60. *       text
  61. *----------------------------------------------------------------------*
  62. *      -->CONTAINER  text
  63. *      -->COMMAND    text
  64. *----------------------------------------------------------------------*
  65. FORM start_wizard TABLES container USING command.
  66.   CLEAR wa_wizard.

  67.   wa_wizard-descobject = 'YWIZARD_DEMO_TEXT'.
  68.   wa_wizard-screen_typ = wizard_screen_start.

  69.   CALL FUNCTION 'SWF_WIZARD_CALL'
  70.     EXPORTING
  71.       wizard_data                       = wa_wizard
  72. *    SPECIFIC_DATA_IMPORT              =
  73.      start_column                      = 2
  74.      start_row                         = 2
  75. *  IMPORTING
  76. *    SPECIFIC_DATA_EXPORT              =
  77. *  TABLES
  78. *    SPECIFIC_TABLE_IMPORT             =
  79. *    SPECIFIC_TABLE_EXPORT             =
  80. *    SPECIFIC_CONTAINER                =
  81.    EXCEPTIONS
  82.      operation_cancelled_by_user       = 1
  83.      back                              = 2
  84.      OTHERS                            = 3
  85.             .
  86.   IF sy-subrc <> 0.
  87. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  88. *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  89.   ENDIF.

  90.   swf_evaluate command.
  91. ENDFORM.                    "START_WIZARD

  92. *&---------------------------------------------------------------------*
  93. *&      Form  SHOW_SCREEN_0500
  94. *&---------------------------------------------------------------------*
  95. *       text
  96. *----------------------------------------------------------------------*
  97. *      -->CONTAINER  text
  98. *      -->COMMAND    text
  99. *----------------------------------------------------------------------*
  100. FORM show_screen_0500 TABLES container USING command.

  101.   wa_wizard-docuobject = 'YWIZARD_DEMO_TEXT'.
  102.   wa_wizard-screen_typ = wizard_screen_normal.
  103.   wa_wizard-subscpool1 = 'YDAMON_095'.
  104.   wa_wizard-subscreen1 = '0500'.

  105.   CALL FUNCTION 'SWF_WIZARD_CALL'
  106.     EXPORTING
  107.       wizard_data                       = wa_wizard
  108.     "SPECIFIC_DATA_IMPORT              =
  109.      start_column                      = 2
  110.      start_row                         = 2
  111.    "IMPORTING
  112.      "SPECIFIC_DATA_EXPORT              =
  113. *  TABLES
  114. *    SPECIFIC_TABLE_IMPORT             =
  115. *    SPECIFIC_TABLE_EXPORT             =
  116. *    SPECIFIC_CONTAINER                =
  117.    EXCEPTIONS
  118.      operation_cancelled_by_user       = 1
  119.      back                              = 2
  120.      OTHERS                            = 3
  121.             .
  122.   IF sy-subrc <> 0.
  123. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  124. *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  125.   ENDIF.

  126.   swf_evaluate command.
  127. ENDFORM.                    "SHOW_SCREEN_0500
  128. *&---------------------------------------------------------------------*
  129. *&      Form  SHOW_SCREEN_0501
  130. *&---------------------------------------------------------------------*
  131. *       text
  132. *----------------------------------------------------------------------*
  133. *      -->CONTAINER  text
  134. *      -->COMMAND    text
  135. *----------------------------------------------------------------------*
  136. FORM show_screen_0501 TABLES container USING command.

  137.   wa_wizard-docuobject = 'YWIZARD_DEMO_TEXT'.
  138.   wa_wizard-screen_typ = wizard_screen_normal.
  139.   wa_wizard-subscpool1 = 'YDAMON_095'.
  140.   wa_wizard-subscreen1 = '0501'.
  141.   CALL FUNCTION 'SWF_WIZARD_CALL'
  142.     EXPORTING
  143.       wizard_data                       = wa_wizard
  144. *     SPECIFIC_DATA_IMPORT              =
  145.      start_column                      = 2
  146.      start_row                         = 2
  147. *   IMPORTING
  148. *     SPECIFIC_DATA_EXPORT              =
  149. *   TABLES
  150. *     SPECIFIC_TABLE_IMPORT             =
  151. *     SPECIFIC_TABLE_EXPORT             =
  152. *     SPECIFIC_CONTAINER                =
  153.    EXCEPTIONS
  154.      operation_cancelled_by_user       = 1
  155.     back                              = 2
  156.      OTHERS                            = 3
  157.             .
  158.   IF sy-subrc <> 0.
  159. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  160. *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  161.   ENDIF.

  162.   CALL FUNCTION 'SWF_WIZARD_PROCESS_MODIFY'
  163.     EXPORTING
  164.       step_form           = 'END_WIZARD'
  165.       step_program        = 'YDAMON_095'
  166.       command             = 'J'
  167.     EXCEPTIONS
  168.       modification_failed = 1
  169.       OTHERS              = 2.
  170.   IF sy-subrc <> 0.
  171. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  172. *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  173.   ENDIF.

  174.   swf_evaluate command.
  175. ENDFORM.                    "SHOW_SCREEN_0501

  176. *&---------------------------------------------------------------------*
  177. *&      Form  SHOW_SCREEN_0502
  178. *&---------------------------------------------------------------------*
  179. *       text
  180. *----------------------------------------------------------------------*
  181. *      -->CONTAINER  text
  182. *      -->COMMAND    text
  183. *----------------------------------------------------------------------*
  184. FORM show_screen_0502 TABLES container USING command.

  185.   wa_wizard-docuobject = 'YWIZARD_DEMO_TEXT'.
  186.   wa_wizard-screen_typ = wizard_screen_normal.
  187.   wa_wizard-subscpool1 = 'YDAMON_095'.
  188.   wa_wizard-subscreen1 = '0502'.
  189.   CALL FUNCTION 'SWF_WIZARD_CALL'
  190.      EXPORTING
  191.        wizard_data                       = wa_wizard
  192. *   SPECIFIC_DATA_IMPORT              =
  193.       start_column                      = 2
  194.       start_row                         = 2
  195. * IMPORTING
  196. *   SPECIFIC_DATA_EXPORT              =
  197. * TABLES
  198. *   SPECIFIC_TABLE_IMPORT             =
  199. *   SPECIFIC_TABLE_EXPORT             =
  200. *   SPECIFIC_CONTAINER                =
  201.     EXCEPTIONS
  202.       operation_cancelled_by_user       = 1
  203.       back                              = 2
  204.       OTHERS                            = 3
  205.              .
  206.   IF sy-subrc <> 0.
  207. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  208. *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  209.   ENDIF.

  210.   CALL FUNCTION 'SWF_WIZARD_PROCESS_MODIFY'
  211.     EXPORTING
  212.       step_form           = 'END_WIZARD'
  213.       step_program        = 'YDAMON_095'
  214.       command             = 'J'
  215.     EXCEPTIONS
  216.       modification_failed = 1
  217.       OTHERS              = 2.
  218.   IF sy-subrc <> 0.
  219. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  220. *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  221.   ENDIF.

  222.   swf_evaluate command.
  223. ENDFORM.                    "SHOW_SCREEN_0502

  224. *&---------------------------------------------------------------------*
  225. *&      Form  END_WIZARD
  226. *&---------------------------------------------------------------------*
  227. *       text
  228. *----------------------------------------------------------------------*
  229. *      -->CONTAINER  text
  230. *      -->COMMAND    text
  231. *----------------------------------------------------------------------*
  232. FORM end_wizard TABLES container USING command.

  233.   wa_wizard-descobject = 'YWIZARD_DEMO_TEXT'.
  234.   wa_wizard-screen_typ = wizard_screen_end.

  235.   CALL FUNCTION 'SWF_WIZARD_CALL'
  236.     EXPORTING
  237.       wizard_data                       = wa_wizard
  238. *    SPECIFIC_DATA_IMPORT              =
  239.      start_column                      = 2
  240.      start_row                         = 2
  241. *  IMPORTING
  242. *    SPECIFIC_DATA_EXPORT              =
  243. *  TABLES
  244. *    SPECIFIC_TABLE_IMPORT             =
  245. *    SPECIFIC_TABLE_EXPORT             =
  246. *    SPECIFIC_CONTAINER                =
  247.    EXCEPTIONS
  248.      operation_cancelled_by_user       = 1
  249.      back                              = 2
  250.      OTHERS                            = 3
  251.             .
  252.   IF sy-subrc <> 0.
  253. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  254. *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  255.   ENDIF.
  256.   swf_evaluate command.
  257. ENDFORM.                    "END_WIZARD
  258. *&---------------------------------------------------------------------*
  259. *&      Module  USER_COMMAND_0500  INPUT
  260. *&---------------------------------------------------------------------*
  261. *       text
  262. *----------------------------------------------------------------------*
  263. MODULE user_command_0500 INPUT.
  264.   CASE sy-ucomm.
  265.     WHEN 'RADIO'.
  266.       IF rad1 = 'X'.
  267.         result = num1 + num2.
  268.       ELSEIF rad2 = 'X'.
  269.         result = num1 - num2.
  270.       ENDIF.
  271.   ENDCASE.
  272. ENDMODULE.                 " USER_COMMAND_0500  INPUT
  273. *&---------------------------------------------------------------------*
  274. *&      Module  STATUS_0501  OUTPUT
  275. *&---------------------------------------------------------------------*
  276. *       text
  277. *----------------------------------------------------------------------*
  278. MODULE status_0501 OUTPUT.
  279.   answer = result.
  280. ENDMODULE.                 " STATUS_0501  OUTPUT
  281. *&---------------------------------------------------------------------*
  282. *&      Module  STATUS_0502  OUTPUT
  283. *&---------------------------------------------------------------------*
  284. *       text
  285. *----------------------------------------------------------------------*
  286. MODULE status_0502 OUTPUT.
  287.   answer = result.
  288. ENDMODULE.                    "STATUS_0502 OUTPUT
复制代码

FM: SWF_WIZARD_CALL用于调用在工作流中的wizard screen,screen type有以下几种
  • Starting screen  
  • Ending screen  
  • Input screen  
  • Normal screen  
  • Report screen  
  • Text screen

FM: SWF_WIZARD_PROCESS_MODIFY控制wizard flow的流向,有三个重要的参数:
1、Step_program        下一步需要调用的程序
2、Step_form        下一步需要调用的form
3、Commands:执行的命令,有三种:
  • A -  Activate a screen in wizard definition  
  • D -  Deactivate a screen in wizard definition.  
  • J -  Jump to a screen in the wizard flow.

四、程序测试
Wizard creation 8.jpg
Wizard creation 9.jpg
Wizard creation 10.jpg
Wizard creation 11.jpg
10+8=18
回复

使用道具 举报

快速回帖

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

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