Help replacing GlideAggragate to Flow Designer

AnaBeatrizA
Tera Guru

Hi guys,

Can someone please help me transform this GlideAggregate code to use with as Flow desginer flow?

var pendingRes = new GlideAggregate('sn_plng_att_core_resource_assignment');
pendingRes.addQuery('resource_status', 'pending');
pendingRes.addQuery('group_resource.manager', '!=', '');
pendingRes.groupBy('group_resource.manager');
pendingRes.addAggregate('COUNT');
pendingRes.query();
while (pendingRes.next()) {

var msg = pendingRes.getValue('group_resource.manager.name') + " has " + pendingRes.getAggregate('COUNT') + " pending approvals.";
gs.info(msg);
}


Thanks!

4 REPLIES 4

Martin Friedel
Mega Sage

Hello, 

 

for using GlideAggregate in Flow Designer you should create custom flow action.

Check this video created by Robert Fedoruk: Build a custom Flow Action to do Aggregation in ServiceNow Flow Designer 

 

Official ServiceNow documentation: Building actions 

 

If my answer helped you, please mark it as correct and helpful, thank you 👍
Martin

maheshkhatal
Mega Sage

@AnaBeatrizA This is how I would construct it:

Flow Structure in Flow Designer:

  1. Trigger: Manual or Scheduled Trigger(Provide table name)
  2. Lookup Records: Fetch pending resource assignments and all other conditions
  3. Script Action: Count occurrences per manager(Little bit coding part is required) Configure input/output steps
  4. Loop: Iterate over the dictionary and generate messages
  5. Log Message / Notification: Send alerts to managers (if required)

Mark my response as helpful if it resolves your doubt.

 

Thank you,

Mahesh.

sunil maddheshi
Tera Guru

@AnaBeatrizA 

I think you can write script action:

(function execute(inputs, outputs) {

    var pendingRes = new GlideAggregate('sn_plng_att_core_resource_assignment');
    pendingRes.addQuery('resource_status', 'pending');
    pendingRes.addQuery('group_resource.manager', '!=', '');
    pendingRes.groupBy('group_resource.manager');
    pendingRes.addAggregate('COUNT');
    pendingRes.query();

    var messages = [];

    while (pendingRes.next()) {
        var managerName = pendingRes.getValue('group_resource.manager.name');
        var count = pendingRes.getAggregate('COUNT');
        var msg = managerName + " has " + count + " pending approvals.";
        messages.push(msg);
    }

    outputs.result = messages.join("\n"); // Pass results to Flow Designer
})(inputs, outputs);

Please mark correct/helpful if this helps you 

Thank you Sunil, that was really helpful but I need to send it individually. For each manager. The result you're showing has only one message. How could I separate like: send a email to manager x that has 12 pending approvals, send another email to manager y that has 16 pending approvals?