Sitecore Отменить публикацию на основании условий

У меня есть требование, например, когда пользователь нажимает кнопку публикации элемента, я хотел выполнить некоторый настраиваемый код, в котором я буду запускать некоторые проверки для текущего элемента, и если все в порядке, то элемент будет опубликован, иначе будет отображаться предупреждение и конвейер публикации должен быть отключен.

Поэтому для этого я создал собственный процессор в конвейере publishItem, и все работает хорошо, но когда я показываю предупреждение, оно дает мне исключение с нулевой ссылкой.

Sitecore.Context.ClientPage.ClientResponse.Alert(message);

Я не уверен, что я делаю здесь неправильно, и есть ли другой способ добиться этого ... Пожалуйста, предложите Ниже приведен пример кода, который я написал. Класс ниже унаследован от PublishItemProcessor.

public override void Process(PublishItemContext context)
        {
            Assert.ArgumentNotNull(context, "context");

            // code goes here

            if (condition)
            {
                string message = "Required fields are missing";
                context.AbortPipeline();                
                Sitecore.Context.ClientPage.ClientResponse.Alert(message);
            }
        }

<publishItem>
      <processor type="Namespace.CheckRequiredChildItems, Namespace" />
</publishItem>

person Deb    schedule 30.12.2020    source источник


Ответы (1)


Вам следует избегать изменения конвейера публикации, поскольку это может помешать вам перейти на службу публикации Sitecore в будущем. Как правило, любой пользователь должен иметь возможность опубликовать любой элемент в любое время. Ограничения на публикацию и рабочие процессы Sitecore предотвратят публикацию незаконченных / недействительных элементов. Элемент также может быть опубликован множеством различных способов, таких как публикация элемента (как в описанном вами сценарии), как связанный элемент, публикация на сайте и т. Д. Публикация также может выполняться в фоновом режиме, поэтому взаимодействие с пользовательским интерфейсом не подходит.

Вместо этого вам следует использовать рабочие процессы, так как одна из его целей - предотвратить достижение элементами своего состояния публикации без выполнения правил проверки. Если ваши редакторы не хотят использовать рабочие процессы, вы все равно можете использовать их почти без проблем. У вас может быть простой рабочий процесс с двумя состояниями (Черновик и Готов к публикации). Затем вы можете позволить авторам перемещать элемент через рабочий процесс или использовать автоматические действия рабочего процесса для перехода к следующему этапу. Несоблюдение правил проверки предотвратит переход.

person mikaelnet    schedule 31.12.2020
comment
Спасибо @mikaelnet за ваши предложения. Я продолжу рабочий процесс. - person Deb; 31.12.2020