我需要每周一向位于特定位置的所有用户及其主管发送通知,如果他们错过了填写时间卡,或者时间卡状态未决。
我已经在后台-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打印两个语句。
不确定如何限制它,以便每个用户只创建一个事件。
答案 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>" );
}
}
}