Question
Nymphaea on Sun, 07 Aug 2011 04:33:07
お世話になります。
WF4 を利用して自作したリホスティングデザイナに引数を含むアクティビティを読み込む処理で、
意図したとおりに読み込むことができずに困っています
// リホスティングデザイナに引数を表示して読み込み var act = new ActivityBuilder(); act.Name = "Sequence"; act.Implementation = ActivityXamlServices.Load( "sample.xaml" ); // 既存の WorkflowDesigner は Load 済のため新規作成 designer = new WorkflowDesigner(); designer.Load( act );
上記コードで、リホスティングデザイナに「引数」を表示させるために ActivityBuilder に一旦読み込んでから、
WorkflowDesigner.Load でアクティビティを読み込んでいます
読み込んでいるアクティビティは、Sequence アクティビティにカスタムアクティビティを1つ内包し、
カスタムアクティビティは引数に指定された Int32 型のデータを読込み処理を行っています
問題となっているのは、上記コードでアクティビティを読み込んだ場合に、
Sequence アクティビティ内にカスタムアクティビティが内包されている状態で読み込まれてほしいのですが、
DynamicActiviti に変換された一つのアクティビティとして読み込まれてしまい、
かつ設定されていた引数指定も初期化?されて消えてしまっています
引数を使用しない場合に、designer.Load( "sample.xaml" ) で読み込んだ場合には意図したとおりに
アクティビティを読み込むことは確認しています
解決方法をご存知の方がいらっしゃれば、お知恵をお貸しください。
Replies
Ahf on Mon, 08 Aug 2011 00:34:36
ActivityBuilder を利用したワークフローを再読み込みする場合ですが、
再度 ActivityBuilder.Implementation を設定し読み込むのではなく、
designer.Load("sample.xaml") のみで大丈夫だと思われます。
どうやら新規作成時には ActivityBuilder を明示的に生成する必要があるのですが、
読み込み時にはすでに xaml 上に存在するので再定義する必要がないのではないか、と思います。
Nymphaea on Mon, 08 Aug 2011 02:11:35
Ahf 様ご返信ありがとうございました
おっしゃる通り、新規作成時に ActivityBuilder で読込みを行った場合には、再読み込み時には designer.Load( "sample.xaml" ) で
アクティビティの設定も引数設定も意図した通りに復元されていることが確認できました
ActivityBuilder を使う場合は新規と既存の読込みをワンセットにする必要があると思い込んでいたため、
どちらも設定されているかされていないかの組み合わせのみの検証しか行っておりませんでした
また、VisualStudio で作成した既存のアクティビティを読み込んでいたことも混乱の原因となっていました
WF 関連の情報は検索しても情報量が少ないため、とても助かりました
情報の提供ありがとうございました