我需要在每个星期一向位于特定位置的所有用户发送通知,如果他们错过了填写考勤卡,或者考勤卡状态为挂起。
我已经在Background -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打印两条语句。
不确定如何限制,以便每个用户只创建一个事件。
发布于 2016-01-29 05:09:06
如果我正确理解了您的需求,那么您希望为每个用户只生成一个事件(或者在上面的测试脚本中,生成一个gs.print())。
以下代码将为每个用户生成一个事件(在本例中为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>" );
}
}
}
https://stackoverflow.com/questions/34919924
复制相似问题