2012-09-21 2 views
1

레거시 워크 플로 시스템을 WF4로 변환하므로 응용 프로그램의 API와 일치하도록 두 번 뛴다. 그래서 문제를 가능한 한 간단하게 유지하려고 노력할 것입니다. :)자식 작업 하위 트리 가져 오기

저는 시퀀스를 인수로 취한 후 실행합니다. 이를 실행하기 전에 커스텀 액티비티는 특정 유형의 자식 액티비티를 찾는 시퀀스 (및 브랜치 등)를 트래버스해야합니다. 그런 다음 이러한 특정 자식 액티비티에 대한보고를 수행합니다.

제약 조건이 GetChildSubtree 활동을 사용할 수있는 유효성 검사 시간 동안 활동의 하위 하위 트리를 통과하는 것이 가능하다는 것을 알고 있지만 런타임에 목록에 대한 액세스 권한을 부여하지 않습니다. 또한 호스트 응용 프로그램에서 ActivityValidationServices를 사용하여 유사한 호출을 실행할 수도 있지만 내 시나리오에서는 작동하지 않습니다.

그래서 사용자 정의 액티비티의 실행 메소드 내에서 하위 트리의 액티비티 목록을 가져 오는 가장 좋은 방법은 무엇입니까?

미리 감사드립니다.

마커스.

답변

2

WorkflowInspectionServices 클래스를 살펴보고 은 활동 트리의 런타임 메타 데이터 작업 방법을 제공합니다. 특히 GetActivities 방법.

GetActivities는 활동, 대리자 처리기, 변수 기본값 및 인수 식을 포함하여 활동의 모든 직접 하위를 반환합니다. 이제 내부 지점을 포함한 모든 활동을 반환하는 확장 메서드를 작성할 수 있습니다

public static IEnumerable<Activity> GetInnerActivities(this Activity activity) 
{ 
    var children = WorkflowInspectionServices.GetActivities(activity); 

    foreach (var child in children) 
    { 
     children = children.Concat(child.GetChildren()); 
    } 

    return children; 
} 

지금 지정된 형식의 모든 활동의 내부 활동을 얻을 :

activity.GetInnerActivities().OfType<MySpecificType>(); 
+0

을 그래. 그럴거야. Jota 대단히 감사합니다. – Marcus

관련 문제