Categories: ABAP Tutorials

SAP Process Order Idoc Outound – SAP IDOC LOIPRO (Sample ABAP)

SAP Process Order Idoc Outound: Sample ABAP is the last part of LOIPRO IDoc.

It will covers a sample ABAP code how to generate LOIPRO IDoc including preparing Data and calling the CLOI* BAPI to create a LOIPRO Idoc.

SAP Process Order Idoc Outound: Trigger LOIPRO IDoc when Save

Check more detail on How To trigger IDOC LOIPRO when PO Changed/Created.

The BADI to be implemented is WORKORDER_UPDATE and the method is AT_SAVE

METHOD if_ex_workorder_update~at_save.
  " SAP Process Order Idoc Outound when PO/WO Saved
  CALL FUNCTION 'ZIDOC_CREATE_ZLOIPRO' IN BACKGROUND TASK
  AS SEPARATE UNIT DESTINATION 'NONE'
       EXPORTING
            message_type = 'ZLOIPRO'
            aufnr        = is_header_dialog-aufnr
            werks        = is_header_dialog-werks
            matnr        = is_header_dialog-matnr.

ENDMETHOD.

SAP Process Order Idoc Outound: Prepare Data

Before calling the standard function CLOI_MASTERIDOC_CREATE_LOIPRO to create the LOIPRO01 IDoc for SAP Process Order Master, some structure must be filled.

Related Post

Get here How to Get SAP Process Order Status

Here a sample ABAP code to fill the ORDER_DATA TYPE CLOI_AFKO_TAB

  DATA: lt_order_data TYPE  cloi_afko_tab.
  DATA: ls_order_data TYPE  cloi_afko_struct.
*----------------------------------------------------------*
*  " Fill Order Data for SAP Process Order Idoc Outound
*----------------------------------------------------------*
  TYPES: BEGIN OF ty_jest,
     stat LIKE jest-stat ,
     END OF ty_jest.

  " Retrieve PO Master Data
  DATA: ls_afko TYPE afko.
  DATA: ls_aufk TYPE aufk.
  DATA: lt_afpo TYPE TABLE OF afpo.
  DATA: lt_jest TYPE TABLE OF ty_jest.
  DATA: ls_jest TYPE ty_jest.
  DATA: lt_affl TYPE TABLE OF affl.
  DATA: ls_affl TYPE affl.
  DATA: lt_afab TYPE TABLE OF afab.
  DATA: ls_afab TYPE afab.
  DATA: lt_afvv TYPE TABLE OF afvv.
  DATA: ls_afvv TYPE afvv.

  " Tables and structures for BAPI mapping
  DATA: lt_jstk TYPE cloi_jstk_tab.
  DATA: ls_jstk LIKE LINE OF lt_jstk.
  DATA: lt_affl_tab TYPE cloi_affl_tab.
  DATA: ls_affl_str TYPE cloi_affl_struct.
  DATA: lt_afab_tab TYPE cloi_afab_tab.
  DATA: ls_afab_str TYPE cloi_afab_struct.
  DATA: lt_afvv_tab TYPE cloi_afvo_tab.
  DATA: ls_afvv_str TYPE cloi_afvo_struct.

* AFKO: Order Header Data PP Orders
  SELECT SINGLE * FROM afko INTO ls_afko
  WHERE aufnr = aufnr.

* AUFK: Order master data
  SELECT SINGLE * FROM aufk INTO ls_aufk.
  " OBJNR

* JEST: Work Order Status 
  SELECT  stat  FROM jest INTO TABLE lt_jest
  WHERE objnr = ls_aufk-objnr.

* AFPO: AFPO
  SELECT * FROM afpo INTO TABLE lt_afpo
   WHERE aufnr = aufnr.

* AFFL:  Work order sequence
  SELECT * FROM affl INTO TABLE lt_affl
  WHERE aufpl = ls_afko-aufpl.

* AFVV:DB structure of the quantities/dates/values in the operation
  IF NOT lt_affl[] IS INITIAL.
    SELECT * FROM afvv INTO TABLE lt_afvv
     FOR ALL ENTRIES IN lt_affl
     WHERE aufpl = lt_affl-aufpl
      AND  aplzl = lt_affl-aplzl.
  ENDIF.

*----------------------------------*
* Fill Data to BAPI input
*----------------------------------*
  MOVE-CORRESPONDING ls_afko TO ls_order_data.
  MOVE-CORRESPONDING ls_aufk TO ls_order_data.
  ls_order_data-objnr = ls_aufk-objnr.
  LOOP AT lt_jest INTO ls_jest.
    CLEAR ls_jstk.
    ls_jstk-stat = ls_jest-stat.
    APPEND ls_jstk TO lt_jstk.
  ENDLOOP.

  LOOP AT lt_affl INTO ls_affl.
    CLEAR ls_affl_str. REFRESH lt_afvv_tab.
    MOVE-CORRESPONDING ls_affl TO ls_affl_str.
    LOOP AT lt_afvv INTO ls_afvv
     WHERE aufpl = ls_affl-aufpl
      AND  aplzl = ls_affl-aplzl.
      CLEAR ls_afvv_str.
      MOVE-CORRESPONDING ls_afvv TO ls_afvv_str .
      APPEND ls_afvv_str TO lt_afvv_tab.
    ENDLOOP.
    ls_affl_str-t_afvo[] = lt_afvv_tab[].

    APPEND ls_affl_str TO lt_affl_tab.
  ENDLOOP.

  LOOP AT lt_afab INTO ls_afab.
    CLEAR ls_afab_str.
    MOVE-CORRESPONDING ls_afab TO ls_afab_str.
    APPEND ls_afab_str TO lt_afab_tab.
  ENDLOOP.

  ls_order_data-t_afpo = lt_afpo[].
  ls_order_data-t_jstk = lt_jstk[].
  ls_order_data-t_affl = lt_affl_tab[].
  ls_order_data-t_afab = lt_afab_tab[].

  APPEND ls_order_data TO lt_order_data.

Here an other interesting SCN article Creation of production order IDOCs to a given selection

SAP Process Order Idoc Outound: Create LOIPRO IDOC

Once the table ORDER_DATA is populated, the CLOI_MASTERIDOC_CREATE_LOIPRO can be called to generate the SAP Work Order Idoc ( LOIPRO01).

" Call the SAP Process Order Idoc Outound IDOC LOIPRO01 Creation
  CALL FUNCTION 'CLOI_MASTERIDOC_CREATE_LOIPRO'
       EXPORTING
            opt_sys      = lv_logsys
            message_type = message_type
       TABLES
            order_data   = lt_order_data.

You may also like:

Check also this article on Automation of LOIPRO outbound IDOCS on sap.blog.com

Share
Published by
John
Tags: ABAPOrder

Recent Posts

The Most Important SAP ISU Tables

SAP ISU Tables for Technical master data, for Billing Master Data, Billing and invoicing Tables?…

December 22, 2020

SAP Fiori 3 UX and Design of SAP Fiori Apps for SAP S/4HANA, SAP TechEd Lecture

SAP Fiori 3 UX and Design of SAP Fiori Apps for SAP S/4HANA, SAP TechEd…

November 18, 2020

The Main SAP Dunning Transaction Codes

Dunning is the business practice of informing a customer of past due payment. Dunning letters…

November 28, 2019

SAP Accounts Payable Tcodes & Accounts Receivable Tcodes ( SAP AP Tcodes & SAP AR Tcodes)

SAP AP Tcodes & SAP AR Tcodes: House Banks Tcodes, Advance Payments or Down Payments,…

August 1, 2019

The Most Important SAP Payment Terms Tables (ZTERM, Text…)

What are the main SAP Payment Terms Tables ? What are the related Tables in…

October 21, 2018

The most Important SAP Work Center Tables in SAP PP

Work center consists of master data related to routing of products. It contains data related…

October 21, 2018