2009-03-05 3 views
0

Sur un workflow de machine d'état donné, comment trouver les transitions possibles pour un rôle donné. Dans mon scénario, seuls certains rôles ont la permission d'effectuer certaines activités. Je dois avoir cette liste. La classe d'assistance StateMachineWorkflowInstance n'est pas utile ici car elle retourne juste toutes les transitions possibles, en ignorant le rôle de l'acteur.Comment puis-je obtenir une liste des transitions possibles pour un rôle donné dans un workflow de machine d'état?

Toute aide ici serait appréciée.

Merci, Socratees.

Répondre

0

On dirait qu'il n'y a pas de moyen simple de le faire. J'ai écrit cette méthode basée à peu près sur la solution au Ruurd Boeke's blog. Je reçois la liste des événements possibles, puis je regarde s'ils peuvent être exécutés par le rôle de l'utilisateur. C'est un travail autour, mais fonctionne toujours bien.

public string[] GetTransistions(string strUser) 
{ 
    string[] strRoles = System.Web.Security.Roles.GetRolesForUser(strUser); 
    List<string> strActivity = new List<string>(); 
    ReadOnlyCollection<WorkflowQueueInfo> queues = workflowInstance.GetWorkflowQueueData(); 
    foreach (WorkflowQueueInfo info in queues) 
    { 
     if (!info.QueueName.Equals("SetStateQueue")) 
     { 
      foreach (string subscribedActivity in info.SubscribedActivityNames) 
      { 
       HandleExternalEventActivity heea = workflowInstance.GetWorkflowDefinition().GetActivityByName(subscribedActivity) as HandleExternalEventActivity; 

       #region check roles 
       if (heea.Roles != null) 
       { 
        foreach (WorkflowRole workflowRole in heea.Roles) 
        { 
         foreach (string strRole in strRoles) 
         { 
          if (workflowRole.Name.Equals(strRole)) 
          { 
           strActivity.Add(heea.EventName); 
           //permissionLog += workflowRole.Name + " can perform " + heea.EventName + " Activity. "; 
          } 
         } 
        } 
       } 
       #endregion 
      } 
     } 
    } 
    return strActivity.ToArray(); 
} 
Questions connexes