zoukankan      html  css  js  c++  java
  • SAP CRM One Order函数CRM_Object_FILL_OW的设计原理

    标题: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的原创文章,请关注公众号"汪子熙":

  • 相关阅读:
    二进制,八进制,十六进制,十进制之间的换算
    14简化路径(71)
    13字符串解码(394)
    12 反转每对括号间的子串(1190)
    11 使括号有效的最少添加(921)
    10 K 个一组翻转链表(25)
    9 从链表中删去总和值为零的连续节点(1171)
    8 链表中的下一个更大节点(1019)
    7两两交换链表中的节点(24)
    6 奇偶链表(
  • 原文地址:https://www.cnblogs.com/sap-jerry/p/13554694.html
Copyright © 2011-2022 走看看