[英]Pass OutArgument value of one activity to InArgument of another activity?
有沒有一種方法可以將一個活動的OutArgument值傳遞給另一個活動的InArgument? 還是可以在設計時基於拖動活動的OutArguments在根活動容器中自動創建局部變量,該變量可以用於自動使用擴展來備份OutArgument的值?
我知道使用標准方式在WF4中看起來不可能。 但是,有一些瘋狂的方法可以做到這一點嗎? 還是模擬類似WF3的方式?
請發表您的任何想法。
謝謝
亞東
如果您希望在設計時就已經充滿了所有變量和活動的工作流程,則可以使用IActivityTemplateFactory進行鍛煉。
public class TwoActivitiesBundle : IActivityTemplateFactory
{
public Activity Create(DependencyObject target)
{
return new Sequence
{
Variables =
{
new Variable<int>("addResult"),
},
Activities =
{
new Add<int, int, int>
{
Left = 10,
Right = 10,
Result = new VisualBasicReference<int>("addResult")
},
new WriteLine { Text = "Now I'll use 'addResult', as a value on the next activity" },
new Subtract<int, int, int>
{
Left = new VisualBasicValue<int>("addResult"),
Right = 10,
},
new WriteLine { Text = new VisualBasicValue<string>("\"Print addResultValue: \" & addResult")}
}
};
}
}
簡而言之, IActivityTemplateFactory允許您將已經構建並填充的活動拖放到設計器中。 然后,將您的工廠(在本例中為TwoActivitiesBundle )添加到設計器的工具箱中,就像其他任何活動一樣:
new ToolboxItemWrapper(typeof(TwoActivitiesBundle), null, "My Bundle");
如果您確實想向父容器添加變量,則可以使用Create()
方法上收到的target
參數遍歷工作流並找到此類容器。
這是一個示例,假定您將TwoActivitiesBundle
Sequence中並向其中添加一個變量:
public class TwoActivitiesBundle : IActivityTemplateFactory { public Activity Create(DependencyObject target) { var sequenceModelItem = (target as WorkflowViewElement).ModelItem; sequenceModelItem .Properties["Variables"] .Collection .Add(new Variable<string>("myFirstDesignTimeVariable", "var text here")); // This activity writes "I've just created a new variable: var text here" to the console return new WriteLine { Text = new VisualBasicValue<string>("\\"I've just created a new variable: \\" & myFirstDesignTimeVariable"); } } }
正如你可以看到這里 ,ModelItem 代表在編輯模式中的單個項目 。 因此,您可以使用Root , Parent和Parents屬性遍歷所有工作流程。 然后,您可以編輯每個ModelItem屬性,就像我在上面的示例中向您展示的一樣。 請注意,這非常費力,並且在執行過程中可能需要您做幾個假設。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.