为什么DocumentHelper.CopyDocument会将新文档放置在“已发布”工作流步骤中?

时间:2019-07-10 17:22:20

标签: kentico

我正在尝试使用Kentico 11 API复制文档,并且在使用Document.CopyDocument时,所得到的TreeNode会自动放入“已发布”工作流步骤,而不是人们期望的“编辑”位置。有什么方法可以防止这种情况发生?

我已经尝试了DocumentHelper.CopyDocument的两个方法,包括使用CopyDocumentSettings的方法,都没有提供指定初始工作流程步骤的选项。

TreeNode newDoc = DocumentHelper.CopyDocument(document, parentDoc, true, _treeProvider);
// also tried this
TreeNode newDoc = DocumentHelper.CopyDocument(new CopyDocumentSettings(document, parentDoc, _treeProvider));

都不给我指定工作流程步骤的选项,他们只是将其推送到“已发布”。我可以创建文档的新版本,但这不会阻止该副本最初发布。

2 个答案:

答案 0 :(得分:0)

我应该等待更长的时间才能发布此问题,事实证明您可以使用API​​中的WorkflowManager将文档推送到工作流程的第一步:

newDoc.WorkflowManager.MoveToFirstStep(newDoc);

这会将文档推送到“编辑”步骤,而不会影响工作流历史,就像从未发布过文档一样。

答案 1 :(得分:0)

我相信它会复制当前页面的工作流程状态,但是我可能是错的。我的建议如下。此代码检查页面是否正在使用签入/签出,然后使用工作流将新创建的页面设置为工作流的第一步(应为“编辑”)。

TreeProvider tree = new TreeProvider();
var treeNode = DocumentHelper.GetDocument(4, tree);
var targetNode = DocumentHelper.GetDocument(5, tree);
CMS.DocumentEngine.TreeNode newPage = DocumentHelper.CopyDocument(treeNode, targetNode, false);

WorkflowManager workflowManager = WorkflowManager.GetInstance(tree);
WorkflowInfo workflow = workflowManager.GetNodeWorkflow(page);

if (!newPage.IsCheckedOut)
{
    newPage.CheckOut();
}

if (workflow != null)
{
    if (!workflow.WorkflowAutoPublishChanges)
    {
        newPage.MoveToFirstStep("Copying the page from another page.");
    }
}

if (newPage.IsCheckedOut)
{
    newPage.CheckIn();
}