<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>question Re: Dynamically Creating Workflow Approvals for Multiple Users in Developer forum</title>
    <link>https://www.servicenow.com/community/developer-forum/dynamically-creating-workflow-approvals-for-multiple-users/m-p/1416981#M73907</link>
    <description>&lt;P&gt;Thank you very, very much jmiskey--I truly appreciate your help! Is there any way you can share the business rule script that you used to change the value of the field to TRUE or how you implemented it into your other business rule?&lt;/P&gt;</description>
    <pubDate>Tue, 30 Apr 2019 13:52:06 GMT</pubDate>
    <dc:creator>bdsibert</dc:creator>
    <dc:date>2019-04-30T13:52:06Z</dc:date>
    <item>
      <title>Dynamically Creating Workflow Approvals for Multiple Users</title>
      <link>https://www.servicenow.com/community/developer-forum/dynamically-creating-workflow-approvals-for-multiple-users/m-p/1416973#M73899</link>
      <description>&lt;P&gt;I need to dynamically create multiple approvals for multiple approvers.&amp;nbsp; Here is some background.&lt;/P&gt;
&lt;P&gt;I have a table named "&lt;SPAN style="color: #0000ff;"&gt;u_packages_approvers&lt;/SPAN&gt;", which has the following fields:&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="color: #0000ff;"&gt;u_package_name&lt;/SPAN&gt; - unique package name&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="color: #0000ff;"&gt;u_type&lt;/SPAN&gt; - set to either "approval_needed" or "general_use"&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="color: #0000ff;"&gt;u_approver&lt;/SPAN&gt; - primary approver (all records with "u_type" set to "approval_needed" have a user entry here)&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="color: #0000ff;"&gt;u_backup_approver&lt;/SPAN&gt; - secondary approver (not required, only some records populated here)&lt;/P&gt;
&lt;P&gt;Then, on my Catalog Item, we have a list collector variable named "&lt;SPAN style="color: #0000ff;"&gt;packages_access&lt;/SPAN&gt;" where they can select as many packages that they like.&amp;nbsp; I have come up with a Run Script action that currently loops through all the items in my list collector, looks lto see if they require approval, and if so, it creates an approval for the primary approver, and includes the package name in the approval type field ("&lt;SPAN style="color: #0000ff;"&gt;u_approval_type&lt;/SPAN&gt;").&amp;nbsp; My code is posted below:&lt;/P&gt;
&lt;PRE class="language-markup"&gt;&lt;CODE&gt;//capture packages selected from variable
var pkgList = current.variables.packages_access.toString();

//loop through all packages
var pkgArray = pkgList.split(',');
for (var i = 0; i &amp;lt; pkgArray.length; i++) {
	var pkg = pkgArray[i];
	var gr = new GlideRecord('u_packages_approvers');
	gr.addQuery('sys_id', pkg);
	gr.query();

	//create approvals
	if (gr.next()){
		if (gr.u_type == 'approval_needed'){
			var appr1 = gr.u_approver;
			var appr2 = gr.u_backup_approver;
			var pkg_name = gr.u_package_name;

			//create approval
			var approval = new GlideRecord('sysapproval_approver');
			approval.initialize();
			approval.state = 'requested';
			approval.approver = appr1;
			approval.u_approval_type = pkg_name + ' Approval';
			approval.sysapproval = current.sys_id;   //Current is record that requires approval
			approval.insert();

		}
	}

}&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;That part all works fine.&amp;nbsp; Now, the tricky part is I want to add the "backup approvers".&amp;nbsp; So it should be a situation where if a single package has multiple approvers (primary and backup), an approval is created for each of them, but only one needs to accept/reject the approval (then the other one is unnecessary).&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I am not sure how to amend my code how to do that, especially since I am creating multiple approval records at once (for the various packages selected).&amp;nbsp; Obviously, some approvals will need to be related to each other (primary/backup for a single package), while others are not (approvals for the different packages).&lt;/P&gt;
&lt;P&gt;Does that make sense?&amp;nbsp; Does anyone have any ideas on how to amend my code to do that?&lt;/P&gt;
&lt;P&gt;Thanks&lt;/P&gt;</description>
      <pubDate>Fri, 14 Dec 2018 18:06:23 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/dynamically-creating-workflow-approvals-for-multiple-users/m-p/1416973#M73899</guid>
      <dc:creator>jmiskey</dc:creator>
      <dc:date>2018-12-14T18:06:23Z</dc:date>
    </item>
    <item>
      <title>Re: Dynamically Creating Workflow Approvals for Multiple Users</title>
      <link>https://www.servicenow.com/community/developer-forum/dynamically-creating-workflow-approvals-for-multiple-users/m-p/1416974#M73900</link>
      <description>&lt;P&gt;You'd want to have&amp;nbsp; a BR that looks at the '&lt;STRONG&gt;sysapproval_approver&lt;/STRONG&gt;' table which runs when the state changes and the item they're approving is the item for this process (so a little dotwalking from the approval record to get the item name). When that state changes, query for records with the same &lt;STRONG&gt;'document_id&lt;/STRONG&gt;' and set the state to "&lt;STRONG&gt;No Longer Required&lt;/STRONG&gt;".&lt;/P&gt;
&lt;P&gt;That behavior will essentially be, "if one person approves this ticket, find the other approval records for this ticket and mark them as no longer needed". If you are having multiple packages selectable, which do not share approvers, this won't work. You would have to make a custom field on the approval table which allows you to relate primary/backup approvers. Then you could use that field to determine which approval records to set &lt;STRONG&gt;No Longer Required.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;If you need assistance with writing the BR, just reply. Let me know if this answers your question by marking it as correct.&lt;/P&gt;</description>
      <pubDate>Fri, 14 Dec 2018 18:24:23 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/dynamically-creating-workflow-approvals-for-multiple-users/m-p/1416974#M73900</guid>
      <dc:creator>Coleton</dc:creator>
      <dc:date>2018-12-14T18:24:23Z</dc:date>
    </item>
    <item>
      <title>Re: Dynamically Creating Workflow Approvals for Multiple Users</title>
      <link>https://www.servicenow.com/community/developer-forum/dynamically-creating-workflow-approvals-for-multiple-users/m-p/1416975#M73901</link>
      <description>&lt;P&gt;Thanks for the reply.&amp;nbsp; I like that idea, but where is this "document_id" field that you are matching on?&lt;/P&gt;
&lt;P&gt;In my situation, I think we can determine which records needs to be associated with one another by looking at a combination of the RITM number (&lt;SPAN style="color: #0000ff;"&gt;sysapproval&lt;/SPAN&gt;) and Approval Type (&lt;SPAN style="color: #0000ff;"&gt;u_approval_type&lt;/SPAN&gt;) fields.&lt;/P&gt;
&lt;P&gt;I think I may need assistance in creating that rule.&lt;/P&gt;</description>
      <pubDate>Fri, 14 Dec 2018 18:34:04 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/dynamically-creating-workflow-approvals-for-multiple-users/m-p/1416975#M73901</guid>
      <dc:creator>jmiskey</dc:creator>
      <dc:date>2018-12-14T18:34:04Z</dc:date>
    </item>
    <item>
      <title>Re: Dynamically Creating Workflow Approvals for Multiple Users</title>
      <link>https://www.servicenow.com/community/developer-forum/dynamically-creating-workflow-approvals-for-multiple-users/m-p/1416976#M73902</link>
      <description>&lt;P&gt;It should be the record that's being approved:&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="find_real_file.png"&gt;&lt;img src="https://www.servicenow.com/community/image/serverpage/image-id/165642i388F6AF872E30449/image-size/large?v=v2&amp;amp;px=999" role="button" title="find_real_file.png" alt="find_real_file.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;This is an out-of-the-box field on the '&lt;STRONG&gt;sysapproval_approver&lt;/STRONG&gt;' table. It should be the field you have on your approval records which has a reference to the record being approved.&lt;/P&gt;</description>
      <pubDate>Fri, 14 Dec 2018 18:35:13 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/dynamically-creating-workflow-approvals-for-multiple-users/m-p/1416976#M73902</guid>
      <dc:creator>Coleton</dc:creator>
      <dc:date>2018-12-14T18:35:13Z</dc:date>
    </item>
    <item>
      <title>Re: Dynamically Creating Workflow Approvals for Multiple Users</title>
      <link>https://www.servicenow.com/community/developer-forum/dynamically-creating-workflow-approvals-for-multiple-users/m-p/1416977#M73903</link>
      <description>&lt;P&gt;OK, so I actually followed your advice of using a Business Rule, I just did it a little bit different than you suggested.&amp;nbsp; I matched on the fields I mentioned.&amp;nbsp; So my Business Rule looks like this:&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="find_real_file.png"&gt;&lt;img src="https://www.servicenow.com/community/image/serverpage/image-id/165640i7588146E28DB065D/image-size/large?v=v2&amp;amp;px=999" role="button" title="find_real_file.png" alt="find_real_file.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="find_real_file.png"&gt;&lt;img src="https://www.servicenow.com/community/image/serverpage/image-id/165636iA13D7D770E02D66F/image-size/large?v=v2&amp;amp;px=999" role="button" title="find_real_file.png" alt="find_real_file.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;I also updated my Run Script to run approvals for the backup approvers, like this:&lt;/P&gt;
&lt;PRE class="language-markup"&gt;&lt;CODE&gt;//capture packages selected from variable
var pkgList = current.variables.packages_access.toString();

//loop through all packages
var pkgArray = pkgList.split(',');
for (var i = 0; i &amp;lt; pkgArray.length; i++) {
	var pkg = pkgArray[i];
	var gr = new GlideRecord('u_packages_approvers');
	gr.addQuery('sys_id', pkg);
	gr.query();

	//create approvals
	if (gr.next()){
		if (gr.u_type == 'approval_needed'){
			var appr1 = gr.u_approver;
			var appr2 = gr.u_backup_approver;
			var pkg_name = gr.u_package_name;

			//create array of approvers
			var apps = [];
			apps.push(appr1);
			if (appr2 != '') {
				apps.push(appr2);
			}

			//loop through approvers
			for (var j = 0; j &amp;lt; apps.length; j++) {
				var app = apps[j];

				//create approval
				var approval = new GlideRecord('sysapproval_approver');
				approval.initialize();
				approval.state = 'requested';
				approval.approver = app;
				approval.u_approval_type = 'Cognos: ' + pkg_name + ' Approval';
				approval.sysapproval = current.sys_id;   //Current is record that requires approval
				approval.insert();
			}
		}
	}

}
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;All appears to be working fine now.&amp;nbsp; Thanks for all the help!&amp;nbsp;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 14 Dec 2018 21:28:15 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/dynamically-creating-workflow-approvals-for-multiple-users/m-p/1416977#M73903</guid>
      <dc:creator>jmiskey</dc:creator>
      <dc:date>2018-12-14T21:28:15Z</dc:date>
    </item>
    <item>
      <title>Re: Dynamically Creating Workflow Approvals for Multiple Users</title>
      <link>https://www.servicenow.com/community/developer-forum/dynamically-creating-workflow-approvals-for-multiple-users/m-p/1416978#M73904</link>
      <description>&lt;P&gt;Yep, if I was able to answer your question, please mark my answer as correct. Glad it got you where you needed to go.&lt;/P&gt;</description>
      <pubDate>Fri, 14 Dec 2018 21:36:22 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/dynamically-creating-workflow-approvals-for-multiple-users/m-p/1416978#M73904</guid>
      <dc:creator>Coleton</dc:creator>
      <dc:date>2018-12-14T21:36:22Z</dc:date>
    </item>
    <item>
      <title>Re: Dynamically Creating Workflow Approvals for Multiple Users</title>
      <link>https://www.servicenow.com/community/developer-forum/dynamically-creating-workflow-approvals-for-multiple-users/m-p/1416979#M73905</link>
      <description>&lt;P&gt;Hi all,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is a wonderful solution to a problem I've been having. However, I'm curious--how do you keep your workflow from going to the next task while you are waiting for your approvals to be performed. Right now, the proper approvals are being generated and an approval can be approved or rejected, but as soon as the Run Script is run, it goes to the next catalog task. This could pose an issue as the task could be provisioned before all approvals are obtained (whether approved or rejected).&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you, again, for all of your insight!&lt;/P&gt;</description>
      <pubDate>Mon, 29 Apr 2019 21:33:53 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/dynamically-creating-workflow-approvals-for-multiple-users/m-p/1416979#M73905</guid>
      <dc:creator>bdsibert</dc:creator>
      <dc:date>2019-04-29T21:33:53Z</dc:date>
    </item>
    <item>
      <title>Re: Dynamically Creating Workflow Approvals for Multiple Users</title>
      <link>https://www.servicenow.com/community/developer-forum/dynamically-creating-workflow-approvals-for-multiple-users/m-p/1416980#M73906</link>
      <description>&lt;P&gt;What I did was add a field to the Requested Item table called u_proceed_with_workflow, and default the value to FALSE.&amp;nbsp; Then, in the Business Rule that I created (as mentioned above, to close out the unneeded approvals), I have it changing the value of this u_proceed_with_workflow field to TRUE.&amp;nbsp; Then, in my Workflow, after the Run Script action, I have a "Wait for condition", waiting for this value to be set to TRUE.&lt;/P&gt;</description>
      <pubDate>Tue, 30 Apr 2019 13:00:56 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/dynamically-creating-workflow-approvals-for-multiple-users/m-p/1416980#M73906</guid>
      <dc:creator>jmiskey</dc:creator>
      <dc:date>2019-04-30T13:00:56Z</dc:date>
    </item>
    <item>
      <title>Re: Dynamically Creating Workflow Approvals for Multiple Users</title>
      <link>https://www.servicenow.com/community/developer-forum/dynamically-creating-workflow-approvals-for-multiple-users/m-p/1416981#M73907</link>
      <description>&lt;P&gt;Thank you very, very much jmiskey--I truly appreciate your help! Is there any way you can share the business rule script that you used to change the value of the field to TRUE or how you implemented it into your other business rule?&lt;/P&gt;</description>
      <pubDate>Tue, 30 Apr 2019 13:52:06 GMT</pubDate>
      <guid>https://www.servicenow.com/community/developer-forum/dynamically-creating-workflow-approvals-for-multiple-users/m-p/1416981#M73907</guid>
      <dc:creator>bdsibert</dc:creator>
      <dc:date>2019-04-30T13:52:06Z</dc:date>
    </item>
  </channel>
</rss>

