对于一个简单的原型,我将显示一个工作流文件,并显示我们实际上是哪一步。
我在这里找到了一个示例: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”类,它只用了几行。
我有点贬低,我正在努力了解Workflow基础是如何工作的,但现在有点困难:(
欢迎任何建议
编辑: 我试过这个来读取文件,我的构造函数中没有任何异常,但我不知道为什么,我正在使用的一些库(ActiPro)在加载后似乎不再起作用了:
XamlReader reader = new XamlXmlReader("Workflows/WorkflowSample.xaml", new XamlXmlReaderSettings(){LocalAssembly = System.Reflection.Assembly.GetExecutingAssembly()});
return ActivityXamlServices.Load(reader);
答案 0 :(得分:2)
我找到了解决方案!!!!
YEAAAAAAAAAAAAAAH:P
实际上问题是我的Workflow与我的自定义活动在同一个项目中。然后,visual studio不会指出设计人员可以在哪个程序集中找到此活动,但是当您阅读该文件时,这是一个独立的读者,它不知道您当前的程序集。
因此,有两个不同的项目,一个包含工作流程,一个包含活动,然后我的工作流程指定我可以在其中找到图表的程序集。像这样我可以轻松地做一个WorkflowDesigner.Load(“myWorkflowHere.xaml”);没有任何问题!
答案 1 :(得分:0)
“Workflows / WorkflowSample.xaml”可能是针对您代码的先前版本构建的。
删除它,重建您的解决方案,然后重新创建它。