Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.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/9/csharp-4.0/2.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# 发布通过API编辑的文档时,如何让Kentico 8.0正确更新文档附件?_C#_Workflow_Attachment_Kentico - Fatal编程技术网

C# 发布通过API编辑的文档时,如何让Kentico 8.0正确更新文档附件?

C# 发布通过API编辑的文档时,如何让Kentico 8.0正确更新文档附件?,c#,workflow,attachment,kentico,C#,Workflow,Attachment,Kentico,场景: 我们在Kentico 8.0实例的顶部安装了一个有角度的前端。 用户可以通过该前端查看、添加和编辑文档。 当用户添加/编辑文档时,相关详细信息将发布到自定义处理程序,然后该处理程序通过Kentico API(C#)更新文档,并根据需要在工作流中移动它们。目前,它正在将添加/编辑的文档放入“批准”步骤,然后管理员可以通过后端发布。用户可以通过API将图像列表附加到文档中 我们使用的是一个简单的工作流,即编辑->批准->发布。 添加和编辑移动要编辑的文档,进行更改,将其移动到批准,然后保存更

场景:

我们在Kentico 8.0实例的顶部安装了一个有角度的前端。 用户可以通过该前端查看、添加和编辑文档。 当用户添加/编辑文档时,相关详细信息将发布到自定义处理程序,然后该处理程序通过Kentico API(C#)更新文档,并根据需要在工作流中移动它们。目前,它正在将添加/编辑的文档放入“批准”步骤,然后管理员可以通过后端发布。用户可以通过API将图像列表附加到文档中

我们使用的是一个简单的工作流,即编辑->批准->发布。 添加和编辑移动要编辑的文档,进行更改,将其移动到批准,然后保存更改(node.Update())。发布是从Kentico管理端进行的

问题:

常规文档编辑似乎工作正常。。。但我在附件方面有问题。用户可以创建新文档并附加图像,而不会出现问题。提交时(将文档置于“批准”步骤),附件会被推送到CMS_AttachmentHistory表中,但不会出现在CMS_AttachmentTable中。看起来很合理。管理员发布文档后,附件也会被推送到CMS_附件表中。还是合理的。 如果我现在编辑(将文档移动到编辑步骤,更新数据,然后移动到批准步骤,然后保存)并更改附件。。。如我所料,这些附件更改将出现在CMS_AttachmentHistory表中。。。但是当我以管理员的身份发布文档时,CMS_附件表保持不变

我不明白为什么在add->publish上附件会被正确地推送到CMS_附件表中,但在edit->publish上却没有。显然有些不同。。。但是更新的代码是相同的。。。唯一的例外是新文档的node.insert()。两者都从编辑阶段开始,进行更改,移动到批准,然后保存。在这两种情况下,文档发布可能是相同的

我在文档中找不到任何关于在工作流中手动移动附件的方法。。。我不确定这是否是我需要做的事情,但似乎奇怪的是,它适用于添加,而不是编辑

如果需要的话,我可以提供代码,但在这种情况下似乎没有那么大帮助


编辑:添加了有关工作流设置的更多详细信息

这些步骤之间只有一个区别。“编辑->发布”步骤中的CMS_附件表中已存在附件。您可以在此步骤中尝试删除它们。

您还没有发布用于“发布”的代码,所以让我尝试建议我过去使用的以下方法。这实际上与Kentico在管理区域内发布时使用的代码相同,因此我认为它也应该处理附件。您可能需要对其进行一些更改,但发布API过程可能会有所帮助

TreeProvider tree = new TreeProvider(UserInfoProvider.GetUserInfo("SomeoneWithPermissionsToPublish"));

        int documentID = 1;
        //get document
        var doc = DocumentHelper.GetDocument(documentID, tree); // change DocumentID
        if (doc != null)
        {
            // Create a new Version manager instance
            VersionManager manager = VersionManager.GetInstance(tree);

            // Check out the document
            manager.CheckOut(doc);

            // do changes here

            // Save the changes
            DocumentHelper.UpdateDocument(doc, tree);

            // Check in the document
            manager.CheckIn(doc, null, null);

            WorkflowManager workflowManager = WorkflowManager.GetInstance(tree);

            WorkflowInfo workflow = workflowManager.GetNodeWorkflow(doc);

            // apply latest version
            manager.ApplyLatestVersion(doc);

            // Check if the document uses workflow
            if (workflow != null)
            {
                // Publish the document
                workflowManager.PublishDocument(doc, null);
            }
        }

从Kentico文档来看,这似乎也会删除所有历史版本。。。这不是我想做的事。我需要当前发布的版本保持不变,直到新版本由管理员发布。。。但我可能读错了文档。我会试试看会发生什么。是的,这不起作用。即使是全新的附件,如果在第一次发布后添加,也不会移动到CMS_附件。