Hi Bala krishna,
I have the similar requirement where i have to restrict the items based on channel_type and fullfilment_type zfields values from indirect quote.
the logic is below, the problem i am facing is the copy badi is copying all the items instead of restricting them to the condition..
condition is channel_type = 2 & fullfilment_type = 2 then it should not allow the items to copy but the order is having all the items copied..
please help me as i am CLEARINGcs_orderadm_i but items are getting copied to order.
DATA: lt_header_guid TYPE crmt_object_guid_tab,
ls_header_guid TYPE crmt_object_guid,
lv_distributor_no TYPE crmt_partner_no,
ls_orderadm_i TYPE crmt_orderadm_i_badi,
lv_item_type TYPE crmt_item_type_db,
ls_input_fields TYPE crmt_input_field_names_tab,
lt_partner_h TYPE crmt_partner_external_wrkt,
lw_partner_h TYPE crmt_partner_external_wrk,
* lt_product_i TYPE crmt_product_i_wrkt,
* lw_product_i TYPE CRMT_PRODUCT_I_WRK,
lt_orderadm_h TYPE crmt_orderadm_h_wrkt,
lw_orderadm_h TYPE crmt_orderadm_h_wrk,
lt_ref_orderadm_i TYPE crmt_orderadm_i_wrkt,
lw_ref_orderadm_i TYPE crmt_orderadm_i_wrk,
lv_chnl_type TYPE zadtel0000my,
lv_ff_type TYPE zadtel0000cb,
lv_fct TYPE crmt_partner_fct,
w_req_objects TYPE crmt_object_name,
t_req_objects TYPE crmt_object_name_tab.
* CONSTANTS : c_orderadm_h(10) TYPE c VALUE 'ORDERADM_H' ,
* c_orderadm_i(10) TYPE c VALUE 'ORDERADM_I' ,
* c_partner_h(8) TYPE c VALUE 'PARTNER' .
* c_part_fun_disti TYPE crmt_partner_fct VALUE 'ZR000001'.
**Orderadm_h
* CLEAR w_req_objects.
* MOVE c_orderadm_h TO w_req_objects.
* INSERT w_req_objects INTO TABLE t_req_objects.
*
**orderadm_i
* CLEAR w_req_objects.
* MOVE c_orderadm_i TO w_req_objects.
* INSERT w_req_objects INTO TABLE t_req_objects.
*
**partner_h
* CLEAR w_req_objects.
* MOVE c_partner_h TO w_req_objects.
* INSERT w_req_objects INTO TABLE t_req_objects.
ls_orderadm_i = cs_orderadm_i.
ls_input_fields = ct_input_field_names.
ls_header_guid = is_ref_orderadm_i-header.
APPEND ls_header_guid TO lt_header_guid.
CALL FUNCTION 'CRM_ORDER_READ' "CRM_ORDER_READ fm
EXPORTING
it_header_guid = lt_header_guid
* it_requested_objects = t_req_objects
* iv_mode = 'C'
IMPORTING
et_orderadm_h = lt_orderadm_h
et_orderadm_i = lt_ref_orderadm_i
et_partner = lt_partner_h
* et_product_i = lt_product_i
EXCEPTIONS
document_not_found = 1
error_occurred = 2
document_locked = 3
no_change_authority = 4
no_display_authority = 5
no_change_allowed = 6
OTHERS = 7.
IF sy-subrc = 0.
* Get partner for distribution channel
READ TABLE lt_partner_h INTO lw_partner_h WITH KEY partner_fct = 'ZR000001'.
IF sy-subrc = 0.
lv_distributor_no = lw_partner_h-partner_no.
lv_fct = lw_partner_h-partner_fct.
ENDIF.
*Get Distribution Channel, fulfillment type and item category
READ TABLE lt_orderadm_h INTO lw_orderadm_h WITH KEY guid = ls_header_guid.
IF sy-subrc = 0.
lv_chnl_type = lw_orderadm_h-zz_chanl_typ.
ENDIF.
lv_ff_type = is_ref_orderadm_i-zz_fulfilmnt_typ.
lv_item_type = is_ref_orderadm_i-itm_type.
ENDIF.
* IF ( lv_item_type = 'ZBAS' ). "or ( lv_item_type is not initial ) .
CASE lv_chnl_type.
WHEN 03.
* IF ( lv_fct IS INITIAL ). "AND ( lv_ff_type IS INITIAL ).
IF ( lv_fct IS INITIAL ).
CLEAR:cs_orderadm_i.
REFRESH: ct_input_field_names.
cs_orderadm_i = ls_orderadm_i.
ct_input_field_names = ls_input_fields.
* ELSEIF ( lv_fct IS NOT INITIAL ). "AND ( lv_ff_type IS INITIAL ).
ELSEIF ( lv_fct IS NOT INITIAL ).
CLEAR:cs_orderadm_i.
REFRESH: ct_input_field_names.
ENDIF.
WHEN 02.
IF "( lv_fct IS INITIAL ) AND
( lv_ff_type = '01' ).
CLEAR:cs_orderadm_i.
REFRESH: ct_input_field_names .
cs_orderadm_i = ls_orderadm_i.
ct_input_field_names = ls_input_fields.
ELSEIF "( lv_fct IS INITIAL ) AND
( lv_ff_type = '02' ).
CLEAR: cs_orderadm_i.
REFRESH: ct_input_field_names.
ENDIF.
ENDCASE.
* ENDIF.