1

对于一个简单的原型,我必须显示一个工作流文件,并显示我们实际处于哪一步。

我在这里找到了一个示例: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);
4

2 回答 2

2

我找到了解决方案!!!!

是啊啊啊啊啊啊:P

事实上,问题在于我的工作流与我的自定义活动在同一个项目中。然后visual studio没有指出设计者可以在哪个程序集中找到这个活动,但是当你阅读文件时,这是一个独立的阅读器,它不知道你当前的程序集。

所以有两个不同的项目,一个包含工作流,一个包含活动,然后我的工作流指定我可以在其中找到图表的程序集。像这样我可以轻松地做一个 WorkflowDesigner.Load("myWorkflowHere.xaml"); 没有任何问题!

于 2011-04-14T10:35:42.130 回答
0

“Workflows/WorkflowSample.xaml”可能是针对您的代码的先前版本构建的。

删除它,重建您的解决方案,然后重新创建它。

于 2011-04-12T15:19:49.777 回答