2016-11-21 111 views
0

我目前正在研究一個名爲「read_incident」的角色,該角色應該允許EES用戶讀取其分配組的事件。Servicenow使用ACL和業務規則來讀取事件表

爲此我做了以下內容:

  • 創建角色「read_incident」
  • 分配的角色組「服務檯」
  • 創建了一個用戶說:「丹尼斯」,並補充他「服務Desk「組
  • 修改了查詢事件使用addorcondition的業務規則包含了我的」read_incident「角色來讀取事件。 (現在你要麼有「ITIL角色」,還是「read_incident」的角色來讀取事件。
  • 創建動態過濾的ACL來讀取事件,如果分配組是我的集團之一。

現在我使用分配給「服務檯」組的事件列表報告創建了一個主頁。

作爲管理員,我可以看到所有的事件,但當我模擬「Denis」時,事件列表報告以下「無記錄

因此,沒有任何東西阻止我閱讀事件,但不知何故沒有數據匹配。 我試圖創建一個新的事件並將其分配給「服務檯」,但仍然不會爲用戶「Denis」顯示此事件。

我知道到現在爲止什麼: - 業務規則爲100%的工作,因爲沒有「數據被封殺」 - 我可以通過查詢事件表

業務規則:

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); 
} 
+0

您能否提供業務規則的腳本? – Joey

+0

你好,喬伊,當然,我添加了我的規則。 – RayofCommand

回答

2

您的業務規則不正確:gs.hasRole()方法返回true或false,不能使用方法addOrCondition()那裏。如果句子在您的中也有錯誤,則在該條件結束時需要另一個「)」。

嘗試以下操作:

業務規則條件

(!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); 

這是更好地使用條件字段可能時,它提高了性能。我不確定業務規則腳本是否滿足您的需求,我認爲您應該檢查用戶是否是當前assignment_group的成員,對不對?

+0

是的,你是對的,現在它工作。 – RayofCommand