.NET Workflow Foundationアクティビティの親スコープから変数の値を動的に設定する方法はありますか。外部スコープの変数をWF 4アクティビティから動的に設定する
(配列がTestというint型の変数を有するワークフロー上の配列の活性のドロップ)失敗した:
public sealed class CodeActivity1 : NativeActivity
{
protected override void CacheMetadata(NativeActivityMetadata metadata)
{
_locationReferences =
metadata.Environment.GetLocationReferences().ToList();
base.CacheMetadata(metadata);
}
protected override void Execute(NativeActivityContext context)
{
LocationReference locationReference =
_locationReferences.Find(
x => x.Name == "Test" && x.Type == typeof (int));
if (locationReference != null)
{
Console.WriteLine(
locationReference.Name + " " + locationReference.Type);
// Blows up here.
Location location = locationReference.GetLocation(context);
location.Value = 5;
}
}
private List<LocationReference> _locationReferences;
}
これはもたらす:
のSystem.InvalidOperationExceptionが ましたはアクティビティの範囲で宣言されているため、この変数にアクセスすることはできません'1.1:シーケンス'。アクティビティは 自身の実装 の変数にアクセスすることしかできません。
変数が見つかりません。その値を取得または設定することはできません。
変数名(上記の例では "Test")は、実行時まで認識されません。
:-)注意して使用しますので、サポートされていませんワークフロー私たちはBPMに慣れています。名前を渡し、フィールドを初期化し、プロセスの実行中にフィールドのリストを取得して設定するなど、プロセスを作成することができます。より柔軟で、発見可能で、デカップリングされています。実行時の安全性のコストBPMからWFへの移行は、動的に型付けされた言語から静的に型付けされた言語に移行するようなものです。私は2つの選択肢があると思います:Dictionary型の変数でそれを偽ったり、WSDLに問い合わせます。 –
TrueWill
私はあなたの質問を完全に誤解したと思います。私は、特定のワークフロー変数を使用しようとしている場所で、WSDLおよびWCFクライアントとは関係がないという印象を受けました。 WCF要求パラメータは、受信パラメータのみの結果です。どのように結果を内部ワークフロー変数に結びつけ、あるいは値を無視するかは、クライアントアプリケーションにとって完全に透過的です。 – Maurice
@Maurice - 私は例を単純にしてみたかった。 Receiveパラメータは、名前と値のペアの集合を持つ固定型であることが必要でした。呼び出されると、一致する名前を持つスコープの変数を動的に更新します。 – TrueWill