如何在状态机工作流程中获取给定角色的可能转换列表?

时间:2009-03-05 14:24:38

标签: c# .net-3.5 workflow-foundation

在给定的状态机工作流程中,我们如何找出给定角色的可能转换。在我的场景中,只有某些角色具有执行某些活动的权限。我必须得到那份清单。辅助类StateMachineWorkflowInstance在这里没有帮助,因为它只返回所有可能的转换,忽略了actor的角色。

任何帮助都将不胜感激。

谢谢, Socratees。

1 个答案:

答案 0 :(得分:0)

看起来没有直接的方法来做到这一点。我大致基于Ruurd Boeke's blog的解决方案编写了这个方法。我正在获取可能事件的列表,然后查看它们是否可以由用户角色执行。这是一个解决方案,但仍然可以正常工作。

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