The CreatorCon Call for Content is officially open! Get started here.

Lisa Holenstein
ServiceNow Employee
ServiceNow Employee

Workflow Automation CoEFlow Designer > Approvals > Overview

 

Approvals on the Now Platform

Approvals on the Now Platform have undergone many changes throughout the years. In the early days, we would just set the task.approval field to the desired state with a UI Action or Business Rule. Then ServiceNow added the Approval table (sysapprover_approval) to properly track multiple approvers' replies. Then Workflow Editor was introduced and helped meet our customers' increasing needs for complex approvals with parallel paths and the approval coordinator. Flow Designer was introduced as an alternative to Business Rules back in the Kingston release in 2018. It has since evolved and been improved upon so much that it surpassed any previous business logic solutions on the Now Platform and can now handle any use case. Check out the Center of Excellence article to learn more about Flow Designer in general, best practices, and frequently asked questions.

 

Introduction

In this article, I will outline each type of approval that you may need and how to build them in Flow Designer. The main tool for this is the Ask for Approval action in Flow Designer. For the purpose of these examples, I'll use a Service Catalog flow, used to handle the fulfillment of a Catalog Item, but all of these instructions will work the same for any other approval use case. There's one notable exception: the Change Approval Policies, for which you use the Apply Change Approval Policy flow action. You can make use of Decision Builder to easily create and maintain your Change Approval Policies.
Speaking of Decision Builder, this is also a great way to determine which approval you need for your task fulfillment, depending on any type of conditions you need, e.g., the total cost of a catalog request or request item, the department of the requester, or the item category. To learn more about Decision Builder, check out the Center of Excellence article to get started.

In the past, many customers have shared feedback for the Ask for Approval action with us, outlining some unexpected behavior in approval creation and evaluation. To alleviate these concerns, we're working on a major overhaul of this flow action to ensure the approvals are generated and evaluated according to our customers' expectations. The first parts of this rework are available after upgrading to the Utah release, enabling the sequential use of Ask for Approval. I will outline a workaround that you can use for instances on releases prior to Utah, this same workaround will also enable parallel approvals.

 

Bonus tip: If you want to make your approval logic reusable for other catalog items or use cases, you can build it in a subflow to be able to add it to any other flow where you need this kind of approval. If you already have it built in an existing flow, you'll be able to break out those steps and convert them into a reusable subflow, starting in the Utah release.

 

Bonus tip 2: Watch the recording of our Platform Academy! @Andrew Barnes - and I covered all of these examples and approval patterns in a live webinar.

https://sn.works/platformacademy/35

 

Flow Approval System Properties

New in the Yokohama release, we introduced 4 additional system properties that greatly improve approval auditing. These new system properties give you more control over how approvals are tracked, especially in complex workflows involving delegation, impersonation, or inactive users and groups.

Let’s walk through each property with real-world use cases to help you decide how to configure them for your environment.

 

Showing Approver Names in Audit History

Property: com.glide.hub.flow.approval.show_approver_name_in_audit

Use Case: 
A flow is triggered by a service desk agent, but the actual approval is done by a team lead. Without this property, the audit trail misleadingly shows the agent as the approver.

Set to true to ensure the audit log reflects the actual approver, not just the flow initiator.

Best for: Clear accountability in multi-user workflows.

 

Highlighting Role-Based Approvals

Property: com.glide.hub.flow.approval.show_higher_role_audit_comment

Use Case:
A senior manager approves a request because their role grants them override permissions. You want the audit log to reflect that this wasn’t a standard approval.

Set to true to add a comment like:
“XY approved, permission granted by role.”

Best for: Environments with tiered or escalated approval paths.

 

Tracking Delegate Approvals

Property: com.glide.hub.flow.approval.show_delegate_audit_comment

Use Case:
A VP is on vacation, and their delegate approves a budget request. You want the audit trail to show that the delegate acted on behalf of the VP.

Set to true to log:
“XY approved the task as delegate of YZ.”

Best for: Teams with formal delegation policies.

 

Capturing Impersonation Details

Property: com.glide.hub.flow.approval.show_impersonate_audit_comment

Use Case:
An admin impersonates a user to troubleshoot a workflow and accidentally approves a task. You need to know this wasn’t the user’s own action.

Set to true to log:
“System Administrator approved the task by impersonating XY.”

Best for: Admin-heavy environments or sandbox testing.

Types of Approvals

Note: In my examples, the IF path goes If 1 - Ask for Approval.approval state IS NOT approved and then I'll end the flow execution for any of rejected, canceled, etc. This pattern allows the rest of the flow to act as theapproved path. An alternative approach would be to define If 1 - Ask for Approval.approval state IS approved and then use optional else if and else branches to handle other approval outcomes.

 

LisaHolenstein_0-1681475569532.png

 

Single-stage approval

Let's start simple. The most common type of approval that you'll encounter in your ServiceNow environments is a simple manager approval. A task or request is being created and we'll need the requester's manager's approval to proceed with the fulfillment. In my example, I have a Catalog Item called 'Workshop Paper and Supplies' with a few catalog variables to order copier paper, pens, and other office supplies. It has a simple flow associated that will ask for approval, wait for the manager to give it, and then proceed with the rest of the fulfillment. Here, we're checking a decision table that tells us which discount we can give, depending on the item category. For the sake of the example, we'll only post the discount to the comments of the RITM, but in a real life scenario, we could recalculate the item cost and update the record from here. If the manager rejects we'll end the flow.

 

Example

 

LisaHolenstein_1-1681475581208.png

 

LisaHolenstein_2-1681475929194.png

Return to top

 

Multi-stage approval

This time we want to add another layer of approval, which we'll call sequential. These use cases often involve a manager approval first, then based on (for example) the total cost of a request or task there will be a second, third, fourth,... approval by the manager's manager, a cost center lead, a specific approval group etc.

 

With the improvements made in the Utah release, sequential approvals will work without any further workarounds. If your instance is on Tokyo or earlier or you want to have multiple approvals in parallel branches (Do the following in parallel flow logic), this workaround will help.

 

Workaround

Remove the value in Approval Field on the Ask for Approval action in your flow. Emptying this field has 2 effects:

  1. The Approval Field field on the task will no longer be updated with the result of the Approval record. If this is required for your further process, make sure to add an Update Record action later in your flow.
  2. The action will no longer create a record watcher for the state of approvals related to the task. For several approval actions in parallel branches, these record watchers lead to marking the other approvals as "No longer required" once the first approval has been completed. If there are no record watchers, each branch will wait for the completion of the approval in that branch, regardless of any parallel approvals.

 

LisaHolenstein_0-1681478882213.pngLisaHolenstein_1-1681478899315.png

 

LisaHolenstein_2-1681475929194.png

Return to top

 

Sequential approval

Depending on what your process demands this second approval can be in addition to the first or an override. For an additional approval, place it in the happy path of the if-then-else branching ('if 1st approval given'), for an override approval place it in the reject path. As mentioned above, this works without further workaround if your instance is on Utah or up. For instances prior to Utah, empty the Approval Field on the first Ask for Approval action (Step 1).

 

LisaHolenstein_3-1681479457265.png

 

LisaHolenstein_2-1681475929194.png

Return to top

 

Complex approval

Continuing the path from simple to complicated, complex approval rules are next. These don't require any extra configuration or knowledge, but I think deserve extra attention, since not many people seem to be aware of the possibilities. More often than not, customers will define one set of approvers per action and then try to find ways with parallel paths to build out their use case. However, the Ask for Approval action is more powerful than it looks. You can define multiple rule sets connected with OR and define multiple condition sets within each rule set that also allow AND or OR conjunctions. Additionally, you can use the pill picker to send approvals to users or groups from previous flow steps. Be sure to check Docs to learn about all options.

 

LisaHolenstein_0-1681480059752.png

 

One common example that we see is: we need several groups to approve, but if anyone rejects, reject the approval. This example is how you would handle this. The approval rules in the first part could also be 'All responded and anyone approves', 'All users approve', or a certain number or percentage of the groups approve.

 

LisaHolenstein_1-1681480116317.png

 

LisaHolenstein_2-1681475929194.png

Return to top

 

Parallel approval

Parallel branches may be necessary if the subsequent actions are different for each branch. If divergent, parallel logic is not needed, consider working with the extensive options of complex approval rules within one Ask for Approval action instead.

The default behavior of the Ask for Approval action is that a record watcher is being created for each approval. Once one of them is approved, the conditions of the second/all other record watchers are satisfied as well, so the next time the scheduled check looks at that record watcher, it'll change the second/all other approvals to "No longer required". If this does not suit your use case, you can use the workaround outlined above. Empty the Approval Field on the Ask for Approval actions, so that no record watcher is being created for those approvals.

 

 
LisaHolenstein_1-1682338518945.png

 

 

 

LisaHolenstein_2-1681475929194.png

Return to top

 

Scripted Approval rule sets

If all of the above was not sufficent to cover your use case, you can also define your approval rule set with a script. This allows you to perform more complex look up records actions and make use of flow variables and inline scripting to craft the necessary syntactic string to use instead of the low-code rule set within an Ask for Approval action.  You can find all options and some steps on how to set this up with the help of a Flow Variable in my blog here.

 

LisaHolenstein_2-1681480211596.png

 

LisaHolenstein_2-1681475929194.png

Return to top

 

Decision Builder for approvals

Decision Builder is one of the strongest tools we have in our kit to simplify our logic, extract decisions from workflows, and handing the power of changing decisions to the responsible process owner. Decision Builder is a low-code builder that you can use to manage your decisions easily. It comes with different access-level roles that can be assigned to your business stakeholders, as well as an option to export & edit the decision table in MS Excel. Check out our recent Platform Academy with Product Manager Julia Perlis to learn more.

 

Example without Decision Builder

In our example use case, we want to have different Approval Groups based on the category of the Catalog Item. Without Decision Builder, we'll see an if-then-else logic part in the flow that can get unwieldy really fast and it's hard to keep track of all the branches. Additionally, each fulfillment beyond the approval is basically the same, but we'll have to keep it updated in multiple places if the slightest aspect of the Fulfillment Task, notifications, or updating the record changes.

 

LisaHolenstein_0-1681715806077.png

 

 

Example with Decision Builder

When we use Decision Builder, we can simplify the management of our fulfillment flow by a huge factor. With it, we can remove the complex if-then-else branching and instead use the outcome of the decision table for our approvals. All steps after that will be the same and are easy to maintain. Decision Tables can have multiple condition columns that are connected with an implied AND. They can also have multiple result columns, so that your decisions can get as complex as you need them. The Default result at the bottom allows you to always have a fallback group if you add new Catalog Item Categories that don't have a dedicated Approval Group yet.

 

LisaHolenstein_1-1681716045661.png
 
LisaHolenstein_2-1681716052987.png

 

 

LisaHolenstein_2-1681475929194.png

Return to top

 

Change Approval Policies

Finally, our product team for Change Management have brought together Decision Tables and approvals in Flow Designer into a tailored process called Change Approval Policies. They've just published a brand-new webinar recording that takes you through everything you need to know:
https://www.youtube.com/watch?v=pKBNUhuE_uw

 

LisaHolenstein_3-1681480274091.pngLisaHolenstein_4-1681480283995.png

 

 

LisaHolenstein_2-1681475929194.png

Return to top

 


 

Center of Excellence Navigation

  1. Workflow Automation - Center of Excellence
  2. Workflow Automation Migration Considerations
  3. What's new for Workflow Automation?
  4. Resource Hubs
    1. Flow Designer
    2. Decision Builder
    3. Process Automation Designer
  5. FAQ
  6. Checklist
  7. Training
  8. Platform Academy
Comments
Jobi Thevupara
Tera Contributor

Hi Lisa, Nice session. Thanks. I have a question for you...

suppose I need approval from 2 groups(approval is configured exactly like the 2nd picture of your complex approval above).

One group is approved, second group not approved even after the due date.

What suppose to be the RITM status in such situation?
(in my test, it's showing as pending)

Lisa Holenstein
ServiceNow Employee
ServiceNow Employee

Hi @Jobi Thevupara ,

you can make use of the Due Date field on the Ask for Approval action. Once you pick a due date (this can also be relative to another date field data pill), there's an option box to say auto-reject, auto-approve, or auto-cancel. From there you can decide on the remaining RITM fulfillment or cancel the request.

Monica Chakrabo
Tera Contributor

Hi, recently I was working on PPM and I noticed that there was a group in approval list which I have not mentioned in the workflow, how do debug this issue from where is the unwanted group is getting add to the approvers list? can anyone help

 

Jobi Thevupara
Tera Contributor

Hi @Lisa Holenstein Thanks for your reply.

 

I was checking the option you mentioned above but I couldn't find (attaching a screenshot)

You mentioned above "Once you pick a due date (this can also be relative to another date field data pill), there's an option box to say auto-reject, auto-approve, or auto-cancel." I am not seeing auto-reject, auto-cancel option after selecting the due date.

 

Could you please share a screenshot where you see auto-approve option?

 

 Thanks

Jobidue date flow designer.JPG

Lisa Holenstein
ServiceNow Employee
ServiceNow Employee

@Jobi Thevupara  I think I phrased it the wrong way round. You have the right field just there. You chose to either approve, reject, or cancel if the approval is still pending by the date you define.

LisaHolenstein_0-1687344638955.png

 

@Monica Chakrabo this article is dedicated to Flow Designer Approvals, not Legacy Workflow. Please ask your question in a new post, possibly even on the PPM forum. That being said, you can look at the approval records, see who created them, and then trace the steps from there. It's possible they were added manually, not part of an automated workflow at all.

 

Jobi Thevupara
Tera Contributor

@Lisa HolensteinReject not working as expected. My expectation is when one group not approved after due date, RITM should go to closed skipped or cancelled state but that is not working.

RITM state stays OPEN

Approver state changed to No Longer Required. Is this expected behavior?

NOT REJECTED.JPG

Lisa Holenstein
ServiceNow Employee
ServiceNow Employee

@Jobi Thevupara  Maybe it's just your screenshot, but I don't see a data pill to set the date for the relative check, so it wouldn't know 5 minutes after which date/time. The action state output will be 'approved' or 'rejected' or 'canceled' - whichever you specified - and the individual approval records are no longer needed.

 

LisaHolenstein_0-1687506856366.png


But: the Ask For Approval flow action will not do any further updating, except for the Approval field on the task. It should always be followed up with some if-else logic, as outlined in my article above. You can either go simple "if not approved then cancel RITM, else proceed with fulfillment" or have a branch for each option: "if approved, proceed with fulfillment, if rejected, do something else, if canceled, do another thing". 

matthijsoomen
Giga Guru

Hi @Lisa Holenstein and others, to get the multi-stage approval to work correctly, you also need to set the Approval Engine for Request item to 'Turn engines off' otherwise it would not work, or at least not for me.

 

Because for me on my Utah environment I was still having difficulties with it.

And we have also an old instance therefore I cannot just switch the engine without doing a proper analysis of the consequences.

 

My setup:

Approval Engine = Approval rules

In a flow, I have setup two Ask for Approval blocks both with 'Approve or Reject' when 'Anyone Approves or Rejects'.

The first Ask for Approval is set to an Approval group.

The Second is set to a manager approval.

 

Result:

When one user of the approval group approves the request item, the rest is no longer required.

However, then the flow hits the second Ask for Approval and set all approval records back to Required (including the one who actually approved the first time).

Also, using the work-around does not seem to work properly, with the work around after the first person approves in an approval group, the rest of the approval records are not set to 'no longer required', but remain requested.

Karan Sharma2
Tera Contributor

I am not sure if this is not working for me or it is how it is supposed to be. Kindly assist.

 

Below are the steps I followed:

1. Got a Utah Patch 4 hotfix 2 PDI.

2. Choose OOTB Catalog Item - "Miro"

https://<your_ instance>.service-now.com/sc_cat_item.do?sys_id=6c626eb297c2019021983d1e6253af48

3. Opened its flow.

https://<your_instance>.service-now.com/$flow-designer.do?sysparm_nostack=true&sysparm_use_polaris=false#/flow-designer/30f3d26187e92300e0ef0cf888cb0b91

The flow contains 2 approval sub flows.

a) Requested Item Manager Approval

b) Requested Item Dept Head Approval

 

4. Scenario 1: Created a RITM, approved first level approval, and then approved second level approval. Approval field on RITM got auto updated by approval flow listener.

KaranSharma2_0-1692164230974.png

 

5. Updated Ask for approval action in both subflows, and removed approval field.

a) Requested Item Manager Approval

b) Requested Item Dept Head Approval

 

KaranSharma2_1-1692164331082.png

 

KaranSharma2_2-1692164348204.png

 

6. Scenario 2: Created a RITM, approved first level approval, and then approved second level approval. Approval field on RITM got auto updated by approval flow listener, even when approval field was set as blank on both actions.

KaranSharma2_3-1692164423025.png

 

If I understood the blog correctly, all we need to do is make "Approval Field" as empty in the "Ask for Approval" flow action, so that it does not update the RITM Approval attribute. But in this case it is not working as expected. Can you please help me understand what I did wrong here.

 

Thank you in advance!

 

Thanks

Karan Sharma

__PRESENT

jagabandhu padh
Tera Contributor

Hi @Lisa Holenstein 

 

I am doing scripted approval and stuck in between . actually my requirement is one from each group should approve to move forward so for that i have captured the 2/3/4 groups in a flow variable and used scripted rule as ApprovesAnyG[flowvariable] . so approval is triggering but the issue is once any one from any group is approving it is moving forward rather it should have waited for the other group members to respond  . 

 

Thanks 

GB14
Kilo Patron

@Lisa Holenstein @Julia Perlis 
Thanks for the videos and articles. I have been following and trying to learn from these examples. 
Wondering if you assist with 1 simple decision build. 
I would like to skip the approval if the request is opened by the manager of the "Requested for" variable. 
1) Created this decision build:

GB14_0-1693448590553.png

2) Created a flow: 

GB14_1-1693448638738.png

 

GB14_2-1693448817626.png

Opened by above is checking the variable "Requested for- > manager". 

if its true it should create a catalog task but its not working for some reason. 

Flow showing the values but its not skipping the approvals. 

GB14_3-1693449184752.png

 

 

Any suggestions how this can be achieved?

 

Regards,
G

Lisa Holenstein
ServiceNow Employee
ServiceNow Employee

@GB14 First, I'm guessing this scenario is for training purposes only, as I would recommend to use an if logic for this use case. Within the condition column in decision Builder, there's no way to compare two fields, as there is no pill picker. All you can do is pick specific users (or groups or other records based on the column definition).

 

LisaHolenstein_0-1693822331275.png

 

Besides the above, here are some further thoughts on issues you're running into:

  • The decision table input is the Requested Item (sc_req_item), but the other screenshot asks for Opened by, looks like you made changes between the screenshots. It's best if you just hand in the whole item in case you need to build conditions off of several fields on this record.
  • What the input is called (Opened by, Requested by, Manager, ...) is completely irrelevant if it's just a User (sys_user) reference input. The decision table won't know which user field you're looking at.
  • The decision row doesn't have a condition at all, so it will always equate to true, thus triggering your approval.

 

Hope this helps!

Lisa

 

Please mark the post as correct if this answered your question.

 


 

Have questions about Flow Designer, PAD, or Decision Builder? Check out the Workflow Automation CoE.
Have questions about the Now Platform? Join our bi-weekly Platform Academy.

Erik Nelson
Kilo Sage

@Lisa Holenstein - First of all thanks for this is great information!  I'm trying to leverage Change Approval Definitions but the issue I run up against, as I would guess others do as well, is that Technical (CI Owner Group) Approval isn't always a single group. Right now we're calling a Workflow for those approvals, but by the nature of workflows, it's difficult to run them in parallel with a Flow action Approval. Is there a way to call multiple approval groups by an Approval Definition and I'm just missing it, or another route through Flow Actions in the pipeline?

Thanks!

Erik

Lisa Holenstein
ServiceNow Employee
ServiceNow Employee

@Erik Nelson I haven't personally worked with Change Approvals in a while, but they have adopted Decision Tables for their approvals. The documentation was a bit hidden previously, but check out these pages:
Create a Change Approval Policy Decison Table in Decision Builder (there are a couple that are installed oob, check them out for reference)
Use the Apply Change Approval Policy Flow Action (again, oob example flows should be there to check out)

 

That flow action should create all necessary approvals for you, if I remember correctly. For more specific guidance, it might be best to reach out to the ITSM community, as Change Management belongs to that area 🙂

Ryan S
Kilo Sage

Hi Lisa,

Really excited to have run across this thread. One issue we often run into is easily identifying which approval activity is occurring. For example, let's say we have a request with 2 sequential approvals: "Manager" and "Director" and these go to Person A and Person B. People don't generally know who Person A or Person B are, so we like to set the 'Short Description' on the approval record (seems like this is a common theme on the community).

Am I missing a simple way to do this? Ideally we'd like to use the Flow Action but it doesn't seem to be possible. Is there a 'best practice' for creating user (or group) approvals within Flow Designer that also include Short Description (or perhaps it's comments--something that indicates what the approval step is).

Lisa Holenstein
ServiceNow Employee
ServiceNow Employee

Hi @Ryan S ! 

Unfortunately, we don't have an option for this in the current version of the "Ask for Approval" flow action. And I'm not aware of a workaround, since the action itself waits for the approval to be complete. But I have been advocating for this to be added to the action, I hope we can make this happen in a future release!

LJHotchkiss
Tera Explorer

Hi @Lisa Holenstein!
This is a great article, thank you!
Is there any way of knowing that approval was [approved|rejected] based on the Due Date condition being met?
I've tried examining the related approval records and I don't see anything that would indicate that.
I imagine that I could set up a condition after the 'Ask for Approval' action with the same timeframe to check against but was hoping I was missing something already available to me..?
TIA!
Linda

Lisa Holenstein
ServiceNow Employee
ServiceNow Employee

@LJHotchkiss Excellent question! I haven't tried this out myself, but I would assume you can tell by the sysapproval_approver record being updated by system instead of the approver.

thughes
Tera Contributor

Hi @Lisa Holenstein - thank you for this excellent resource. This has been very helpful as my organization has been working to migrate our catalog development from the legacy workflow editor to flow designer. 

 

One potential gap in feature parity that has come up a couple of times now in different use cases - and I feel I am likely missing something obvious - is with the ability to report in some way on the context from a flow in which an approval request was generated. In approval requests generated through the workflow editor, the "wf_activity" attribute on the Approval record would get set with a reference to the workflow activity that resulted in the record, but such an attribute does not seem to exist for flow actions. This wf_activity attribute has been helpful for our organization, for example, in determining which approvals were being created via an activity embedded within a standard approval subflow. It also provided some super high level context for which approval was tied to which stage in a workflow - something that is a bit harder to discern without checking creation/update timestamps on approval records vs. tasks associated with the same process - at least in production environments, where full flow reporting is discouraged due to the performance hit.

 

Is there a recommended, reportable way to identify where exactly in a flow an approval request was generated?

 

Thanks,

Tom

Lisa Holenstein
ServiceNow Employee
ServiceNow Employee

@thughes Hi Tom, thank you for your note! I'm very glad my content is helping you migrate your automation to flows! 😊

Your observation is correct, currently we don't have a field like the wf_activity on the approval, but I have seen similar asks like yours before. We're exploring options on how to provide a way to track which flow an approval was generated from, but I don't have any details to share at this point.

adaptivert
Giga Guru
Joe Trimble
Tera Expert

I've created an Idea about enhancing the Ask for Approval action to allow field updates like Short description.

 

If you're so inclined, would you go and upvote it?  I don't see any enhancements like this coming in the Washingtondc release.  Here's a link:

 

Augment "Ask for Approval" action to allow updates to fields 

 

Thanks!

Joe

Thomas Wright
Tera Contributor

Hi @Lisa Holenstein - thanks for all the details here, really useful.
I'm having one issue and wanted to check if I'm missing something regarding approvals to multiple groups.
I've got my "Ask for approval" step set up as follows

Approve when:

Anyone approves from group 1
AND
Anyone approved from group 2

OR

Reject when:
Anyone rejects from either group

ThomasWright_0-1727859082966.png

 

What I'm finding is that when the first person from a group approves, the other approvers in that group approval are not being set to "No longer required", they are still "Requested" even though the condition for that group approval has been met. All other approvals are only set to "No longer required" once at least 1 user from both groups has approved. So we could have 2, 3, 4 users approve from one group as long as there hasn't been a user from the second group who has approved yet.

The only way I'm finding around this is to do the hack of not setting the Approval Field and using multiple Ask for Approvals.

Is this expected, am I missing something? We don't want to bother people with unnecessary approvals showing up if the condition for their group approval has already been met.

 

Lisa Holenstein
ServiceNow Employee
ServiceNow Employee

Hi @Thomas Wright

Thank you for your feedback! 🙂 Glad this is helpful to you.

Can you try out "Approve when" - "# of users approve"? This did the trick on my instance! When I approved for one user in group 1, the others were set to No longer required, while the second group approvals were still requested.

LisaHolenstein_0-1727874932892.png


LisaHolenstein_1-1727874949212.png

 

Shane J
Tera Guru

@Lisa Holenstein 
Great article, but I've come across a need that doesn't seem met by the current 'Ask for Approval' action and I have no idea why since it seems like a no-brainer.

The person who actually Approved or Rejected isn't readily available as an output of the Action.  I realize there's ways to get it, but that's more Activity real estate that doesn't need to exist IMO.  Do you know why that isn't a thing (or maybe I'm missing something obvious)?

Lisa Holenstein
ServiceNow Employee
ServiceNow Employee

@Shane J Thank you for your message! That's an interesting enhancement idea. If you have access, please submit it to our Idea Portal so it gets considered for the product backlog.

Thomas Wright
Tera Contributor

@Lisa Holenstein turns out it was a difference in versioning, I was playing in Vancouver and when trying out in Washington DC the same config all worked as expected.

Paul Dowsett
Tera Expert

@Joe TrimbleGreat idea Joe!  I have a custom field on the approval record (approval type) which is used in conditions for notifications to fire. We can set this value in legacy workflow for approvals, and is causing a blocker for us to migrate these to Flow Designer.

Thiago_Pereira
Tera Contributor

Hi @Lisa Holenstein 

How to make a "AND" condition?

I have two groups, I need at least one member of each group to approve.

I have tried ApprovesAnyG[SysID1]&ApprovesAnyG[SysID2]OrRejectsAnyG[SysID1,SysID2]

The approvals are getting created but once one group member is approving the other group approval is not required it is moving to next step.

User150433
Tera Guru

Hi @Lisa Holenstein 

Thanks for the great article. I tried your suggestion of using "# of users approve" for user approval instead of group approvals.
But when 1 person out of 2 approvers approve, the approval for other person do not change to "No longer required". See screenshot below.

Flow Approval setupFlow Approval setupSnag_e3be44d.png

Do you think I'm doing anything wrong here?

 

Thanks

Lisa Holenstein
ServiceNow Employee
ServiceNow Employee

@User150433 that's likely because the other person from the two may still reject and that would result in rejecting this whole approval step. If you set Eric's approval to approved, the third should move to "No longer required".

Lisa Holenstein
ServiceNow Employee
ServiceNow Employee

@Thiago_Pereira check the setup for parallel group approvals described in my main article: https://sn.works/CoE/FlowApproval

This setup likely doesn't require scripting at all 🙂

User150433
Tera Guru

Thanks @Lisa Holenstein for your response. 

In the process if there is one approval from each set of users other approval is not needed. If the approval is left in requested state then the requester thinks there are multiple approvals needed from users where the approval is already received. Is there a way to change the approval to no longer needed as soon as 1 approval is secured for the set of users.

i.e. in my example above approval from David loo should move the approval for "Fred Luddy" in no longer required state.

 

Thank you!

ricardoreg
Tera Explorer

This has really helped me to understand the logic about the complex approval. Thank you!

Lisa Holenstein
ServiceNow Employee
ServiceNow Employee

Flow Approval System Properties

New in the Yokohama release, we introduced 4 additional system properties that greatly improve approval auditing. These new system properties give you more control over how approvals are tracked, especially in complex workflows involving delegation, impersonation, or inactive users and groups.

Let’s walk through each property with real-world use cases to help you decide how to configure them for your environment.

 

Showing Approver Names in Audit History

Property: com.glide.hub.flow.approval.show_approver_name_in_audit

Use Case: 
A flow is triggered by a service desk agent, but the actual approval is done by a team lead. Without this property, the audit trail misleadingly shows the agent as the approver.

Set to true to ensure the audit log reflects the actual approver, not just the flow initiator.

Best for: Clear accountability in multi-user workflows.

 

Highlighting Role-Based Approvals

Property: com.glide.hub.flow.approval.show_higher_role_audit_comment

Use Case:
A senior manager approves a request because their role grants them override permissions. You want the audit log to reflect that this wasn’t a standard approval.

Set to true to add a comment like:
“XY approved, permission granted by role.”

Best for: Environments with tiered or escalated approval paths.

 

Tracking Delegate Approvals

Property: com.glide.hub.flow.approval.show_delegate_audit_comment

Use Case:
A VP is on vacation, and their delegate approves a budget request. You want the audit trail to show that the delegate acted on behalf of the VP.

Set to true to log:
“XY approved the task as delegate of YZ.”

Best for: Teams with formal delegation policies.

 

Capturing Impersonation Details

Property: com.glide.hub.flow.approval.show_impersonate_audit_comment

Use Case:
An admin impersonates a user to troubleshoot a workflow and accidentally approves a task. You need to know this wasn’t the user’s own action.

Set to true to log:
“System Administrator approved the task by impersonating XY.”

Best for: Admin-heavy environments or sandbox testing.

Erik Nelson
Kilo Sage

These are great, @Lisa Holenstein! Will these properties be automatically added or do we need to manually create them for use? Thanks!

Lisa Holenstein
ServiceNow Employee
ServiceNow Employee

@Erik Nelson They were not added automatically on instance upgrade, at least not on my internal demo instance, so I believe you'll have to create them yourselves.

When looking at the Docs properties page, the location is given as "Location: Add to the System Properties [sys_properties] table", in contrast to other properties specified as "Location: System Properties [sys_properties] table", supporting the assumption they don't exist baseline, but can be added on demand.

Marlon Dale
Tera Expert

I'm trying to do a sequential approval on a Xanadu instance. The first stage works fine where I set it to anyone from a group approves. So 1 person from the group approves, then everyone else is set to no longer required. When the 2nd Ask for Approval action comes up which I have set to a specific user specified in a reference variable on the catalog item all previous approvals from the first Ask For Approval step get reset to Requested state. Even the one that initially approved. 

How do I make so when if I get an Approval in the first stage, then send out a 2nd approval from a 2nd Ask For Approval action, the previous approval status don't change?

BrittanyJ
Tera Explorer

@Lisa Holenstein  I also have run into the same issue as Marlon Dale. I am using the Xanadu instance. The first Ask for Approval works as expected. When the person gets the request and approves, it shows up. However once the next person's approval request comes in, the first person's approval state goes back to "Requested".  I saw a solution mentioning to turn off the approval engine for sc_req_item table to resolve this issue.  Will that negatively impact others? Is there a better solution for just my specific flow?

 

So far how I have "fixed" things is to put "Approval Set" in the Approval field section of the second Ask for Approval action.

Tim Hart
Tera Contributor

Hi Team,

I've got an approval case that I couldn't find covered here (or in any threads). 

The use case is:
1. ) Approval is sent to group A, due date set.
2.) If the approval is still "Requested" at due date minus 24 hours, then
3.) Create additional approval and send to group B, same due date.

I tried a "Do in Parallel" with a "Wait for Duration" but even if the first approval is received, that doesn't "cancel" the "Wait for Duration" - image.pngimage.png

Is this a situation where I'll need to script the approval? Any thoughts? 

Thanks team!

Shane J
Tera Guru

@Tim Hart After your Wait for Condition, you need a Record Lookup to see if the first Approval meets your condition or not, then use an IF to drive what comes from that.




Tim Hart
Tera Contributor

Hi @Shane J,

The issue I'm facing is cancelling the wait for condition if the first approval is received before the due date. The "Wait for Condition" branch only needs to happen if the first branch is still requested.

My work around is to remove the in parallel, set the due date of the first approval to be 1 day before, cancel, then re-ask for approval from the normal team and the escalation team. 

Thanks for your response!

Version history
Last update:
‎06-16-2025 07:34 AM
Updated by:
Contributors