如何手动删除一个business document和pricing document的relationship

110 阅读1分钟

Created by Jerry Wang, last modified on Apr 22, 2015

首先执行如下的report,检测某个business document是否存在pricing document:

REPORT ZORDER_READ_PRICE_PROCEDURE.
PARAMETERS: id type crmd_orderadm_h-object_id OBLIGATORY.
START-OF-SELECTION.
DATA: lt_guid type STANDARD TABLE OF crmd_orderadm_h-guid,
      lv_procedure TYPE PRCT_PRIC_PROC.
SELECT guid INTO TABLE lt_guid FROM crmd_orderadm_h WHERE object_id = id.
LOOP AT lt_guid ASSIGNING FIELD-SYMBOL(<guid>).
   CLEAR: lv_procedure.
   CALL FUNCTION 'CRM_PRIDOC_READ_PRICPROC_OW'
     EXPORTING
        IV_HEADER_GUID = <guid>
     IMPORTING
        EV_PRICING_PROCEDURE = lv_procedure.
   WRITE: / 'price procedure: ' , lv_procedure.
ENDLOOP.

clipboard1
输出pricing procedure,证明该document 存在pricing document:
clipboard2
输出pricing procedure,证明该document 存在pricing document:
clipboard3
成功删除:
clipboard4
再执行pricing procedure的read report,输出为空,证明link已经成功删除了:
clipboard5

REPORT zremove_price_data.
  
PARAMETERS: id TYPE crmd_orderadm_h-object_id OBLIGATORY.
  
START-OF-SELECTION.
 
  DATA: lt_guid TYPE STANDARD TABLE OF crmd_orderadm_h-guid,
 
        lv_guid LIKE LINE OF lt_guid,
 
        lt_link TYPE STANDARD TABLE OF crmd_link.
  
  SELECT guid INTO TABLE lt_guid FROM crmd_orderadm_h WHERE object_id = id.
  
  IF sy-subrc <> 0.
 
    WRITE: / 'the id you have specified is not valid' , id.
 
    RETURN.
 
  ENDIF.
  
  SELECT * INTO TABLE lt_link FROM crmd_link FOR ALL ENTRIES IN lt_guid
 
     WHERE objtype_hi = '05' AND objtype_set = '18' AND guid_hi = lt_guid-table_line.
  
  IF sy-subrc <> 0.
 
     WRITE: / 'no pricing document link for this order.'.
 
     RETURN.
 
  ENDIF.
  
  LOOP AT lt_guid INTO lv_guid.
 
    DELETE FROM crmd_link WHERE objtype_hi = '05' AND objtype_set = '18'
 
     AND guid_hi = lv_guid.
 
    IF sy-subrc = 0.
 
      WRITE: / 'pricing link for document:' , lv_guid,  ' deleted successfully.'.
 
    ELSE.
 
      WRITE: / 'pricing link for document:' , lv_guid,  ' deleted failed.'.
 
    ENDIF.
 
  ENDLOOP.

打印系统里所有具有Pricing document的One order ID

Created by Jerry Wang, last modified on Apr 21, 2015

执行如下report:

REPORT ZORDER_SEARCH_PRICING.
data: lt_order TYPE STANDARD TABLE OF crmd_orderadm_h,
      lt_link_com TYPE CRMT_LINK_COMT.
START-OF-SELECTION.
 SELECT * INTO TABLE lt_order FROM crmd_orderadm_h UP TO 1000 ROWS
    WHERE process_type <> 'TA'.
 LOOP AT lt_order ASSIGNING FIELD-SYMBOL(<order>).
   CLEAR: lt_link_com.
   CALL FUNCTION 'CRM_LINK_GET_OW'
    EXPORTING
      iv_guid_hi               = <order>-guid
      iv_objname_hi            = 'ORDERADM_H'
      iv_objname_set           = 'PRIDOC'
    IMPORTING
      et_link                  = lt_link_com
   EXCEPTIONS
      no_allocated_obj_found   = 1
      invalid_input_data       = 2
      undefined_internal_error = 3
      OTHERS                   = 4.
   IF sy-subrc = 0.
     WRITE: / 'id: ' , <order>-object_id, ' type: ' , <order>-process_type.
   ENDIF.
 ENDLOOP.

根据打印出的ID 到WebUI上根据Id查找:
image
image