【问题标题】:Set a key/id to a Workflow为工作流设置键/ID
【发布时间】:2013-04-16 12:02:11
【问题描述】:

Workflow Foundation 的新手,所以对于你们中的许多人来说,这可能是一个基本问题。

我有一个工作流设计器(客户端)/服务器应用程序。 在设计器中,我可以将工作流上传到服务器,服务器将它们存储在数据库中。设计者可以请求从服务器下载工作流。下载完成后,我们可以在设计器中修改后再上传。 为了能够做到这一点,我需要在工作流程中添加某种 ID/Key。

最好的方法是什么?

我正在考虑向 ActivityBuilder 添加一个属性,但这样做会将其添加到参数列表中,这似乎不对...

任何帮助将不胜感激


嗨@Will,我尝试将属性附加到活动,但我无法让它工作。我没有使用 WorkflowRecord 之类的任何模型,它只是一个基本的设计器。

我使用 _workflowDesigner.Save(path);保存它或 _workflowDesigner.Load(path);加载它。

我创建并添加附加属性

attachProp = new AttachedProperty<int?>()
    {
        Name = "Key",
        IsBrowsable = true,
        Getter = (modelItem) => 5,
        Setter = ((modelItem, keyValue) => modelItem.Properties["Key"].SetValue(keyValue)),
        OwnerType = typeof(Activity)
    };

    _workflowDesigner.Context.Services.GetService<AttachedPropertiesService>().AddProperty(attachProp);

如果我尝试访问附加的属性,它会抛出一个异常(不包含键的定义)

dynamic mainActivity = ((_workflowDesigner.Context.Services.GetService<ModelService>().Root.GetCurrentValue() as ActivityBuilder).Implementation as Activity);
int? testValue = mainActivity.Key; //Exception, Activity' does not contain a definition for 'Key'

我阅读了这篇 [post] (http://blogs.msdn.com/b/kushals/archive/2010/01/04/base-designer-with-additional-adornments.aspx) 以将附加属性添加到活动中

【问题讨论】:

    标签: workflow workflow-foundation-4 workflow-foundation workflow-foundation-4.5


    【解决方案1】:

    附加属性,通过AttachablePropertyServices Class

    public class WorkflowRecord
    {
        static AttachableMemberIdentifier Id = 
            new AttachableMemberIdentifier(typeof(Guid), "Id");
    
        public static object GetCommentText(object instance)
        {
            object viewState;
            AttachablePropertyServices.TryGetProperty(instance, Id, out viewState);
            return viewState;
        }
    
        public static void SetCommentText(object instance, object value)
        {
            AttachablePropertyServices.SetProperty(instance, Id, value);
        }
    }
    

    您可以使用它来获取或设置工作流实例上的数据库 ID,它将被序列化/反序列化到/从 xaml。

    <Activity
        xmlns:me="clr-namespace:Herp;assembly=derp"
        me:WorkflowRecord.Id="This is a guid lol"
        x:HideAdditionalAttributesBecauseThisIsAnExample="true" />
    

    欲了解更多信息,请阅读this blog post on msdn

    【讨论】:

    • 谢谢威尔,我会调查的
    猜你喜欢
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 2021-08-24
    • 2019-04-09
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多