Product Information
S/4HANA Public Cloud Workflow with New Custom Pre-Condition for Procurement in Manage WorkFlow App.
S/4HANA Cloud(S4HC) provides the new Flexible Workflow, that you can manage using “Manage Workflow App”. In this blog I am covering how to implement Custom Pre-conditions in S4HC Workflow. Please check the below link to understand the standard Pre-conditions in S4HC Workflow for Purchase Order as example: S/4HANA Cloud – Flexible Workflow for Purchase Order Approval
In environment of S4HC, it provides a new functionality where you can add new pre-conditions in Purchase requisition using Manage workflow app. In S4HC latest release, you will find 3 apps for Manage Workflow for Purchase Requisition, in that you need to select the NEW version of APP highlighted in below screen short.
There are basically two types of release for Purchase Requisition Workflow.
- Overall release of Purchase Requisition.
- Release of Purchase Requisition Item
Based upon release type we have some standard pre condition defines. Preconditions are used to trigger the workflow if the conditions met during creation of purchase requisition.
1.Overall release of Purchase requisition.
Click on Add to create a new Workflow. To check the standard Pre condition click on Start Condition Tab and in dropdown list check the available Pre-Condition.
2. 2. Release of Purchase Requisition Item
Here you can see there are 2 custom pre condition that are visible after implementation of BADI
Scenario:
In this requirement we need to add the custom pre-condition for purchase requisition at Item level, so once you create purchase requisition and click on save, workflow will get trigger send for approval at item level. We need to trigger the workflow based upon value of standard field, if the value of standard field is “PRV” then custom workflow for PRV need to trigger and if value of standard field is PRS then workflow for PRS need to get trigger.There can be any standard and custom field(created for same business context). Here in this scenario we are using standard field “Service material number” to enter the value as PRV or PRS(as example), so if we create PR with Service Material Number entered value as PRV then Workflow for PRV need to get trigger and if we entered value as PRS the workflow for PRS get triggered.
First, we need to create 2 custom workflow having custom condition step as PRV or PRS. For adding custom pre-condition, we are implementing BADI. You can use the “Custom Fields and Logic” app to create a BAdI implementation and publish the custom logic.
Below are 2 custom pre condition that we are adding.
-
Procurement for PRV
-
Procurement for PRS
These new custom conditions can be defined using BADI SWF_WORKFLOW_CONDITION_DEF.
Once this BADI is implemented, then those pre-condition / step condition will be visible in the Manage Workflows app for the respective filter criteria.
Filter Conditions would be the scenario ID. The following are some of the scenario ID’s that can be used:
WS00800157 – Release of Purchase Requisition Header Level
WS00800173 – Release of Purchase Requisition Item Level
WS02000434 – Release of Central PR Header Level
WS02000438 – Release of Central PR Item Level
WS02000458 – Release of Purchase Requisition for header level using the APP Manage Workflow for Purchase Requisitions – New
WS02000471 – Release of Purchase Requisition for item level using the APP Manage Workflow for Purchase Requisitions – New
WS00800251 – Workflow for blocked invoices
WS00800303 – Workflow for parked invoices as complete
WS00800238 – Workflow for Purchase Orders
For BADI implementation go to App “Custom Field and logic”.
Go to tab Custom Logic.
Click on “+” button top right corner of the system
It will ask for New implementation details
Select the business context as start and pre-condition in flexible workflow.
Select BADI description as Proving additional condition for scenario.
Click on create and your BADI implementation is created.
Note: Always Check the following technical documentation and sample code for the BADIs before start implementation.
BAdI – SWF_WORKFLOW_CONDITION_DEF, Method: GET_CONDITIONS
Use: to define additional conditions for scenarios
Parameters:
CT_CONDITION
Fields: –
ID: Unique ID of the additional condition
subject: Name of the additional condition
type: Condition to be added at step level(type = if_swf_flex_ifs_condition_def=>cs_condtype-step) or at both of step level and workflow level(type = if_swf_flex_ifs_condition_def=>cs_condtype-start_step)
CT_PARAMETER
Fields: –
ID: Unique ID of the additional condition
Name: Name of the additional condition
xsd_type: Data type of the additional condition (supported data types are Boolean, date, string, integer and time)
mandatory: To indicate the additional condition is mandatory
We need to define the filter condition based upon scenario id, so the precondition will only visible to that scenario.
Go to filter tab and give scenario id as mentioned in list above
Scenario WS02000471 is used for Release of Purchase Requisition for item level using the APP Manage Workflow for Purchase Requisitions – New.
Save and Publish the logic.
Open the APP Manage Workflow for Purchase Requisition-New, create a new workflow and check the custom pre conditions under “Start Condition”.
Custom Precondition for PRV and PRS has been implemented using BADI, now we need to write the code to evaluate these custom pre condition.
The defined pre-condition / step condition needs to be evaluated against the newly created BO. That will be done using the custom BADI SWF_WORKFLOW_CONDITION_EVAL.
Both BADI’s needs to be implemented in order to define and evaluate new custom pre-condition / step condition.
Repeat the same steps as above to create the BADI implementation, but this time in BADI description select “Value evaluation of addition conditions for scenarios”.
BADI – SWF_WORKFLOW_CONDITION_EVAL, Method: EVALUATE_CONDITION Use: to evaluate the additional conditions defined
Parameters: IS_SAP_OBJECT_NODE_TYPE
Fields: –
SONT_KEY_PART_1-> Purchase requisition number
SONT_KEY_PART_2 -> Purchase requisition item number
IS_CONDITION
Fields: –
condition_id -> Unique ID of the additional condition
IT_PARAMETER_VALUE
Fields: –
Name -> Name of parameter in workflow in Manage workflow app
Value -> Value of parameter mentioned in workflow in Manage workflow app
CV_IS_TRUE
Should be set as true if the additional condition evaluation is successful
Check the sample code that can be used.
1. CV_IS_TRUE is parameter to activate the workflow,
cv_is_true = abap_false.
2. Reading parameter table with condition PRV AND PRS.
READ TABLE it_parameter_value INTO DATA(ls_param_value)
WITH KEY name = ‘PRV’.
READ TABLE it_parameter_value INTO ls_param_value
WITH KEY name = ‘PRS’.
3. This workflow for PRV and PRS is designed for Item Level release of Workflow
First, we need to fetch the data for PR using API based upon PR number and item, here is_sap_object_node_type-sont_key_part_1 contains the PR number and is_sap_object_node_type-sont_key_part_2 contains the item number.
SELECT * INTO TABLE @lt_purchaserequisition
FROM i_purchaserequisition_api01
WHERE purchaserequisition = @is_sap_object_node_type-sont_key_part_1
AND purchaserequisitionitem = @is_sap_object_node_type-sont_key_part_2.
4. Checking the condition step and maintained value for PRV and PRS in supplier material number”, if condition is PRV and supplier material is PRV then workflow is active for PRV, if condition is PRS and supplier material number is PRS then workflow is active for PRS.
CASE ls_param_value-value.
WHEN ‘PRV’.
READ TABLE lt_purchaserequisition INTO DATA(ls_purreq)
WITH KEY SupplierMaterialNumber = ls_param_value-value.
IF sy-subrc = 0.
cv_is_true = abap_true.
ELSE.
cv_is_true = abap_false.
ENDIF.
Checking the condition step and maintained value for PRV and PRS in suppiler material number”
WHEN ‘PRS’.
READ TABLE lt_purchaserequisition into ls_purreq
WITH KEY SupplierMaterialNumber = ls_param_value-value.
IF sy-subrc = 0.
“If Maintained Value is PRS then WF for PRS will get trigger else check the next condition”
cv_is_true = abap_true.
ELSE.
cv_is_true = abap_false.
ENDIF.
WHEN OTHERS.
cv_is_true = abap_false.
ENDCASE.
ENDIF.
ENDIF.
Finally, we need to create 2 workflows having custom pre conditions.
1. Workflow with pre condition PRV.
Go to “Manage Workflow App”
Click on Add button
Select the condition: BAdI: procurement for PRV and give value as PRV.
In the Step Sequence select the recipient to send the workflow for approval. Enter the user for approval.
Click on save and activate the Workflow.
1. Workflow with pre condition PRS
Same step needs to repeat for Pre-Condition PRS.
Conclusion
Now create PR and check your workflow triggers.
Create the PR from “Purchase Requisition APP” and give the supplier number “PRV” or “PRS” based upon which workflow you need to trigger.
Click on Save and workflow will get trigger.
Check your inbox, go to workflow and check the status
Workflow for Pre-Condition of PRV is triggered. If the service material field has value PRS is maintained, then workflow for Pre-Condition PRS will triggered.
You can find the details for BADI in below mentioned note.
Note: 2767845 ( https://launchpad.support.sap.com/#/notes/2767845 )
Thanks Kamal for sharing this!!
Nice one Kamal, thanks for sharing!!
Thanks Kamal for sharing, that really helps
Well explained!
Thank you for sharing this. Really helpful
Really helpful.
is it possible to create warehouse task from inbound delivery using pre-condition
Hi!
Inside the method of SWF_WORKFLOW_CONDITION_EVAL-EVALUATE_CONDITION - We are not getting the PO number which is supposed to be part of importing parameter (is_sap_object_node_type-sont_key_part_1).
Please suggest.