Come posso ottenere un elenco di possibili transizioni per un determinato ruolo in un flusso di lavoro della macchina a stati?

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

Domanda

Su un determinato flusso di lavoro della macchina a stati, come possiamo scoprire le possibili transizioni per un determinato ruolo. Nel mio scenario, solo alcuni ruoli hanno il permesso di svolgere determinate attività. Devo ottenere quella lista. La classe helper StateMachineWorkflowInstance non è utile qui in quanto restituisce solo tutte le possibili transizioni, ignorando il ruolo dell'attore.

Qualsiasi aiuto qui sarebbe apprezzato.

Grazie, Socratees.

È stato utile?

Soluzione

Sembra che non ci sia un modo semplice per farlo. Ho scritto questo metodo basandomi più o meno sulla soluzione nel Ruurd Boeke's blog . Ricevo l'elenco di possibili eventi e quindi cerco che possano essere eseguiti dal ruolo utente. È una soluzione, ma funziona ancora bene.

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();
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top