FulfillmentOrder -> FulfillmentOrders
Shipments -> shipment (From ecc inbound)
Receipt -> Receipts (From ecc inbound)
ECC
save_and_publish_document
 METHOD if_ex_le_shp_delivery_proc~save_and_publish_document.
************************************************************************
* Class Method name : IF_EX_LE_SHP_DELIVERY_PROC~ *
* SAVE_AND_PUBLISH_DOCUMENT *
* Online/Batch : ONLINE/BATCH *
* Date : 01/18/2018 *
* Transport no. : DEVK943253 *
* Description : WMS Integration - Fulfillment Order Interface *
* Trigger delivery proxy *
*----------------------------------------------------------------------*
* Changes (History) *
*----------------------------------------------------------------------*
* Date Name Transport no. Description *
*----------------------------------------------------------------------*
* 01/18/2018 Smita Patel DEVK943253 Initial Program *
************************************************************************
* Data declaration
 TYPES:
 BEGIN OF ty_vbkd,
 zterm TYPE vbkd-zterm,
 bstkd TYPE vbkd-bstkd,
 bstdk TYPE bstdk,
 END OF ty_vbkd.
 TYPES:
 BEGIN OF ty_vbak,
 bname TYPE vbak-bname,
 telf1 TYPE vbak-telf1,
 END OF ty_vbak.
 TYPES:
 BEGIN OF ty_adrc,
 kunnr TYPE kna1-kunnr,
 addrnumber TYPE adrc-addrnumber,
 name1 TYPE adrc-name1,
 street TYPE adrc-street,
 city1 TYPE adrc-city1,
 region TYPE adrc-region,
 post_code1 TYPE adrc-post_code1,
 country TYPE adrc-country,
 END OF ty_adrc.
 TYPES:
 tt_adrc TYPE STANDARD TABLE OF ty_adrc.
 TYPES:
 BEGIN OF ty_vbap,
 vbeln TYPE vbap-vbeln,
 posnr TYPE vbap-posnr,
 kwmeng TYPE vbap-kwmeng,
 END OF ty_vbap,
 BEGIN OF t_matnr,
 matnr TYPE matnr,
 END OF t_matnr.
 TYPES:
 tt_vbap TYPE STANDARD TABLE OF ty_vbap.
 DATA: lt_vbap TYPE tt_vbap.
 DATA: ls_vbap LIKE LINE OF lt_vbap.
 DATA: lt_adrc TYPE tt_adrc.
 DATA: ls_adrc LIKE LINE OF lt_adrc.
 DATA: ls_vbak TYPE ty_vbak.
 DATA: ls_xlikp LIKE LINE OF it_xlikp.
 DATA: ls_xlips LIKE LINE OF it_xlips.
 DATA: ls_vbkd TYPE ty_vbkd.
 DATA: ls_xvbpa_ag LIKE LINE OF it_xvbpa.
 DATA: ls_xvbpa_we LIKE LINE OF it_xvbpa.
 DATA: lv_tdname TYPE thead-tdname.
 DATA: lt_filter_werks TYPE RANGE OF lips-werks.
 DATA: lv_timestamp TYPE xsddatetime_z.
 DATA: ls_header TYPE zvdc_dlv_dt_summit_fulfillment. " Proxy Header
 DATA: lt_detail TYPE zvdc_dlv_dt_summit_fulfill_tab. " Proxy Item
 DATA: ls_detail LIKE LINE OF lt_detail.
 DATA: ls_output TYPE zvdc_dlv_mt_summit_fulfillment.
 DATA: lo_delv_ob_proxy TYPE REF TO zvdc_dlv_co_si_summit_fulfillm.
 DATA: lo_sys_fault TYPE REF TO cx_ai_system_fault.
 DATA: lv_object TYPE balobj_d,
 lv_subobject TYPE balsubobj,
 lv_extnumber TYPE balnrext.
* STO Orders
 DATA: l_menge TYPE bstmg,
 l_zbom_exist TYPE char01,
 lt_svc_matnr TYPE SORTED TABLE OF t_matnr WITH UNIQUE KEY matnr.
 READ TABLE it_xlikp INTO ls_xlikp INDEX 1.
 READ TABLE it_xlips INTO ls_xlips INDEX 1.
* Comment out the below code as someone changed their opinion :)
* IF ls_xlikp-lfart <> 'NL' AND
* ls_xlikp-lfart <> 'ZNLB' AND
* ls_xlikp-lfart <> 'ZNL'.
 "condition to proceed
 SELECT sign opti low high
 INTO TABLE lt_filter_werks
 FROM tvarvc
 WHERE name = 'ZVDC_PLANT'.
 IF ls_xlips-werks NOT IN lt_filter_werks.
 RETURN.
 ENDIF.
* ENDIF.
*-------------------- Send Delivery Information ---------------------------*
* Get all service items to exclude down in the code.
 SELECT matnr FROM mvke
 INTO TABLE lt_svc_matnr
 WHERE mtpos = 'DIEN'.
* Get payment terms
 SELECT SINGLE
 zterm
 bstkd
 INTO ls_vbkd
 FROM vbkd
 WHERE vbeln = ls_xlips-vgbel
 AND posnr = '000000'.
 SELECT SINGLE
 bname
 telf1
 INTO ls_vbak
 FROM vbak
 WHERE vbeln = ls_xlips-vgbel.
* Get order details
 SELECT vbeln
 posnr
 kwmeng
 INTO TABLE lt_vbap
 FROM vbap
 FOR ALL ENTRIES IN it_xlips
 WHERE vbeln = it_xlips-vgbel
 AND posnr = it_xlips-vgpos.
 IF ls_xlikp-updkz = 'D'. "Delete code
 ls_header-delete_code = 'Y'.
 ENDIF.
* Fill Header output
 ls_header-host_priority = ls_xlikp-lprio.
 ls_header-warehouse = ls_xlikp-vstel.
 ls_header-order_number = ls_xlikp-vbeln.
 ls_header-customer_number = ls_xlikp-kunnr.
* Timestamp for the creation date / time
 CONVERT DATE ls_xlikp-erdat TIME ls_xlikp-erzet
 INTO TIME STAMP lv_timestamp
 TIME ZONE sy-zonlo.
 ls_header-date_ordered = lv_timestamp.
 ls_header-payment_terms_code = ls_vbkd-zterm.
 ls_header-shipment_terms_code = ls_xlikp-inco1.
 ls_header-carrier_code = ls_xlikp-vsart.
 ls_header-customer_ponumber = ls_vbkd-bstkd.
 ls_header-date_promised = ls_vbkd-bstdk. " Customer expected date.
 READ TABLE it_xvbpa INTO ls_xvbpa_ag WITH KEY parvw = 'AG'. "Sold To
 READ TABLE it_xvbpa INTO ls_xvbpa_we WITH KEY parvw = 'WE'. "Ship To
 SELECT k~kunnr " Customer Address
 a~addrnumber
 a~name1
 a~street
 a~city1
 a~region
 a~post_code1
 a~country
 INTO TABLE lt_adrc
 FROM kna1 AS k
 INNER JOIN adrc AS a
 ON k~adrnr = a~addrnumber
 WHERE ( kunnr = ls_xvbpa_ag-kunnr
 OR kunnr = ls_xvbpa_we-kunnr ).
 READ TABLE lt_adrc INTO ls_adrc WITH KEY kunnr = ls_xvbpa_ag-kunnr.
 IF sy-subrc EQ 0.
 ls_header-customer_soldto_name = ls_adrc-name1.
 ls_header-customer_soldto_address1 = ls_adrc-street.
 ls_header-customer_soldto_city = ls_adrc-city1.
 ls_header-customer_soldto_state = ls_adrc-region.
 ls_header-customer_soldto_zip = ls_adrc-post_code1.
 ls_header-customer_soldto_country = ls_adrc-country.
 ENDIF.
 READ TABLE lt_adrc INTO ls_adrc WITH KEY kunnr = ls_xvbpa_we-kunnr.
 IF sy-subrc EQ 0.
 ls_header-customer_shipto_name = ls_adrc-name1.
 ls_header-customer_shipto_address1 = ls_adrc-street.
 ls_header-customer_shipto_city = ls_adrc-city1.
 ls_header-customer_shipto_state = ls_adrc-region.
 ls_header-customer_shipto_zip = ls_adrc-post_code1.
 ls_header-customer_shipto_country = ls_adrc-country.
 ENDIF.
 ls_header-contact_name = ls_vbak-bname.
 ls_header-contact_phone_number = ls_vbak-telf1.
 ls_header-order_type = ls_xlikp-lfart.
 ls_header-user_name = ls_xlikp-ernam.
* Read Header Text
 ls_header-warehouse_message = s_proxy_header-warehouse_message.
 ls_header-customer_message = s_proxy_header-customer_message.
 ls_header-sales_order_number = ls_xlips-vgbel.
* Fill Item details
 LOOP AT it_xlips INTO ls_xlips.
* Do not send Lot price items to WLINK - NTDC Issue list Line 23.
 IF ls_xlips-pstyv = 'ZHBI' OR
 ls_xlips-pstyv = 'ZHTS'.
 CLEAR: ls_xlips. CONTINUE.
 ENDIF.
* Exclude service items from the xml.
 READ TABLE lt_svc_matnr WITH TABLE KEY matnr = ls_xlips-matnr TRANSPORTING NO
FIELDS.
 IF sy-subrc = 0.
 CLEAR: ls_xlips. CONTINUE.
 ENDIF.
 IF ls_xlips-updkz = 'D'. "Delete code
 ls_detail-delete_code = 'Y'.
 ENDIF.
 ls_detail-order_number = ls_xlips-vbeln.
 ls_detail-line_number = ls_xlips-posnr.
 ls_detail-item_number = ls_xlips-matnr.
 ls_detail-item_status = ls_xlips-lgort.
 ls_detail-uom = ls_xlips-meins.
* Make sure BOM, KIT and TEXT Items are sent by the WLINK requirements.
* Send ENDOFKIT where there is a text and no material exist for KIT items
* Send ship complete indicator for KIT items.
 IF ls_xlips-pstyv = 'ZBOM'.
 l_zbom_exist = 'X'.
 ENDIF.
 IF ls_xlips-pstyv = 'TEXT' AND
 l_zbom_exist = 'X' AND
 ls_xlips-arktx CP 'end*of*kit*'.
 CLEAR: l_zbom_exist.
 ls_detail-item_number = 'ENDOFKIT'.
 ENDIF.
* Also send the order quantity for PO's - STO
* This should always equal to PO Qty.
 IF ls_xlips-vgtyp = 'V'. "PO's.
 CLEAR: l_menge.
 SELECT SINGLE menge INTO l_menge FROM ekpo
 WHERE ebeln = ls_xlips-vgbel
 AND ebelp = ls_xlips-vgpos.
 IF sy-subrc EQ 0.
 ls_detail-qty_ordered = l_menge.
 ENDIF.
 ENDIF.
 READ TABLE lt_vbap INTO ls_vbap
 WITH KEY vbeln = ls_xlips-vgbel
 posnr = ls_xlips-vgpos.
 IF sy-subrc EQ 0.
 ls_detail-qty_ordered = ls_vbap-kwmeng.
 ENDIF.
 ls_detail-qty_released = ls_xlips-lfimg.
 ls_detail-lot_number = ls_xlips-charg.
************************** Revisit this part of the code *********************
* Can this be used for ship complete - kit items?
* What is WLINK is using for now.
********** 3/26/18 - Removed this line of code as ship complete indicator is not a
********** requirement in WLINK.
* ls_detail-line_complete = ls_xlips-kztlf.
********** End of code changes on 3/26/18.
************************** Revisit this part of the code *********************
* Read warehouse text and customer Text
 READ TABLE t_proxy_detail INTO DATA(ls_proxy_detail) WITH KEY line_number =
ls_detail-line_number.
 IF sy-subrc EQ 0.
 ls_detail-warehouse_message = ls_proxy_detail-warehouse_message.
 ls_detail-customer_message = ls_proxy_detail-customer_message.
 ENDIF.
 APPEND ls_detail TO lt_detail.
 CLEAR ls_detail.
 ENDLOOP.
* pass data to Proxy
 ls_output-mt_summit_fulfillment_order-fulfillment_order-header-item =
ls_header.
 ls_output-mt_summit_fulfillment_order-fulfillment_order-detail-item =
lt_detail.
* Generate proxy - Send Delivery information to WLINK. Only upon delivery creation.
 IF if_trtyp = 'H'. " Only on delivery creation.
 TRY.
 CREATE OBJECT lo_delv_ob_proxy.
 lo_delv_ob_proxy->si_summit_fulfillment_order_ou( ls_output ).
 CATCH cx_ai_system_fault INTO lo_sys_fault.
 "write into application log
 lv_object = 'ZVDC_INTF'.
 lv_subobject = 'FULFILLMENT_ORD'.
 lv_extnumber = ls_xlikp-vbeln.
 DATA(lo_msg_list) =
 cf_reca_message_list=>create( id_object = lv_object
 id_subobject = lv_subobject
 id_extnumber = lv_extnumber ).
 lo_msg_list->add_from_exception( lo_sys_fault ).
 lo_msg_list->store( ).
 ENDTRY.
 ENDIF.
*-------------------- Send PGI information ---------------------------*
* Always if there is a PGI ????
 _call_erp_ship_order_proxy(
 it_xlikp = it_xlikp
 it_xvbuk = it_xvbuk
 ).
ENDMETHOD.