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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SAP CRM Fiori应用如何启用Sales Office和Sales Group两个字段

發(fā)布時間:2023/12/19 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SAP CRM Fiori应用如何启用Sales Office和Sales Group两个字段 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

User story

In CRM WebUI, the sales area of a given opportunity consists of the following fields in assignment block “Organizational Data”.
Note the “Sales Office” and “Sales Group” marked with red:

However in Fiori these two fields are not available.

The series of this blog will introduce how to bring these two standard fields into Fiori and provide CRUD operations on them.

As the first step, we need to expose the read operation of these two fields via odata service, which means when we test the odata service read operation, we expect to see both in response stream. Below is the screenshot of response before extension – both fields are missing there.

(1) When the data for Sales area tab in Fiori is read from backend, we make investigation and find out the data for both fields are already returned by one order API and available in the context of standard odata service implementation.


Since there is a MOVE-CORRESPONDING fields to move the opportunity data from one order API result to result structure of odata service, for the read operation, we just need to create two new fields in the structure of ls_entityset with exactly the same name, SALES_OFFICE and SALES_GROUP, then the MOVE-CORRESPONDING will take effect.

(2) The DDIC structure of Opportunity header is enhanced as below:

Add these two fields in service builder as well, re-generate runtime objects and clear model cache in both gateway and backend system to ensure the new fields could be visible in the runtime.

(3) retest the odata service read operation, the sales office and sales group are now available in the read response.

第二部分

In previous blog, the two fields Sales Office and Sales Group have already been exposed via OData service read operation. In this part I will make the two fields visible in Fiori UI. The final UI would look like below:

Step1: find the available extension point in UI to hold the two fields

There is existing extension point in opportunity detail view:

As the first step, our aim is just to display the two fields in Fiori UI without considering format requirement. So we just directly bind the two fields to SalesOfficeCode and SalesGroupCode exposed by blog part1.

This step is quite easy to do. The UI after this step looks like below. We can notice that for the other three standard fields, always the format + ( + + ) is displayed in UI.

The format is defined in xml view as below:

<Text id="salesorganization_Text"text="{parts: [{path :'json&gt;/SalesOrganizationDescription'},{path : 'json&gt;/SalesOrganization'}],formatter : 'cus.crm.opportunity.util.Formatter.formatSalesOrganization'}"></Text>

and the simple format function:

formatSalesOrganization : function(SalesOrganizationDescription, SalesOrganizationId){var SalesOrganization = "";if(SalesOrganizationId != undefined && SalesOrganizationId != ""){SalesOrganization = SalesOrganizationDescription + " (" + SalesOrganizationId + ")";}return SalesOrganization;},

In next step, we will enable the same format function for the two new fields.

Step2: create another two new fields SalesGroupText and SalesOfficeText to hold the description

The steps are also exactly the same as how we create the two fields SalesGroupCode and SalesOfficeCode in blog1: add the fields in DDIC structure and related Odata Model node:


After we have these two fields to store description, we can write the logic to get description by code.
All READ-related methods need to be enhanced with this logic.
a. redefine method OPPORTUNITIES_GET_ENTITYSET and paste the following source code:

METHOD opportunities_get_entityset.DATA: lv_otype TYPE otype.FIELD-SYMBOLS: <opportunity> LIKE LINE OF et_entityset.CALL METHOD super->opportunities_get_entitysetEXPORTINGiv_entity_name = iv_entity_nameiv_entity_set_name = iv_entity_set_nameiv_source_name = iv_source_nameit_filter_select_options = it_filter_select_optionsis_paging = is_pagingit_key_tab = it_key_tabit_navigation_path = it_navigation_pathit_order = it_orderiv_filter_string = iv_filter_stringiv_search_string = iv_search_stringIMPORTINGet_entityset = et_entityset. * Note: the single read below is not efficient from performance point of view. * In production code you can use cl_crm_orgman_interface=>READ_TEXT_MULTI to improve performanceLOOP AT et_entityset ASSIGNING <opportunity>.IF <opportunity>-sales_group IS NOT INITIAL.lv_otype = <opportunity>-sales_group+0(1).CALL METHOD cl_crm_orgman_interface=>read_text_singleEXPORTINGotype = lv_otypeobjid = <opportunity>-sales_group+2(8)IMPORTINGdisplay_text = <opportunity>-sales_group_txt.ENDIF.IF <opportunity>-sales_office IS NOT INITIAL.lv_otype = <opportunity>-sales_office+0(1).CALL METHOD cl_crm_orgman_interface=>read_text_singleEXPORTINGotype = lv_otypeobjid = <opportunity>-sales_office+2(8)IMPORTINGdisplay_text = <opportunity>-sales_office_txt.ENDIF.ENDLOOP.ENDMETHOD.

b. create a new private method FILL_SALES_TEXT with the following signature:

source code:

METHOD fill_sales_text.FIELD-SYMBOLS: <opp_header> TYPE cl_crm_opportunity_mpc=>ts_opportunity,<opp_expand> TYPE crmt_odata_oppt_hdr_expanded,<opp> TYPE any,<salegroup_text> TYPE crmt_odata_oppt_header-sales_group_txt,<saleoffice_text> TYPE crmt_odata_oppt_header-sales_office_txt,<salegroup_code> TYPE crmt_odata_oppt_header-sales_group,<saleoffice_code> TYPE crmt_odata_oppt_header-sales_office.DATA: lv_otype TYPE otype.IF iv_called_by_expand = abap_false.ASSIGN cr_entity->* TO <opp_header>.ASSIGN <opp_header> TO <opp>.ELSE.ASSIGN cr_entity->* TO <opp_expand>.ASSIGN <opp_expand> TO <opp>.ENDIF.ASSIGN COMPONENT 'SALES_GROUP' OF STRUCTURE <opp> TO <salegroup_code>.ASSIGN COMPONENT 'SALES_GROUP_TXT' OF STRUCTURE <opp> TO <salegroup_text>.ASSIGN COMPONENT 'SALES_OFFICE' OF STRUCTURE <opp> TO <saleoffice_code>.ASSIGN COMPONENT 'SALES_OFFICE_TXT' OF STRUCTURE <opp> TO <saleoffice_text>.IF <salegroup_code> IS NOT INITIAL.lv_otype = <salegroup_code>+0(1).CALL METHOD cl_crm_orgman_interface=>read_text_singleEXPORTINGotype = lv_otypeobjid = <salegroup_code>+2(8)IMPORTINGdisplay_text = <salegroup_text>.ENDIF.IF <saleoffice_code> IS NOT INITIAL.lv_otype = <saleoffice_code>+0(1).CALL METHOD cl_crm_orgman_interface=>read_text_singleEXPORTINGotype = lv_otypeobjid = <saleoffice_code>+2(8)IMPORTINGdisplay_text = <saleoffice_text>.ENDIF.ENDMETHOD.

c. in DPC_EXT’s method /IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_ENTITY, call the FILL_SALES_TEXT:

METHOD /iwbep/if_mgw_appl_srv_runtime~get_entity.CALL METHOD super->/iwbep/if_mgw_appl_srv_runtime~get_entityEXPORTINGiv_entity_name = iv_entity_nameiv_entity_set_name = iv_entity_set_nameiv_source_name = iv_source_nameit_key_tab = it_key_tabit_navigation_path = it_navigation_pathio_tech_request_context = io_tech_request_contextIMPORTINGer_entity = er_entityes_response_context = es_response_context.CASE iv_entity_name.WHEN 'Opportunity'.CALL METHOD fill_sales_textEXPORTINGiv_called_by_expand = abap_falseCHANGINGcr_entity = er_entity.WHEN OTHERS.ENDCASE.ENDMETHOD.

in DPC_EXT’s method /IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_EXPANDED_ENTITY, call the method as well:

METHOD /iwbep/if_mgw_appl_srv_runtime~get_expanded_entity.CALL METHOD super->/iwbep/if_mgw_appl_srv_runtime~get_expanded_entityEXPORTINGiv_entity_name = iv_entity_nameiv_entity_set_name = iv_entity_set_nameiv_source_name = iv_source_nameit_key_tab = it_key_tabit_navigation_path = it_navigation_pathio_expand = io_expandio_tech_request_context = io_tech_request_contextIMPORTINGer_entity = er_entityes_response_context = es_response_contextet_expanded_clauses = et_expanded_clauseset_expanded_tech_clauses = et_expanded_tech_clauses.CASE iv_entity_name.WHEN 'Opportunity'.CALL METHOD fill_sales_textEXPORTINGiv_called_by_expand = abap_trueCHANGINGcr_entity = er_entity.ENDCASE.ENDMETHOD.

Once this step is done, you could test your enhanced Odata service read operation and ensure you could see both code and description of SalesGroup and SalesOffice in response.

Step3: change the binding of extension fields

Just change the binding path from code to the converted value formatted by the formatter.

<core:FragmentDefinition xmlns="sap.m" xmlns:core="sap.ui.core" xmlns:ui="sap.ui.layout"><ui:form.SimpleForm id="salesAreaInfoTabContentBottomExtension"><ui:content><Label id="SalesOfficeLabel" text="Sales Office"></Label><Text id="SalesOffice" text="{parts: [{path :'json>/SalesOfficeText'},{path : 'json>/SalesOfficeCode'}],formatter : 'cus.crm.opportunity.CRM_OPPRTNTYExtension.UtilExtension.Util.formatSalesOffice'}"></Text><Label id="SalesGroupLabel" text="Sales Group"></Label><Text id="SalesGroup" text="{parts: [{path :'json>/SalesGroupText'},{path : 'json>/SalesGroupCode'}],formatter : 'cus.crm.opportunity.CRM_OPPRTNTYExtension.UtilExtension.Util.formatSalesOffice'}"></Text></ui:content></ui:form.SimpleForm> </core:FragmentDefinition>

The complete UI code could be found in github:https://github.com/i042416/testOpportunityExtension/ with commit id: 7489bd487cc40fff1a9dd3b9d3683036961a1061
The complete backend source code could be found from attachment.

要獲取更多Jerry的原創(chuàng)文章,請關注公眾號"汪子熙":

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結

以上是生活随笔為你收集整理的SAP CRM Fiori应用如何启用Sales Office和Sales Group两个字段的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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