2011-10-05 104 views

回答

0

工作流運行時必須知道在執行之前要運行的活動。所以你不能做到以下幾點:

protected override void Execute(NativeActivityContext context) 
{ 
    context.ScheduleActivity(new MyActivity()); 
} 

不幸的是,這同樣適用於一個ActivityActionActivityFunc的處理程序。這些還必須在調用CacheMetadata期間設置並呈現給運行時。

唯一可能的解決方案是實現IActivityTemplateFactory,並在設計時將其設計時的一些實現提供給設計階段,並且可能會在調用CacheMetadata期間通過檢查當前工作流並相應地進行響應來更新您的子項用運行時註冊孩子。

+0

糾正我,如果我錯了,但我不認爲這適用於從運行時發現的程序集加載的活動(或來自鬆散的XAML)。如果可以這樣做,那會很好,但是我試圖避免使用WorkflowInvoker路由 - 我希望將子活動加載到現有工作流中,以便從已加載的擴展中受益。 在CacheMetadata期間檢查當前工作流在運行時相應地發揮作用,但聽起來很有希望。要加載的活動類型在設計時設置,但在運行時才需要加載。 – Jimit

1

不可能,但您可以使用Microsoft.Activities中內置的InvokeWorkflow/LoadActivity支持。請參閱How To Invoke a Child Workflow as XAML

+0

謝謝羅恩。 這與我目前使用的解決方案類似。不過,我最好喜歡將子活動以某種方式注入現有工作流,以便利用現有的工作流擴展等。 – Jimit

+0

在運行時不可能修改活動樹。您可以將擴展傳遞給調用子工作流的WorkflowInvoker。 –

相關問題