ITPub博客

首页 > 应用开发 > IT综合 > SAP CRM One Order函数CRM_Object_FILL_OW的设计原理

SAP CRM One Order函数CRM_Object_FILL_OW的设计原理

原创 IT综合 作者:i042416 时间:2020-08-24 10:53:59 0 删除 编辑

标题:SAP CRM One Order函数CRM_ FILL_OW的设计原理 There are totally 60 function modules in One order with naming convention CRM_FILL_OW:


They are NOT used in read scenario but in modify scenario. For example once you change the Closing Date of a given opportunity in WebUI ( from 2017-02-15 to 2017-02-16 )


The function module for Opportunity header extension, CRM_ORDERADM_H_FILL_OW, is called with the following callstack:


As its name FILL_OW indicates, it is responsible to FILL the latest input by consumer into so called object work area( OW ) for later use. In order to make the research life easier I write the following report to trigger this FILL_OW function module call from backend:
REPORT zoneorder_modify. CONSTANTS: gv_guid TYPE crmt_object_guid VALUE '6C0B84B759DF1ED6BDF05763B3DC8841'. DATA: lt_opport_h TYPE crmt_opport_h_comt, ls_opport_h LIKE LINE OF lt_opport_h, lt_change TYPE crmt_input_field_tab, ls_change LIKE LINE OF lt_change. ls_opport_h-ref_guid = gv_guid. ls_opport_h-expect_end = '20170216'. ls_change = VALUE #( ref_guid = gv_guid ref_kind = 'A' objectname = 'OPPORT_H' ). APPEND 'EXPECT_END' TO ls_change-field_names. APPEND ls_change TO lt_change. APPEND ls_opport_h TO lt_opport_h. CALL FUNCTION 'CRM_ORDER_MAINTAIN' EXPORTING it_opport_h = lt_opport_h CHANGING ct_input_fields = lt_change EXCEPTIONS error_occurred = 1 document_locked = 2 no_change_allowed = 3 no_authority = 4. WRITE: / sy-subrc.
It’s very clear now the logic of this FILL_OW consists of four main parts:


(1) field check done in FM CRM_OPPORT_H_FIELDCHECK_FC
This check function module further calls two function modules: a. CRM_ORDER_GENERAL_CHECKS_FC This check could be switched off by function module CRM_ORDER_SET_ACTIVE_OW. A customer exit if_ex_crm_order_fieldcheck and a new BAdI definition crm_order_fieldcheck_new is allowed for customer to implement their own check logic and called within this check function module. b. CRM_FIELDCHECK_CALL This FM will call dedicated check function module for a given field registered in system table CRMC_FIELDCHECK:


(2) CRM_OPPORT_H_READ_OB The logic of this FM is already explained in blog:  Buffer logic in One Order header extension Read.
(3) CRM_ORDER_INPUT_DATA
This FM is responsible to move the latest value entered by consumer ( is_opport_h_com in line 65 ) to object work area ( postfix WRK in variable ls_opport_h_wrk in line 68 ). You can observe in the debugger that before this FM is executed, object work area still contains the old value 2017-02-15 read from FM CRM_OPPORT_H_READ_OB in step 2.


Inside this FM there is a check to avoid the field is being changed unnecessarily ( specified new value = old value ) or by mistake ( the field validation fails ). This is a screenshot how ls_opport_h_wrk looks like after this third step is executed:


(4) CRM_OPPORT_H_MERGE_OW
Opportunity header extension specific fields are filled in this FM. The following fields are populated in this FM with related business logic.

  • probability
  • phase_since
  • assistant_phase
  • exp_weighted_revenue
  • salescycle

Once all these four steps are done successfully, CRM_OPPORT_H_FILL_OW has now generated a consistent object work area and stored in ls_opport_h_wrk.


This object work area will be put to object buffer for later save usage via FM CRM_OPPORT_H_PUT_OB.


Further reading
I have written a series of blogs to explain how One Order API works. The blogs are written based on a simple scenario: read, change and save field “Closing Date” in Opportunity header level.
Buffer logic in One Order header extension Read
Change Scenario
CRM_ORDER_MAINTAIN
|- CRM_ORDER_MAINTAIN_MULTI_OW
|- CRM_ORDER_MAINTAIN_SINGLE_OW
|- CRM_ORDER_H_MAINTAIN_OW
|- CRM_OPPORT_H_MAINTAIN_OW
|-  CRM_OPPORT_H_CHANGE_OW
|-  CRM_OPPORT_H_READ_OB
|-  CRM_OPPORT_H_FILL_OW
|- CRM_OPPORT_H_CHECK_OW
|- CRM_OPPORT_H_PUT_OB
|- CRM_OPPORT_H_PUBLISH_OW
Save Scenario
CRM_ORDER_SAVE
|- CRM_ORDER_SAVE_OW
|- CRM_EVENT_SET_EXETIME_MULTI_OW
|-  CRM_OPPORT_H_SAVE_EC
|- CRM_ORDER_TABLE_SAVE
|- CRM_OBJECT_NAMES_DETERMINE
|- CRM_ORDER_UPDATE_TABLES_DETERM
|- CRM_ORDER_SET_OBJECTS_TO_SAVE
CRM_OPPORT_H_UPDATE_DU
Create Scenario
CRM_ORDER_MAINTAIN
|- CRM_ORDER_MAINTAIN_MULTI_OW
|- CRM_ORDER_MAINTAIN_SINGLE_OW
|- CRM_ORDER_H_MAINTAIN_OW
|- CRM_ORDERADM_H_MAINTAIN_OW
|-  CRM_ORDERADM_H_CREATE_OW
|- CRM_OPPORT_H_MAINTAIN_OW
|-  CRM_OPPORT_H_READ_OB
|-  CRM_OPPORT_H_CREATE_OW
|-  CRM_OPPORT_H_CHANGE_OW
要获取更多Jerry的原创文章,请关注公众号"汪子熙":


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24475491/viewspace-2714069/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
测试

注册时间:2018-01-20

  • 博文量
    3822
  • 访问量
    1987250