Почему DocumentHelper.CopyDocument помещает новый документ в шаг рабочего процесса «Опубликован»? - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь скопировать документ с помощью API Kentico 11, и при использовании 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 голосов
/ 10 июля 2019

Я считаю, что это копирует статус рабочего процесса на текущей странице, но я могу ошибаться. То, что я предлагаю, ниже. Этот код проверяет, использует ли страница вход / выход, а затем использует рабочий процесс, чтобы установить для вновь созданной страницы первый шаг в рабочем процессе (который должен быть «редактировать»).

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();
}
0 голосов
/ 10 июля 2019

Мне следовало подождать дольше, чтобы опубликовать этот вопрос. Оказывается, вы можете использовать WorkflowManager в API, чтобы отправить документ на первый шаг в рабочем процессе:

newDoc.WorkflowManager.MoveToFirstStep(newDoc);

Это подталкивает документ к шагу «Редактировать», не затрагивая историю рабочего процесса, как если бы документ никогда не публиковался.

...