使用JavaScript在到期日前一天触发电子邮件

时间:2019-03-29 09:56:26

标签: javascript servicenow

我需要在到期日前1天将电子邮件发送给受让人。我有此代码,但此方法将电子邮件发送到所有记录,而不是到明天到期。

while(gr.next()) {
    var u_loaner_return_date = gr.getValue("u_loaner_return_date");
    var today_date = gs.daysAgo(1);
    if(u_loaner_return_date > today_date) {
        gs.eventQueue('Asset_Loaner_Email_BeforeDueDate', gs, gs.getUserID());
    }
}

电子邮件应仅针对结束日期为明天的那些记录触发。

2 个答案:

答案 0 :(得分:1)

完成此任务的一种方法是创建一个计划的作业,该作业在执行时会查找下一个在24小时内到期的记录,并触发发送通知的事件。

下面的脚本查找任务表上所有记录,这些记录的到期日期是从现在开始的24小时到现在的24小时15分钟。该查询看起来像this。对于找到的每个记录,它将触发一个事件,并传递记录本身,并将assigned_to作为参数。计划的作业设置为每15分钟运行一次。

根据您的喜好随意操作以下脚本,并将其添加到计划作业的脚本字段中。

var gr = new GlideRecord('task');
gr.addEncodedQuery('due_dateRELATIVEGE@minute@ahead@1440^due_dateRELATIVELT@minute@ahead@1555');
gr.query();

while (gr.next()) {

    gs.eventQueue('due_date.approaching.event', gr, gr.assigned_to);

}

注释:

sysauto表上创建作业时,如果系统提示您执行此操作,则需要选择“自动运行所选脚本”。

可以通过在要查询的表的列表视图中使用过滤器来获取addEncodedQuery()函数的查询字符串。选择过滤器后,运行过滤器。在上一个查询中,right click and select "Copy query"

答案 1 :(得分:0)

gr.getValuegs.daysAgo都返回字符串,因此您在if(u_loaner_return_date > today_date)中所做的比较只是比较两个字符串。

您真正想要的是比较两个日期,或使用将字符串值作为日期进行比较的API。快速更改是使用ServiceNow API gs.dateDiff(startDate, endDate, returnNumericSeconds)

if (gs.dateDiff(u_loaner_return_date, today_date, true) < 0)
    //...u_loaner_return_date is after today_date ...

如果您需要更具体的逻辑(如果您想知道自己是否是1天前,而不仅仅是任何天,我想您可能会这样做),返回值{{ 1}},当您添加gs.dateDiff作为第三个参数时,是秒数之差;如果第一个arg在第二个arg之前,则为正;否则为负。