SAP/ABAP 코드

(ABAP 코드) EWM Get Item Details

haramang 2022. 10. 29. 14:09

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.

  DATAlt_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 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->selectEXPORTING
      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->selectEXPORTING
    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->selectEXPORTING
    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->selectEXPORTING
    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->selectEXPORTING
    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->selectEXPORTING
    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_relationEXPORTING
      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_relationEXPORTING
      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_relationEXPORTING
      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_relationEXPORTING
      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_relationEXPORTING
      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_relationEXPORTING
        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_relationEXPORTING
        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_relationEXPORTING
      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->selectEXPORTING
          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_relationEXPORTING
      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_relationEXPORTING
      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_relationEXPORTING
      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_relationEXPORTING
      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_relationEXPORTING
      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_relationEXPORTING
      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_relationEXPORTING
      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_relationEXPORTING
      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_relationEXPORTING
      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.