ZCRM Serv Con Include

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 25

*&---------------------------------------------------------------------*

*& Include ZCRM_SERV_CONT_IN


*&---------------------------------------------------------------------*
TYPES : BEGIN OF ty_record,
stp TYPE bu_partner,
product_list TYPE comt_product_id,
description TYPE string,
product TYPE crmt_ordered_prod,
quantity TYPE string,
unit TYPE string,
std_price TYPE string,
dis TYPE string,
pr_amount TYPE string,
bill_cont TYPE string,
scale_amt TYPE string,
ppc TYPE string,
protection TYPE string,
tax TYPE string,
END OF ty_record.
DATA : lt_record TYPE TABLE OF ty_record,
ls_record TYPE ty_record.
TYPES : BEGIN OF ty_pragree,
guid TYPE crmt_object_guid,
stp TYPE bu_partner,
product_list TYPE comt_product_id,
description TYPE string,
product TYPE crmt_ordered_prod,
quantity TYPE string,
unit TYPE string,
std_price TYPE string,
dis TYPE string,
pr_amount TYPE string,
bill_cont TYPE string,
scale_amt TYPE string,
ppc TYPE string,
protection TYPE string,
tax TYPE string,
END OF ty_pragree.
DATA : lt_pragree TYPE TABLE OF ty_pragree,
ls_pragree TYPE ty_pragree.
TYPES : BEGIN OF ty_scale_tab,
scale_amt1 TYPE p decimals 2,
scale_rate1 TYPE p decimals 2,
END OF ty_scale_tab.
DATA : lt_scale_tab TYPE TABLE OF ty_scale_tab,
lt_scale_tab_t TYPE TABLE OF ty_scale_tab,
ls_scale_tab TYPE ty_scale_tab.
DATA : lv_string TYPE string.
DATA : l_v1 TYPE string,
l_v2 TYPE string.
TYPES : BEGIN OF ty_final,
stp TYPE bu_partner,
product_list TYPE comt_product_id,
description TYPE string,
product TYPE crmt_ordered_prod,
remarks TYPE string,
END OF ty_final.
DATA : lt_final TYPE TABLE OF ty_final,
ls_final TYPE ty_final.
DATA: lv_file_path TYPE string.
DATA : lv_counter TYPE i.
DATA: lt_header TYPE TABLE OF bapibus20001_header_ins,
ls_header TYPE bapibus20001_header_ins,
lt_item TYPE TABLE OF bapibus20001_item,
ls_item TYPE bapibus20001_item,
lt_partner TYPE TABLE OF bapibus20001_partner_ins,
ls_partner TYPE bapibus20001_partner_ins,
lt_status TYPE TABLE OF bapibus20001_status_ins,
ls_status TYPE bapibus20001_status_ins,
lt_product TYPE TABLE OF bapibus20001_product,
ls_product TYPE bapibus20001_product,
lt_prodlist TYPE TABLE OF bapibus20001_product_list,
ls_prodlist TYPE bapibus20001_product_list,
lt_input_fields TYPE TABLE OF bapibus20001_input_fields,
ls_input_fields TYPE bapibus20001_input_fields,
lt_schedule TYPE TABLE OF bapibus20001_schedlin,
ls_schedule TYPE bapibus20001_schedlin,
lt_save TYPE TABLE OF bapibus20001_guid_dis,
ls_save TYPE bapibus20001_guid_dis,
lt_saved TYPE TABLE OF bapibus20001_object_id,
ls_saved TYPE bapibus20001_object_id ,
lv_guid TYPE crmt_object_guid,
lv_item TYPE crmt_object_guid,
lv_sched TYPE crmt_object_guid,
lv_bill_cont TYPE string,
lv_prod TYPE string .
DATA : lr_cond_rec TYPE REF TO cl_crm_bol_entity,
lr_core TYPE REF TO cl_crm_bol_core.
DATA : ls_sub_rec LIKE ls_record,
lt_record_temp LIKE lt_record,
lt_rec_prod_list LIKE lt_record,
ls_rec_prod_list LIKE ls_record.
DATA : ls_ordprp_i_com TYPE crmt_ordprp_i_com,
lt_ordprp_i_d_com TYPE crmt_ordprp_i_d_comt,
ls_ordprp_i_d_com TYPE crmt_ordprp_i_d_com,
lt_ordprp_objl_i_d_com TYPE crmt_ordprp_objl_i_d_comt,
lt_field_names TYPE crmt_input_field_names_tab,
ls_field_names TYPE crmt_input_field_names.
TYPES : BEGIN OF ty_itm_dta,
guid TYPE crmt_object_guid,
resp_profile TYPE crmt_srv_escal,
ser_profile TYPE crmt_srv_serwi,
END OF ty_itm_dta.
DATA : lt_itm_dta TYPE TABLE OF ty_itm_dta,
ls_itm_dta TYPE ty_itm_dta.
*&---------------------------------------------------------------------*
*& Form DISPLAY_FINAL_OP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM display_final_op .
DATA : BEGIN OF itab OCCURS 0,
string1 TYPE string,
* string2 TYPE string,
* string3 TYPE string,
* string4 TYPE string,
string5 TYPE string,
END OF itab.
DATA: field_cat TYPE slis_t_fieldcat_alv.
LOOP AT lt_final INTO ls_final.
itab-string1 = ls_final-stp .
* itab-string2 = ls_final-product_list.
* itab-string3 = ls_final-description .
* itab-string4 = ls_final-product.
itab-string5 = ls_final-remarks.
APPEND itab.
ENDLOOP.
PERFORM fieldcat_init1 USING field_cat[].
*Call the ALV Grid: Display ALV Output screen
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
it_fieldcat = field_cat
TABLES
t_outtab = itab.
ENDFORM. " DISPLAY_FINAL_OP
*&---------------------------------------------------------------------*
*& Form FIELDCAT_INIT1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_FIELD_CAT[] text
*----------------------------------------------------------------------*
FORM fieldcat_init1 USING
p_fieldcat TYPE slis_t_fieldcat_alv.
*Data declarations
DATA: l_fieldcat TYPE slis_fieldcat_alv.
DATA : pos TYPE i VALUE 1.
*Sold to Party #
CLEAR l_fieldcat.
l_fieldcat-col_pos = pos. "Column Position
l_fieldcat-fieldname = 'STRING1'. "Column Name
l_fieldcat-seltext_m = 'Client#'. "Label
APPEND l_fieldcat TO p_fieldcat.
*Product List
* pos = pos + 1.
* CLEAR l_fieldcat.
* l_fieldcat-col_pos = pos.
* l_fieldcat-fieldname = 'STRING2'.
* l_fieldcat-seltext_m = 'product_list'.
* APPEND l_fieldcat TO p_fieldcat.
*Descrption
* pos = pos + 1.
* CLEAR l_fieldcat.
* l_fieldcat-col_pos = pos.
* l_fieldcat-fieldname = 'STRING3'.
* l_fieldcat-seltext_m = 'description'.
* APPEND l_fieldcat TO p_fieldcat.
*Product
* pos = pos + 1.
* CLEAR l_fieldcat.
* l_fieldcat-col_pos = pos.
* l_fieldcat-fieldname = 'STRING4'.
* l_fieldcat-seltext_m = 'product'.
* APPEND l_fieldcat TO p_fieldcat.
*
*
*Descrption
pos = pos + 1.
CLEAR l_fieldcat.
l_fieldcat-col_pos = pos.
l_fieldcat-fieldname = 'STRING5'.
l_fieldcat-seltext_m = 'Service Contract Number'.
APPEND l_fieldcat TO p_fieldcat.
ENDFORM. " fieldcat_init
*&---------------------------------------------------------------------*
*& Form CREATE_SC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM create_sc .
DATA : ls_temp_rec LIKE ls_record.
* get a core instance
lr_core = cl_crm_bol_core=>get_instance( ).
ASSERT lr_core IS BOUND.
lr_core->start_up( 'ONEORDER').
*lt_rec_prod_list[] = lt_record[].
*SORT lt_record_temp BY stp product.
*SORT lt_rec_prod_list BY stp product.
SORT lt_record ASCENDING BY stp product bill_cont.
lt_record_temp[] = lt_record[].
LOOP AT lt_record INTO ls_record.
CLEAR: lv_bill_cont, lv_counter, ls_ordprp_i_d_com.
ls_temp_rec = ls_record.
AT NEW stp.
ls_record = ls_temp_rec.
ls_final-stp = ls_record-stp.
ls_final-product_list = ls_record-product_list.
ls_final-product = ls_record-product.
ls_final-description = ls_record-description.
REFRESH : lt_item, lt_schedule, lt_status,lt_header, lt_partner, lt_prodli
st.
REFRESH : lt_ordprp_i_d_com, lt_itm_dta, lt_pragree.
*Fill the Header data
PERFORM header_fill.
LOOP AT lt_record_temp INTO ls_sub_rec WHERE stp = ls_record-stp .
*** IF sy-tabix NE 1.
*** IF lv_prod = ls_sub_rec-product AND lv_bill_cont = ls_sub_rec-bill
_cont..
*** lv_prod = ls_sub_rec-product . lv_bill_cont = ls_sub_rec-bill_co
nt.
**** fill pricing agreement
*** CONTINUE.
*** ELSE.
*** PERFORM item_fill.
**** fill pricing agreement
*** lv_prod = ls_sub_rec-product . lv_bill_cont = ls_sub_rec-bill_co
nt.
*** ENDIF.
*** ELSE.
*** PERFORM item_fill.
**** fill pricing agreement
*** lv_prod = ls_sub_rec-product . lv_bill_cont = ls_sub_rec-bill_co
nt.
*** ENDIF.
IF lv_bill_cont = ls_sub_rec-bill_cont.
CONTINUE.
ELSE.
lv_bill_cont = ls_sub_rec-bill_cont.
*Fill Item data
PERFORM item_fill.
ENDIF.
ENDLOOP.
* Call the BAPI
PERFORM run_bapi.
ENDAT.
ENDLOOP.
ENDFORM. " CREATE_SC
*&---------------------------------------------------------------------*
*& Form HEADER_FILL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM header_fill .
REFRESH : lt_input_fields .
CLEAR : lv_guid, ls_input_fields.
CALL FUNCTION 'CRM_GUID_CREATE'
IMPORTING
ev_guid = lv_guid.
ls_header-guid = lv_guid.
ls_header-process_type = 'ZCT0'.
*ls_header-description = ls_record-description. "1
INSERT ls_header INTO TABLE lt_header.
ls_input_fields-objectname = 'ORDERADM_H'.
ls_input_fields-ref_guid = lv_guid.
ls_input_fields-fieldname = 'PROCESS_TYPE'.
INSERT ls_input_fields INTO TABLE lt_input_fields.
CLEAR ls_input_fields.
*ls_input_fields-ref_guid = lv_guid.
*ls_input_fields-objectname = 'ORDERADM_H'.
*ls_input_fields-fieldname = 'DESCRIPTION'.
*INSERT ls_input_fields INTO TABLE lt_input_fields.
*CLEAR ls_input_fields.
DATA: ls_but000 TYPE but000.
*Partner
*Sold to party
SELECT SINGLE * FROM but000 INTO ls_but000 WHERE bpext = ls_record-stp.
IF sy-subrc = 0.
ls_partner-ref_guid = lv_guid.
ls_partner-partner_fct = '00000001'.
ls_partner-ref_kind = 'A'.
ls_partner-kind_of_entry = 'C'.
ls_partner-display_type = 'BP'.
ls_partner-ref_partner_handle = '0001'.
ls_partner-no_type = 'BP'.
ls_partner-partner_no = ls_but000-partner. "ls_record-stp. "4
INSERT ls_partner INTO TABLE lt_partner.
ENDIF.
*******Employee resp ls_partner-partner_fct = '00000014'.
ls_partner-ref_guid = lv_guid.
ls_partner-partner_fct = '00000014'.
ls_partner-ref_kind = 'A'.
ls_partner-kind_of_entry = 'C'.
ls_partner-display_type = 'BP'.
ls_partner-ref_partner_handle = '0001'.
ls_partner-no_type = 'BP'.
ls_partner-partner_no = '500000'. "5
INSERT ls_partner INTO TABLE lt_partner.
ls_input_fields-ref_guid = lv_guid.
ls_input_fields-objectname = 'PARTNER'.
ls_input_fields-ref_kind = 'A'.
ls_input_fields-logical_key = '0001'.
ls_input_fields-fieldname = 'DISPLAY_TYPE'.
INSERT ls_input_fields INTO TABLE lt_input_fields.
CLEAR ls_input_fields.
ls_input_fields-ref_guid = lv_guid.
ls_input_fields-objectname = 'PARTNER'.
ls_input_fields-ref_kind = 'A'.
ls_input_fields-logical_key = '0001'.
ls_input_fields-fieldname = 'NO_TYPE'.
INSERT ls_input_fields INTO TABLE lt_input_fields.
CLEAR ls_input_fields.
ls_input_fields-ref_guid = lv_guid.
ls_input_fields-objectname = 'PARTNER'.
ls_input_fields-ref_kind = 'A'.
ls_input_fields-logical_key = '0001'.
ls_input_fields-fieldname = 'KIND_OF_ENTRY'.
INSERT ls_input_fields INTO TABLE lt_input_fields.
CLEAR ls_input_fields.
ls_input_fields-ref_guid = lv_guid.
ls_input_fields-objectname = 'PARTNER'.
ls_input_fields-ref_kind = 'A'.
ls_input_fields-logical_key = '0001'.
ls_input_fields-fieldname = 'PARTNER_NO'.
INSERT ls_input_fields INTO TABLE lt_input_fields.
CLEAR ls_input_fields.
ls_input_fields-ref_guid = lv_guid.
ls_input_fields-objectname = 'PARTNER'.
ls_input_fields-ref_kind = 'A'.
ls_input_fields-logical_key = '0001'.
ls_input_fields-fieldname = 'PARTNER_FCT'.
INSERT ls_input_fields INTO TABLE lt_input_fields.
CLEAR ls_input_fields.
*Status
ls_status-status = 'E0005'.
ls_status-activate = 'X'.
ls_status-ref_kind = 'A'.
ls_status-ref_guid = lv_guid.
INSERT ls_status INTO TABLE lt_status.
ls_input_fields-ref_guid = lv_guid.
ls_input_fields-objectname = 'STATUS'.
ls_input_fields-ref_kind = 'A'.
ls_input_fields-fieldname = 'ACTIVATE'.
INSERT ls_input_fields INTO TABLE lt_input_fields.
CLEAR ls_input_fields.
ENDFORM. " HEADER_FILL
*&---------------------------------------------------------------------*
*& Form ITEM_FILL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM item_fill .
DATA : lv_prod_counter TYPE i.
lv_counter = lv_counter + 1.
CLEAR: lv_sched, lv_item.
CALL FUNCTION 'CRM_GUID_CREATE'
IMPORTING
ev_guid = lv_item.
*ls_itm_dta-guid = lv_item.
*ls_itm_dta-resp_profile = 'STANDARD'."ls_sub_rec-resp_profile.
*ls_itm_dta-ser_profile = '5X10'." ls_sub_rec-ser_profile.
*INSERT ls_itm_dta INTO TABLE lt_itm_dta.
TRANSLATE ls_sub_rec-product TO UPPER CASE.
ls_item-ordered_prod = ls_sub_rec-product. "2
ls_item-header = lv_guid.
ls_item-handle = lv_counter.
ls_item-mode = 'A'.
ls_item-guid = lv_item.
IF ls_sub_rec-product = 'RENTAL'.
IF ls_sub_rec-bill_cont = 'TRUE'.
ls_item-itm_type = 'ZCT0'.
ELSE.
ls_item-itm_type = 'ZCT3'.
ENDIF.
ELSEIF ls_sub_rec-product = 'SALE'.
ls_item-itm_type = 'ZCT1'.
ELSEIF ls_sub_rec-product = 'RTO'.
IF ls_sub_rec-bill_cont = 'TRUE'.
ls_item-itm_type = 'ZCT5'.
ELSE.
ls_item-itm_type = 'ZCT6'.
ENDIF.
ENDIF.
INSERT ls_item INTO TABLE lt_item.
ls_input_fields-fieldname = 'ITM_TYPE'.
ls_input_fields-ref_guid = lv_item.
ls_input_fields-ref_kind = 'B'.
ls_input_fields-objectname = 'ORDERADM_I'.
ls_input_fields-ref_handle = lv_counter.
INSERT ls_input_fields INTO TABLE lt_input_fields.
CLEAR ls_input_fields.
ls_input_fields-objectname = 'ORDERADM_I'.
ls_input_fields-ref_handle = lv_counter.
ls_input_fields-ref_guid = lv_item.
ls_input_fields-ref_kind = 'B'.
ls_input_fields-fieldname = 'MODE'.
INSERT ls_input_fields INTO TABLE lt_input_fields.
CLEAR ls_input_fields.
ls_input_fields-objectname = 'ORDERADM_I'.
ls_input_fields-ref_handle = lv_counter.
ls_input_fields-ref_guid = lv_item.
ls_input_fields-ref_kind = 'B'.
ls_input_fields-fieldname = 'ORDERED_PROD'.
INSERT ls_input_fields INTO TABLE lt_input_fields.
CLEAR ls_input_fields.
* ls_input_fields-objectname = 'ORDERADM_I'.
* ls_input_fields-ref_handle = lv_counter.
* ls_input_fields-fieldname = 'MODE'.
* INSERT ls_input_fields INTO TABLE lt_input_fields.
* CLEAR ls_input_fields.
* SCHEDULE
ls_schedule-quantity = ls_sub_rec-quantity. "3
ls_schedule-item_handle = lv_counter.
ls_schedule-item_guid = lv_item.
INSERT ls_schedule INTO TABLE lt_schedule.
ls_input_fields-objectname = 'SCHEDLIN'.
ls_input_fields-ref_kind = 'B'.
ls_input_fields-ref_guid = lv_item.
ls_input_fields-ref_handle = lv_counter.
ls_input_fields-fieldname = 'QUANTITY'.
INSERT ls_input_fields INTO TABLE lt_input_fields.
CLEAR ls_input_fields.
ls_input_fields-objectname = 'SCHEDLIN'.
ls_input_fields-ref_kind = 'B'.
ls_input_fields-ref_handle = lv_counter.
ls_input_fields-fieldname = 'LOGICAL_KEY'.
ls_input_fields-ref_guid = lv_item.
INSERT ls_input_fields INTO TABLE lt_input_fields.
CLEAR ls_input_fields.
*Unit
ls_product-process_qty_unit = 'EA'. "ls_sub_rec-unit . "3
ls_product-ref_guid = lv_item.
ls_product-ref_handle = lv_counter.
INSERT ls_product INTO TABLE lt_product.
ls_input_fields-objectname = 'PRODUCT_I'.
ls_input_fields-ref_kind = 'B'.
ls_input_fields-ref_guid = lv_item.
ls_input_fields-ref_handle = lv_counter.
ls_input_fields-fieldname = 'PROCESS_QTY_UNIT'.
INSERT ls_input_fields INTO TABLE lt_input_fields.
CLEAR ls_input_fields.
ENDFORM. " ITEM_FILL
*&---------------------------------------------------------------------*
*& Form RUN_BAPI
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM run_bapi .
DATA : lt_return TYPE TABLE OF bapiret2.
CALL FUNCTION 'BAPI_BUSPROCESSND_CREATEMULTI'
TABLES
header = lt_header
item = lt_item
partner = lt_partner
status = lt_status
input_fields = lt_input_fields
return = lt_return
product = lt_product
scheduleline = lt_schedule.
* product_list = lt_prodlist.
IF sy-subrc = 0.
*Create Prodcut list
PERFORM create_prod_list.
*Create appointments
*PERFORM appointments.
*Service Level Agreement
*PERFORM service_agreement.
*Service Org
PERFORM serv_org.
*Pricing Agreement
PERFORM price_agreement.
*Set Status of Item
PERFORM set_stat.
* READ TABLE lt_header INTO ls_header INDEX 1.
* CHECK sy-subrc EQ 0.
* DATA: ls_stat TYPE crm_jsto-objnr,
* lv_stat TYPE crm_jest-stat VALUE 'E0005'.
* ls_stat = ls_header-guid.
* LOOP AT lt_item INTO ls_item.
* DATA: ls_stat_item TYPE crm_jsto-objnr,
* lv_stat_item TYPE crm_jest-stat VALUE 'I1004',
* lt_stat TYPE TABLE OF jstat,
* ls_stat2 TYPE jstat.
* CLEAR: lt_stat.
* ls_stat_item = ls_item-guid.
*
* ls_stat2-stat = lv_stat_item.
* ls_stat2-inact = 'X'.
*
* INSERT ls_stat2 INTO TABLE lt_stat.
* CALL FUNCTION 'CRM_STATUS_CHANGE_INTERN'
* EXPORTING
* objnr = ls_stat_item
** ERROR_OCCURRED =
** OBJECT_NOT_FOUND =
** STATUS_INCONSISTENT =
** STATUS_NOT_ALLOWED =
* TABLES
* status = lt_stat
* EXCEPTIONS
* object_not_found = 1
* status_inconsistent = 2
* status_not_allowed = 3
* OTHERS = 4.
* IF sy-subrc <> 0.
** Implement suitable error handling here
* ENDIF.
*
* ENDLOOP.
*CALL FUNCTION 'CRM_STATUS_CHANGE_EXTERN'
* EXPORTING
* objnr = ls_stat
* user_status = lv_stat
* EXCEPTIONS
* object_not_found = 1
* status_inconsistent = 2
* status_not_allowed = 3
* OTHERS = 4.
REFRESH : lt_return, lt_save, lt_saved.
ls_save-guid = ls_header-guid.
INSERT ls_save INTO TABLE lt_save.
CALL FUNCTION 'BAPI_BUSPROCESSND_SAVE'
TABLES
objects_to_save = lt_save
saved_objects = lt_saved
return = lt_return.
READ TABLE lt_saved INTO ls_saved INDEX 1.
IF sy-subrc = 0.
* PERFORM set_stat.
COMMIT WORK.
CONCATENATE ls_saved-object_id 'has been created' INTO ls_final-remarks SE
PARATED BY space.
INSERT ls_final INTO TABLE lt_final.
ELSE.
ls_final-remarks = 'opertaion failed' .
INSERT ls_final INTO TABLE lt_final.
ENDIF.
ENDIF.
ENDFORM. " RUN_BAPI
*&---------------------------------------------------------------------*
*& Form CREATE_PROD_LIST
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM create_prod_list .
DATA : ls_rec1 LIKE ls_record.
DATA : l_val TYPE string,
lv_index TYPE i VALUE '1',
l_count TYPE i,
ls_table LIKE ls_record,
lv_prod TYPE string,
lv_bill TYPE string,
lv_index2 TYPE sytabix.
DATA : lt_table LIKE lt_record.
*DATA: lv_where TYPE string.
*
*lv_where = 'str <> ls_record-stp'.
REFRESH : lt_field_names, lt_ordprp_i_d_com, lt_pragree.
lt_table[] = lt_record[].
*SORT lt_table ASCENDING BY stp.
DELETE lt_table WHERE stp NE ls_record-stp."(lv_where).
SORT lt_table ASCENDING BY stp product bill_cont.
** LOOP AT lt_item INTO ls_item.
** lv_index = sy-tabix.
**
** ENDLOOP.
** LOOP AT lt_table into ls_table.
** IF sy-tabix ne 1.
** IF lv_prod = ls_table-product and lv_bill = ls_table-bill_cont..
** lv_prod = ls_table-product. lv_bill = ls_table-bill_cont.
** CONTINUE.
**
** else.
**
** ENDIF.
** ELSE.
** read table lt_item INTO ls_item INDEX lv_index.
** lv_prod = ls_table-product. lv_bill = ls_table-bill_cont.
** ENDIF.
**
** ENDLOOP.
READ TABLE lt_table INTO ls_table INDEX 1.
l_val = ls_table-bill_cont.
LOOP AT lt_table INTO ls_table.
IF l_val = ls_table-bill_cont.
READ TABLE lt_item INTO ls_item INDEX lv_index.
IF sy-subrc = 0.
*********************************************************
* fill table for pricing agreement
MOVE-CORRESPONDING ls_table TO ls_pragree.
ls_pragree-guid = ls_item-guid.
ls_pragree-scale_amt = ls_table-scale_amt.
ls_pragree-pr_amount = ls_table-pr_amount.
INSERT ls_pragree INTO TABLE lt_pragree.
*********************************************************
ls_ordprp_i_d_com-ref_guid = ls_item-guid.
ls_ordprp_i_d_com-product_id = ls_table-product_list.
ls_ordprp_i_d_com-proc_mode = 'A'.
INSERT ls_ordprp_i_d_com INTO TABLE lt_ordprp_i_d_com.
ls_ordprp_i_com-ref_guid = ls_item-guid.
IF lt_field_names[] IS INITIAL.
ls_field_names-fieldname = 'PRODUCT_ID'.
INSERT ls_field_names INTO TABLE lt_field_names.
ls_field_names-fieldname = 'PROC_MODE'.
INSERT ls_field_names INTO TABLE lt_field_names.
ENDIF.
ENDIF.
ELSE.
IF lt_ordprp_i_d_com[] IS NOT INITIAL.
CALL FUNCTION 'CRM_ORDPRP_I_MAINTAIN_OW'
EXPORTING
is_ordprp_i_com = ls_ordprp_i_com
it_ordprp_i_d_com = lt_ordprp_i_d_com
it_ordprp_objl_i_d_com = lt_ordprp_objl_i_d_com
iv_external_call = 'X'
CHANGING
ct_input_field_names = lt_field_names
EXCEPTIONS
ordprp_i_change_error = 1
ordprp_i_create_error = 2
OTHERS = 3.
ENDIF.
lv_index = lv_index + 1.
l_val = ls_table-bill_cont.
REFRESH : lt_ordprp_i_d_com.
READ TABLE lt_item INTO ls_item INDEX lv_index.
ls_ordprp_i_d_com-ref_guid = ls_item-guid.
ls_ordprp_i_d_com-product_id = ls_table-product_list.
ls_ordprp_i_d_com-proc_mode = 'A'.
INSERT ls_ordprp_i_d_com INTO TABLE lt_ordprp_i_d_com.
ls_ordprp_i_com-ref_guid = ls_item-guid.
*********************************************************
* fill table for pricing agreement
MOVE-CORRESPONDING ls_table TO ls_pragree.
ls_pragree-guid = ls_item-guid.
ls_pragree-scale_amt = ls_table-scale_amt.
ls_pragree-pr_amount = ls_table-pr_amount.
INSERT ls_pragree INTO TABLE lt_pragree.
*********************************************************
ENDIF.
ENDLOOP.
*
* READ TABLE lt_table INTO ls_table INDEX 1.
* l_val = ls_table-bill_cont.
* LOOP AT lt_table INTO ls_table.
* IF l_val = ls_table-bill_cont.
* READ TABLE lt_item INTO ls_item INDEX lv_index.
* IF sy-subrc = 0.
**********************************************************
** fill table for pricing agreement
* MOVE-CORRESPONDING ls_table TO ls_pragree.
* ls_pragree-guid = ls_item-guid.
* ls_pragree-scale_amt = ls_table-scale_amt.
* ls_pragree-pr_amount = ls_table-pr_amount.
* INSERT ls_pragree INTO TABLE lt_pragree.
**********************************************************
* ls_ordprp_i_d_com-ref_guid = ls_item-guid.
* ls_ordprp_i_d_com-product_id = ls_table-product_list.
* ls_ordprp_i_d_com-proc_mode = 'A'.
* INSERT ls_ordprp_i_d_com INTO TABLE lt_ordprp_i_d_com.
* ls_ordprp_i_com-ref_guid = ls_item-guid.
* IF lt_field_names[] IS INITIAL.
* ls_field_names-fieldname = 'PRODUCT_ID'.
* INSERT ls_field_names INTO TABLE lt_field_names.
* ls_field_names-fieldname = 'PROC_MODE'.
* INSERT ls_field_names INTO TABLE lt_field_names.
* ENDIF.
* ENDIF.
* ELSE.
* IF lt_ordprp_i_d_com[] IS NOT INITIAL.
* CALL FUNCTION 'CRM_ORDPRP_I_MAINTAIN_OW'
* EXPORTING
* is_ordprp_i_com = ls_ordprp_i_com
* it_ordprp_i_d_com = lt_ordprp_i_d_com
* it_ordprp_objl_i_d_com = lt_ordprp_objl_i_d_com
* iv_external_call = 'X'
* CHANGING
* ct_input_field_names = lt_field_names
* EXCEPTIONS
* ordprp_i_change_error = 1
* ordprp_i_create_error = 2
* OTHERS = 3.
* ENDIF.
*
* lv_index = lv_index + 1.
* l_val = ls_table-bill_cont.
* REFRESH : lt_ordprp_i_d_com.
*
* READ TABLE lt_item INTO ls_item INDEX lv_index.
* ls_ordprp_i_d_com-ref_guid = ls_item-guid.
* ls_ordprp_i_d_com-product_id = ls_table-product_list.
* ls_ordprp_i_d_com-proc_mode = 'A'.
* INSERT ls_ordprp_i_d_com INTO TABLE lt_ordprp_i_d_com.
*
**********************************************************
** fill table for pricing agreement
* MOVE-CORRESPONDING ls_table TO ls_pragree.
* ls_pragree-guid = ls_item-guid.
* ls_pragree-scale_amt = ls_table-scale_amt.
* ls_pragree-pr_amount = ls_table-pr_amount.
* INSERT ls_pragree INTO TABLE lt_pragree.
**********************************************************
*
* ENDIF.
* ENDLOOP.
IF lt_ordprp_i_d_com[] IS NOT INITIAL.
CALL FUNCTION 'CRM_ORDPRP_I_MAINTAIN_OW'
EXPORTING
is_ordprp_i_com = ls_ordprp_i_com
it_ordprp_i_d_com = lt_ordprp_i_d_com
it_ordprp_objl_i_d_com = lt_ordprp_objl_i_d_com
iv_external_call = 'X'
CHANGING
ct_input_field_names = lt_field_names
EXCEPTIONS
ordprp_i_change_error = 1
ordprp_i_create_error = 2
OTHERS = 3.
ENDIF.
*
**Create Prduct list
* LOOP AT lt_item INTO ls_item.
*
* REFRESH : lt_ordprp_i_d_com, lt_field_names.
*LOOP AT lt_record INTO ls_rec1 WHERE item = ls_item-number_int
* AND legacy = ls_record-legacy.
*
*ls_ordprp_i_d_com-ref_guid = ls_item-guid.
*ls_ordprp_i_d_com-product_id = ls_rec1-product_list.
*ls_ordprp_i_d_com-proc_mode = 'A'.
*INSERT ls_ordprp_i_d_com INTO TABLE lt_ordprp_i_d_com.
*ls_ordprp_i_com-ref_guid = ls_item-guid.
*
*IF lt_field_names[] IS INITIAL.
*ls_field_names-fieldname = 'PRODUCT_ID'.
*INSERT ls_field_names INTO TABLE lt_field_names.
*ls_field_names-fieldname = 'PROC_MODE'.
*INSERT ls_field_names INTO TABLE lt_field_names.
*ENDIF.
*
**Build table for price agreement and scale
*MOVE-CORRESPONDING ls_rec1 TO ls_pragree.
*ls_pragree-guid = ls_item-guid.
*INSERT ls_pragree INTO TABLE lt_pragree.
*
*ENDLOOP.
*
*DELETE ADJACENT DUPLICATES FROM lt_ordprp_i_d_com COMPARING product_id.
* IF lt_ordprp_i_d_com[] IS NOT INITIAL.
* CALL FUNCTION 'CRM_ORDPRP_I_MAINTAIN_OW'
* EXPORTING
* is_ordprp_i_com = ls_ordprp_i_com
* it_ordprp_i_d_com = lt_ordprp_i_d_com
* it_ordprp_objl_i_d_com = lt_ordprp_objl_i_d_com
* iv_external_call = 'X'
* CHANGING
* ct_input_field_names = lt_field_names
* EXCEPTIONS
* ordprp_i_change_error = 1
* ordprp_i_create_error = 2
* OTHERS = 3.
*ENDIF.
*ENDLOOP.
ENDFORM. " CREATE_PROD_LIST
*&---------------------------------------------------------------------*
*& Form APPOINTMENTS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM appointments .
*
*DATA : ls_rec23 LIKE ls_record.
*DATA : lt_appointment TYPE crmt_appointment_comt,
* ls_appointment TYPE crmt_appointment_com,
* it_input_flds TYPE crmt_input_field_tab,
* wa_input_flds TYPE crmt_input_field,
* it_fldnames TYPE crmt_input_field_names_tab,
* wa_fldnames TYPE crmt_input_field_names,
* lv_guid_header TYPE crmt_object_guid,
* l_desc TYPE string,
* lv_timestamp TYPE timestamp.
*DATA : lt_rec23 LIKE lt_record.
*
*lt_rec23[] = lt_record.
*SORT lt_rec23 ASCENDING BY legacy item.
*DELETE ADJACENT DUPLICATES FROM lt_rec23 COMPARING legacy.
*
*READ TABLE lt_header INTO ls_header INDEX 1.
*IF sy-subrc = 0.
* l_desc = ls_header-description.
*READ TABLE lt_rec23 INTO ls_rec23 WITH KEY description = l_desc.
*IF sy-subrc = 0.
*
* wa_fldnames-fieldname = 'TIMESTAMP_FROM'.
* APPEND wa_fldnames TO it_fldnames.
* wa_input_flds-field_names = it_fldnames.
* wa_input_flds-ref_guid = ls_header-guid.
* wa_input_flds-ref_kind = 'A'.
* wa_input_flds-objectname = 'APPOINTMENT'.
* wa_input_flds-logical_key = 'CONTEND'.
* INSERT wa_input_flds INTO TABLE it_input_flds.
*
* wa_input_flds-field_names = it_fldnames.
* wa_input_flds-ref_guid = ls_header-guid.
* wa_input_flds-ref_kind = 'A'.
* wa_input_flds-objectname = 'APPOINTMENT'.
* wa_input_flds-logical_key = 'CONTSTART'.
* INSERT wa_input_flds INTO TABLE it_input_flds.
*
*ls_appointment-ref_kind = 'A'.
*ls_appointment-ref_guid = ls_header-guid.
*ls_appointment-appt_type = 'CONTSTART'.
**CONVERT TIME AS THE SYSTEM TIME BELONGS TO DIFFERENT TIMEZONE
*
*CONVERT DATE ls_rec23-from_date TIME sy-uzeit INTO TIME STAMP lv_timestamp
* TIME ZONE sy-zonlo.
*
*ls_appointment-timestamp_from = lv_timestamp.
*ls_appointment-mode = 'B'.
*INSERT ls_appointment INTO TABLE lt_appointment.
*
*ls_appointment-ref_kind = 'A'.
*ls_appointment-ref_guid = ls_header-guid.
*ls_appointment-appt_type = 'CONTEND'.
*
*CONVERT DATE ls_rec23-to_date TIME sy-uzeit INTO TIME STAMP lv_timestamp
* TIME ZONE sy-zonlo.
*
*ls_appointment-timestamp_from = lv_timestamp.
*ls_appointment-mode = 'B'.
*INSERT ls_appointment INTO TABLE lt_appointment.
*
*lv_guid_header = ls_header-guid.
*
*CALL FUNCTION 'CRM_APPT_MAINTAIN_MULTI_OW'
* EXPORTING
* iv_ref_guid = lv_guid_header
* iv_ref_kind = 'A'
* it_appointment_com = lt_appointment
* CHANGING
* ct_input_fields = it_input_flds
* EXCEPTIONS
* precondition_violation = 1
* invariant_violation = 2
* OTHERS = 3.
*
*ENDIF.
*ENDIF.
ENDFORM. " APPOINTMENTS
*&---------------------------------------------------------------------*
*& Form SERVICE_AGREEMENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM service_agreement .
* DATA : lt_service_assign TYPE crmt_service_assign_comt,
* ls_service_i_com TYPE crmt_service_i_com,
* lt_input_fiel TYPE crmt_input_field_names_tab,
* ls_input_fiel TYPE crmt_input_field_names,
* ls_rec23 LIKE ls_record.
*
*LOOP AT lt_itm_dta INTO ls_itm_dta.
*
* ls_input_fiel-fieldname = 'SRV_SERWI'.
* INSERT ls_input_fiel INTO TABLE lt_input_fiel.
* ls_input_fiel-fieldname = 'SRV_ESCAL'.
* INSERT ls_input_fiel INTO TABLE lt_input_fiel.
*
*TRANSLATE ls_itm_dta-resp_profile TO UPPER CASE.
* ls_service_i_com-srv_escal = ls_itm_dta-resp_profile."'FIRST'.
*TRANSLATE ls_itm_dta-ser_profile TO UPPER CASE.
* ls_service_i_com-srv_serwi = ls_itm_dta-ser_profile. "'7X24'.
* ls_service_i_com-ref_guid = ls_itm_dta-guid.
*
* CALL FUNCTION 'CRM_SERVICE_I_MAINTAIN_OW'
* EXPORTING
* is_service_i_com = ls_service_i_com
* it_service_assign_com = lt_service_assign
* CHANGING
* ct_input_field_names = lt_input_fiel
* EXCEPTIONS
* item_change_error = 1
* item_create_error = 2
* OTHERS = 3.
*ENDLOOP.
ENDFORM. " SERVICE_AGREEMENT
*&---------------------------------------------------------------------*
*& Form PRICE_AGREEMENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM price_agreement .
DATA : ls_rec1 LIKE ls_record.
DATA : l_val TYPE string,
lv_index TYPE i VALUE '1',
l_count TYPE i,
ls_table LIKE ls_record.
DATA : lt_table LIKE lt_record.
CONSTANTS lc_object_name TYPE crmt_ext_obj_name VALUE 'COND_RECORD_MAX_WS_CRM
'. " lv_obj = 'COND_RECORD_1300'.
DATA: lv_factory TYPE REF TO cl_crm_bol_entity_factory.
DATA: ls_admini TYPE crmst_admini_btil.
DATA: lr_cond_maint_context TYPE REF TO cl_crm_bol_entity.
DATA: ls_cond_maint_context TYPE crmt_cnd_maint_cntxt_struct. "#EC NEEDED
DATA: ir_admini TYPE REF TO cl_crm_bol_entity.
DATA: lr_transaction TYPE REF TO if_bol_transaction_context .
DATA: ls_cond_record_max_ws_crm TYPE /1cn/working_set_e_d_crm.
DATA: lr_msg TYPE REF TO if_genil_message_container.
DATA: lv_product_id TYPE comt_product_id,
lv_product_type TYPE comt_product_type.
DATA: lt_params TYPE crmt_name_value_pair_tab,
ls_params TYPE crmt_name_value_pair.
DATA: iv_product_guid TYPE comt_product_guid.
LOOP AT lt_pragree INTO ls_pragree.
*1:88.04:75:68.71:150:60.02
REFRESH : lt_scale_tab_t, lt_scale_tab.
DATA : lv_amt TYPE p DECIMALS 2,
lv_amt1 TYPE p DECIMALS 2,
lv2 type string,
lv3 type string,
lv_string2 type string.
clear : l_v1, l_v2, lv2 ,lv3.
clear : lv_amt, lv_amt1.
clear : ls_scale_tab.
IF ls_pragree-scale_amt IS NOT INITIAL.
lv_string = ls_pragree-scale_amt.
DO .
SPLIT lv_string AT ':' INTO l_v1 l_v2.
* ls_scale_tab-scale_amt1 = l_v1.
lv_string = l_v2.
SPLIT lv_string AT ':' INTO l_v1 l_v2.
ls_scale_tab-scale_rate1 = l_v1.
lv_string = l_v2.
lv_string2 = l_v2.
split lv_string2 at ':' into lv2 lv3.
IF lv2 is not initial.
ls_scale_tab-scale_amt1 = lv2 - 1.
ELSE.
IF lv_string2 is not initial.
ls_scale_tab-scale_amt1 = lv_string2 - 1.
ENDIF.
ENDIF.
IF l_v1 IS NOT INITIAL and lv_string2 is initial..
lv_amt = l_v1.
ENDIF.
IF l_v1 IS INITIAL or lv_string2 is initial.
EXIT.
ELSE.
INSERT ls_scale_tab INTO TABLE lt_scale_tab.
ENDIF.
ENDDO.
ENDIF.
IF ls_pragree-pr_amount IS INITIAL.
CONTINUE.
ENDIF.
SELECT SINGLE product_guid FROM comm_product INTO iv_product_guid
WHERE product_id = ls_pragree-product_list.
IF iv_product_guid IS INITIAL.
RETURN.
ENDIF.
CALL FUNCTION 'COM_PRODUCT_ID_GET'
EXPORTING
iv_product_guid = iv_product_guid
IMPORTING
ev_product_id = lv_product_id
ev_product_type = lv_product_type
EXCEPTIONS
not_found = 1
wrong_call = 2
OTHERS = 3.
CHECK sy-subrc IS INITIAL.
ir_admini = lr_core->get_root_entity( iv_object_name = 'BTAdminI' iv_object_
guid = ls_pragree-guid ).
CHECK ir_admini IS BOUND.
ASSERT ir_admini IS BOUND AND ir_admini->get_name( ) = 'BTAdminI'.
ir_admini->if_bol_bo_property_access~get_properties( IMPORTING es_attributes
= ls_admini ).
lr_cond_maint_context = ir_admini->get_related_entity( 'BTItemPriceAgreement
sInit' ).
lr_cond_maint_context->if_bol_bo_property_access~get_properties( IMPORTING e
s_attributes = ls_cond_maint_context ).
* get the factory for the current object
lv_factory = lr_core->get_entity_factory( lc_object_name ).
ASSERT lv_factory IS BOUND.
REFRESH : lt_params.
ls_params-name = 'KSCHL'.
* ls_params-value = 'ZGPO'.
ls_params-value = 'ZPR0'.
APPEND ls_params TO lt_params.
ls_params-name = 'KVEWE'.
ls_params-value = 'PR'.
APPEND ls_params TO lt_params.
ls_params-name = 'KOTABNR'.
ls_params-value = 'SAP00090'.
APPEND ls_params TO lt_params.
lr_cond_rec = lv_factory->create( iv_params = lt_params ).
IF lr_cond_rec IS INITIAL.
RETURN.
ENDIF.
* copied from CL_CRMCMP_C_CONDTYPEDECI0_IMPL~EH_ONOK
lr_cond_rec->reread( ).
lr_cond_rec->lock( ).
lr_cond_rec->switch_to_change_mode( ).
lr_msg = lr_cond_rec->get_message_container( ).
IF lr_msg IS BOUND.
lr_msg->delete_messages( ).
ENDIF.
ASSERT lr_cond_rec IS BOUND AND lr_cond_rec->get_name( ) = lc_object_name.
lr_cond_rec->if_bol_bo_property_access~get_properties( IMPORTING es_attribut
es = ls_cond_record_max_ws_crm ).
ls_cond_record_max_ws_crm-product_id = lv_product_id.
ls_cond_record_max_ws_crm-product_type = lv_product_type.
ls_cond_record_max_ws_crm-crm_item_guid = ls_admini-guid.
* Set amount
IF ls_pragree-scale_amt IS NOT INITIAL.
ls_cond_record_max_ws_crm-kbetr_prt = lv_amt.
ls_cond_record_max_ws_crm-konwa = 'USD'.
ELSE.
ls_cond_record_max_ws_crm-kbetr_prt = ls_pragree-pr_amount.
ENDIF.
lr_cond_rec->if_bol_bo_property_access~set_properties( EXPORTING is_attribut
es = ls_cond_record_max_ws_crm ).
lr_core->modify( ).
*Scale
PERFORM create_scale.
ENDLOOP.
ENDFORM. " PRICE_AGREEMENT
*&---------------------------------------------------------------------*
*& Form CREATE_SCALE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM create_scale .
DATA : lr_entity TYPE REF TO cl_crm_bol_entity,
relation TYPE crmt_relation_name,
lcol_scale TYPE REF TO cl_crm_bol_entity_col,
ls_table TYPE /1cn/tscale_set_ext_cp.
* TYPES : BEGIN OF ty_scale_tab,
* scale_amt1 TYPE string,
* scale_rate1 TYPE string,
* END OF ty_scale_tab.
* DATA : lt_scale_tab TYPE TABLE OF ty_scale_tab,
* lt_scale_tab_t TYPE TABLE OF ty_scale_tab,
* ls_scale_tab TYPE ty_scale_tab.
* DATA : lv_string TYPE string.
* DATA : l_v1 TYPE string,
* l_v2 TYPE string.
CHECK ls_pragree-scale_amt IS NOT INITIAL.
IF lr_cond_rec IS BOUND.
relation = 'REL_SCALECRMDATA_CP'.
lcol_scale ?= lr_cond_rec->get_related_entities( iv_relation_name = relation
).
IF lcol_scale IS BOUND.
lr_entity ?= lcol_scale->if_bol_bo_col~get_first( ).
CHECK lr_entity IS BOUND.
lr_entity->lock( ).
lr_entity->switch_to_change_mode( ).
TRY.
CALL METHOD lr_entity->if_bol_bo_property_access~set_property_as_strin
g
EXPORTING
iv_attr_name = 'SCALE_BASE_TYPE'
iv_value = 'C'.
CATCH cx_sy_conversion_error .
ENDTRY.
TRY.
CALL METHOD lr_entity->if_bol_bo_property_access~set_property_as_strin
g
EXPORTING
iv_attr_name = 'SCALE_TYPE'
iv_value = 'D'.
CATCH cx_sy_conversion_error .
ENDTRY.
TRY.
CALL METHOD lr_entity->if_bol_bo_property_access~set_property_as_strin
g
EXPORTING
iv_attr_name = 'SCALE_UNIT'
iv_value = 'EA'.
CATCH cx_sy_conversion_error .
ENDTRY.
lr_core->modify( ).
* Create Scale Table
FREE lcol_scale.
FREE lr_entity.
* REFRESH : lt_scale_tab_t, lt_scale_tab.
*
* IF ls_pragree-scale_amt IS NOT INITIAL.
* lv_string = ls_pragree-scale_amt.
* DO .
* SPLIT lv_string AT ':' INTO l_v1 l_v2.
* ls_scale_tab-scale_amt1 = l_v1.
* lv_string = l_v2.
* SPLIT lv_string AT ':' INTO l_v1 l_v2.
* ls_scale_tab-scale_rate1 = l_v1.
* lv_string = l_v2.
*
* IF l_v1 IS INITIAL.
* EXIT.
* ELSE.
* INSERT ls_scale_tab INTO TABLE lt_scale_tab.
* ENDIF.
* ENDDO.
*
* ENDIF.
*Extra Entry in Scale
* lt_scale_tab_t[] = lt_scale_tab[].
* SORT lt_scale_tab_t ASCENDING BY scale_rate1.
* READ TABLE lt_scale_tab_t INTO ls_scale_tab INDEX 1.
* IF sy-subrc = 0.
* DATA : lv_amt TYPE p DECIMALS 2,
* lv_amt1 TYPE p DECIMALS 2.
* lv_amt = ls_scale_tab-scale_rate1.
* lv_amt1 = '0.01'.
* lv_amt = lv_amt - lv_amt1.
* ls_scale_tab-scale_amt1 = '9999999999999.999'.
* ls_scale_tab-scale_rate1 = lv_amt.
* INSERT ls_scale_tab INTO TABLE lt_scale_tab.
* ENDIF.
LOOP AT lt_scale_tab INTO ls_scale_tab.
relation = 'REL_SCALECRMSET_CP'.
lcol_scale ?= lr_cond_rec->get_related_entities( iv_relation_name = rela
tion ).
CHECK lcol_scale IS BOUND.
lr_entity ?= lcol_scale->if_bol_bo_col~get_first( ).
CHECK lr_entity IS BOUND.
CALL METHOD lr_entity->if_bol_bo_property_access~get_properties
IMPORTING
es_attributes = ls_table.
ls_table-/sapcnd/lin_value_01_001 = ls_scale_tab-scale_amt1.
ls_table-kbetr_prt = ls_scale_tab-scale_rate1.
FREE lr_entity.
lr_entity ?= lr_cond_rec->create_related_entity( iv_relation_name = rela
tion ).
lr_entity->if_bol_bo_property_access~set_properties( EXPORTING is_attrib
utes = ls_table ).
lcol_scale->if_bol_bo_col~add( lr_entity ).
lr_core->modify( ).
ENDLOOP.
ENDIF.
ENDIF.
ENDFORM. " CREATE_SCALE
*&---------------------------------------------------------------------*
*& Form SERV_ORG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM serv_org .
DATA : lt_input_fields TYPE crmt_input_field_tab,
ls_input_fields TYPE crmt_input_field,
lt_fieldnames TYPE crmt_input_field_names_tab,
ls_fieldnames TYPE crmt_input_field_names,
lt_orgman TYPE crmt_orgman_comt,
ls_orgman TYPE crmt_orgman_com.
READ TABLE lt_header INTO ls_header INDEX 1.
ls_fieldnames-fieldname = 'SERVICE_ORG_ORI'.
INSERT ls_fieldnames INTO TABLE lt_fieldnames.
ls_fieldnames-fieldname = 'SERVICE_ORG_SHORT'.
INSERT ls_fieldnames INTO TABLE lt_fieldnames.
ls_input_fields-field_names = lt_fieldnames.
ls_input_fields-ref_guid = ls_header-guid.
ls_input_fields-ref_kind = 'A'.
ls_input_fields-objectname = 'ORGMAN'.
INSERT ls_input_fields INTO TABLE lt_input_fields.
ls_orgman-ref_guid = ls_header-guid.
ls_orgman-ref_kind = 'A'.
ls_orgman-sales_org_ori = 'C'.
ls_orgman-dis_channel_ori = 'C'." C
ls_orgman-sales_off_ori = 'C'." C
ls_orgman-sales_group_ori = 'C'." C
ls_orgman-sales_orgr_ori = 'A'." A
ls_orgman-sales_org = 'O 50000005'.
ls_orgman-sales_office = 'O 50000171'.
ls_orgman-sales_group = 'O 50000172'.
ls_orgman-sales_org_resp = 'O 50000172'.
ls_orgman-sales_org_short = 'BP11'.
ls_orgman-sales_office_short = 'GSA'.
ls_orgman-sales_group_short = 'SVC OPS'.
ls_orgman-sales_org_resp_short = 'SVC OPS'.
ls_orgman-service_org_short = '50000002'.
INSERT ls_orgman INTO TABLE lt_orgman.
REFRESH : lt_fieldnames.
ls_fieldnames-fieldname = 'NO_DETERMINATION'.
INSERT ls_fieldnames INTO TABLE lt_fieldnames.
ls_fieldnames-fieldname = 'SERVICE_ORGR_ORI'.
INSERT ls_fieldnames INTO TABLE lt_fieldnames.
ls_fieldnames-fieldname = 'SERVICE_ORG_RESP'.
INSERT ls_fieldnames INTO TABLE lt_fieldnames.
ls_input_fields-field_names = lt_fieldnames.
ls_input_fields-ref_guid = ls_header-guid.
ls_input_fields-ref_kind = 'A'.
ls_input_fields-objectname = 'ORGMAN'.
INSERT ls_input_fields INTO TABLE lt_input_fields.
ls_orgman-ref_guid = ls_header-guid.
ls_orgman-ref_kind = 'A'.
ls_orgman-sales_org_ori = 'C'.
ls_orgman-dis_channel_ori = 'C'." C
ls_orgman-sales_off_ori = 'C'." C
ls_orgman-sales_group_ori = 'C'." C
ls_orgman-service_orgr_ori = 'C'.
ls_orgman-sales_orgr_ori = 'A'." A
ls_orgman-sales_org = 'O 50000005'.
ls_orgman-sales_office = 'O 50000171'.
ls_orgman-sales_group = 'O 50000172'.
ls_orgman-sales_org_resp = 'O 50000172'.
ls_orgman-sales_org_short = 'BP11'.
ls_orgman-sales_office_short = 'GSA'.
ls_orgman-sales_group_short = 'SVC OPS'.
ls_orgman-sales_org_resp_short = 'SVC OPS'.
ls_orgman-service_org_short = '50000002'.
ls_orgman-service_org = 'O 50000002'.
ls_orgman-service_org_resp = 'O 50000002'.
ls_orgman-no_determination = 'X'.
ls_orgman-mode = 'B'.
INSERT ls_orgman INTO TABLE lt_orgman.
CALL FUNCTION 'CRM_ORDER_MAINTAIN'
EXPORTING
it_orgman = lt_orgman
CHANGING
ct_input_fields = lt_input_fields
EXCEPTIONS
error_occurred = 1
document_locked = 2
no_change_allowed = 3
no_authority = 4
OTHERS = 5.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM. " SERV_ORG
*&---------------------------------------------------------------------*
*& Form SET_STAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM set_stat .
*********************8set status**********************
DATA : l_count TYPE i .
LOOP AT lt_item INTO ls_item.
DATA : lt_stat TYPE crmt_status_comt,
ls_stat TYPE crmt_status_com,
lt_fldnames TYPE crmt_input_field_names_tab,
ls_fldnames TYPE crmt_input_field_names.
ls_fldnames-fieldname = 'ACTIVATE'.
INSERT ls_fldnames INTO TABLE lt_fldnames.
l_count = l_count + 1.
ls_stat-ref_handle = l_count.
ls_stat-ref_guid = ls_item-guid.
ls_stat-ref_kind = 'B'.
ls_stat-status = 'I1004'.
ls_stat-activate = 'X'.
INSERT ls_stat INTO TABLE lt_stat.
CALL FUNCTION 'CRM_STATUS_MAINTAIN_OW'
EXPORTING
it_status_com = lt_stat
CHANGING
ct_input_field_names = lt_fldnames
EXCEPTIONS
not_allowed = 1
error_occurred = 2
warning_occurred = 3
OTHERS = 4.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDLOOP.
*************************Set Status********************************
ENDFORM. " SET_STAT

You might also like