现在服务中丢失时间卡的脚本

时间:2016-01-21 09:34:31

标签: javascript servicenow

我需要每周一向位于特定位置的所有用户及其主管发送通知,如果他们错过了填写时间卡,或者时间卡状态未决。

我已经在后台-Script部分测试了以下脚本,对于那周没有在time_card表中输入任何条目的用户,很容易找到。但对于有多个条目处于待处理状态的用户,将向他们发送多个通知。我需要一种方法来按州分组,因此每周只向用户发送一条通知,表示他们的时间卡仍在等待处理。

var qry = 'active=true^location=7e294345ed9cf8c0b8536034d0f12dc7';
var Tqry = 'week_starts_onRELATIVEEE@dayofweek@ago@4';
var PuneUsr = new GlideRecord('sys_user');
PuneUsr.addEncodedQuery(qry);
PuneUsr.query();
gs.print("Pune Users: count" + PuneUsr.getRowCount());

while(PuneUsr.next()){
    var timecard = new GlideRecord('time_card');
    timecard.addQuery('user', PuneUsr.sys_id);
    timecard.addEncodedQuery(Tqry);
   timecard.query();
   if (timecard.getRowCount() == '0'){
   gs.print("row count" + timecard.getRowCount() + "user" + PuneUsr.sys_id.getDisplayValue());
   }
   if (timecard.getRowCount() != '0'){
       while (timecard.next()){
       gs.print("row count" + timecard.getRowCount() + "state" + timecard.getValue('state') + "user" + PuneUsr.sys_id.getDisplayValue() + "</br>" );
       }
   }
   }

我将添加事件注册表来代替print语句并向其附加通知。但截至目前,如果用户有两张待处理的时间卡记录,则会为第二个gs.print打印两个语句。

不确定如何限制它,以便每个用户只创建一个事件。

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的要求,那么您希望只生成一个事件(或者在您的测试脚本的情况下,一个gs.print())PER USER。

以下是一些代码可以为每个用户生成一个事件(在本例中为gs.print()),但会包含有关每个时间卡的所有详细信息(一旦编辑第23行):

//declare msg
var msg = '';
var qry = 'active=true^location=7e294345ed9cf8c0b8536034d0f12dc7';
var Tqry = 'week_starts_onRELATIVEEE@dayofweek@ago@4';
var PuneUsr = new GlideRecord('sys_user');
PuneUsr.addEncodedQuery(qry);
PuneUsr.query();
gs.print("Pune Users: count" + PuneUsr.getRowCount());

while(PuneUsr.next()){
    var timecard = new GlideRecord('time_card');
    timecard.addQuery('user', PuneUsr.sys_id);
    timecard.addEncodedQuery(Tqry);
    timecard.query();
    if (timecard.getRowCount() == '0'){
        gs.print("row count" + timecard.getRowCount() + "user" + PuneUsr.sys_id.getDisplayValue());
    }
    if (timecard.getRowCount() != '0'){
        //add header line only once for each user
        msg += 'You have ' + timecard.getRowCount() + 'timecard(s) pending:<br />'
        while (timecard.next()){
            //add a line to msg for each timecard that matches your query
            msg += 'put in some details about the timecard here, and maybe a link to it.<br />');
        }
        //print out the final result of msg for this user. 
        gs.print(msg);
    }
}

我在添加/修改的每一行上面添加了注释,以便您可以看到我的代码。

这是另一个版本,无论每个用户打开多少张时间卡,都应该只为每个用户发送一条消息:

var qry = 'active=true^location=7e294345ed9cf8c0b8536034d0f12dc7';
var Tqry = 'week_starts_onRELATIVEEE@dayofweek@ago@4';
var PuneUsr = new GlideRecord('sys_user');
PuneUsr.addEncodedQuery(qry);
PuneUsr.query();
gs.print("Pune Users: count" + PuneUsr.getRowCount());

while(PuneUsr.next()){
    var timecard = new GlideRecord('time_card');
    timecard.addQuery('user', PuneUsr.sys_id);
    timecard.addEncodedQuery(Tqry);
    timecard.query();
    if (timecard.getRowCount() == '0'){
        gs.print("row count" + timecard.getRowCount() + "user" + PuneUsr.sys_id.getDisplayValue());
    }
    if (timecard.getRowCount() != '0'){
        //change 'while' to 'if' so it only executes once, regardless of how many records are returned.
        if (timecard.next()){
            gs.print("row count" + timecard.getRowCount() + "state" + timecard.getValue('state') + "user" + PuneUsr.sys_id.getDisplayValue() + "</br>" );
        }
    }
}