(ABAP 코드) EWM Get Item Details
CLASS=/SCWM/CL_DLV_MANAGEMENT_PRD
CALL METHOD me->get_item_details
EXPORTING
io_sp = io_sp
is_exclude_data = ls_exclude_data
is_read_options = ls_read_options
it_sp_k_item = lt_sp_k_item
IMPORTING
et_a_item = lt_a_item
et_a_item_addmeas = lt_a_item_addmeas_t
et_a_item_admin = lt_a_item_admin_t
et_a_item_date = lt_a_item_date_t
et_a_item_product = lt_a_item_product_t
et_a_item_quantity = lt_a_item_quantity_t
et_a_item_delterm = lt_a_item_delterm_t
et_a_item_docflow = lt_a_item_docflow_t
et_a_item_hierarchy = lt_a_item_hierarchy_t
et_a_item_status = lt_a_item_status_t
et_a_item_keymap = lt_a_item_keymap_t
et_a_item_partyloc = lt_a_item_partyloc_t
et_a_item_refdoc = lt_a_item_refdoc_t
et_a_item_stock = lt_a_item_stock_t
et_a_item_text = lt_a_item_text_t
et_a_item_textline = lt_a_item_textline_t
et_a_item_sn = lt_a_item_sn_t
et_a_item_chval_class = lt_a_item_chval_class_t
et_a_item_chval_char = lt_a_item_chval_char_t
et_a_item_chval_num = lt_a_item_chval_num_t
et_a_item_chval_curr = lt_a_item_chval_curr_t
et_a_item_product_ext = lt_a_item_product_ext_t
et_a_item_prcode = lt_a_item_prcode_t
et_a_item_account = lt_a_item_account_t
et_a_item_dg = lt_a_item_dg_t
ev_rejected = lv_rejected
eo_message = lo_message.
METHOD get_item_details .
DATA:
lt_return_codes TYPE /scdl/t_sp_return_code,
lv_tabix TYPE sy-tabix,
lv_dummymsg TYPE bapi_msg,
lo_message_box TYPE REF TO /scdl/cl_sp_message_box,
ls_symsg TYPE symsg,
ls_symsg_cx TYPE scx_t100key,
lv_rejected TYPE boole_d,
lv_rejected_tmp TYPE boole_d.
DATA: lt_a_item_tmp TYPE /scdl/t_sp_a_item,
lt_sp_k_item TYPE /scdl/t_sp_k_item,
ls_sp_k_item TYPE /scdl/s_sp_k_item,
ls_a_item_text TYPE REF TO /scwm/s_sp_a_item_text,
ls_sp_k_item_text TYPE /scwm/s_sp_k_item_text,
lt_sp_k_item_text TYPE /scwm/t_sp_k_item_text,
ls_a_item TYPE REF TO /scdl/s_sp_a_item,
lt_a_head TYPE /scdl/t_sp_a_head,
ls_a_head TYPE REF TO /scdl/s_sp_a_head,
lt_a_item_successor TYPE /scdl/t_sp_a_item_successor,
ls_a_item_docflow TYPE /scdl/s_sp_a_item_docflow.
FIELD-SYMBOLS:
<ls_a_item_successor> TYPE /scdl/s_sp_a_item_successor.
CLEAR et_a_item_addmeas.
CLEAR et_a_item_admin.
CLEAR et_a_item_date.
CLEAR et_a_item_product.
CLEAR et_a_item_quantity.
CLEAR et_a_item_delterm.
CLEAR et_a_item_docflow.
CLEAR et_a_item_hierarchy.
CLEAR et_a_item_status.
CLEAR et_a_item_keymap.
CLEAR et_a_item_partyloc.
CLEAR et_a_item_refdoc.
CLEAR et_a_item_stock.
CLEAR et_a_item_text.
CLEAR et_a_item_textline.
CLEAR et_a_item_sn.
CLEAR et_a_item_chval_class.
CLEAR et_a_item_chval_char.
CLEAR et_a_item_chval_num.
CLEAR et_a_item_chval_curr.
CLEAR et_a_item_product_ext.
CLEAR et_a_item_prcode.
CLEAR et_a_item_account.
CLEAR et_a_item_dg.
CLEAR ev_rejected.
CHECK is_exclude_data-item_all IS INITIAL.
* error if no SP given
IF NOT io_sp IS BOUND.
MESSAGE ID '/SCWM/DELIVERY' TYPE /scwm/cl_dm_message_no=>sc_msgty_error
NUMBER '007' WITH 'SP' INTO lv_dummymsg.
ASSERT ID /scwm/dlv_manager CONDITION 1 = 2.
EXIT.
* ls_symsg_cx = /scwm/cl_dm_message_no=>get_symsg_cx_fields( ).
* RAISE EXCEPTION TYPE /scdl/cx_delivery EXPORTING textid = ls_symsg_cx.
ENDIF.
*create message object
IF NOT eo_message IS BOUND.
CREATE OBJECT eo_message.
ENDIF.
* add messages
lo_message_box = io_sp->get_message_box( ).
IO_SP = /SCDL/CL_SP_PRD_OUT
* read items headers
CLEAR lv_rejected_tmp.
* read specific headers if item keys are given
IF NOT it_sp_k_item IS INITIAL.
CLEAR lt_a_item_tmp.
io_sp->select( EXPORTING
inkeys = it_sp_k_item
aspect = /scdl/if_sp_c=>sc_asp_item
* OPTIONS
IMPORTING
outrecords = lt_a_item_tmp
rejected = lv_rejected_tmp
return_codes = lt_return_codes ).
IF NOT lv_rejected_tmp IS INITIAL.
lv_rejected = lv_rejected_tmp.
ENDIF.
APPEND LINES OF lt_a_item_tmp TO et_a_item.
ENDIF.
* remove duplicates
SORT et_a_item BY itemid.
DELETE ADJACENT DUPLICATES FROM et_a_item COMPARING itemid.
*if no items found, continue.
IF et_a_item IS INITIAL.
EXIT.
ENDIF.
LOOP AT et_a_item REFERENCE INTO ls_a_item.
CLEAR ls_sp_k_item.
ls_sp_k_item-docid = ls_a_item->docid.
ls_sp_k_item-itemid = ls_a_item->itemid.
COLLECT ls_sp_k_item INTO lt_sp_k_item.
ENDLOOP.
* get item admin
CLEAR lv_rejected_tmp.
io_sp->select( EXPORTING
inkeys = lt_sp_k_item
aspect = /scdl/if_sp_c=>sc_asp_item_admin
* OPTIONS
IMPORTING
outrecords = et_a_item_admin
rejected = lv_rejected_tmp
return_codes = lt_return_codes ).
IF NOT lv_rejected_tmp IS INITIAL.
ev_rejected = lv_rejected_tmp.
ENDIF.
* get item delterm
CLEAR lv_rejected_tmp.
io_sp->select( EXPORTING
inkeys = lt_sp_k_item
aspect = /scdl/if_sp_c=>sc_asp_item_delterm
* OPTIONS
IMPORTING
outrecords = et_a_item_delterm
rejected = lv_rejected_tmp
return_codes = lt_return_codes ).
IF NOT lv_rejected_tmp IS INITIAL.
ev_rejected = lv_rejected_tmp.
ENDIF.
* get item product
CLEAR lv_rejected_tmp.
io_sp->select( EXPORTING
inkeys = lt_sp_k_item
aspect = /scdl/if_sp_c=>sc_asp_item_product
* OPTIONS
IMPORTING
outrecords = et_a_item_product
rejected = lv_rejected_tmp
return_codes = lt_return_codes ).
IF NOT lv_rejected_tmp IS INITIAL.
ev_rejected = lv_rejected_tmp.
ENDIF.
* get item qty
CLEAR lv_rejected_tmp.
io_sp->select( EXPORTING
inkeys = lt_sp_k_item
aspect = /scdl/if_sp_c=>sc_asp_item_quantity
* OPTIONS
IMPORTING
outrecords = et_a_item_quantity
rejected = lv_rejected_tmp
return_codes = lt_return_codes ).
IF NOT lv_rejected_tmp IS INITIAL.
ev_rejected = lv_rejected_tmp.
ENDIF.
* stock
CLEAR lv_rejected_tmp.
io_sp->select( EXPORTING
inkeys = lt_sp_k_item
aspect = /scdl/if_sp_c=>sc_asp_item_stock
* OPTIONS
IMPORTING
outrecords = et_a_item_stock
rejected = lv_rejected_tmp
return_codes = lt_return_codes ).
IF NOT lv_rejected_tmp IS INITIAL.
ev_rejected = lv_rejected_tmp.
ENDIF.
* item addmeas
CLEAR lv_rejected_tmp.
IF is_exclude_data-item_addmeas IS INITIAL.
io_sp->select_by_relation( EXPORTING
relation = /scdl/if_sp_c=>sc_rel_item_to_addmeas
inrecords = lt_sp_k_item
aspect = /scdl/if_sp_c=>sc_asp_item
* OPTIONS
IMPORTING
outrecords = et_a_item_addmeas
rejected = lv_rejected_tmp
return_codes = lt_return_codes ).
IF NOT lv_rejected_tmp IS INITIAL.
ev_rejected = lv_rejected_tmp.
ENDIF.
ENDIF.
* get keymap
CLEAR lv_rejected_tmp.
IF is_exclude_data-item_keymap IS INITIAL.
io_sp->select_by_relation(
EXPORTING
relation = /scdl/if_sp_c=>sc_rel_item_to_keymap
inrecords = lt_sp_k_item
aspect = /scdl/if_sp_c=>sc_asp_item
IMPORTING
outrecords = et_a_item_keymap
rejected = lv_rejected_tmp
return_codes = lt_return_codes ).
IF NOT lv_rejected_tmp IS INITIAL.
ev_rejected = lv_rejected_tmp.
ENDIF.
ENDIF.
* get hierarchy
CLEAR lv_rejected_tmp.
IF is_exclude_data-item_hierarchy IS INITIAL.
io_sp->select_by_relation(
EXPORTING
relation = /scdl/if_sp_c=>sc_rel_item_to_hierarchy
inrecords = lt_sp_k_item
aspect = /scdl/if_sp_c=>sc_asp_item
IMPORTING
outrecords = et_a_item_hierarchy
rejected = lv_rejected_tmp
return_codes = lt_return_codes ).
IF NOT lv_rejected_tmp IS INITIAL.
ev_rejected = lv_rejected_tmp.
ENDIF.
ENDIF.
* item date
IF is_exclude_data-item_dates IS INITIAL.
CLEAR lv_rejected_tmp.
io_sp->select_by_relation( EXPORTING
relation = /scdl/if_sp_c=>sc_rel_item_to_date
inrecords = lt_sp_k_item
aspect = /scdl/if_sp_c=>sc_asp_item
* OPTIONS
IMPORTING
outrecords = et_a_item_date
rejected = lv_rejected_tmp
return_codes = lt_return_codes ).
IF NOT lv_rejected_tmp IS INITIAL.
ev_rejected = lv_rejected_tmp.
ENDIF.
ENDIF.
* item partyloc
IF is_exclude_data-item_partyloc IS INITIAL.
CLEAR lv_rejected_tmp.
io_sp->select_by_relation( EXPORTING
relation = /scdl/if_sp_c=>sc_rel_item_to_partyloc
inrecords = lt_sp_k_item
aspect = /scdl/if_sp_c=>sc_asp_item
* OPTIONS
IMPORTING
outrecords = et_a_item_partyloc
rejected = lv_rejected_tmp
return_codes = lt_return_codes ).
IF NOT lv_rejected_tmp IS INITIAL.
ev_rejected = lv_rejected_tmp.
ENDIF.
ENDIF.
* item refdoc
IF is_exclude_data-item_refdoc IS INITIAL.
CLEAR lv_rejected_tmp.
io_sp->select_by_relation( EXPORTING
relation = /scdl/if_sp_c=>sc_rel_item_to_refdoc
inrecords = lt_sp_k_item
aspect = /scdl/if_sp_c=>sc_asp_item
* OPTIONS
IMPORTING
outrecords = et_a_item_refdoc
rejected = lv_rejected_tmp
return_codes = lt_return_codes ).
IF NOT lv_rejected_tmp IS INITIAL.
ev_rejected = lv_rejected_tmp.
ENDIF.
ENDIF.
* item status
IF is_exclude_data-item_status IS INITIAL.
CLEAR lv_rejected_tmp.
io_sp->select_by_relation( EXPORTING
relation = /scdl/if_sp_c=>sc_rel_item_to_status
inrecords = lt_sp_k_item
aspect = /scdl/if_sp_c=>sc_asp_item
* OPTIONS
IMPORTING
outrecords = et_a_item_status
rejected = lv_rejected_tmp
return_codes = lt_return_codes ).
IF NOT lv_rejected_tmp IS INITIAL.
ev_rejected = lv_rejected_tmp.
ENDIF.
ENDIF.
* item docflow
* only read if docflow or countingflga is required (as couting requires docflow data)
CLEAR lv_rejected_tmp.
IF is_exclude_data-item_docflow IS INITIAL .
* read docflow single or multilevel
IF is_read_options-docflow_succ_1level_only = abap_true.
CLEAR lt_a_item_successor.
io_sp->select_by_relation( EXPORTING
relation = /scdl/if_sp_c=>sc_rel_item_to_successor
inrecords = lt_sp_k_item
aspect = /scdl/if_sp_c=>sc_asp_item
* OPTIONS
IMPORTING
outrecords = lt_a_item_successor
rejected = lv_rejected_tmp
return_codes = lt_return_codes ).
LOOP AT lt_a_item_successor ASSIGNING <ls_a_item_successor>.
CLEAR ls_a_item_docflow.
ls_a_item_docflow-docid = <ls_a_item_successor>-docid.
ls_a_item_docflow-itemid = <ls_a_item_successor>-itemid.
ls_a_item_docflow-docidfr = <ls_a_item_successor>-docid.
ls_a_item_docflow-itemidfr = <ls_a_item_successor>-itemid.
ls_a_item_docflow-docidto = <ls_a_item_successor>-docidto.
ls_a_item_docflow-itemidto = <ls_a_item_successor>-itemidto.
ls_a_item_docflow-docnoto = <ls_a_item_successor>-docnoto.
ls_a_item_docflow-itemnoto = <ls_a_item_successor>-itemnoto.
ls_a_item_docflow-bskeyto = <ls_a_item_successor>-bskeyto.
ls_a_item_docflow-doccatto = <ls_a_item_successor>-doccatto.
ls_a_item_docflow-productidto = <ls_a_item_successor>-productidto.
ls_a_item_docflow-productbskeyto = <ls_a_item_successor>-productbskeyto.
ls_a_item_docflow-productnoto = <ls_a_item_successor>-productnoto.
ls_a_item_docflow-item_complto = <ls_a_item_successor>-item_complto.
ls_a_item_docflow-doc_qtyto = <ls_a_item_successor>-doc_qtyto.
ls_a_item_docflow-doc_uomto = <ls_a_item_successor>-doc_uomto.
ls_a_item_docflow-rel_qty = <ls_a_item_successor>-rel_qty.
ls_a_item_docflow-rel_uom = <ls_a_item_successor>-rel_uom.
ls_a_item_docflow-rel_offset_excl = <ls_a_item_successor>-rel_offset_excl.
APPEND ls_a_item_docflow TO et_a_item_docflow.
ENDLOOP.
ELSE.
io_sp->select_by_relation( EXPORTING
relation = /scdl/if_sp_c=>sc_rel_item_to_docflow
inrecords = lt_sp_k_item
aspect = /scdl/if_sp_c=>sc_asp_item
* OPTIONS
IMPORTING
outrecords = et_a_item_docflow
rejected = lv_rejected_tmp
return_codes = lt_return_codes ).
ENDIF.
IF NOT lv_rejected_tmp IS INITIAL.
lv_rejected = lv_rejected_tmp.
ENDIF.
ENDIF.
* item text
IF is_exclude_data-item_text = abap_false.
CLEAR lv_rejected_tmp.
io_sp->select_by_relation( EXPORTING
relation = /scwm/if_sp_c=>sc_rel_item_to_text
inrecords = lt_sp_k_item
aspect = /scdl/if_sp_c=>sc_asp_item
* OPTIONS
IMPORTING
outrecords = et_a_item_text
rejected = lv_rejected_tmp
return_codes = lt_return_codes ).
IF NOT lv_rejected_tmp IS INITIAL.
lv_rejected = lv_rejected_tmp.
ENDIF.
* get textline
IF is_exclude_data-item_textline = abap_false OR is_exclude_data-item_text = abap_false.
CLEAR lt_sp_k_item_text.
LOOP AT et_a_item_text REFERENCE INTO ls_a_item_text.
MOVE-CORRESPONDING ls_a_item_text->* TO ls_sp_k_item_text.
APPEND ls_sp_k_item_text TO lt_sp_k_item_text.
ENDLOOP.
* remove entry to save memory
CLEAR et_a_item_text.
CLEAR lv_rejected_tmp.
IF NOT lt_sp_k_item_text IS INITIAL.
io_sp->select( EXPORTING
inkeys = lt_sp_k_item_text
aspect = /scwm/if_sp_c=>sc_asp_item_textline
* OPTIONS
IMPORTING
outrecords = et_a_item_textline
rejected = lv_rejected_tmp
return_codes = lt_return_codes ).
IF NOT lv_rejected_tmp IS INITIAL.
lv_rejected = lv_rejected_tmp.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
* item serialnumbers
CLEAR lv_rejected_tmp.
IF is_exclude_data-item_serialn IS INITIAL .
io_sp->select_by_relation( EXPORTING
relation = /scwm/if_sp_c=>sc_rel_item_to_sn_query
inrecords = lt_sp_k_item
aspect = /scdl/if_sp_c=>sc_asp_item
* OPTIONS
IMPORTING
outrecords = et_a_item_sn
rejected = lv_rejected_tmp
return_codes = lt_return_codes ).
IF NOT lv_rejected_tmp IS INITIAL.
lv_rejected = lv_rejected_tmp.
ENDIF.
ENDIF.
* item chval
CLEAR lv_rejected_tmp.
IF is_exclude_data-item_chval IS INITIAL .
io_sp->select_by_relation( EXPORTING
relation = /scwm/if_sp_c=>sc_asp_item_chval_class
inrecords = lt_sp_k_item
aspect = /scwm/if_sp_c=>sc_asp_item_chval_class
* OPTIONS
IMPORTING
outrecords = et_a_item_chval_class
rejected = lv_rejected_tmp
return_codes = lt_return_codes ).
IF NOT lv_rejected_tmp IS INITIAL.
lv_rejected = lv_rejected_tmp.
ENDIF.
io_sp->select_by_relation( EXPORTING
relation = /scwm/if_sp_c=>sc_asp_item_chval_char
inrecords = lt_sp_k_item
aspect = /scwm/if_sp_c=>sc_asp_item_chval_char
* OPTIONS
IMPORTING
outrecords = et_a_item_chval_char
rejected = lv_rejected_tmp
return_codes = lt_return_codes ).
IF NOT lv_rejected_tmp IS INITIAL.
lv_rejected = lv_rejected_tmp.
ENDIF.
io_sp->select_by_relation( EXPORTING
relation = /scwm/if_sp_c=>sc_asp_item_chval_num
inrecords = lt_sp_k_item
aspect = /scwm/if_sp_c=>sc_asp_item_chval_num
* OPTIONS
IMPORTING
outrecords = et_a_item_chval_num
rejected = lv_rejected_tmp
return_codes = lt_return_codes ).
IF NOT lv_rejected_tmp IS INITIAL.
lv_rejected = lv_rejected_tmp.
ENDIF.
io_sp->select_by_relation( EXPORTING
relation = /scwm/if_sp_c=>sc_asp_item_chval_curr
inrecords = lt_sp_k_item
aspect = /scwm/if_sp_c=>sc_asp_item_chval_curr
* OPTIONS
IMPORTING
outrecords = et_a_item_chval_curr
rejected = lv_rejected_tmp
return_codes = lt_return_codes ).
IF NOT lv_rejected_tmp IS INITIAL.
lv_rejected = lv_rejected_tmp.
ENDIF.
ENDIF.
* item product ext
CLEAR lv_rejected_tmp.
IF is_exclude_data-item_product_ext IS INITIAL .
io_sp->select_by_relation( EXPORTING
relation = /scdl/if_sp_c=>sc_rel_item_to_product_ext
inrecords = lt_sp_k_item
aspect = /scdl/if_sp_c=>sc_asp_item
* OPTIONS
IMPORTING
outrecords = et_a_item_product_ext
rejected = lv_rejected_tmp
return_codes = lt_return_codes ).
IF NOT lv_rejected_tmp IS INITIAL.
lv_rejected = lv_rejected_tmp.
ENDIF.
ENDIF.
* item prcodes
CLEAR lv_rejected_tmp.
IF is_exclude_data-item_prcode IS INITIAL .
io_sp->select_by_relation( EXPORTING
relation = /scdl/if_sp_c=>sc_rel_item_to_prcodes
inrecords = lt_sp_k_item
aspect = /scdl/if_sp_c=>sc_asp_item
* OPTIONS
IMPORTING
outrecords = et_a_item_prcode
rejected = lv_rejected_tmp
return_codes = lt_return_codes ).
IF NOT lv_rejected_tmp IS INITIAL.
lv_rejected = lv_rejected_tmp.
ENDIF.
ENDIF.
* item account
CLEAR lv_rejected_tmp.
IF is_exclude_data-item_account IS INITIAL .
io_sp->select_by_relation( EXPORTING
relation = /scdl/if_sp_c=>sc_rel_item_to_account
inrecords = lt_sp_k_item
aspect = /scdl/if_sp_c=>sc_asp_item
* OPTIONS
IMPORTING
outrecords = et_a_item_account
rejected = lv_rejected_tmp
return_codes = lt_return_codes ).
IF NOT lv_rejected_tmp IS INITIAL.
lv_rejected = lv_rejected_tmp.
ENDIF.
ENDIF.
* item DG
CLEAR lv_rejected_tmp.
IF is_exclude_data-item_dg IS INITIAL .
io_sp->select_by_relation( EXPORTING
relation = /scwm/if_sp_c=>sc_rel_item_to_dg
inrecords = lt_sp_k_item
aspect = /scdl/if_sp_c=>sc_asp_item
* OPTIONS
IMPORTING
outrecords = et_a_item_dg
rejected = lv_rejected_tmp
return_codes = lt_return_codes ).
IF NOT lv_rejected_tmp IS INITIAL.
lv_rejected = lv_rejected_tmp.
ENDIF.
ENDIF.
* item wm split
* auskommentiert von MK da Aspekt für diesen Serviceprovider nicht definiert ist
* CLEAR lv_rejected_tmp.
* io_sp->select_by_relation( EXPORTING
* relation = /scwm/if_sp_c=>sc_rel_item_to_addin_split
* inrecords = lt_sp_k_item
* aspect = /scdl/if_sp_c=>sc_asp_item
** OPTIONS
* IMPORTING
* outrecords = et_a_item_addin_split
* rejected = lv_rejected_tmp
* return_codes = lt_return_codes ).
* IF NOT lv_rejected_tmp IS INITIAL.
* ev_rejected = lv_rejected_tmp.
* ENDIF.
ENDMETHOD.