How To trigger IDOC LOIPRO when PO Changed or Created
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:
|WORKORDER_CONFIRM||Business Add-In PM/PP/PS/PI Orders Operation: Confirm|
|WORKORDER_CONFIRM_CUST_SUBSCR||Confirmation: Subscreen with Customer's Own Fields|
|WORKORDER_CONFIRM_EA_APPL||Confirmation: Function Calls from EA-APPL|
|WORKORDER_DFPS_PIC_ATP||Defense BADI for Availability Check|
|WORKORDER_DOCLINKS||BAdI: Document Links (Production Orders)|
|WORKORDER_FINANCIALS||Anbindung FIN Add-On an Fertigungs- und Proze aufrag|
|WORKORDER_GOODSMVT||Business Add-In PM/PP/PS/PI Orders: Automatic Goods Movement|
|WORKORDER_INFOSYSTEM||BAdI: PP and PI Order Information System|
|WORKORDER_PISHEET||Business Add-In PM/PP/PS/PI Orders Operation: Discarding of|
|WORKORDER_REWORK||Business Add-In PP Orders Operation: Rework|
|WORKORDER_UPDATE||Business 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:
|ARCHIVE_OBJECTS||Archiving Additional Objects|
|AT_DELETION_FROM_DATABASE||Order is deleted from the database (archiving)|
|AT_SAVE||Save Order Time: Dialog|
|CMTS_CHECK||Check: Configurable Warehouse Order Allowed|
|INITIALIZE||Initialization when Importing/Creating Order|
|IN_UPDATE||Save Order Time: Update|
|NUMBER_SWITCH||Swap Tempory Order Numbers with Final Order Numbers|
|BEFORE_UPDATE||Save Order Time: Before Calling Update|
|AT_RELEASE||Release Order Time: After SAP Checks Before Release|
|REORG_STATUS_ACT_CHECK||Reorganization of Order: Status Check|
|REORG_STATUS_ACTIVATE||Reorganization of Order: Follow-Up Action After Status Set|
|REORG_STATUS_REVOKE||Reorganization 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:
- Wait until a COMMIT before triggering the LOIPRO IDoc
- Avoid blocked Processing Order – conflict
- keep the main flow of the SAP standard Process unchanged
- 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'
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.