Comment obtenir une liste des transitions possibles pour un rôle donné dans un flux de travail de machine à états?

StackOverflow https://stackoverflow.com/questions/614969

Question

Sur un workflow de machine à états donné, comment découvrir les transitions possibles pour un rôle donné. Dans mon scénario, seuls certains rôles sont autorisés à effectuer certaines activités. Je dois obtenir cette liste. La classe d'assistance StateMachineWorkflowInstance n'est pas utile ici car elle renvoie simplement toutes les transitions possibles, en ignorant le rôle de l'acteur.

Toute aide ici serait appréciée.

Merci, Socrate.

Était-ce utile?

La solution

On dirait qu’il n’existe pas de solution simple pour ce faire. J'ai écrit cette méthode sur la base de la solution proposée à l'adresse blog de Ruurd Boeke . Je reçois la liste des événements possibles, puis je cherche à savoir s'ils peuvent être exécutés par le rôle d'utilisateur. C'est un moyen de contourner le problème, mais ça 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();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top