最も直感的でおそらく正しい方法は、フローチャート レベルで宣言している変数をカスタム アクティビティ内に渡すことです。次に、その値で好きなことをして、それを返すことができます。
カスタム インクリメント アクティビティの例 (Assign アクティビティも同様に動作します):
public class IncrementActivity : CodeActivity<int>
{
[RequiredArgument]
public InArgument<int> CountVariable { get; set; }
protected override int Execute(CodeActivityContext context)
{
// Do whatever logic you want here
return CountVariable.Get(context) + 1;
}
}
これは、シーケンスを使用した使用例です (フローチャートを使用する場合も同じです)。
var countVar = new Variable<int>("count");
var activity = new Sequence
{
Variables =
{
// declare counter variable at global scope
countVar
},
Activities =
{
new WriteLine { Text = new VisualBasicValue<string>(@"""Count: "" & count") },
new IncrementActivity { CountVariable = countVar, Result = countVar },
new WriteLine { Text = new VisualBasicValue<string>(@"""Count: "" & count") },
new IncrementActivity { CountVariable = countVar, Result = countVar },
new WriteLine { Text = new VisualBasicValue<string>(@"""Count: "" & count") },
new IncrementActivity { CountVariable = countVar, Result = countVar }
}
};
出力:
Count: 0
Count: 1
Count: 2
VisualBasicValue<string>を直接使用して印刷文字列を作成する必要がないため、ビジュアル デザイナーを使用する方が簡単であることに注意してください。それ以外は、まったく同じです!