如何用ABAP程式碼生成新的function module
- 2020 年 1 月 21 日
- 筆記
REPORT zcreate_fm. DATA: date TYPE sy-datum, time TYPE sy-uzeit, pool_name TYPE rs38l-area, func_name TYPE rs38l-name, lt_codeline TYPE STANDARD TABLE OF char255, l_function_include TYPE progname. DATA it_exception_list TYPE TABLE OF rsexc. DATA it_export_parameter TYPE TABLE OF rsexp. DATA it_import_parameter TYPE TABLE OF rsimp. DATA wa_rsimp TYPE rsimp. DATA it_tables_parameter TYPE TABLE OF rstbl. DATA it_changing_parameter TYPE TABLE OF rscha. DATA wa_rscha TYPE rscha. DATA it_parameter_docu TYPE TABLE OF rsfdo. date = sy-datum. time = sy-uzeit. CONCATENATE 'ZTEST_FBS_' date time INTO pool_name. CONCATENATE 'ZFB1_' pool_name INTO func_name. CALL FUNCTION 'RS_FUNCTION_POOL_INSERT' EXPORTING function_pool = pool_name short_text = 'TEST_FUGR_FBS' "#EC NOTEXT devclass = '$TMP' "#EC NOTEXT responsible = sy-uname suppress_corr_check = space EXCEPTIONS name_already_exists = 1 name_not_correct = 2 function_already_exists = 3 invalid_function_pool = 4 invalid_name = 5 too_many_functions = 6 no_modify_permission = 7 no_show_permission = 8 enqueue_system_failure = 9 canceled_in_corr = 10 undefined_error = 11 OTHERS = 12. IF sy-subrc <> 0. WRITE:/ 'Fugr was not created!: ' , sy-subrc . RETURN. ENDIF. wa_rsimp-parameter = 'P1_I'. "#EC NOTEXT wa_rsimp-default = '10'. "#EC NOTEXT wa_rsimp-reference = 'X'. "#EC NOTEXT wa_rsimp-typ = 'I'. "#EC NOTEXT APPEND wa_rsimp TO it_import_parameter. wa_rscha-parameter = 'P1_C'. "#EC NOTEXT wa_rscha-reference = 'X'. "#EC NOTEXT wa_rscha-typ = 'I'. "#EC NOTEXT APPEND wa_rscha TO it_changing_parameter. CALL FUNCTION 'FUNCTION_CREATE' EXPORTING funcname = func_name function_pool = pool_name short_text = 'TEST_FUNC_FB' "#EC NOTEXT IMPORTING function_include = l_function_include TABLES exception_list = it_exception_list export_parameter = it_export_parameter import_parameter = it_import_parameter tables_parameter = it_tables_parameter changing_parameter = it_changing_parameter parameter_docu = it_parameter_docu EXCEPTIONS double_task = 1 error_message = 2 function_already_exists = 3 invalid_function_pool = 4 invalid_name = 5 too_many_functions = 6 OTHERS = 7. IF sy-subrc <> 0. WRITE: / 'failed:', sy-subrc. RETURN. ENDIF. READ REPORT l_function_include INTO lt_codeline. DELETE lt_codeline INDEX lines( lt_codeline ). DELETE lt_codeline WHERE table_line IS INITIAL. WRITE: / 'created successful:', func_name. APPEND | WRITE:/ 'OK'.| TO lt_codeline. APPEND | WRITE:/ P1_I.| TO lt_codeline. APPEND 'ENDFUNCTION.' TO lt_codeline. INSERT REPORT l_function_include FROM lt_codeline. COMMIT WORK AND WAIT. DATA: ptab TYPE abap_func_parmbind_tab, lv_i TYPE int4 VALUE 12. ptab = VALUE #( ( name = 'P1_I' kind = abap_func_exporting value = REF #( 3 ) ) ( name = 'P1_C' kind = abap_func_changing value = REF #( lv_i ) ) ). TRY. CALL FUNCTION func_name PARAMETER-TABLE ptab. CATCH cx_root INTO DATA(cx_root). WRITE: / cx_root->get_text( ). ENDTRY. CALL FUNCTION 'FUNCTION_DELETE' EXPORTING funcname = func_name. CALL FUNCTION 'FUNCTION_POOL_DELETE' EXPORTING pool = pool_name.
要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":