2010-12-01 10 views
3

定義済みのReceiveAndSendReplyアクティビティを含む複合Windowsワークフローアクティビティ(.NET 4)を作成します。一部のプロパティは事前定義されていますが、他のもの(特にServiceContractName)はデザイナで設定する必要があります。コンポジットWF4アクティビティの内部プロパティを設計時に設定する

私はこれをアクティビティテンプレートとして実装できます(ReceiveAndSendReplyと同じ方法で実装されています)。後でテンプレートを変更すると、以前に作成したワークフローをすべて手動で更新する必要があります。テンプレートは、他の開発者が修正すべきプロパティを変更することも許可します。

Xamlアクティビティからこれを行う方法はありますか?埋め込みアクティビティのプロパティに引数値を割り当てる方法が見つかりませんでした。そうでない場合は、どのようなテクニックを提案しますか?

答えて

6

私は複合XAMLアクティビティを使用してこれを行っていませんし、試してみるといくつかのエラーが発生していますが、NativeActivityで問題はありません。以下のサンプルコードを参照してください。

public class MyReceiveAndSendReply : NativeActivity 
{ 
    private Receive _receive; 
    private SendReply _sendReply; 

    public string ServiceContractName { get; set; } 
    public string OperationName { get; set; } 

    protected override bool CanInduceIdle 
    { 
     get { return true; } 
    } 

    protected override void CacheMetadata(NativeActivityMetadata metadata) 
    { 
     _receive = _receive ?? new Receive(); 
     _sendReply = _sendReply ?? new SendReply(); 
     _receive.CanCreateInstance = true; 
     metadata.AddImplementationChild(_receive); 
     metadata.AddImplementationChild(_sendReply); 

     _receive.ServiceContractName = ServiceContractName; 
     _receive.OperationName = OperationName; 

     var args = new ReceiveParametersContent(); 
     args.Parameters["firstName"] = new OutArgument<string>(); 
     _receive.Content = args; 

     _sendReply.Request = _receive; 

     var results = new SendParametersContent(); 
     results.Parameters["greeting"] = new InArgument<string>("Hello there"); 
     _sendReply.Content = results; 

     base.CacheMetadata(metadata); 
    } 

    protected override void Execute(NativeActivityContext context) 
    { 
     context.ScheduleActivity(_receive, ReceiveCompleted); 

    } 

    private void ReceiveCompleted(NativeActivityContext context, ActivityInstance completedInstance) 
    { 
     context.ScheduleActivity(_sendReply); 
    } 
} 
+0

いい例。おかげでモーリス!あなたは本当にこれについて本を書くことを検討すべきです... – TrueWill

+1

それについて考えましたが、それは努力する価値はありません。ほとんどの.NETブックの市場は小さく、WF4の本は小規模です。そこにはすでに3人がいる。私は教えて、コンサルティングに固執すると思います:-) – Maurice

+0

Execute()の_receiveアクティビティのfirstNameパラメータにアクセスする方法を知りたいですか? –

関連する問題