我正在尝试使用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));
都不给我指定工作流程步骤的选项,他们只是将其推送到“已发布”。我可以创建文档的新版本,但这不会阻止该副本最初发布。
答案 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();
}