创建新的SAP CRM product search scenario - 如何在SAP CRM里实现自定义的产品搜索场景
生活随笔
收集整理的這篇文章主要介紹了
创建新的SAP CRM product search scenario - 如何在SAP CRM里实现自定义的产品搜索场景
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
根據UI上的partner ID和Object description這兩個search parameter專門創建search scenario:
使用如下report消費該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負責檢測在何種search parameter的組合情況下對應的search tool class會被使用:
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則負責進行真正的搜索:
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.總結
以上是生活随笔為你收集整理的创建新的SAP CRM product search scenario - 如何在SAP CRM里实现自定义的产品搜索场景的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IBM 考虑出售天气预测业务,聚焦软件和
- 下一篇: 超好看!一加Ace 2原神定制礼盒专属限