首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >服务中丢失考勤卡的脚本

服务中丢失考勤卡的脚本
EN

Stack Overflow用户
提问于 2016-01-21 17:34:31
回答 1查看 421关注 0票数 0

我需要在每个星期一向位于特定位置的所有用户发送通知,如果他们错过了填写考勤卡,或者考勤卡状态为挂起。

我已经在Background -Script部分测试了下面的脚本,对于那一周在time_card表中没有任何条目的用户来说,很容易找到。但对于有多个条目处于挂起状态的用户,将向他们发出多个通知。我需要一种方法来按状态分组,这样每周只有一个通知发送给用户,表明他们的考勤卡仍然悬而未决。

代码语言:javascript
运行
复制
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打印两条语句。

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

EN

回答 1

Stack Overflow用户

发布于 2016-01-29 05:09:06

如果我正确理解了您的需求,那么您希望为每个用户只生成一个事件(或者在上面的测试脚本中,生成一个gs.print())。

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

代码语言:javascript
运行
复制
//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);
    }
}

我在添加/修改的每一行上都添加了注释,这样您就可以看到哪些代码是我的。

这是另一个版本,它应该只给每个用户吐出一条消息,无论他们打开了多少张考勤卡:

代码语言:javascript
运行
复制
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>" );
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34919924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档