2016-11-21 2 views
0

Je travaille actuellement sur un rôle appelé "read_incident" qui devrait permettre aux utilisateurs EES de lire les incidents de leur groupe d'affectation.Servicenow Travailler avec les ACL et les règles métier pour lire la table des incidents

ainsi tous je l'ai fait ce qui suit:

  • a créé un rôle "read_incident"
  • attribué le rôle de groupe "Service Desk"
  • créé un utilisateur "Denis" et l'a ajouté au « Service Desk "group
  • a modifié l'incident de requête Règle métier en utilisant une condition supplémentaire pour inclure mon rôle" read_incident "pour lire les incidents. (Maintenant que vous avez soit le « rôle itil », ou le rôle « read_incident » pour lire les incidents.
  • créé une ACL avec filtre dynamique pour lire des incidents si le groupe d'affectation est l'un de mes groupes.

maintenant J'ai créé une page d'accueil en utilisant une jauge d'un rapport de liste des incidents qui sont assignés au groupe "service desk"

En tant qu'administrateur, je peux voir tous les incidents bien sûr, mais quand je personnifie "Denis", la liste des incidents le suivant "Aucun enregistrement à afficher"

Donc, rien ne me bloque à la lecture des incidents, mais d'une manière ou d'une autre, il n'y a pas de correspondance de données. J'ai essayé de créer un nouvel incident et de l'assigner au "service desk" mais cet incident n'est toujours pas visible pour l'utilisateur "Denis".

Ce que je sais jusqu'à présent: - règle d'affaires travaille à 100%, car aucune « données est bloqué » - Je peux interroger la table des incidents

La règle d'entreprise:

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

Pouvez-vous fournir le script de la règle métier? – Joey

+0

Bonjour Joey, bien sûr, j'ai ajouté ma règle. – RayofCommand

Répondre

2

Votre entreprise la règle n'est pas correcte: La méthode gs.hasRole() renvoie true ou false, vous ne pouvez pas utiliser la méthode addOrCondition(). Il y a aussi une erreur dans votre phrase si, il faut un autre ")" à la fin de la condition.

les opérations suivantes:

Business Rule Condition

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

Script

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

Il est préférable d'utiliser le champ Condition lorsque cela est possible, il améliore les performances. Je ne suis pas sûr si le script de règles métier répond à vos besoins, je pense que vous devriez vérifier si l'utilisateur est membre du groupe d'affectation en cours, n'est-ce pas?

+0

oui, vous avez raison, maintenant cela fonctionne. – RayofCommand