Arguments 是工作流與外部溝通的介面。本文詳細說明 In、Out、In/Out 參數在 XAML 與 Code 兩種定義方式下的建立、啟動傳值、完成取值完整流程。
Name:參數名稱Direction:In / Out / InOutArgumentType:資料型別DefaultValue:In 參數可用運算式,Out/InOut 無預設值IsRequired:是否必填

InArgument<T>Dictionary<string, object> 傳入Assign 可指派值Completed 事件中透過 Outputs 取得定義 v1, v2, v3: double,啟動傳入 v1, v2,Assign v3 = v1 + v2,WriteLine(v3)。
static void StartValueInWorkflow()
{
var dic = new Dictionary<string, object> { {"v1", 123.456}, {"v2", 456.789} };
var instance = new WorkflowApplication(new StartValueInWorkflow(), dic);
instance.Run();
}

public sealed class InArgumentActivity : CodeActivity
{
public InArgument<string> MyIn { get; set; }
protected override void Execute(CodeActivityContext context)
{
Console.WriteLine(context.GetValue(this.MyIn));
Console.WriteLine(MyIn.Get(context));
}
}
XAML 定義 myValue 參數,啟動傳入,綁定至 InArgumentActivity.MyIn。

Completed 事件中透過 e.Outputs["參數名"] 取得Assign 可指派值
定義 v1, v2: In、v3: Out,啟動傳入 v1, v2,Assign v3 = v1 + v2,Completed 列印 e.Outputs["v3"]。

public sealed class OutArgumentActivity : CodeActivity
{
public OutArgument<string> MyOut { get; set; }
protected override void Execute(CodeActivityContext context)
{
var s1 = MyOut.Get(context);
MyOut.Set(context, "wxd" + s1);
var s2 = context.GetValue(MyOut);
context.SetValue(MyOut, "lzm" + s2);
}
}
綁定至工作流變數 myVariable,WriteLine(myVariable)。

Completed 事件中取得Assign 可指派值
定義 v1, v2, v3: InOut,啟動全傳入,Assign v3 = v1 + v2 + v3,Completed 列印 e.Outputs["v3"]。

public sealed class InOutArgumentActivity : CodeActivity
{
public InOutArgument<string> MyInOut { get; set; }
protected override void Execute(CodeActivityContext context)
{
var s2 = context.GetValue(MyInOut);
context.SetValue(MyInOut, "wxd:" + s2);
}
}
工作流變數 myVariable="wxwinter",列印前後值。
