对于一个简单的原型,我必须显示一个工作流文件,并显示我们实际处于哪一步。
我在这里找到了一个示例: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"}
}
};
唯一的问题是我在工作流设计器中只看到一个“序列”元素。
所以我创建了一个描述完全相同的东西的 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);