0

フローチャートフローで反復する回数を数える必要がありますが、カスタムアクティビティで変数の読み取り、できれば書き込みができる必要があります。

私の現在の試みは、フローチャート全体のスコープ、デフォルト値0、および割り当てアクティビティを使用してインクリメントするデザインビューで変数を宣言することです。しかし、リセットせずにカスタムアクティビティで変数にアクセスする方法を理解できません。

varにアクセスする私の試みは、ここでの回答で説明されているようなものです。Windowsワークフロー4.0のCodeActivityでVariable<T>変数を宣言します。

ただし、宣言するときにvarのデフォルト値を使用しないのは私だけです。それでも、変数は、デザインビューで定義した変数とはまったく関係がないようです。また、コードのみで定義しようとしましたが、たとえば通常の割り当てアクティビティではアクセスできません。

では、varを「グローバル」変数として使用できるようにするにはどうすればよいでしょうか。

ありがとう。

4

1 に答える 1

2

最も直感的でおそらく正しい方法は、フローチャート レベルで宣言している変数をカスタム アクティビティ内に渡すことです。次に、その値で好きなことをして、それを返すことができます。

カスタム インクリメント アクティビティの例 (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>を直接使用して印刷文字列を作成する必要がないため、ビジュアル デザイナーを使用する方が簡単であることに注意してください。それ以外は、まったく同じです!

于 2012-09-25T23:44:36.250 に答える