Approver process on demands for approvers stakeholders

Rajeshshardul
Tera Expert

Hi Everyone,

 

Configured BR's and Properties as per community suggestion.

 

But Facing the below issues,

 

1. Approvers are getting added twice.

2. Once Approvers approving the state of demand not changing into Approved.

3. When Refreshing window Same Approver ID adding again.

 

Business Rules:

BR Name - Demand Approval Request

When to Run - After with update and condition added as state = Qualified

Script:

(function executeRule(current, previous /*null when async*/ ) {
    var grStakeHolder = new GlideRecord('dmn_m2m_demand_stakeholder');
    grStakeHolder.addQuery('demand', current.sys_id);
    grStakeHolder.addQuery('approver', 'yes');
    grStakeHolder.query();
    while (grStakeHolder.next()) {
        var grApproval = new GlideRecord('sysapproval_approver');
        grApproval.initialize();
        grApproval.approver = grStakeHolder.stakeholder.user;
        grApproval.state = 'requested';
        grApproval.source_table = current.sys_class_name; // Not hard coded to support TeamSpaces
        grApproval.document_id = current.sys_id;
        grApproval.sysapproval = current.sys_id;
        grApproval.insert();
    }
})(current, previous);

Rajeshshardul_0-1769093666950.png

 

Rajeshshardul_1-1769093666940.png

 

 

BR Name: Demand Approved

When to Run: Before Update and condition is Approval changes to Approved.

Action did set as : State is Approved.

Rajeshshardul_2-1769093667172.png

 

 

Rajeshshardul_3-1769093667154.png

 

Demand 

  1. System Properties -> Approval Engines
  2. Did Update Demand Approval Engine to: Approval Rule

 

Rajeshshardul_4-1769093666876.png

 

 Issue Snapshots:

Initially it is adding id two times and once approved and then after screen refreshing adding id's again and again. 

Rajeshshardul_5-1769093666918.png

 

Rajeshshardul_6-1769093666942.png

 

State value is not changing

Rajeshshardul_7-1769093666864.png

 

Please help me on it.

1 ACCEPTED SOLUTION

Rajeshshardul
Tera Expert

Fixed issue with below script.

1. Business Rule Name: Demand Approved

When to Run: After with update and condition is state changes to Approved

Script: 

(function executeRule(current, previous) {
    // Run only when approval is approved
    if (current.state != 'approved')
        return;
    // Get Demand record
    var demand = new GlideRecord('dmn_demand');
    if (!demand.get(current.sysapproval))
        return;
 
    // Check if any approvals are still pending
    var pending = new GlideRecord('sysapproval_approver');
    pending.addQuery('sysapproval', demand.sys_id);
    pending.addQuery('state', '!=', 'approved');
    pending.query();
 
    // If all approvals are approved
    if (!pending.hasNext()) {
        demand.setValue('state', '8');
        demand.setValue('approved_start_date',demand.getValue('start_date'));
        demand.setValue('approved_end_date',demand.getValue('requested_by'));
        demand.update();
    }
})(current, previous);
 
2. 

Business Rule Name: Demand Approval Request

When to Run: After with update and condition is state changes to Qualified

Script: 

(function executeRule(current, previous) {
 
    var grStakeHolder = new GlideRecord('dmn_m2m_demand_stakeholder');
    grStakeHolder.addQuery('demand', current.sys_id);
    grStakeHolder.addQuery('approver', 'yes');
    grStakeHolder.query();
 
    while (grStakeHolder.next()) {
 
        // 🔍 Check if approval already exists
        var grApprovalCheck = new GlideRecord('sysapproval_approver');
        grApprovalCheck.addQuery('sysapproval', current.sys_id);
        grApprovalCheck.addQuery('approver', grStakeHolder.stakeholder.user);
        grApprovalCheck.query();
 
        if (!grApprovalCheck.hasNext()) {
 
            var grApproval = new GlideRecord('sysapproval_approver');
            grApproval.initialize();
            grApproval.approver = grStakeHolder.stakeholder.user;
            grApproval.state = 'requested';
            grApproval.source_table = current.sys_class_name;
            grApproval.sysapproval = current.sys_id;
            grApproval.insert();
        }
    }
 
})(current, previous);
 

Demand 

  1. System Properties -> Approval Engines
  2. Did Update Demand Approval Engine to: Approval Rule

 

Rajeshshardul_0-1769151493088.png

 

 

View solution in original post

5 REPLIES 5

Rajeshshardul
Tera Expert

Fixed issue with below script.

1. Business Rule Name: Demand Approved

When to Run: After with update and condition is state changes to Approved

Script: 

(function executeRule(current, previous) {
    // Run only when approval is approved
    if (current.state != 'approved')
        return;
    // Get Demand record
    var demand = new GlideRecord('dmn_demand');
    if (!demand.get(current.sysapproval))
        return;
 
    // Check if any approvals are still pending
    var pending = new GlideRecord('sysapproval_approver');
    pending.addQuery('sysapproval', demand.sys_id);
    pending.addQuery('state', '!=', 'approved');
    pending.query();
 
    // If all approvals are approved
    if (!pending.hasNext()) {
        demand.setValue('state', '8');
        demand.setValue('approved_start_date',demand.getValue('start_date'));
        demand.setValue('approved_end_date',demand.getValue('requested_by'));
        demand.update();
    }
})(current, previous);
 
2. 

Business Rule Name: Demand Approval Request

When to Run: After with update and condition is state changes to Qualified

Script: 

(function executeRule(current, previous) {
 
    var grStakeHolder = new GlideRecord('dmn_m2m_demand_stakeholder');
    grStakeHolder.addQuery('demand', current.sys_id);
    grStakeHolder.addQuery('approver', 'yes');
    grStakeHolder.query();
 
    while (grStakeHolder.next()) {
 
        // 🔍 Check if approval already exists
        var grApprovalCheck = new GlideRecord('sysapproval_approver');
        grApprovalCheck.addQuery('sysapproval', current.sys_id);
        grApprovalCheck.addQuery('approver', grStakeHolder.stakeholder.user);
        grApprovalCheck.query();
 
        if (!grApprovalCheck.hasNext()) {
 
            var grApproval = new GlideRecord('sysapproval_approver');
            grApproval.initialize();
            grApproval.approver = grStakeHolder.stakeholder.user;
            grApproval.state = 'requested';
            grApproval.source_table = current.sys_class_name;
            grApproval.sysapproval = current.sys_id;
            grApproval.insert();
        }
    }
 
})(current, previous);
 

Demand 

  1. System Properties -> Approval Engines
  2. Did Update Demand Approval Engine to: Approval Rule

 

Rajeshshardul_0-1769151493088.png