単純なプロトタイプの場合、ワークフロー ファイルを表示し、実際にどのステップにいるかを示します。
ここでサンプルを見つけました: http://msdn.microsoft.com/en-us/library/ee624139.aspx
これは、私が必要とするほとんどのことを行います。
このサンプルでは、すべてのアクションが別のアクションを待機することはありません。そこで、非常にダミーのアクティビティを作成しました。
public class WaitForNextCall :NativeActivity
{
public const String WaitBookmark = "WaitingStep";
#region Overrides of NativeActivity
/// <summary>
/// When implemented in a derived class, runs the activity’s execution logic.
/// </summary>
/// <param name="context">The execution context in which the activity executes.</param>
protected override void Execute(NativeActivityContext context)
{
context.CreateBookmark(WaitBookmark);
}
protected override bool CanInduceIdle
{
get
{
return true;
}
}
#endregion
}
これはうまくいくようです。そこから、ワークフローをコード内で直接作成していました。
return new Sequence()
{
Activities =
{
new WaitForNextCall(){DisplayName = "Step one"},
new WaitForNextCall(){DisplayName = "Step Two"},
new WaitForNextCall(){DisplayName = "Step Three"},
new WaitForNextCall(){DisplayName = "Step Four"}
}
};
唯一の問題は、ワークフロー デザイナーに "Sequence" 要素しか表示されないことです。
そこで、まったく同じことを記述する xaml ファイルを作成し、次のようにロードします。
return ActivityXamlServices.Load("Workflows/WorkflowSample.xaml") as DynamicActivity;
しかし、私はこの例外を得ました:
System.Xaml.XamlObjectWriterException occurred
Message=Impossible de créer le type inconnu '{clr-MyTestNameSpace.UserInterface.WorkflowItems}WaitForNextCall'.
Source=System.Xaml
LineNumber=0
LinePosition=0
StackTrace:
à System.Xaml.XamlObjectWriter.WriteStartObject(XamlType xamlType)
à System.Xaml.XamlWriter.WriteNode(XamlReader reader)
[...]
ファイルが存在することを再確認しました(ファイルが正しく指定されていない場合、別のエラーメッセージが表示されます)。しかし、数行下で使用されている「WaitFornextCall」クラスが見つかりません。
私は少し絶望的です。ワークフローの基盤がどのように機能するかを理解しようとしていますが、今のところ少し難しいです:(
どんなアドバイスでも大歓迎です
編集:ファイルを読み取るためにこれを試しました。コンストラクターに例外はありませんが、理由がわかりません。使用している一部のライブラリ (ActiPro) がロード後に機能しなくなったようです:
XamlReader reader = new XamlXmlReader("Workflows/WorkflowSample.xaml", new XamlXmlReaderSettings(){LocalAssembly = System.Reflection.Assembly.GetExecutingAssembly()});
return ActivityXamlServices.Load(reader);