{"id":7678,"date":"2025-08-30T21:41:31","date_gmt":"2025-08-30T16:11:31","guid":{"rendered":"https:\/\/www.sapewmhelp.com\/?post_type=question&#038;p=7678"},"modified":"2025-08-30T21:42:35","modified_gmt":"2025-08-30T16:12:35","slug":"update-custom-fields-in-outbound-delivery-order-sap-ewm","status":"publish","type":"question","link":"https:\/\/www.sapewmhelp.com\/?question=update-custom-fields-in-outbound-delivery-order-sap-ewm","title":{"rendered":"Update custom fields in Outbound Delivery Order SAP EWM"},"content":{"rendered":"\n<p>The code handles <strong>EWM Outbound Delivery processing<\/strong> in SAP.<br>It retrieves ERP delivery information, maps it to the EWM warehouse, locks and reads the delivery, updates extension fields (blocks, texts), and finally saves or rolls back changes with proper error handling.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code> DATA: lv_bskey          TYPE sld_bskey,\n        lt_items          TYPE \/scdl\/t_sp_a_item,\n        lt_a_head         TYPE \/scdl\/t_sp_a_head,\n        ls_sp_action      TYPE \/scdl\/s_sp_act_action,\n        lt_sp_k_head      TYPE \/scdl\/t_sp_k_head,\n        ls_include_data   TYPE \/scwm\/dlv_query_incl_str_prd,\n        ls_dlv_sel        TYPE \/scwm\/dlv_selection_str,\n        ls_read_options   TYPE \/scwm\/dlv_query_contr_str,\n        lt_dlv_sel        TYPE \/scwm\/dlv_selection_tab,\n        lt_a_head_eew     TYPE \/scdl\/t_sp_a_head_eew_prd,\n        lt_a_head_eew_out TYPE \/scdl\/t_sp_a_head_eew_prd,\n        lt_a_item         TYPE \/scdl\/t_sp_a_item,\n        lt_sp_k_item      TYPE \/scdl\/t_sp_k_item.\n\n  DATA: lo_sp  TYPE REF TO \/scdl\/cl_sp_prd_out,\n        lo_dlv TYPE REF TO \/scwm\/cl_dlv_management_prd.\n\n* get business system key for sender\n  SELECT SINGLE bskey\n    FROM \/scmb\/tbussys\n    INTO @DATA(lv_erpbskey)\n    WHERE logsys EQ @iv_sender.\n\n  IF sy-subrc IS INITIAL AND lv_erpbskey IS NOT INITIAL.\n* Read warehouse mapping\n    SELECT *\n      FROM \/scwm\/tmapwhnum\n      INTO TABLE @DATA(lt_tmapwhnum)\n      WHERE erpbskey EQ @lv_erpbskey\n        AND whnumerp EQ @iv_erplgnum.\n\n    IF sy-subrc IS INITIAL.\n      &quot; Get warehouse\n      DATA(lv_lgnum) = VALUE #( lt_tmapwhnum[ 1 ]-whnumwme OPTIONAL ).\n    ELSE.\n      &quot; Error to fail queue\n      MESSAGE e006(zewm_nvda).\n    ENDIF.\n\n  ELSE.\n    &quot; Error to fail queue\n    MESSAGE e006(zewm_nvda).\n  ENDIF.\n\n* create delivery object\n  lo_dlv = \/scwm\/cl_dlv_management_prd=&gt;get_instance( ).\n\n* query deliveries\n  lt_dlv_sel = VALUE #( &quot; Warehouse number\n                        ( fieldname = \/scwm\/if_dl_logfname_c=&gt;sc_whno_i\n                          sign      = wmegc_sign_inclusive\n                          option    = wmegc_option_eq\n                          low       = lv_lgnum )\n                        &quot; ERP delivery\n                        ( fieldname = \/scdl\/if_dl_logfname_c=&gt;sc_refdocno_erp_h\n                          sign      = wmegc_sign_inclusive\n                          option    = wmegc_option_eq\n                          low       = iv_del_no ) ).\n\n  ls_read_options = VALUE #( data_retrival_only      = abap_true\n                             mix_in_object_instances = \/scwm\/if_dl_c=&gt;sc_mix_in_load_instance ).\n\n* @raman, please copy logic from \/SCWM\/WHRHEAD_MON_OUT_COMMON for the below code\n  ls_include_data = VALUE #( head_status            = abap_true\n                             head_status_dyn        = &#39;Y&#39;\n                             item_status            = abap_true\n                             head_status_dyn_detail = VALUE #( ( \/scdl\/if_dl_status_c=&gt;sc_t_packing )           &quot; Packing status (DPC)\n                                                               ( \/scdl\/if_dl_status_c=&gt;sc_t_picking )           &quot; Picking status (DPI)\n                                                               ( \/scdl\/if_dl_status_c=&gt;sc_t_picking_dist )      &quot; Picking and Distribution status (DPD)\n                                                               ( \/scdl\/if_dl_status_c=&gt;sc_t_loading )           &quot; Loading status (DLO)\n                                                               ( \/scdl\/if_dl_status_c=&gt;sc_t_goods_issue ) ) ).  &quot; Goods issue status (DGI)\n\n* Call delivery manager\n  TRY.\n      CALL METHOD lo_dlv-&gt;query\n        EXPORTING\n          it_selection    = lt_dlv_sel\n          iv_doccat       = &#39;PDO&#39;\n          is_read_options = ls_read_options\n          is_include_data = ls_include_data\n        IMPORTING\n          et_headers      = DATA(lt_prd_hdr)\n          et_items        = DATA(lt_items_prd).\n\n    CATCH \/scdl\/cx_delivery.                            &quot;#EC NO_HANDLER\n      &quot; Error to fail queue\n      MESSAGE e007(zewm_nvda).\n  ENDTRY.\n\n* read header\n  DATA(ls_hdr) = VALUE #( lt_prd_hdr[ 1 ] OPTIONAL ).\n  IF ls_hdr IS NOT INITIAL.\n    &quot; Fill GUID of delivery header\n    APPEND VALUE #( docid = ls_hdr-docid ) TO lt_sp_k_head.\n  ELSE.\n    &quot; Error to fail queue\n    MESSAGE e007(zewm_nvda).\n  ENDIF.\n\n  lt_sp_k_item = VALUE #( FOR ls_item IN lt_items_prd\n                          ( docid  = ls_item-docid\n                            itemid = ls_item-itemid ) ).\n\n* create service provider\n  DATA(lo_message_box) = NEW \/scdl\/cl_sp_message_box( ).\n\n  CREATE OBJECT lo_sp\n    EXPORTING\n      io_message_box = lo_message_box\n      iv_doccat      = \/scdl\/if_dl_doc_c=&gt;sc_doccat_out_prd\n      iv_mode        = \/scdl\/cl_sp=&gt;sc_mode_classic.\n\n* get real warehouse dont hardcode\n  \/scwm\/cl_tm=&gt;set_lgnum( lv_lgnum ).\n\n* lock dlv\n  lo_sp-&gt;lock(\n    EXPORTING\n      inkeys       = lt_sp_k_head\n      aspect       = \/scdl\/if_sp_c=&gt;sc_asp_head\n      lockmode     = \/scdl\/if_sp1_locking=&gt;sc_exclusive_lock\n    IMPORTING\n      rejected     = DATA(lv_rejected)\n      return_codes = DATA(lt_return_codes) ).\n\n  &quot; Check if any error occurred\n  IF line_exists( lt_return_codes[ failed = abap_true ] ) OR lv_rejected EQ abap_true.\n*    RETURN.&quot; handle error in real program\n    &quot; Error to fail queue\n    MESSAGE e008(zewm_nvda).\n  ENDIF.\n\n\n* reading item to avoid short dump in \/SCWM\/CL_DLV_MSL_FILL_PRD_OUTB\n* method DET_MSG_DSH_H line number 16, item data is bnot needed in our logic\n  lo_sp-&gt;select( EXPORTING inkeys       = lt_sp_k_item\n                           aspect       = \/scdl\/if_sp_c=&gt;sc_asp_item\n                 IMPORTING outrecords   = lt_a_item\n                           rejected     = lv_rejected\n                           return_codes = lt_return_codes ).\n\n  &quot; Check if any error occurred\n  IF line_exists( lt_return_codes[ failed = abap_true ] ) OR lv_rejected EQ abap_true.\n*    RETURN.&quot; handle error in real program\n    &quot; Error to fail queue\n    MESSAGE e009(zewm_nvda).\n  ENDIF.\n\n  lo_sp-&gt;select(\n    EXPORTING\n      inkeys       = lt_sp_k_head\n      aspect       = \/scdl\/if_sp_c=&gt;sc_asp_head_eew_prd\n    IMPORTING\n      outrecords   = lt_a_head_eew\n      rejected     = lv_rejected\n      return_codes = lt_return_codes ).\n\n  &quot; Check if any error occurred\n  IF line_exists( lt_return_codes[ failed = abap_true ] ) OR lv_rejected EQ abap_true.\n*    RETURN.&quot; handle error in real program\n    &quot; Error to fail queue\n    MESSAGE e010(zewm_nvda).\n  ENDIF.\n\n  LOOP AT lt_a_head_eew ASSIGNING FIELD-SYMBOL(&lt;ls_a_head_eew&gt;).\n    LOOP AT it_extension INTO DATA(ls_ext2).\n        IF ls_ext2-field = &#39;DNBLK&#39;.\n          &lt;ls_a_head_eew&gt;-zzdel_block = ls_ext2-value.\n\n        ELSEIF ls_ext2-field = &#39;CRBLK&#39;.\n         &lt;ls_a_head_eew&gt;-zzcred_block = ls_ext2-value.\n\n        ELSEIF ls_ext2-field = &#39;DNBLK_TXT&#39;.\n          &lt;ls_a_head_eew&gt;-zzdel_block_text = ls_ext2-value.\n\n        ELSEIF ls_ext2-field = &#39;CRBLK_TXT&#39;.\n          &lt;ls_a_head_eew&gt;-zzcred_block_text = ls_ext2-value.\n        ENDIF.\n    ENDLOOP.\n  ENDLOOP.\n\n  lo_sp-&gt;update(\n    EXPORTING\n      inrecords    = lt_a_head_eew\n      aspect       = \/scdl\/if_sp_c=&gt;sc_asp_head_eew_prd\n    IMPORTING\n      outrecords   = lt_a_head_eew_out\n      rejected     = lv_rejected\n      return_codes = lt_return_codes ).\n\n  &quot; Check if any error occurred\n  IF line_exists( lt_return_codes[ failed = abap_true ] ) OR lv_rejected EQ abap_true.\n    &quot; Error to fail queue\n    MESSAGE e011(zewm_nvda).\n  ENDIF.\n\n  lo_sp-&gt;save(\n    IMPORTING\n      rejected = lv_rejected ).\n\n* Commit \/ rollback based on errors\n  IF lv_rejected IS INITIAL.\n    CALL FUNCTION &#39;BAPI_TRANSACTION_COMMIT&#39;\n      EXPORTING\n        wait = abap_true.\n\n    CALL METHOD lo_sp-&gt;(&#39;CLEANUP&#39;)\n      EXPORTING\n        reason = \/scmb\/if_sp_transaction=&gt;sc_cleanup_commit.\n    &quot; Clear buffers and release locks\n    \/scwm\/cl_tm=&gt;cleanup( ).\n\n  ELSE.\n    CALL FUNCTION &#39;BAPI_TRANSACTION_ROLLBACK&#39;.\n    &quot; Clear buffers and release locks\n    \/scwm\/cl_tm=&gt;cleanup( ).\n    MESSAGE e012(zewm_nvda).\n  ENDIF.<\/code><\/pre><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","template":"","question-category":[158],"question_tags":[403,404,178,405,406,177,402],"class_list":["post-7678","question","type-question","status-publish","hentry","question-category-abap","question_tags-scdl-cl_sp_prd_out","question_tags-scwm-cl_dlv_management_prd","question_tags-abap","question_tags-lo_sp-select","question_tags-lo_sp-update","question_tags-sap","question_tags-update-custom-fields-using-aspect"],"_links":{"self":[{"href":"https:\/\/www.sapewmhelp.com\/index.php?rest_route=\/wp\/v2\/question\/7678","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sapewmhelp.com\/index.php?rest_route=\/wp\/v2\/question"}],"about":[{"href":"https:\/\/www.sapewmhelp.com\/index.php?rest_route=\/wp\/v2\/types\/question"}],"author":[{"embeddable":true,"href":"https:\/\/www.sapewmhelp.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sapewmhelp.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7678"}],"wp:attachment":[{"href":"https:\/\/www.sapewmhelp.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7678"}],"wp:term":[{"taxonomy":"question-category","embeddable":true,"href":"https:\/\/www.sapewmhelp.com\/index.php?rest_route=%2Fwp%2Fv2%2Fquestion-category&post=7678"},{"taxonomy":"question_tags","embeddable":true,"href":"https:\/\/www.sapewmhelp.com\/index.php?rest_route=%2Fwp%2Fv2%2Fquestion_tags&post=7678"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}