- Post History
- Subscribe to RSS Feed
- Mark as New
- Mark as Read
- Bookmark
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
04-24-2023 06:20 AM - edited 06-16-2025 07:34 AM
Workflow Automation CoE > Flow 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
- Single-stage approval
- Multi-stage approval
- Complex approval
- Decision Builder for approvals
- Change Approval Policies
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.
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
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:
- 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. - 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.
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).
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.
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.
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.
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.
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.
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.
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
Center of Excellence Navigation
- 39,214 Views
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
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)
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
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.
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
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
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
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
Jobi
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
@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.
@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.
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
@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?
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
@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.
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".
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
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.
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
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.
5. Updated Ask for approval action in both subflows, and removed approval field.
a) Requested Item Manager Approval
b) Requested Item Dept Head Approval
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.
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
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
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
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
@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:
2) Created a flow:
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.
Any suggestions how this can be achieved?
Regards,
G
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
@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).
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.
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
@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
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
@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 🙂
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
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).
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
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!
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
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
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
@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.
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
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
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
@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.
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
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
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
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
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.
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
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.
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
@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)?
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
@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.
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
@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.

- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
@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.
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
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.
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
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 setup
Do you think I'm doing anything wrong here?
Thanks
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
@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".
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
@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 🙂
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
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!
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
This has really helped me to understand the logic about the complex approval. Thank you!
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
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.
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
These are great, @Lisa Holenstein! Will these properties be automatically added or do we need to manually create them for use? Thanks!
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
@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.
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
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?
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
@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.
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
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" -
Is this a situation where I'll need to script the approval? Any thoughts?
Thanks team!
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
@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.
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
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!