Vous êtes sur la page 1sur 7

FUNCTION zcrm_creat_item_frm_oppty_ec.

*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(IV_OBJECT_NAME) TYPE CRMT_OBJECT_NAME
*" REFERENCE(IV_EVENT_EXETIME) TYPE CRMT_EVENT_EXETIME
*" REFERENCE(IV_EVENT) TYPE CRMT_EVENT
*" REFERENCE(IV_ATTRIBUT) TYPE CRMT_EVENT OPTIONAL
*" REFERENCE(IV_HEADER_GUID) TYPE CRMT_OBJECT_GUID OPTIONAL
*" REFERENCE(IV_OBJECT_GUID) TYPE CRMT_OBJECT_GUID OPTIONAL
*" REFERENCE(IV_STRVAL_OLD) TYPE ANY OPTIONAL
*" REFERENCE(IV_STRVAL_NEW) TYPE ANY OPTIONAL
*" EXCEPTIONS
*" ABORT
*"----------------------------------------------------------------------
**********************************************************************
* Created By: Guhapriyan S*
* Created on: 11.07.2016 *
*--------------------------------------------------------------------*
* Purpose: Create Item from Refobjects of Predecessor.(ZOP1 to ZSC)*
*--------------------------------------------------------------------*
* This modules is used to create items in a service Contract, if it was
* created as a follow-up transaction from Opportunity. The module
* will create one item for each entry in the reference object list.
**********************************************************************
TYPES: BEGIN OF lty_product,
prod_id TYPE char40,
objkey TYPE swo_typeid,
quantity TYPE crmt_quantity,
END OF lty_product.
DATA:
lv_ref_kind TYPE crmt_object_kind,
lv_date TYPE datum,
lv_equnr TYPE comt_product_id,
lv_predguid TYPE crmt_object_guid,
lv_ref_strval_old TYPE REF TO data,
lv_ref_strval_new TYPE REF TO data,
lv_structure_name TYPE crmt_tablename,
lv_handle TYPE crmt_handle.
*** Customizing for Copy
DATA:
ls_pr_copy_ma_key TYPE crmt_pr_copy_ma_key,
ls_mainitem TYPE crmt_orderadm_i_wrk,
ls_pr_copy_ma TYPE crmc_pr_copy_ma. "#EC NEEDED
*** Refobj Set Data
DATA:
ls_refobj_com TYPE crmt_refobj_com,
ls_input_fields TYPE crmt_input_field,
ls_field_names TYPE crmt_input_field_names,
ls_schedlin_i_com TYPE crmt_schedlin_i_com,
ls_comp TYPE ibas_comp4,
ls_waranty TYPE zcrm_rfq_warnty,
ls_prodrange TYPE ibap_product_id_range,
ls_refdoc TYPE crmt_doc_flow_db_wrk,
ls_orderadm_i_com TYPE crmt_orderadm_i_com,
ls_schedlines TYPE crmt_schedlin_extd,
lv_guidh TYPE crmt_object_guid,
lv_orderno TYPE zdtel00001a,
lv_prod_id TYPE comt_product_id,
lv_product_guid TYPE comt_product_guid,
lt_refdoc TYPE crmt_doc_flow_db_wrkt,
lt_refobj_com TYPE crmt_refobj_comt,
lt_waranty TYPE zcrm_rfq_warnty_t,
lt_input_fields TYPE crmt_input_field_tab,
lt_prodrange TYPE ibap_product_id_range_tab,
lt_comp TYPE ibas_comp4_tab.
FIELD-SYMBOLS:
<ls_strval_old> TYPE any,
<ls_strval_new> TYPE any,
<lv_field> TYPE any.
* ----------------------------------------------------------------------
*** Check for incorrect Import Parameters
IF iv_header_guid IS INITIAL
OR iv_object_guid IS INITIAL.
RAISE abort.
ENDIF.
CHECK iv_header_guid EQ iv_object_guid. "Only for header processing
lv_ref_kind = gc_object_ref_kind-orderadm_h.
*** Get Name of Structure
CALL FUNCTION 'CRM_OBJECT_NAMES_DETERMINE'
EXPORTING
iv_object_name = iv_object_name
IMPORTING
ev_wrk_structure_name = lv_structure_name.
*** Assign Admin Header or Admin Item Values
CREATE DATA lv_ref_strval_old TYPE (lv_structure_name).
ASSIGN lv_ref_strval_old->* TO <ls_strval_old>
CASTING TYPE (lv_structure_name).
<ls_strval_old> = iv_strval_old.
CREATE DATA lv_ref_strval_new TYPE (lv_structure_name).
ASSIGN lv_ref_strval_new->* TO <ls_strval_new>
CASTING TYPE (lv_structure_name).
<ls_strval_new> = iv_strval_new.
ASSIGN COMPONENT 'GUID'
OF STRUCTURE <ls_strval_new> TO <lv_field>.
lv_guidh = <lv_field>.
*** Now read Customizing, if Header Data has to be copied
CHECK iv_object_name EQ gc_object_name-orderadm_h.
ASSIGN COMPONENT 'PROCESS_TYPE'
OF STRUCTURE <ls_strval_old> TO <lv_field>.
ls_pr_copy_ma_key-pr_type_from = <lv_field>.
ASSIGN COMPONENT 'PROCESS_TYPE'
OF STRUCTURE <ls_strval_new> TO <lv_field>.
ls_pr_copy_ma_key-pr_type_to = <lv_field>.
CHECK ls_pr_copy_ma_key-pr_type_from EQ 'ZOP1' AND
ls_pr_copy_ma_key-pr_type_to EQ 'ZSC'.
*** Determine predecessor GUID
ASSIGN COMPONENT 'PREDECESSOR_GUID'
OF STRUCTURE <ls_strval_new> TO <lv_field>.
*Get the order number
SELECT SINGLE zzfld00000i INTO lv_orderno
FROM crmd_opport_h WHERE guid = <lv_field>.
IF sy-subrc NE 0.
CLEAR lv_orderno.
ENDIF.
* Get the equipment and materials.
SELECT * FROM zcrm_rfq_warnty INTO TABLE lt_waranty
WHERE oppty_guid = <lv_field>
AND vbeln = lv_orderno.
IF sy-subrc NE 0.
REFRESH lt_waranty.
ENDIF.
CHECK lt_waranty IS NOT INITIAL.
CLEAR lv_handle.
**********************************************************************
* Create Item.
**********************************************************************
LOOP AT lt_waranty INTO ls_waranty.
CLEAR: ls_orderadm_i_com,
ls_input_fields,
lt_input_fields.
ls_orderadm_i_com-handle = lv_handle.
ls_orderadm_i_com-header = iv_header_guid.

SHIFT ls_waranty-matnr LEFT DELETING LEADING '0'.


IF ls_waranty-matnr(1) = 'P' AND lv_predguid IS NOT INITIAL.
ls_orderadm_i_com-number_parent = 100.
ls_field_names-fieldname = 'NUMBER_PARENT'.
INSERT ls_field_names INTO TABLE ls_input_fields-field_names.
ls_orderadm_i_com-parent = lv_predguid.
ls_field_names-fieldname = 'PARENT'.
INSERT ls_field_names INTO TABLE ls_input_fields-field_names.
ENDIF.
* Get the product.
IF ls_waranty-equ_nr IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_PRID1_INPUT'
EXPORTING
input = ls_waranty-equ_nr
IMPORTING
output = lv_equnr
EXCEPTIONS
lenght_error = 1
customizing_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
CLEAR lv_equnr.
ENDIF.
SELECT SINGLE product_guid INTO lv_product_guid
FROM comm_product WHERE product_id = lv_equnr.
IF sy-subrc EQ 0 AND lv_product_guid IS NOT INITIAL.
CALL FUNCTION 'COM_PRODUCT_GET_REFERENCE_PROD'
EXPORTING
iv_product_guid = lv_product_guid
IMPORTING
ev_refprod_id = lv_prod_id
EXCEPTIONS
wrong_call = 1
internal_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
ls_orderadm_i_com-ordered_prod = lv_prod_id.
ENDIF.
ELSE.
ls_orderadm_i_com-ordered_prod = ls_waranty-matnr.
ENDIF.
* Determine the product depending on the refobject
IF ls_orderadm_i_com-ordered_prod IS INITIAL.
ls_orderadm_i_com-ordered_prod = ls_waranty-matnr.
ENDIF.
ls_orderadm_i_com-mode = gc_mode-create.
ls_field_names-fieldname = 'ORDERED_PROD'.
INSERT ls_field_names INTO TABLE ls_input_fields-field_names.

CALL FUNCTION 'CRM_ORDERADM_I_MAINTAIN_OW'


EXPORTING
is_orderadm_i_com = ls_orderadm_i_com
IMPORTING
ev_guid = ls_orderadm_i_com-guid
CHANGING
ct_input_field_names = ls_input_fields-field_names
EXCEPTIONS
item_change_error = 1
item_create_error = 2
item_delete_error = 3
item_create_wref_error = 4
item_not_created_no_msg = 5
item_not_created = 6
error_occurred = 7
OTHERS = 8.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
CLEAR: ls_input_fields,
lt_input_fields.
**********************************************************************
* Create Schedule line *
**********************************************************************
IF lv_predguid IS INITIAL.
lv_predguid = ls_orderadm_i_com-guid.
ENDIF.
ls_schedlin_i_com-ref_guid = ls_orderadm_i_com-guid.
ls_schedlin_i_com-mode = gc_mode-create.
ls_schedlines-quantity = ls_waranty-kwmeng.
IF ls_schedlines-quantity IS INITIAL.
ls_schedlines-quantity = 1.
ENDIF.
INSERT ls_schedlines INTO TABLE ls_schedlin_i_com-schedlines.
ls_input_fields-ref_guid = ls_schedlin_i_com-ref_guid.
ls_input_fields-ref_kind = gc_object_kind-orderadm_i.
ls_input_fields-objectname = gc_object_name-schedlin.
ls_field_names-fieldname = 'QUANTITY'.
INSERT ls_field_names INTO TABLE ls_input_fields-field_names.
ls_field_names-fieldname = 'LOGICAL_KEY'.
INSERT ls_field_names INTO TABLE ls_input_fields-field_names.
INSERT ls_input_fields INTO TABLE lt_input_fields.
CLEAR ls_input_fields.
ls_input_fields-ref_guid = ls_schedlin_i_com-ref_guid.
ls_input_fields-ref_kind = gc_object_kind-orderadm_i.
ls_input_fields-objectname = gc_object_name-schedlin_i.
INSERT ls_input_fields INTO TABLE lt_input_fields.
CALL FUNCTION 'CRM_SCHEDLIN_I_MAINTAIN_OW'
CHANGING
cs_schedlin_i_com = ls_schedlin_i_com
ct_input_fields = lt_input_fields
EXCEPTIONS
schedlin_i_change_error = 1
schedlin_i_create_error = 2
error_occurred = 3
OTHERS = 4.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
CLEAR: ls_input_fields,
lt_input_fields,
ls_refobj_com,
lt_refobj_com,
ls_prodrange.
REFRESH: lt_prodrange.
IF lv_product_guid IS NOT INITIAL.
ls_prodrange-sel_sign = 'I'.
ls_prodrange-sel_option = 'EQ'.
CALL FUNCTION 'COM_PRODUCT_ID_GET'
EXPORTING
iv_product_guid = lv_product_guid
IMPORTING
ev_product_id = ls_prodrange-low
EXCEPTIONS
not_found = 1
wrong_call = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
IF NOT ls_prodrange-low IS INITIAL.
APPEND ls_prodrange TO lt_prodrange.
ENDIF.
REFRESH lt_comp.
IF lt_prodrange IS NOT INITIAL.
CALL FUNCTION 'IB_OBJECT_INDOBJ_SEARCH_R'
EXPORTING
it_product_id_range = lt_prodrange
IMPORTING
et_comp = lt_comp
EXCEPTIONS
not_specified = 1
not_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
REFRESH lt_comp.
ENDIF.
**********************************************************************
* Create Reference Object. *
**********************************************************************
* Update the reference object
IF lt_comp IS NOT INITIAL. "IBase Iobject
READ TABLE lt_comp INTO ls_comp INDEX 1.
ls_refobj_com-guid_object = ls_comp-guid_comp.
ls_refobj_com-ib_instance = ls_comp-instance.
ls_refobj_com-product_id = ls_prodrange-low.
ELSE.
CONTINUE. "Cannot happen because already check above
ENDIF.
ls_refobj_com-ref_guid = ls_orderadm_i_com-guid.
ls_refobj_com-ref_kind = gc_object_kind-orderadm_i.
ls_refobj_com-profile_type = 'A'.
ls_refobj_com-type_object = 'C'.
CALL FUNCTION 'CRM_REFOBJ_INPUT_FIELDS_GET_TO'
EXPORTING
iv_ref_guid = ls_refobj_com-ref_guid
iv_ref_kind = ls_refobj_com-ref_kind
IMPORTING
es_input_fields = ls_input_fields.
ls_input_fields-objectname = gc_object_name-refobj.
ADD 1 TO lv_handle.
ls_refobj_com-handle = lv_handle.
CALL FUNCTION 'CRM_SERVICE_OS_GET_LOG_KEY'
EXPORTING
iv_guid = ls_refobj_com-guid
iv_handle = ls_refobj_com-handle
IMPORTING
ev_logical_key = ls_input_fields-logical_key.
INSERT ls_input_fields INTO TABLE lt_input_fields.
READ TABLE lt_input_fields INTO ls_input_fields
WITH TABLE KEY objectname = ls_input_fields-objectname
ref_kind = ls_input_fields-ref_kind
ref_guid = ls_input_fields-ref_guid
ref_handle = ls_input_fields-ref_handle
logical_key = ls_input_fields-logical_key.
IF sy-subrc EQ 0
AND NOT ls_input_fields-field_names[] IS INITIAL.
INSERT ls_refobj_com INTO TABLE lt_refobj_com.
ENDIF.
IF lt_input_fields IS NOT INITIAL.
CALL FUNCTION 'CRM_REFOBJ_MAINTAIN_OW'
EXPORTING
it_refobj_com = lt_refobj_com
CHANGING
ct_input_field = lt_input_fields
EXCEPTIONS
error_occurred = 1
OTHERS = 2.
IF sy-subrc <> 0.
* CONTINUE.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
* ENDIF.
ENDLOOP.
LOOP AT lt_waranty INTO ls_waranty WHERE wty_stdate IS NOT INITIAL.
* update date.
TRY.
lv_date = ls_waranty-wty_stdate.
ADD 3 TO lv_date(4).
CALL FUNCTION 'ZCRM_APPOINTMENT_UPDATE_OW'
EXPORTING
iv_guid = iv_header_guid
iv_appttype = 'CONTEND'
iv_datefrm = sy-datum
iv_dateto = lv_date
iv_kind = 'A'
iv_save = abap_true.
CATCH cx_root.
ENDTRY.
ENDLOOP.
ENDFUNCTION.

Vous aimerez peut-être aussi