Skip to main content

Hi gurus!

We am looking to create a workflow for Purchase Requisitions that will need to go to multiple people for approval - based on value.

If one of those approvers rejects the request, we want the workflow to back to the originator so they can rework and then resubmit the request.

I have seen previous questions relating to this, but they are several years old and links to documents are no longer valid.

I also see references to State Machines, but have no idea how to do this in NAC!

 

Thanks

Hi @Darren Jehan 

Indeed a state machine is the way to do this, it is fairly straight forward but can be complex depending on the logic you want to apply, typically there are 2 approaches. 

  1. when a request is returned it has to go through all approvals again
  2. when a request is returned and actioned it goes back to the last step.

Lets start by adding the state machine with a 2 step approval and a return branch, initial stage being Approval 1:
 


In the tasks you can provide multiple outcomes, I like to have a 3rd choice which is return purely because in process there is a scenario where Reject is Reject, there is no resubmission, where as a return means to try again.
​​​​​

I am using express approval but the same applies to any task type

Now lets continue with building the logic. 

 

State machines allow you to split a workflow into independent branches, a typical way to split each branch is to have one branch for each step in the process, that way if you need to jump from one step to another it is easy, you do that by using the Change Stage action:

On the approve we just want it to move to the next approval (Approval 2) so we set the action in the Approve branch accordingly:
 


On a reject we are going to just end the workflow and send a confirmation email (you can use this as a return branch if you want, its up to you.)
 


Now for the return outcome we want it to move to the return branch which will contain a task assigned to the creator of the request.
​​​​


At this point is where you make a choice on what approach I mentioned at the beginning of this post you want to take. If you want it to return to this approval stage you should store the stage name in a variable like this, we can use this later:


​​​​​​​For simplicity lets add the same task to Approval 2 but some of the logic changes as it is the end of the process so on Approval it exits the state machine to continue to the next steps:
 

 

Now in the return branch lets add a task with no outcome, just a completion and will most likely use a task form as it means they need to provide additional information:
 

After they complete their steps then we need to take the task back to where it is supposed to be. 

If you want it to follow all steps from the beginning then just add a Change Stage action and send it to Approver 1, this will always return to Approver 1 like it was re-submitted like this:
 


But if you want it to return to the last step then use the variable in the change stage action:
​​​​​


That way if it reached approver 2 then they returned it, the variable will contain Approval 2​​​​​​​


This means it will go to that stage.

The only part of this type of solution I have not covered is the need to handle submission data.

Start data cannot be altered in the workflow so you need to handle the data somehow, depending on how you have your solution built and the type of data there could be a number of options here, the most common of which being storing the data to Sharepoint and getting it back when you need it before each task.

​​​​Alternatively you can use Nintex Tables to do the same if its small amounts of data.

Here is an export key for the workflow I created so you can look through, it will expire in 3 days so please use it before then, if you miss the window then please reply to let me know. 
 

n1s1ukxYchw3VhpuuFjcSwQeVccXXUV8QRwJFBJhJ89M4PsyW

 

Jake 


Wow!

That’s an answer @Jake !!!

I’ll import that now and then read through it all…

Many thanks for your help!


Thanks again Jake - have been working through this, and I now understand how this works.

So, he only bit we really need to figure out is the data - storing it is not the issue, it will presenting that back to the Originator to allow them to update it…

But this is huge step in the process, so thanks again!


Hi @Darren Jehan 

 

I am glad it has helped you progress your solution, if you need anymore assistance don’t hesitate to reply here. 
 

Jake 


Reply