日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用SAP ABAP 事物码 ST12 研究 SAP CRM 产品搜索的性能 - product search性能

發(fā)布時(shí)間:2023/12/19 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用SAP ABAP 事物码 ST12 研究 SAP CRM 产品搜索的性能 - product search性能 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Created by Jerry Wang on Mar 08, 2014

1. 進(jìn)入Product的search 頁面:

?

?

?

2. 進(jìn)入后臺ST12 transaction code, task type選為HTTP,點(diǎn)擊Start trace button:

?

?

?

在UI上點(diǎn)了search button看到search結(jié)果之后,點(diǎn)End trace:

?

?

?

3. 點(diǎn)ABAP trace查看trace:

?

?

?

按照Net time排序,這樣可以將執(zhí)行時(shí)間較長的method / function module call顯示在最上面:

?

?

?

選中指定row,按ctrl+F7 或者menu goto->Display source code可以看到對應(yīng)的ABAP code:

?

?

?

比如我們可以分析為什么下圖這個(gè)方法反復(fù)被調(diào)用了1800次?我們可以在方法里面設(shè)斷點(diǎn),然后點(diǎn)search button觸發(fā)斷點(diǎn),

?

?

?

觀察callstack可以發(fā)現(xiàn),對于每一個(gè)product,要遍歷comt_product_ui這個(gè)structure的每一個(gè)field:

?

?

?

這個(gè)structure一共有18個(gè)field,我們search的max hit設(shè)為100,所以總共產(chǎn)生1800次調(diào)用。

?

?

i042416 added the CRM Product label on Oct 4, 2017

Owner Author

i042416 commented on Oct 4, 2017

創(chuàng)建新的product search scenario

Created by Jerry Wang on May 28, 2014

根據(jù)UI上的partner ID和Object description這兩個(gè)search parameter專門創(chuàng)建search scenario:
使用如下report消費(fèi)該search scenario:

DATA: lt_option TYPE comt_prsearch_gen_tab. DATA: lt_product TYPE comt_prsearch_selection_tab. DATA: lt_return TYPE bapiret2_tab. DATA: ls_return TYPE bapiret2. DATA: ls_product TYPE LINE OF comt_prsearch_selection_tab. DATA: ls_option TYPE comt_prsearch_gen. ls_option-frgtype_id = 'COMM_PR_SHTEXT'. ls_option-attribute = 'SHORT_TEXT'. ls_option-sign = 'I'. ls_option-option = 'EQ'. ls_option-low = 'object mass created of 200124'. ls_option-high = space. INSERT ls_option INTO TABLE lt_option. ls_option-frgtype_id = 'SAP_IL_PRDBP'. ls_option-attribute = 'DESTINGUID'. ls_option-sign = 'I'. ls_option-option = 'EQ'. ls_option-low = 'B5B05A3007CCD411917708000627B381'. ls_option-high = space. INSERT ls_option INTO TABLE lt_option. CALL FUNCTION 'COM_PRODUCT_GETLIST_API'EXPORTINGit_gen_sel_options = lt_optioniv_scenario = 'ZCL_NEW_SCENARIO_AFTER_OPT'iv_request_data = 'X'IMPORTINGet_product = lt_productet_bapireturn = lt_returnEXCEPTIONSno_scenario = 1error_getlist = 2OTHERS = 3. IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. LOOP AT lt_return INTO ls_return.WRITE: / ls_return-message. ENDLOOP. LOOP AT lt_product INTO ls_product.WRITE: / ls_product-product_guid. ENDLOOP. WRITE: / 'Finished'. 新的search scenario class需要繼承CL_COM_PRSEARCHSCENARIO_BASE,代碼如下: class ZCL_NEW_SCENARIO_AFTER_OPT definitionpublicinheriting from CL_COM_PRSEARCHSCENARIO_BASEfinalcreate public . public section. protected section.methods DETERMINE_STANDARD_TOOLredefinition . private section. ENDCLASS. CLASS ZCL_NEW_SCENARIO_AFTER_OPT IMPLEMENTATION. * <SIGNATURE>---------------------------------------------------------------------------------------+ * | Instance Protected Method ZCL_NEW_SCENARIO_AFTER_OPT->DETERMINE_STANDARD_TOOL * +-------------------------------------------------------------------------------------------------+ * | [--->] IT_CRITERIA TYPE COMT_PRSEARCH_CRITERIA_TAB * | [<---] EI_TOOL TYPE REF TO IF_COM_PRSEARCHTOOL * | [<---] ET_FILTER TYPE COMT_PRSEARCH_FILTER_TAB * | [EXC!] NO_STANDARD_TOOL_FOUND * | [EXC!] ERROR * +--------------------------------------------------------------------------------------</SIGNATURE> method DETERMINE_STANDARD_TOOL.DATA: lr_filter TYPE REF TO if_com_prsearchfilter.DATA: lr_tool TYPE REF TO if_com_prsearchtool.CREATE OBJECT lr_tool TYPE ZCL_NEW_SEARCH_TOOL_AFTER_OPT.ei_tool = lr_tool.CREATE OBJECT lr_filter TYPE ZCL_NEW_FILTER_AFTER_OPT.INSERT lr_filter INTO TABLE et_filter. endmethod. ENDCLASS. filter class負(fù)責(zé)檢測在何種search parameter的組合情況下對應(yīng)的search tool class會(huì)被使用: class ZCL_NEW_FILTER_AFTER_OPT definitionpublicfinalcreate public . public section.interfaces IF_COM_PRSEARCHFILTER . protected section. private section. ENDCLASS. CLASS ZCL_NEW_FILTER_AFTER_OPT IMPLEMENTATION. * <SIGNATURE>---------------------------------------------------------------------------------------+ * | Instance Public Method ZCL_NEW_FILTER_AFTER_OPT->IF_COM_PRSEARCHFILTER~FILTER * +-------------------------------------------------------------------------------------------------+ * | [--->] IV_LANGUAGE TYPE SPRAS (default =SY-LANGU) * | [--->] IT_CRITERIA TYPE COMT_PRSEARCH_CRITERIA_TAB * | [<-->] CT_DATA TYPE COMT_PRSEARCH_DATA_TAB(optional) * | [<-->] CT_SELECTION TYPE COMT_PRODUCT_GUID_T * | [EXC!] ERROR * +--------------------------------------------------------------------------------------</SIGNATURE> method IF_COM_PRSEARCHFILTER~FILTER. endmethod. * <SIGNATURE>---------------------------------------------------------------------------------------+ * | Instance Public Method ZCL_NEW_FILTER_AFTER_OPT->IF_COM_PRSEARCHFILTER~RELEVANT_CRITERIA * +-------------------------------------------------------------------------------------------------+ * | [--->] IV_CRITERION TYPE COMT_PRSEARCH_CRITERION * | [<---] EV_COVERED TYPE COMT_BOOLEAN * +--------------------------------------------------------------------------------------</SIGNATURE> method IF_COM_PRSEARCHFILTER~RELEVANT_CRITERIA.IF iv_criterion-frgtype_id = 'COMM_PR_SHTEXT' OR iv_criterion-frgtype_id CP 'SAP_IL_*'.ev_covered = 'X'.ENDIF. endmethod. ENDCLASS. search tool class則負(fù)責(zé)進(jìn)行真正的搜索: class ZCL_NEW_SEARCH_TOOL_AFTER_OPT definitionpublicfinalcreate public . public section.interfaces IF_COM_PRSEARCHTOOL . protected section. private section.types:BEGIN OF ty_bp_range,sign TYPE BAPISIGN,option TYPE BAPIOPTION,low TYPE COMT_IL_DESTINGUID,high type COMT_IL_DESTINGUID,end of ty_bp_range .types:tt_bp_range TYPE STANDARD TABLE OF ty_bp_range .types:BEGIN OF ty_text_range,sign TYPE BAPISIGN,option TYPE BAPIOPTION,low TYPE COMT_PRSHTEXTX,high type COMT_PRSHTEXTX,end of ty_text_range .types:tt_text_range TYPE STANDARD TABLE OF ty_text_range .data MT_BP_RANGE type TT_BP_RANGE .data MT_TEXT_RANGE type TT_TEXT_RANGE .methods DO_READ_SHTEXTimporting!IV_LANGUAGE type SPRASchanging!CT_RESULT type ANY TABLEexceptionsERROR .methods BUILD_IN_TABLEimporting!IT_CRITERIA type COMT_PRSEARCH_CRITERIA_TAB . ENDCLASS. CLASS ZCL_NEW_SEARCH_TOOL_AFTER_OPT IMPLEMENTATION. * <SIGNATURE>---------------------------------------------------------------------------------------+ * | Instance Private Method ZCL_NEW_SEARCH_TOOL_AFTER_OPT->BUILD_IN_TABLE * +-------------------------------------------------------------------------------------------------+ * | [--->] IT_CRITERIA TYPE COMT_PRSEARCH_CRITERIA_TAB * +--------------------------------------------------------------------------------------</SIGNATURE> method BUILD_IN_TABLE.DATA: ls_criteria LIKE LINE OF it_criteria,ls_bp_range LIKE LINE OF mt_bp_range,ls_text_range LIKE LINE OF mt_text_range,ls_option LIKE LINE OF ls_criteria-options.READ TABLE it_criteria INTO ls_criteria WITH KEY FRGTYPE_ID = 'SAP_IL_PRDBP' ATTRIBUTE = 'DESTINGUID'.CHECK sy-subrc = 0.READ TABLE ls_criteria-options INTO ls_option INDEX 1.CHECK sy-subrc = 0.ls_bp_range-low = ls_option-low.ls_bp_range-sign = 'I'.ls_bp_range-option = 'EQ'.APPEND ls_bp_range TO mt_bp_range.READ TABLE it_criteria INTO ls_criteria WITH KEY FRGTYPE_ID = 'COMM_PR_SHTEXT' ATTRIBUTE = 'SHORT_TEXT'.CHECK sy-subrc = 0.READ TABLE ls_criteria-options INTO ls_option INDEX 1.CHECK sy-subrc = 0.ls_text_range-sign = 'I'.ls_text_range-option = 'EQ'.ls_text_range-low = ls_option-low.APPEND ls_text_range TO mt_text_range. endmethod. * <SIGNATURE>---------------------------------------------------------------------------------------+ * | Instance Private Method ZCL_NEW_SEARCH_TOOL_AFTER_OPT->DO_READ_SHTEXT * +-------------------------------------------------------------------------------------------------+ * | [--->] IV_LANGUAGE TYPE SPRAS * | [<-->] CT_RESULT TYPE ANY TABLE * | [EXC!] ERROR * +--------------------------------------------------------------------------------------</SIGNATURE> METHOD DO_READ_SHTEXT .FIELD-SYMBOLS: <product_guid> TYPE comt_product_guid.FIELD-SYMBOLS: <short_text> TYPE comt_prshtextx.FIELD-SYMBOLS: <langu> TYPE spras.FIELD-SYMBOLS: <result> TYPE ANY.DATA: lt_product TYPE comt_product_tab.DATA: ls_product TYPE comt_product.DATA: lt_shtext TYPE comt_prshtext_tab.DATA: ls_shtext TYPE comt_prshtext. * Get the product GUIDsLOOP AT ct_result ASSIGNING <result>.ASSIGN ('<RESULT>-PRODUCT_GUID') TO <product_guid>.IF sy-subrc <> 0.RAISE error.ENDIF.ls_product-product_guid = <product_guid>.INSERT ls_product INTO TABLE lt_product.ENDLOOP. * mass read for short textCALL FUNCTION 'COM_COMM_PR_SHTEXT_READ_MULTIP'EXPORTINGit_product = lt_productiv_update_buffer = spaceiv_all_langu = spaceiv_langu = iv_languageIMPORTINGet_set = lt_shtext. * Insert short text into result tableLOOP AT ct_result ASSIGNING <result>.ASSIGN ('<RESULT>-PRODUCT_GUID') TO <product_guid>.IF sy-subrc <> 0.RAISE error.ENDIF.ASSIGN ('<RESULT>-SHORT_TEXT') TO <short_text>.IF sy-subrc <> 0.RAISE error.ENDIF.ASSIGN ('<RESULT>-LANGU') TO <langu>.IF sy-subrc <> 0.RAISE error.ENDIF. * get short text and copy the result dataREAD TABLE lt_shtext INTO ls_shtextWITH KEY product_guid = <product_guid>.CHECK sy-subrc = 0.<short_text> = ls_shtext-short_text.<langu> = iv_language.ENDLOOP. ENDMETHOD. * <SIGNATURE>---------------------------------------------------------------------------------------+ * | Instance Public Method ZCL_NEW_SEARCH_TOOL_AFTER_OPT->IF_COM_PRSEARCHTOOL~GETLIST_ACTIVE * +-------------------------------------------------------------------------------------------------+ * | [--->] IV_MAX_ROWS TYPE BAPIMAXROW (default =0) * | [--->] IV_LANGUAGE TYPE SPRAS (default =SY-LANGU) * | [--->] IT_CRITERIA TYPE COMT_PRSEARCH_CRITERIA_TAB * | [--->] II_SCENARIO TYPE REF TO CL_COM_PRSEARCHSCENARIO_BASE(optional) * | [--->] IV_REQUEST_DATA TYPE COMT_BOOLEAN (default =SPACE) * | [<---] ET_SELECTION TYPE COMT_PRSEARCH_SELECTION_TAB * | [<---] ET_DATA TYPE COMT_PRSEARCH_DATA_TAB * | [EXC!] ERROR * +--------------------------------------------------------------------------------------</SIGNATURE> method IF_COM_PRSEARCHTOOL~GETLIST_ACTIVE.DATA: lv_cursor TYPE cursor ,lv_finished TYPE comt_boolean ,lt_product TYPE STANDARD TABLE OF comt_prsearch_selection ,ls_product_all TYPE comt_prsearch_selection ,lt_product_all TYPE STANDARD TABLE OF comt_prsearch_selection ,ls_criteria TYPE comt_prsearch_criterion,ls_option LIKE LINE OF ls_criteria-options,ls_selection LIKE LINE OF et_selection,lv_index_low TYPE i,lv_index_high TYPE i,lv_result_count TYPE i,lt_bp_range TYPE tt_bp_range,ls_bp_range TYPE ty_bp_range,ls_text_range TYPE ty_text_range,lt_text_range TYPE tt_text_range. CALL METHOD build_in_tableEXPORTINGit_criteria = it_criteria. OPEN CURSOR WITH HOLD lv_cursor FORSELECT p~product_guidp~logsysp~product_idp~product_typep~configp~xnosearchp~object_familyp~batch_dedicatedp~competitor_prodFROM COMM_PRODUCT AS P INNER JOIN COMM_IL_PRDBP AS Q ON P~PRODUCT_GUID = Q~SOURCEGUIDINNER JOIN COMM_PRSHTEXT AS J ON P~PRODUCT_GUID = J~PRODUCT_GUIDCLIENT SPECIFIEDWHEREP~client = sy-mandt ANDQ~DESTINGUID IN mt_bp_range ANDJ~SHORT_TEXT IN mt_text_range. WHILE lv_finished = space.FETCH NEXT CURSOR lv_cursor INTO CORRESPONDING FIELDS OF TABLE lt_product PACKAGE SIZE 100.IF sy-subrc = 0.CALL METHOD cl_com_prsearch_util=>execute_filter_selectionEXPORTINGiv_max_rows = iv_max_rowsir_scenario = ii_scenarioIMPORTINGev_max_rows_reached = lv_finishedCHANGINGct_result = lt_product_allct_selection = lt_product.ELSE.EXIT.ENDIF.ENDWHILE.CLOSE CURSOR lv_cursor.LOOP AT lt_product_all INTO ls_product_all.MOVE-CORRESPONDING ls_product_all TO ls_selection.INSERT ls_selection INTO TABLE et_selection.ENDLOOP.IF NOT iv_request_data IS INITIAL.CALL METHOD do_read_shtextEXPORTINGiv_language = iv_languageCHANGINGct_result = et_selectionEXCEPTIONSOTHERS = 0.ENDIF. endmethod. * <SIGNATURE>---------------------------------------------------------------------------------------+ * | Instance Public Method ZCL_NEW_SEARCH_TOOL_AFTER_OPT->IF_COM_PRSEARCHTOOL~RELEVANT_CRITERIA * +-------------------------------------------------------------------------------------------------+ * | [--->] IV_CRITERION TYPE COMT_PRSEARCH_CRITERION * | [<---] EV_COVERED TYPE COMT_BOOLEAN * +--------------------------------------------------------------------------------------</SIGNATURE> method IF_COM_PRSEARCHTOOL~RELEVANT_CRITERIA.CLEAR ev_covered.IF iv_criterion-frgtype_id = 'COMM_PR_SHTEXT' OR iv_criterion-frgtype_id CP 'SAP_IL_*'.ev_covered = 'X'.ENDIF.IF iv_criterion-frgtype_id = cl_com_prsearch_util=>frgid_productAND (iv_criterion-attribute = cl_com_prsearch_util=>attr_batch_dedicated ORiv_criterion-attribute =cl_com_prsearch_util=>attr_competitor_product ORiv_criterion-attribute = cl_com_prsearch_util=>attr_config ORiv_criterion-attribute = cl_com_prsearch_util=>attr_logsys ORiv_criterion-attribute = cl_com_prsearch_util=>attr_object_family ORiv_criterion-attribute = cl_com_prsearch_util=>attr_product_id ORiv_criterion-attribute = cl_com_prsearch_util=>attr_product_type ORiv_criterion-attribute = cl_com_prsearch_util=>attr_locked ).ev_covered = 'X'.ENDIF. endmethod. ENDCLASS.

總結(jié)

以上是生活随笔為你收集整理的使用SAP ABAP 事物码 ST12 研究 SAP CRM 产品搜索的性能 - product search性能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。