Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 工作流基础-持久性额外数据 我使用工作流基金会和ASP.NET创建了一个小型应用程序。 我在流程图中提供了多个与人交互的步骤。 对于涉及持久性的工作流的每个步骤(=在每次人机交互之前),我希望保存/更新一个额外的参数,如“worklow对象”,其中包含很少的字符串属性_C#_Asp.net_Workflow_Workflow Foundation - Fatal编程技术网

C# 工作流基础-持久性额外数据 我使用工作流基金会和ASP.NET创建了一个小型应用程序。 我在流程图中提供了多个与人交互的步骤。 对于涉及持久性的工作流的每个步骤(=在每次人机交互之前),我希望保存/更新一个额外的参数,如“worklow对象”,其中包含很少的字符串属性

C# 工作流基础-持久性额外数据 我使用工作流基金会和ASP.NET创建了一个小型应用程序。 我在流程图中提供了多个与人交互的步骤。 对于涉及持久性的工作流的每个步骤(=在每次人机交互之前),我希望保存/更新一个额外的参数,如“worklow对象”,其中包含很少的字符串属性,c#,asp.net,workflow,workflow-foundation,C#,Asp.net,Workflow,Workflow Foundation,我已经研究了存储的扩展性解决方案(),但无法启动并运行它:用于持久性的数据库的表“InstancePromotedPropertiesTable”没有更新,并且是完全空的 MSDN中是否有未提及的具体行动 是否有其他解决方案可以将额外的自定义数据附加到工作流程中,我们可以在简历期间或之前读取/写入这些数据 根据MSDN上提供的文档,以下是我的代码示例: 创建工作流应用程序: private WorkflowApplication CreateWorkflow<T>(I

我已经研究了存储的扩展性解决方案(),但无法启动并运行它:用于持久性的数据库的表“InstancePromotedPropertiesTable”没有更新,并且是完全空的

MSDN中是否有未提及的具体行动

是否有其他解决方案可以将额外的自定义数据附加到工作流程中,我们可以在简历期间或之前读取/写入这些数据

根据MSDN上提供的文档,以下是我的代码示例:

创建工作流应用程序:

        private WorkflowApplication CreateWorkflow<T>(IDictionary<string, object> dictionary) where T : Activity, new()
    {
        WorkflowApplication workflowApplication;

        if (dictionary.Any())
        {
            workflowApplication = new WorkflowApplication(new T(), dictionary);
        }
        else
        {
            workflowApplication = new WorkflowApplication(new T());
        }

        workflowApplication.InstanceStore = new SqlWorkflowInstanceStore(InstanceStoreConnectionString);

        workflowApplication.PersistableIdle = (e) =>
        {
            return PersistableIdleAction.Persist;
        };

        workflowApplication.Completed = (e) =>
        {
            _isCompleted = true;
            _instanceUnloaded.Set();
        };
        workflowApplication.Idle = (e) =>
        {
            _instanceUnloaded.Set();
        };

        workflowApplication.Unloaded = (e) =>
        {

        };

        DocumentStatusExtension documentStatusExtension = new DocumentStatusExtension();
        workflowApplication.Extensions.Add(documentStatusExtension);
        return workflowApplication;
    }
私有工作流应用程序CreateWorkflow(IDictionary dictionary),其中T:Activity,new()
{
工作流应用程序工作流应用程序;
if(dictionary.Any())
{
workflowApplication=新的workflowApplication(新的T(),字典);
}
其他的
{
workflowApplication=新的workflowApplication(新的T());
}
workflowApplication.InstanceStore=新的SqlWorkflowInstanceStore(InstanceStoreConnectionString);
workflowApplication.PersistableIdle=(e)=>
{
返回PersistableIdleAction.Persist;
};
workflowApplication.Completed=(e)=>
{
_isCompleted=真;
_instanceUnload.Set();
};
workflowApplication.Idle=(e)=>
{
_instanceUnload.Set();
};
workflowApplication.Unload=(e)=>
{
};
DocumentStatusExtension DocumentStatusExtension=新建DocumentStatusExtension();
workflowApplication.Extensions.Add(documentStatusExtension);
返回工作流应用程序;
}
进入空闲前执行步骤的方法:

protected override void Execute(NativeActivityContext context)
    {
        var bookmarkName = context.GetValue(StepName);

        context.GetExtension<DocumentStatusExtension>().DocumentId = Guid.NewGuid().ToString();
        context.GetExtension<DocumentStatusExtension>().UserName = "John Smith";
        context.GetExtension<DocumentStatusExtension>().ApprovalStatus = "Approved";
        context.GetExtension<DocumentStatusExtension>().LastUpdateTime = DateTime.Now;

        // Create a bookmark allows the persistance in the DB
        context.CreateBookmark(bookmarkName, new BookmarkCallback(this.Continue));
    }
protected override void Execute(NativeActivityContext上下文)
{
var bookmarkName=context.GetValue(StepName);
context.GetExtension().DocumentId=Guid.NewGuid().ToString();
context.GetExtension().UserName=“John Smith”;
context.GetExtension().ApprovalStatus=“已批准”;
context.GetExtension().LastUpdateTime=DateTime.Now;
//创建书签允许数据库中的持久性
CreateBookmark(bookmarkName,newbookmarkcallback(this.Continue));
}
以及调用升级方法的PersistenceParticipant类:

public class DocumentStatusExtension : PersistenceParticipant
{
    public string DocumentId;
    public string ApprovalStatus;
    public string UserName;
    public DateTime LastUpdateTime;

    protected override void CollectValues(out IDictionary<XName, object> readWriteValues, out IDictionary<XName, object> writeOnlyValues)
    {
        //All these properties are passed to SqlWorkflowInstanceStore by the persistence framework through the SaveWorkflowCommand.InstanceData collection.

        XNamespace xNS = XNamespace.Get("http://contoso.com/DocumentStatus");

        readWriteValues = new Dictionary<XName, object>();
        readWriteValues.Add(xNS.GetName("UserName"), this.UserName);
        readWriteValues.Add(xNS.GetName("ApprovalStatus"), this.ApprovalStatus);
        readWriteValues.Add(xNS.GetName("DocumentId"), this.DocumentId);
        readWriteValues.Add(xNS.GetName("LastModifiedTime"), this.LastUpdateTime);

        writeOnlyValues = null;

        SqlWorkflowInstanceStore store = new SqlWorkflowInstanceStore(System.Configuration.ConfigurationManager.AppSettings["InstanceStoreConnectionString"]);

        List<XName> variantProperties = new List<XName>()
        {
            xNS.GetName("UserName"),
            xNS.GetName("ApprovalStatus"),
            xNS.GetName("DocumentId"),
            xNS.GetName("LastModifiedTime")
        };

        store.Promote("DocumentStatus", variantProperties, null);
    }
}
公共类DocumentStatusExtension:PersistenceParticipant
{
公共字符串DocumentId;
公共字符串批准状态;
公共字符串用户名;
公共日期时间LastUpdateTime;
受保护的重写无效集合值(out IDictionary readWriteValues,out IDictionary writeOnlyValues)
{
//持久性框架通过SaveWorkflowCommand.InstanceData集合将所有这些属性传递给SqlWorkflowInstanceStore。
XNamespace xNS=XNamespace.Get(“http://contoso.com/DocumentStatus");
readWriteValues=新字典();
readWriteValues.Add(xNS.GetName(“用户名”)、this.UserName);
readWriteValues.Add(xNS.GetName(“ApprovalStatus”)、this.ApprovalStatus);
readWriteValues.Add(xNS.GetName(“DocumentId”)、this.DocumentId);
readWriteValues.Add(xNS.GetName(“LastModifiedTime”)、this.LastUpdateTime);
writeOnlyValues=null;
SqlWorkflowInstanceStore=新的SqlWorkflowInstanceStore(System.Configuration.ConfigurationManager.AppSettings[“InstanceStoreConnectionString]”);
列表变量属性=新列表()
{
xNS.GetName(“用户名”),
xNS.GetName(“ApprovalStatus”),
xNS.GetName(“DocumentId”),
xNS.GetName(“LastModifiedTime”)
};
store.Promote(“DocumentStatus”,variantProperties,null);
}
}

谢谢大家!

我认为我们需要查看您的代码来诊断为什么没有填充表,但是您是否考虑过只处理WorkflowRuntime.WorkflowPersisted事件并显式写入关联参数?或者重写持久性服务?我已经在初始请求中添加了我的代码示例。我认为我们需要查看您的代码来诊断为什么不填充表,但是您是否考虑过只处理WorkflowRuntime.WorkflowPersisted事件并显式写入您的关联参数?或者重写持久性服务?我已经在初始请求中添加了代码示例