使用 ABAP 代码解析一个 class 的所有方法
效果如下:
使用 F4 value help 选定一个 ABAP class:
然后在第二个字段继续使用 F4 help:
能提取出除了 CONSTRUCTOR
和 CLASS_CONSTRUCTOR
在内的其他方法。
源代码:
REPORT ztest MESSAGE-ID rcdj_msg.TYPE-POOLS abap.DATA: ls_mtdkey TYPE seocmpkey,lt_parameter TYPE seos_parameters_r,ls_parameter TYPE seos_parameter_r,lt_ptab TYPE abap_parmbind_tab,ls_ptab_line TYPE abap_parmbind,new_table TYPE REF TO data,new_line TYPE REF TO data,wa_it_fldcatg TYPE lvc_s_fcat,lt_fldcatg TYPE lvc_t_fcat,lt_fldcatg_all TYPE lvc_t_fcat,lv_exc_ref TYPE REF TO cx_sy_dyn_call_error,lv_exc_text TYPE string,lv_dtelem TYPE dd03l-rollname,lv_meth TYPE string,lv_class TYPE string,lt_etab TYPE abap_excpbind_tab,ls_comp TYPE REF TO cl_abap_typedescr,lv_flname TYPE string,o_ref TYPE REF TO data,lv_methtyp TYPE vseomethod.FIELD-SYMBOLS: <l_table> TYPE ANY TABLE,<l_line> TYPE any,<lt_table> TYPE STANDARD TABLE,<lt_line> TYPE any,<lt_field> TYPE any.TYPES: BEGIN OF lt_ref ,col_name TYPE string,col_val TYPE string,END OF lt_ref.DATA: lt_alv TYPE STANDARD TABLE OF lt_ref,lt_alv_tmp TYPE STANDARD TABLE OF lt_ref,ls_alv LIKE LINE OF lt_alv.DATA: BEGIN OF lt_index OCCURS 0,col_name TYPE string,col_index TYPE i,END OF lt_index.
DATA ls_index LIKE LINE OF lt_index.
DATA lt_index_tmp LIKE TABLE OF lt_index.DATA lt_string TYPE TABLE OF string.
DATA: ls_string LIKE LINE OF lt_string.DATA: lo_obj TYPE REF TO object.
DATA lv_count TYPE i.
DATA lv_count_tmp TYPE i.DATA: gv_okcode TYPE sy-ucomm.DATA gref_alv_fuzz TYPE REF TO cl_gui_alv_grid.
DATA gref_fuzz_cont TYPE REF TO cl_gui_custom_container.DATA: lv_line TYPE string,lt_line TYPE TABLE OF string.DATA gv_continue TYPE c.********************************************************************************SELECTION-SCREEN BEGIN OF BLOCK xyz WITH FRAME TITLE text-001.
PARAMETERS: p_class TYPE seoclsname,p_method TYPE seomtdname,p_count TYPE i.
SELECTION-SCREEN END OF BLOCK xyz.AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_class.PERFORM f4_class.AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_method.PERFORM f4_meth.AT SELECTION-SCREEN ON p_class.PERFORM val_class.AT SELECTION-SCREEN ON p_method.PERFORM val_meth.********************************************************************************START-OF-SELECTION.IF p_class IS INITIAL.MESSAGE s005.EXIT.ENDIF.IF p_method IS INITIAL.MESSAGE s006.EXIT.ENDIF.IF p_count IS INITIAL.MESSAGE s007.EXIT.ENDIF.lv_class = p_class.lv_meth = p_method.**** 1ST STEP .GET META DATAPERFORM get_meta_data.**** 2ND STEP. BUILD UP THE TEST DATA.PERFORM get_test_data.**** 3RD STEP. GENERATED TEST DATA TO BE PRESENTED FOR USER ENHANCEMENTPERFORM edit_test_data.****4TH STEP GENERATE TDC,5TH STEP. DYNAMIC METHOD CALL,6TH STEP. LOG/RESULT CREATIONPERFORM save_execute_api.*************************************************************************************************** FORMS*&---------------------------------------------------------------------*
*& Form F4_CLASS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM f4_class .CALL FUNCTION 'F4_DD_ALLTYPES'EXPORTINGobject = p_classsuppress_selection = 'X'display_only = ' 'only_types_for_clifs = 'X'IMPORTINGresult = p_class.ENDFORM. " F4_CLASS*&---------------------------------------------------------------------*
*& Form F4_METH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM f4_meth .DATA:clskey TYPE seoclskey,clstype TYPE seoclstype,components TYPE REF TO if_oo_clif_components_flat,method_flat TYPE seometflat.
* cpdname_ TYPE seocpdname.DATA:lt_map TYPE TABLE OF dselc,ls_map TYPE dselc.TYPES: BEGIN OF typ_mtdkey_w_descr,mtdname TYPE seomtdname,descr TYPE seodescr.TYPES END OF typ_mtdkey_w_descr.DATA: mtdkeys TYPE STANDARD TABLE OF typ_mtdkey_w_descr,mtdkey TYPE typ_mtdkey_w_descr.DATA cl_inst TYPE REF TO cl_oo_class_components_flat.PERFORM dynp_val_read.IF p_class IS INITIAL.MESSAGE e005.ENDIF.clskey-clsname = p_class.CALL FUNCTION 'SEO_CLIF_GET'EXPORTINGcifkey = clskeyversion = seoc_version_inactivestate = '0'IMPORTINGclstype = clstypeEXCEPTIONSnot_existing = 1deleted = 2model_only = 3OTHERS = 4.IF sy-subrc <> 0.MESSAGE e003.ENDIF.IF clstype = seoc_clstype_class.* ec:with enhancement_componets mitgebenCREATE OBJECT cl_instEXPORTINGclskey = clskeywith_interface_components = seox_truewith_inherited_components = seox_truewith_enhancement_components = seox_true.components ?= cl_inst.ENDIF.REFRESH mtdkeys.LOOP AT components->methods INTO method_flat.IF method_flat-exposure NE '2'. "PUBLICCONTINUE.ENDIF.IF method_flat-cpdname = 'CONSTRUCTOR' ORmethod_flat-cpdname = 'CLASS_CONSTRUCTOR' ORmethod_flat-cpdname = 'DESTRUCTOR'.CONTINUE.ENDIF.mtdkey-mtdname = method_flat-cpdname.mtdkey-descr = method_flat-descript.APPEND mtdkey TO mtdkeys.ENDLOOP.REFRESH lt_map.ls_map-dyfldname = 'P_METHOD'.ls_map-fldname = 'MTDNAME'.INSERT ls_map INTO TABLE lt_map.CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'EXPORTINGdynpprog = sy-cprogdynpnr = sy-dynnrdynprofield = 'P_METHOD'retfield = 'MTDNAME'value_org = 'S'TABLESvalue_tab = mtdkeys "lt_test_namesdynpfld_mapping = lt_map.ENDFORM. " F4_METH*&---------------------------------------------------------------------*
*& Form VAL_CLASS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM val_class .DATA:clskey TYPE seoclskey,clstype TYPE seoclstype.CHECK NOT p_class IS INITIAL.clskey-clsname = p_class.CALL FUNCTION 'SEO_CLIF_GET'EXPORTINGcifkey = clskeyversion = seoc_version_inactivestate = '0'IMPORTINGclstype = clstypeEXCEPTIONSnot_existing = 1deleted = 2model_only = 3OTHERS = 4.IF sy-subrc <> 0.MESSAGE s003.EXIT.ENDIF.ENDFORM. " VAL_CLASS
*&---------------------------------------------------------------------*
*& Form VAL_METH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM val_meth .DATA:clskey TYPE seoclskey,clstype TYPE seoclstype,components TYPE REF TO if_oo_clif_components_flat,method_flat TYPE seometflat.DATA cl_inst TYPE REF TO cl_oo_class_components_flat.CHECK NOT p_class IS INITIAL.CHECK NOT p_method IS INITIAL.clskey-clsname = p_class.* ec:with enhancement_componets mitgebenCREATE OBJECT cl_instEXPORTINGclskey = clskeywith_interface_components = seox_truewith_inherited_components = seox_truewith_enhancement_components = seox_true.components ?= cl_inst.READ TABLE components->methods INTO method_flatWITH KEY cpdname = p_method.IF sy-subrc NE 0.MESSAGE s004.EXIT.ENDIF.ENDFORM. " VAL_METH*&---------------------------------------------------------------------*
*& Form DYNP_VAL_READ
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM dynp_val_read .DATA:lt_dynp TYPE TABLE OF dynpread,ls_dynp TYPE dynpread.ls_dynp-fieldname = 'P_CLASS'.INSERT ls_dynp INTO TABLE lt_dynp.CALL FUNCTION 'DYNP_VALUES_READ'EXPORTINGdyname = sy-cprogdynumb = sy-dynnrTABLESdynpfields = lt_dynp.READ TABLE lt_dynp INTO ls_dynp WITH KEY fieldname = 'P_CLASS'.IF sy-subrc = 0.p_class = ls_dynp-fieldvalue.ENDIF.ENDFORM. " DYNP_VAL_READ*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.SET PF-STATUS '100'.SET TITLEBAR '100'.
ENDMODULE. " STATUS_0100 OUTPUT*&---------------------------------------------------------------------*
*& Module GET_DATA OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE get_data OUTPUT.PERFORM display_data.ENDMODULE. " GET_DATA OUTPUT*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.*Transport of changes from ALV grid -> itabCALL METHOD gref_alv_fuzz->check_changed_data.gv_okcode = sy-ucomm.CASE gv_okcode.WHEN 'ENTER'.gv_continue = 'X'.SET SCREEN 0.LEAVE SCREEN.WHEN 'CANC'.SET SCREEN 0.LEAVE SCREEN.ENDCASE.ENDMODULE. " USER_COMMAND_0100 INPUT*&---------------------------------------------------------------------*
*& Form DISPLAY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM display_data .TYPES : cellstyles TYPE lvc_t_styl.DATA:lt_fcat TYPE lvc_t_fcat,ls_layout TYPE lvc_s_layo,lt_toolbar_exclude TYPE ui_functions.IF gref_alv_fuzz IS INITIAL.** Create the container.CREATE OBJECT gref_fuzz_contEXPORTINGcontainer_name = 'CC_FUZZER'.** create alv grid control object and link to containerCREATE OBJECT gref_alv_fuzzEXPORTINGi_parent = gref_fuzz_contEXCEPTIONSerror_cntl_create = 1error_cntl_init = 2error_cntl_link = 3error_dp_create = 4.ENDIF.** exclude toolbar buttons.PERFORM alv_exclude_toolbar CHANGING lt_toolbar_exclude.ls_layout-edit = 'X'.ls_layout-language = 'E'.** set the table for displayCALL METHOD gref_alv_fuzz->set_table_for_first_displayEXPORTINGis_layout = ls_layoutit_toolbar_excluding = lt_toolbar_excludeCHANGINGit_outtab = <lt_table>it_fieldcatalog = lt_fldcatg[]EXCEPTIONSOTHERS = 1.ENDFORM. " DISPLAY_DATA*&---------------------------------------------------------------------*
*& Form ALV_EXCLUDE_TOOLBAR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_LT_TOOLBAR_EXCLUDE text
*----------------------------------------------------------------------*
FORM alv_exclude_toolbar CHANGING lt_toolbar_exclude TYPE ui_functions.DATA:
* lt_toolbar_exclude TYPE ui_functions,ls_toolbar_exclude LIKE LINE OF lt_toolbar_exclude.** exclude unnecesary toolbar buttons.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.
* ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_filter.
* APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_loc_move_row.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_maintain_variant.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_loc_undo.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_help.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_current_variant.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_graph.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_info.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_loc_copy.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_loc_cut.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_loc_paste.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_loc_paste_new_row.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_subtot.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_sum.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_mb_sum.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_check.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_refresh.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_view_crystal.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_view_excel.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_expcrdata.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_expcrdesig.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_expcrtempl.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_call_abc.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_print.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_view_lotus.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_view_grid.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.ls_toolbar_exclude = cl_gui_alv_grid=>mc_fc_find_more.APPEND ls_toolbar_exclude TO lt_toolbar_exclude.
* lt_toolbar_exclude_out = lt_toolbar_exclude.ENDFORM. " ALV_EXCLUDE_TOOLBAR*&---------------------------------------------------------------------*
*& Form GET_META_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_meta_data .* get parametersls_mtdkey-clsname = p_class.ls_mtdkey-cmpname = p_method.CALL FUNCTION 'SEO_METHOD_SIGNATURE_GET'EXPORTINGmtdkey = ls_mtdkeyIMPORTINGmethod = lv_methtypparameters = lt_parameter.IF lt_parameter IS INITIAL.MESSAGE e009.ENDIF.LOOP AT lt_parameter INTO ls_parameter. " WHERE pardecltyp = 0.CALL METHOD cl_abap_typedescr=>describe_by_nameEXPORTINGp_name = ls_parameter-typeRECEIVINGp_descr_ref = ls_compEXCEPTIONStype_not_found = 1OTHERS = 2.IF sy-subrc <> 0.MESSAGE e008 WITH ls_parameter-sconame.ENDIF.
* IF ls_comp->kind NE 'E'.
* MESSAGE e010 WITH ls_parameter-sconame.
* ENDIF.CLEAR: wa_it_fldcatg.wa_it_fldcatg-fieldname = ls_parameter-sconame.wa_it_fldcatg-datatype = ls_parameter-type.wa_it_fldcatg-intlen = ls_comp->length.wa_it_fldcatg-coltext = ls_parameter-descript.wa_it_fldcatg-outputlen = '15'.APPEND wa_it_fldcatg TO lt_fldcatg_all.IF ls_parameter-pardecltyp = 0.APPEND wa_it_fldcatg TO lt_fldcatg.ENDIF.ENDLOOP.* create table dynamically using lt_fldcatgCALL METHOD cl_alv_table_create=>create_dynamic_tableEXPORTINGit_fieldcatalog = lt_fldcatg_allIMPORTINGep_table = new_table.ASSIGN new_table->* TO <lt_table>.CREATE DATA new_line LIKE LINE OF <lt_table>.ASSIGN new_line->* TO <lt_line>.ENDFORM. " GET_META_DATA*&---------------------------------------------------------------------*
*& Form GET_TEST_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_test_data .LOOP AT lt_parameter INTO ls_parameter WHERE pardecltyp = 0.lv_dtelem = ls_parameter-type.**************************************************************************** KRITESH,SATYA
* Get data using whereused list (use FM FUZZER_WHERE_USED). Please refer ZTEST_SUR_READ_STRUCT2
* Also inside the FM,sort randomly the list of whereused list tables
* so that data would be different on each time this program is executed
* Note: No of data entries should be P_COUNT.CALL FUNCTION 'TEST_SUR_READ_STRUCT2'EXPORTINGdtelem = lv_dtelemIMPORTINGiref = o_ref.
*****************************************************************************ASSIGN o_ref->* TO <l_table>.LOOP AT <l_table> ASSIGNING <l_line>.ls_alv-col_val = <l_line>.ls_alv-col_name = ls_parameter-sconame.APPEND ls_alv TO lt_alv.ENDLOOP.**************************************************************************** KRITESH,SATYA
* Get data using randomizer (use FM FUZZER_READ_STRUCT). Please refer ZTEST_SUR_READ_STRUCT
* append to lt_alv as done above*****************************************************************************ENDLOOP.* lt_alv is a itab which holds data for all the parameters.
* check that all parameters have minimum 1 number of data entry.
* Also keep an index table to know where data of each parameter is starting.SORT lt_alv BY col_name.REFRESH lt_index.LOOP AT lt_parameter INTO ls_parameter WHERE pardecltyp = 0.lv_flname = ls_parameter-sconame.READ TABLE lt_alv INTO ls_alvWITH KEY col_name = lv_flname.IF sy-subrc = 0.ls_index-col_name = lv_flname.ls_index-col_index = sy-tabix.APPEND ls_index TO lt_index.ELSE." one of the parameter do not have any dataREFRESH lt_alv.MESSAGE e002 WITH lv_flname.EXIT.ENDIF.lt_alv_tmp[] = lt_alv[].DELETE lt_alv_tmp WHERE col_name NE lv_flname.DESCRIBE TABLE lt_alv_tmp LINES lv_count_tmp.IF lv_count = 0.lv_count = lv_count_tmp.ENDIF.IF lv_count_tmp LT lv_count.lv_count = lv_count_tmp.ENDIF.ENDLOOP.REFRESH lt_alv_tmp.ENDFORM. " GET_TEST_DATA
*&---------------------------------------------------------------------*
*& Form EDIT_TEST_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM edit_test_data .CHECK lt_alv IS NOT INITIAL.* Get data into proper table structure
***************************************
* DO lv_count TIMES.DO 5 TIMES. " CHANGE THIS TO ABOVE STATEMENT !!!!! THIS IS ONLY FOR TESTING PURPOSE
***************************************LOOP AT lt_parameter INTO ls_parameter WHERE pardecltyp = 0.ASSIGN COMPONENT ls_parameter-sconame OF STRUCTURE <lt_line> TO <lt_field>.CHECK sy-subrc = 0.READ TABLE lt_index INTO ls_index WITH KEY col_name = ls_parameter-sconame.IF sy-subrc = 0.READ TABLE lt_alv INTO ls_alv INDEX ls_index-col_index.IF sy-subrc = 0 AND ls_alv-col_name = ls_parameter-sconame.<lt_field> = ls_alv-col_val.ENDIF.ls_index-col_index = ls_index-col_index + 1.MODIFY lt_index FROM ls_index TRANSPORTING col_index WHERE col_name = ls_parameter-sconame.ENDIF.ENDLOOP.APPEND <lt_line> TO <lt_table>.ENDDO.* GENERATED TEST DATA TO BE PRESENTED FOR USER ENHANCEMENT* Presentation of test data in editable ALV
* lt_parameter-sconames would make the columns of the ALV
* Use <lt_table>CALL SCREEN 100.CHECK gv_continue = 'X'.ENDFORM. " EDIT_TEST_DATA*&---------------------------------------------------------------------*
*& Form SAVE_EXECUTE_API
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM save_execute_api .IF lv_methtyp-mtddecltyp = 0. " INSTANCE METHODCREATE OBJECT lo_obj TYPE (lv_class).CHECK sy-subrc = 0.ENDIF." break thomasjee.LOOP AT <lt_table> INTO <lt_line>.**** 4TH STEP GENERATE TDC
************************************************************************* GURMEET/MOHIT
* Generation of TDC with contents <lt_table> so that A.UNITS can make use of it later
* DATA: lv_varaints_modified TYPE abap_bool.
*
* TRY.
* CALL METHOD cl_rcdj_create_tdc=>modify_tdc
* EXPORTING
* iv_class_name = p_class
* iv_method_name = p_method
* iv_tdc_name = ''
* it_variants = <lt_table>
* IMPORTING
* ev_variants_modified = lv_varaints_modified.
* CATCH cx_ecatt_apl .
* ENDTRY.
**************************************************************************LOOP AT lt_parameter INTO ls_parameter WHERE pardecltyp = 0.ASSIGN COMPONENT ls_parameter-sconame OF STRUCTURE <lt_line> TO <lt_field> CASTING TYPE (ls_parameter-type).IF sy-subrc = 0.GET REFERENCE OF <lt_field> INTO ls_ptab_line-value.ENDIF.ls_ptab_line-name = ls_parameter-sconame.IF ls_parameter-pardecltyp = 0.ls_ptab_line-kind = cl_abap_objectdescr=>exporting.ELSEIF ls_parameter-pardecltyp = 1.ls_ptab_line-kind = cl_abap_objectdescr=>importing.ENDIF.INSERT ls_ptab_line INTO TABLE lt_ptab.CLEAR ls_ptab_line.ENDLOOP.IF lt_ptab IS INITIAL.EXIT.ENDIF.**** 5TH STEP DYNAMIC METHOD CALL
************************************************************************* SURESHTRY.IF lv_methtyp-mtddecltyp = 0.CALL METHOD lo_obj->(lv_meth) " Instance Method callPARAMETER-TABLElt_ptabEXCEPTION-TABLElt_etab .ELSEIF lv_methtyp-mtddecltyp = 1.CALL METHOD (lv_class)=>(lv_meth) " Static Method CallPARAMETER-TABLElt_ptabEXCEPTION-TABLElt_etab .ENDIF.CATCH cx_sy_dyn_call_error INTO lv_exc_ref.lv_exc_text = lv_exc_ref->get_text( ).MESSAGE lv_exc_text TYPE 'I'.ENDTRY.
****************************************************************************** 6TH STEP LOG/RESULT CREATION
************************************************************************* SURESH/KANA
* Proper presentation of results of each execution.
* Try having an application log for the same**************************************************************************REFRESH lt_ptab.ENDLOOP.ENDFORM. " SAVE_EXECUTE_API
使用 ABAP 代码解析一个 class 的所有方法相关推荐
- 使用 ABAP 代码制作手机能够扫描的二维码(QRCode)试读版
本专栏计划的文章数在 150 篇左右,到 2022年9月12日为止,目前已经更新了 51 篇,专栏完成度为 34% 零基础 ABAP 学习教程系列文章的目录 1. ABAP 标准培训教程 BC400 ...
- 使用Visual Studio Code编写和激活ABAP代码 (上)
猪年春节后的第一篇,Jerry祝各位猪年大吉! 2019年的六分之一马上就快过完了,不知道大家在新的一年是否给自己定了新的小目标呢?这里Jerry先预祝大家到2019年年底的时候,在年初制定的小目标都 ...
- sap原因代码配置路径_使用Visual Studio Code编写和激活ABAP代码 (上)
猪年春节后的第一篇,Jerry祝各位猪年大吉! 2019年的六分之一马上就快过完了,不知道大家在新的一年是否给自己定了新的小目标呢?这里Jerry先预祝大家到2019年年底的时候,大家年初的小目标都能 ...
- 用Python代码画一个足球(附完整代码)
用Python代码画一个足球(附完整代码) C站举办了世界杯征文活动,本文用Python代码画一个足球. 实现方法介绍 本文的绘图工具使用Python的标准库turtle库,无需安装,导入即可使用. ...
- java获取object属性值_java反射获取一个object属性值代码解析
有些时候你明明知道这个object里面是什么,但是因为种种原因,你不能将它转化成一个对象,只是想单纯地提取出这个object里的一些东西,这个时候就需要用反射了. 假如你这个类是这样的: privat ...
- ABAP实例:一个现金流量表的代码
ABAP实例:一个现金流量表的代码 * program SOURCE HEADER : 现金流量表 * Program Name: * Description: * D ...
- 《十》浏览器基础及渲染引擎解析一个网页的过程、JavaScript 引擎解析 JavaScript 代码的过程
浏览器:是安装在电脑里面的一个软件,能够将页面内容渲染出来呈现给用户查看,并让用户与网页进行交互. 服务器其实就是性能比较高的计算机,这些计算机 24 小时不断电. 不关机. 开发者在本地开发出 HT ...
- 使用ABAP代码提交SAP CRM Survey调查问卷
Jerry之前曾经写过两篇关于SAP CRM Survey调查问卷的技术文章: SAP CRM Survey调查问卷的模型设计原理解析 如何使用SAP CRM Marketing Survey创建一个 ...
- matrix_multiply代码解析
matrix_multiply代码解析 关于matrix_multiply 程序执行代码里两个矩阵的乘法,并将相乘结果打印在屏幕上. 示例的主要目的是展现怎么实现一个自定义CPU计算任务. 参考:ht ...
最新文章
- 详解:Drools规则引擎探究
- shell sed过滤器详解
- C#函数实现的小功能
- 【收藏】网络故障处理手册大全,看完再也不怕出问题了
- 这是阿里技术专家对 SRE 和稳定性保障的理解
- 2011年度最佳 jQuery 插件发布
- Android 自定义的开关按钮——SwitchButton
- 线性代数---向量问题的求解方法
- C语言解析Ini格式文件
- 【clickhouse】clickhouse 表引擎之 Merge
- GitLab Elasticsearch 私密群组数据泄露 bug 值3000美元
- 基本信息项目目标文档
- Ansible详解(十四)——Ansible Role实战
- idea ssm html增删改,intellij idea采用ssm框架实现的数据库增删查改demo
- QuartusII-项目工程的时序仿真
- NV12图像格式叠加(水印原理演示)
- Tomcat8安装配置
- 最新CPC客户端安装教程,亲试有效
- 利用STM32F103精确控制步进电机
- linux mint卸载桌面环境,在Linux Mint 19/Ubuntu 18.04系统上安装Deepin桌面环境的方法