簡體   English   中英

將一個活動的OutArgument值傳遞給另一個活動的InArgument?

[英]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 代表在編輯模式中的單個項目 因此,您可以使用RootParentParents屬性遍歷所有工作流程。 然后,您可以編輯每個ModelItem屬性,就像我在上面的示例中向您展示的一樣。 請注意,這非常費力,並且在執行過程中可能需要您做幾個假設。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM