2009-03-05 2 views
0

주어진 상태 머신 워크 플로우에서 주어진 역할에 대한 가능한 전환을 어떻게 발견 할 수 있습니까? 내 시나리오에서는 특정 역할 만 특정 활동을 수행 할 수있는 권한이 있습니다. 그 목록을 가져와야 해. 도우미 클래스 StateMachineWorkflowInstance은 액터의 역할을 무시하고 가능한 모든 전환을 반환하기 때문에 여기서는 도움이되지 않습니다.상태 시스템 워크 플로에서 주어진 역할에 대한 가능한 전환 목록을 얻으려면 어떻게합니까?

여기에 도움을 주시면 감사하겠습니다.

감사합니다. 소크라테스.

답변

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(); 
} 
관련 문제