如何通过更改请求字段过滤任务的 GlideRecord 查询

How do I filter a GlideRecord Query for tasks by a Change Request Field

我有代码应该 return 在执行时发生的某些 CI 的所有已批准更改。这个想法是查询 task_ci table 并点走到我需要的各个字段。这是代码:

    var changes = new GlideRecord('task_ci');
    changes.addQuery('task.sys_class_name', 'change_request');
    changes.addQuery('task.approval','approved');
    changes.addQuery('ci_item', 'IN', items.join(','));
    changes.addQuery('task.active', true);
    changes.addQuery('task.start_date','<=', gs.nowDateTime());
    changes.addQuery('task.end_date','>=', gs.nowDateTime());
    changes.query();

除开始和结束日期部分外,代码似乎工作正常。它几乎忽略了那些。我的猜测是,由于 start_date 和 end_date 实际上在更改请求表(从任务扩展)上,因此无法通过这种方式访问​​它们。有没有办法在我的查询中使用这些字段?

更改 start_date 和 end_date 不能直接在 task_ci table 上使用。您需要遍历更改请求 table 并获取它。要获得实际查询,您可以在 table 上应用过滤器并复制其查询。

查询:

  task.ref_change_request.start_date<=javascript:gs.nowDateTime()^task.ref_change_request.end_date>=javascript:gs.nowDateTime()

Filter

查询已修改为符合您现在的条件(当前 date/time)并应用于脚本,如下所示。

    var changes = new GlideRecord('task_ci');
    changes.addQuery('task.sys_class_name', 'change_request');
    changes.addQuery('task.approval','approved');
    changes.addQuery('ci_item', 'IN', items.join(','));
    changes.addQuery('task.active', true);
    changes.addEncodedQuery('task.ref_change_request.start_date<=javascript:gs.nowDateTime()^task.ref_change_request.end_date>=javascript:gs.nowDateTime()');
    changes.query();

这是脚本的 addQuery() 版本

    var changes = new GlideRecord('task_ci');
    changes.addQuery('task.sys_class_name', 'change_request');
    changes.addQuery('task.approval','approved');
    changes.addQuery('task.active', true);
    changes.addQuery('task.ref_change_request.start_date', '<=', 'javascript:gs.nowDateTime()');
    changes.addQuery('task.ref_change_request.end_date', '>=', 'javascript:gs.nowDateTime()');
    changes.query();