Рабочий процесс Sitecore для определенных полей элемента - PullRequest
4 голосов
/ 22 января 2010

В Sitecore возможно ли настроить рабочий процесс таким образом, чтобы изменение какого-либо поля элемента не приводило к тому, что элемент переходил в состояния утверждения?

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

Я не нашел ничего о том, как это сделать, в справочнике .

С тех пор я написал некоторый код, полученный из ответа Стива и пример этого фрагмента:

class Filter
{
    public void Process(WorkflowPipelineArgs args)
    {
        Database master = Factory.GetDatabase("master");
        Item item = args.DataItem;
        IWorkflow wf = master.WorkflowProvider.GetWorkflow(item);
        AllowPublishIfNoChangeToBodyField(item, wf);
    }

    /// <summary>
    /// If the item's 'Body' field was not modified change the workflow state to Pending Publication
    /// by running the Approve and Submit for Publication command
    /// </summary>
    /// <param name="item"></param>
    /// <param name="wf"></param>
    void AllowPublishIfNoChangeToBodyField(Item item, IWorkflow wf)
    {
        using (new Sitecore.SecurityModel.SecurityDisabler())
        {
            if (true//pseudo code for now: body wasn't modified)
            {
                wf.Execute("{command-id}", item, "allow edits and publishing of all fields other than 'Body'", false); 
            }
        }
    }
}

Проблема в том, что «Следующее состояние» в «Команде» перезаписывает все изменения состояния, которые я вносил в элемент в «Действии».

1 Ответ

7 голосов
/ 25 января 2010

Звучит так, как если бы пользовательское действие рабочего процесса сработало, оно сработало, когда пользователь отправил изменение, и программно проверило наличие изменений в поле.

Если было внесено изменение, переведите рабочий процесс в состояние «Ожидание утверждения», если не просто выйдите и дайте ему перейти в состояние автоматической публикации.

В sdn есть фрагмент с заголовком " Изменение состояния рабочего процесса для элемента с помощью API ", я сам не пробовал, но, вероятно, это должно сработать.

...