Как я могу получить список возможных переходов для данной роли в рабочем процессе конечного автомата? - PullRequest
0 голосов
/ 05 марта 2009

Как определить возможные переходы для данной роли в заданном рабочем процессе конечного автомата. В моем сценарии только определенные роли имеют разрешение на выполнение определенных действий. Я должен получить этот список. Вспомогательный класс StateMachineWorkflowInstance здесь не полезен, поскольку он просто возвращает все возможные переходы, игнорируя роль актера.

Любая помощь здесь будет оценена.

Спасибо, Socratees.

1 Ответ

0 голосов
/ 05 марта 2009

Похоже, что нет прямого способа сделать это. Я написал этот метод, основываясь примерно на решении, в блоге Руурда Боке . Я получаю список возможных событий, а затем смотрю, могут ли они быть выполнены ролью пользователя. Это обходной путь, но все еще работает нормально.

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();
}
...