ABAP-Generate dynpro動態螢幕
阿新 • • 發佈:2018-12-24
1.獲取螢幕引數值 FUN: RS_SCRP_GET_SCREEN_INFOS
call function 'RS_SCRP_GET_SCREEN_INFOS' exporting dynnr = '1000' progname = 'ZSDA008_SO_HEADER' tables fieldlist = lt_field_list exceptions dynpro_does_not_exist= 1 no_field_list = 2 cancelled = 3 others = 4 . if sy-subrc <> 0. * implement suitable error handling here endif.
2.螢幕生成過程
lv_dynpro = sy-repid. lv_dynpro+40(4) = '0100'. lt_flow_logic-line = 'process before output.'. append lt_flow_logic. lt_flow_logic-line = 'module status_0100.'. append lt_flow_logic. lt_flow_logic-line = 'process after input.'. append lt_flow_logic. lt_flow_logic-line = 'module exit_screen at exit-command.'. append lt_flow_logic. lt_flow_logic-line = 'module user_command_0100.'. append lt_flow_logic. lt_flow_logic-line = 'process on value-request.'. append lt_flow_logic. lt_flow_logic-line = 'field tlow module t_low_help.'. append lt_flow_logic. syntax-check for dynpro lt_screen_header lt_field_list lt_flow_logic lt_attrib message lv_message_text line lv_screen_line word lv_incorrectword. if sy-subrc <> 0. endif. generate dynpro lt_screen_header lt_field_list lt_flow_logic lt_attrib id lv_dynpro message lv_message_text line lv_screen_line word lv_incorrectword. "#EC CI_GENERATE if sy-subrc <> 0. endif.
3.程式附件
*&---------------------------------------------------------------------* *& Report ZEXP_SCREEN_TEST *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* report zexp_screen_test. tables:sscrfields. data:lv_message_text type string, lv_screen_line type string, lv_incorrectword type string, lv_fields type i, lv_max_length type i, ls_field_list type d021s, lt_field_list type table of d021s with header line, lt_flow_logic type table of d022s with header line, lt_screen_header type table of d020s with header line, ls_header type d020s, lv_dynpro type char44, lt_attrib type table of d023s with header line, lo_ref type ref to data, lo_line type ref to data, lt_fields type lvc_t_fcat, lt_fields_temp type lvc_t_fcat, ls_fields type lvc_s_fcat. data:begin of etab occurs 0, check type c, posnr type posnr, deflg type c, htetr like vbap-netwr, vbelv like likp-vbeln, sktxt type char50, rqtxt type char50, jsdat like sy-datum, zdays type posnr, hkdat like sy-datum, ysetr type netwr, bezei type char80, ernam type char15, erdat type datum, end of etab. field-symbols:<fs_tab> type any table, <fs> type any. data:tlow type vbeln_va, tlow1 type vbeln_vl, thigh type vbeln_va, thigh1 type vbeln_va, tpush type char10. "controls:imptb type tableview using screen 0100. start-of-selection. assign tlow to <fs>. perform build_screen_fields. lv_dynpro = sy-repid. lv_dynpro+40(4) = '0100'. lt_flow_logic-line = 'process before output.'. append lt_flow_logic. lt_flow_logic-line = 'module status_0100.'. append lt_flow_logic. lt_flow_logic-line = 'process after input.'. append lt_flow_logic. lt_flow_logic-line = 'module exit_screen at exit-command.'. append lt_flow_logic. lt_flow_logic-line = 'module user_command_0100.'. append lt_flow_logic. lt_flow_logic-line = 'process on value-request.'. append lt_flow_logic. lt_flow_logic-line = 'field tlow module t_low_help.'. append lt_flow_logic. syntax-check for dynpro lt_screen_header lt_field_list lt_flow_logic lt_attrib message lv_message_text line lv_screen_line word lv_incorrectword. if sy-subrc <> 0. endif. generate dynpro lt_screen_header lt_field_list lt_flow_logic lt_attrib id lv_dynpro message lv_message_text line lv_screen_line word lv_incorrectword. "#EC CI_GENERATE if sy-subrc <> 0. endif. start-of-selection. call screen 0100. " starting at 3 3 ending at 60 60. form build_screen_fields . * call function 'RS_SCRP_GET_SCREEN_INFOS' * exporting * dynnr = '1000' * progname = 'ZSDA008_SO_HEADER' * tables * fieldlist = lt_field_list * exceptions * dynpro_does_not_exist = 1 * no_field_list = 2 * cancelled = 3 * others = 4 . * if sy-subrc <> 0. ** implement suitable error handling here * endif. * ls_field_list-fnam = ''. 欄位名 * ls_field_list-didx = ''. frame high * ls_field_list-flg1 = ''. * ls_field_list-flg2 = ''. * ls_field_list-flg3 = ''. A0 obligatory 00 entry and clear 80 entry * ls_field_list-fill = ''. C checkbutton R frame T P pushbutton * ls_field_list-fmb1 = ''. * ls_field_list-fmb2 = ''. * ls_field_list-colr = ''. color * ls_field_list-leng = ''. textarea length * ls_field_list-line = ''. row * ls_field_list-coln = ''. col * ls_field_list-ltyp = ''. circulated type * ls_field_list-lanf = ''. circulated starting line * ls_field_list-lblk = ''. circulated area * ls_field_list-lrep = ''. circulated elenments * ls_field_list-fmky = ''. function menu butttons * ls_field_list-paid = ''. set memory id * ls_field_list-ucnv = ''. * ls_field_list-type = ''. field type * ls_field_list-auth = ''. authority no * ls_field_list-wnam = ''. current button * ls_field_list-dmac = ''. * ls_field_list-grp1 = ''. * ls_field_list-grp2 = ''. * ls_field_list-grp3 = ''. * ls_field_list-grp4 = ''. * ls_field_list-ityp = ''. * ls_field_list-aglt = ''. * ls_field_list-adez = ''. * ls_field_list-stxt = ''. * ls_field_list-res1 = ''. * ls_field_list-res2 = ''. * append ls_field_list to lt_field_list. * clear ls_field_list. ls_field_list-fnam = 'FRAME'. ls_field_list-didx = '000B'. ls_field_list-flg1 = '80'. ls_field_list-flg2 = '02'. ls_field_list-flg3 = '80'. ls_field_list-fill = 'R'. ls_field_list-leng = '76'. ls_field_list-line = '01'. ls_field_list-coln = '02'. ls_field_list-type = 'CHAR'. ls_field_list-ityp = 'C'. append ls_field_list to lt_field_list. clear ls_field_list. ls_field_list-fnam = 'S_VBELN-TEXT'. ls_field_list-leng = '19'. ls_field_list-line = '02'. ls_field_list-coln = '04'. ls_field_list-type = 'CHAR'. ls_field_list-ityp = 'C'. ls_field_list-stxt = '訂單號'. append ls_field_list to lt_field_list. clear ls_field_list. ls_field_list-fnam = 'TLOW'. ls_field_list-flg1 = '80'. ls_field_list-flg2 = '00'. ls_field_list-flg3 = '80'. ls_field_list-leng = '0A'. ls_field_list-line = '02'. ls_field_list-coln = '24'. ls_field_list-ucnv = 'ALPHA'. ls_field_list-type = 'CHAR'. ls_field_list-ityp = 'C'. ls_field_list-stxt = ''. append ls_field_list to lt_field_list. clear ls_field_list. ls_field_list-fnam = 'S_VBELN-TXT2'. ls_field_list-leng = '04'. ls_field_list-line = '02'. ls_field_list-coln = '37'. ls_field_list-type = 'CHAR'. ls_field_list-ityp = 'C'. ls_field_list-stxt = '到'. append ls_field_list to lt_field_list. clear ls_field_list. ls_field_list-fnam = 'THIGH'. ls_field_list-flg1 = '80'. ls_field_list-flg2 = '00'. ls_field_list-flg3 = '80'. ls_field_list-leng = '0A'. ls_field_list-line = '02'. ls_field_list-coln = '3C'. ls_field_list-ucnv = 'ALPHA'. ls_field_list-type = 'CHAR'. ls_field_list-ityp = 'C'. ls_field_list-stxt = ''. append ls_field_list to lt_field_list. clear ls_field_list. ls_field_list-fnam = 'TPUSH'. ls_field_list-didx = '0003'. ls_field_list-flg1 = '80'. ls_field_list-flg2 = '02'. ls_field_list-flg3 = '80'. ls_field_list-fill = 'P'. "C checkbutton R frame T P pushbutton ls_field_list-leng = '03'. ls_field_list-line = '02'. ls_field_list-coln = '50'. ls_field_list-fmky = '&ZZZ'. ls_field_list-wnam = '&RICO'. ls_field_list-type = 'CHAR'. ls_field_list-auth = '102'. ls_field_list-ityp = 'C'. append ls_field_list to lt_field_list. clear ls_field_list. ls_field_list-fnam = 'S_VBELN-TEXT1'. ls_field_list-leng = '19'. ls_field_list-line = '03'. ls_field_list-coln = '04'. ls_field_list-type = 'CHAR'. ls_field_list-ityp = 'C'. ls_field_list-stxt = '訂單型別'. append ls_field_list to lt_field_list. clear ls_field_list. ls_field_list-FNAM = 'TAB-ALLTP'. ls_field_list-DIDX = '000C'. ls_field_list-FLG1 = '80'. ls_field_list-FLG2 = '00'. ls_field_list-FLG3 = '80'. ls_field_list-FMB1 = '00'. ls_field_list-FMB2 = '08'. ls_field_list-LENG = '09'. ls_field_list-LINE = '0A'. ls_field_list-COLN = '0D'. ls_field_list-LANF = '00'. ls_field_list-LBLK = '00'. ls_field_list-LREP = '00'. ls_field_list-TYPE = 'CHAR'. ls_field_list-ITYP = 'C'. ls_field_list-AGLT = '00'. ls_field_list-ADEZ = '00'. ls_field_list-RES1 = 'DL K'. append ls_field_list to lt_field_list. clear ls_field_list. ls_field_list-fnam = '<FS>'. ls_field_list-flg1 = '80'. ls_field_list-flg2 = '00'. ls_field_list-flg3 = '80'. ls_field_list-leng = '0A'. ls_field_list-line = '03'. ls_field_list-coln = '24'. ls_field_list-ucnv = 'ALPHA'. ls_field_list-type = 'CHAR'. ls_field_list-ityp = 'C'. ls_field_list-stxt = ''. append ls_field_list to lt_field_list. clear ls_field_list. ls_field_list-fnam = 'S_VBELN-TXT1'. ls_field_list-leng = '04'. ls_field_list-line = '03'. ls_field_list-coln = '37'. ls_field_list-type = 'CHAR'. ls_field_list-ityp = 'C'. ls_field_list-stxt = '到'. append ls_field_list to lt_field_list. clear ls_field_list. ls_field_list-fnam = 'THIGH1'. ls_field_list-flg1 = '80'. ls_field_list-flg2 = '00'. ls_field_list-flg3 = '80'. ls_field_list-leng = '0A'. ls_field_list-line = '03'. ls_field_list-coln = '3C'. ls_field_list-ucnv = 'ALPHA'. ls_field_list-type = 'CHAR'. ls_field_list-ityp = 'C'. ls_field_list-stxt = ''. append ls_field_list to lt_field_list. clear ls_field_list. ls_field_list-fnam = 'TPUSH1'. ls_field_list-didx = '0003'. ls_field_list-flg1 = '80'. ls_field_list-flg2 = '02'. ls_field_list-flg3 = '80'. ls_field_list-fill = 'P'. "C checkbutton R frame T P pushbutton ls_field_list-leng = '03'. ls_field_list-line = '03'. ls_field_list-coln = '50'. ls_field_list-fmky = '&ZZZ'. ls_field_list-type = 'CHAR'. ls_field_list-auth = '102'. ls_field_list-ityp = 'C'. append ls_field_list to lt_field_list. clear ls_field_list. endform. " BUILD_SCREEN_FIELDS form build_flow_logic_etc . field-symbols:<fs_flow_logic> type d022s, <fs_flow_logic1> type d022s, <fs_flow_logic2> type d022s. data:lt_field_list type table of d021s with header line. call function 'RS_DYNPRO_CREATE_INITIAL' exporting program = sy-repid dynnr = '0100' importing dynpro_header = ls_header tables dynpro_fields = lt_field_list dynpro_flow = lt_flow_logic dynpro_params = lt_attrib. loop at lt_flow_logic assigning <fs_flow_logic>. if <fs_flow_logic>+0(1) = '*'. clear <fs_flow_logic>+0(1). endif. endloop. insert initial line into lt_flow_logic index 5 assigning <fs_flow_logic>. <fs_flow_logic>-line = 'MODULE exit_screen AT EXIT-COMMAND.'. "#EC NOTEXT endform. " BUILD_FLOW_LOGIC module status_0100 output. set pf-status '100'. endmodule. "status_0100 OUTPUT module exit_screen. set screen 0. leave screen. endmodule. "exit_screen module user_command_0100 input. " break-point. * loop at screen. * if screen-name = ''. * endif. * endloop. case sy-ucomm. when '&F4'. "perform t_low_help. when '&SAVE'. leave to screen 0. when others. endcase. set screen 100. endmodule. "user_command_0100 INPUT *module etab_pbo output. * read table etab into etab index imptb-current_line. *endmodule. * *module etab_pai input. * modify etab from etab index imptb-current_line. *endmodule. " etab_pail input module t_low_help. " break-point. data:zwerks like standard table of t001w with header line. clear:zwerks. refresh:zwerks. select * into corresponding fields of table zwerks from t001w. call function 'F4IF_INT_TABLE_VALUE_REQUEST' exporting retfield = 'WERKS' value_org = 'S' dynpprog = sy-repid dynpnr = sy-dynnr dynprofield = 'TLOW' tables value_tab = zwerks exceptions parameter_error = 1 no_values_found = 2 others = 3. if sy-subrc <> 0. ... endif. clear:zwerks. refresh:zwerks. endmodule. form t_low_help. data:zwerks like standard table of t001w with header line. clear:zwerks. refresh:zwerks. select * into corresponding fields of table zwerks from t001w. call function 'F4IF_INT_TABLE_VALUE_REQUEST' exporting retfield = 'WERKS' value_org = 'S' dynpprog = sy-repid dynpnr = sy-dynnr dynprofield = 'TLOW' tables value_tab = zwerks exceptions parameter_error = 1 no_values_found = 2 others = 3. if sy-subrc <> 0. ... endif. clear:zwerks. refresh:zwerks. endform.View Code