Come posso ottenere un elenco di possibili transizioni per un determinato ruolo in un flusso di lavoro della macchina a stati?
-
03-07-2019 - |
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.
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();
}