Set a key/id to a Workflow



新的工作流基础,所以这可能是一个基本的问题,你们很多人。

我有一个工作流设计器(客户端)/服务器应用程序。在设计器中,我可以将工作流上传到服务器,服务器将工作流存储在数据库中。设计器可以请求从服务器下载工作流。下载后,我们可以在设计器中修改并再次上传。为了能够做到这一点,我需要添加一些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)来添加附加属性到活动

附加属性,通过AttachablePropertyServices类。

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" />

有关更多信息,请阅读msdn

上的这篇博客文章

最新更新