在给定的状态机工作流程中,我们如何找出给定角色的可能转换。在我的场景中,只有某些角色有权执行某些活动。我必须得到那个清单。辅助类StateMachineWorkflowInstance
在这里没有用,因为它只是返回所有可能的转换,而忽略了演员的角色。
这里的任何帮助将不胜感激。
谢谢,苏格拉底。
在给定的状态机工作流程中,我们如何找出给定角色的可能转换。在我的场景中,只有某些角色有权执行某些活动。我必须得到那个清单。辅助类StateMachineWorkflowInstance
在这里没有用,因为它只是返回所有可能的转换,而忽略了演员的角色。
这里的任何帮助将不胜感激。
谢谢,苏格拉底。
看起来没有直接的方法可以做到这一点。我大致根据Ruurd Boeke 博客上的解决方案编写了这个方法。我正在获取可能事件的列表,然后查看它们是否可以由用户角色执行。这是一种解决方法,但仍然可以正常工作。
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();
}