Как я могу получить список возможных переходов для данной роли в рабочем процессе конечного автомата?
-
03-07-2019 - |
Вопрос
Как нам определить возможные переходы для данной роли в заданном рабочем процессе конечного автомата?В моем сценарии только определенные роли имеют разрешение на выполнение определенных действий.Я должен получить этот список.Вспомогательный класс StateMachineWorkflowInstance
здесь это бесполезно, поскольку оно просто возвращает все возможные переходы, игнорируя роль актера.
Любая помощь здесь была бы признательна.
Спасибо, Сократи.
Решение
Похоже, прямого способа сделать это не существует.Я написал этот метод, основанный примерно на решении в Блог Руурда Боеке .Я получаю список возможных событий, а затем смотрю, могут ли они быть выполнены ролью пользователя.Это обходной путь, но все равно работает нормально.
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();
}
Не связан с StackOverflow