How To trigger IDOC LOIPRO when PO Changed or Created

SAP Process Order

Trigger IDOC LOIPRO: SAP Process Order IDoc in detail is the main topic of the following SAP ABAP Tutorial.

  • First, the SAP Process Order IDoc structure LOIPRO will be detailed. (covered in Part 1)
  • Second how to fill the extra segment of an IDoc LOIPRO extension (covered in Part 1)
  • Third, the easiest way to Generate Outbound IDoc LOIPRO for SAP PO. (covered in Part 1)
  • Last, How To trigger IDOC LOIPRO when PO Changed/Created.(Part 2)

How To trigger IDOC LOIPRO when PO Changed/Created

In SAP, Process Orders are assimilated to a Master Data. So there is no entry in NACE to trigger an Idoc when an order is updated.
Within the different ways to trigger to create an IDoc LOIPRO once a SAP Process Order is created or update is to implement a BADI. I found that it is the best way to do.

SAP Process Order BADIs

Try to implement the BADI WORKORDER_UPDATE (in SAP Tcode SE18)
Actually the BADI WORKORDER_UPDATE is the Business Add-In PM/PP/PS/PI Orders Operation: UPDATE

The others BADI for Process Order are:

BADI Description
WORKORDER_CONFIRMBusiness Add-In PM/PP/PS/PI Orders Operation: Confirm
WORKORDER_CONFIRM_CUST_SUBSCRConfirmation: Subscreen with Customer's Own Fields
WORKORDER_CONFIRM_EA_APPLConfirmation: Function Calls from EA-APPL
WORKORDER_DFPS_PIC_ATPDefense BADI for Availability Check
WORKORDER_DOCLINKSBAdI: Document Links (Production Orders)
WORKORDER_FINANCIALSAnbindung FIN Add-On an Fertigungs- und Proze aufrag
WORKORDER_GOODSMVTBusiness Add-In PM/PP/PS/PI Orders: Automatic Goods Movement
WORKORDER_INFOSYSTEMBAdI: PP and PI Order Information System
WORKORDER_MODIFY_SCREENScreen Adjustments
WORKORDER_PISHEETBusiness Add-In PM/PP/PS/PI Orders Operation: Discarding of
WORKORDER_REWORKBusiness Add-In PP Orders Operation: Rework
WORKORDER_UPDATEBusiness Add-In PM/PP/PS/PI Orders Operation: UPDATE

SAP Process Order BADI WORKORDER_UPDATE

The first step is to define the list of BADI WORKORDER_UPDATE methods. Here the full list of the methods available:

Method Description
ARCHIVE_OBJECTSArchiving Additional Objects
AT_DELETION_FROM_DATABASEOrder is deleted from the database (archiving)
AT_SAVESave Order Time: Dialog
CMTS_CHECKCheck: Configurable Warehouse Order Allowed
INITIALIZEInitialization when Importing/Creating Order
IN_UPDATESave Order Time: Update
NUMBER_SWITCHSwap Tempory Order Numbers with Final Order Numbers
BEFORE_UPDATESave Order Time: Before Calling Update
AT_RELEASERelease Order Time: After SAP Checks Before Release
REORG_STATUS_ACT_CHECKReorganization of Order: Status Check
REORG_STATUS_ACTIVATEReorganization of Order: Follow-Up Action After Status Set
REORG_STATUS_REVOKEReorganization of Order: Follow-Up Action After Status Reset

Method AT_SAVE – trigger IDOC LOIPRO

To trigger the LOIPRO01 IDoc when SAP Process Order/ Work Order is modified or created, we will rewrite the method AT_SAVE. This method is triggered when the user clicks on SAVE button on PO/WO SAP Tcodes ( COR1/ COR2 ).
The AT_SAVE takes as input IS_HEADER_DIALOG Order Header in Dialog Structure. It is quite enough because it has all the keys to access the SAP PO.

An important point, you must put wrapper you ABAP code in a Function Module and call the processing in BACKGROUND TASK AS SEPARATE UNIT DESTINATION ‘NONE’.
This call will wait until the Main SAP GUI Process for Saving before triggering the IDOC.
The advantages are:

  1. Wait until a COMMIT before triggering the LOIPRO IDoc
  2. Avoid blocked Processing Order – conflict
  3. keep the main flow of the SAP standard Process unchanged
  4. Avoid Stopping Saving the SAP PO if error occurs for IDoc Generation.

An ABAP Sample for creating LOIPRO in AT_SAVE Method would be:

" Call in Background Task in a separate Unit 
CALL FUNCTION 'ZIDOC_CREATE_LOIPRO' 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.

Check this article about Statement SUBMIT is not allowed in this form which explain how to use the IN UPDATE TASK.