Servicenow 使用 ACL 和业务规则读取事件 table

Servicenow Working with ACLs and Business Rules to read Incident table

我目前正在开发一个名为 "read_incident" 的角色,该角色应允许 EES 用户读取其分配组的事件。

因此我做了以下事情:

现在我使用分配给 "service desk" 组的事件列表报告的量表创建了一个主页。

作为管理员,我当然可以看到所有事件。但是当我冒充"Denis"时,事件列表报告如下“No records to display

所以没有什么能阻止我阅读事件,但不知何故没有数据匹配。 我尝试创建一个新事件并将其分配给 "service desk",但用户 "Denis".

仍然看不到该事件

到目前为止我所知道的: - 业务规则 100% 有效,因为没有 "data is blocked" - 我可以查询事件 table

业务规则:

if (!gs.hasRole("itil").addOrCondition(!gs.hasRole("read_incident") && gs.isInteractive()) {
  var u = gs.getUserID();
  var qc = current.addQuery("caller_id", u).addOrCondition("opened_by", u).addOrCondition("watch_list", "CONTAINS", u);
  gs.print("query restricted to user: " + u);
}

您的业务规则不正确:gs.hasRole() 方法 returns true or false,您不能使用方法 addOrCondition () 那里。你的if语句也有错误,需要在条件末尾加一个")"。

尝试以下操作:

业务规则条件

(!gs.hasRole("itil") || !gs.hasRole("read_incident")) && gs.isInteractive()

脚本

(function executeRule(current, previous /*null when async*/) {

    var u = gs.getUserID();
    current.addQuery("caller_id", u).addOrCondition("opened_by", u).addOrCondition("watch_list", "CONTAINS", u);

})(current, previous);

最好尽可能使用Condition字段,这样可以提高性能。我不确定业务规则脚本是否满足您的需求,我认为您应该检查用户是否是当前assignment_group的成员,对吗?