2012-11-28 2 views
4

Мне нужно прекратить публикацию страницы, когда существует определенное условие, например, если имя страницы содержит «один», используя систему событий. Кроме того, следует продолжать публикацию других страниц.Как получить имя ресурса для Tridion LocalizableMessage при создании нового PublisherException?

Я думаю использовать исключение PublisherException вместо общего исключения.

Проблема в том, что я не знаю имя ресурса LocalizableMessage. Есть идеи?

if (item.Title.ToString().Contains("one")) 
{ 
    Localization.LocalizableMessage errResource = new Localization.LocalizableMessage("error"); 
    throw new PublisherException(errResource, new Exception("Can't get there from here!")); 
} 
+1

Помимо вопроса LocalizableMessage, не является ли пользовательский резольвер лучше подходит для этой задачи? – Puntero

+0

Я думаю, вы говорите, что я могу удалить элемент из PublishTransaction, если он соответствует условиям? Возможно ли, чтобы сообщение об ошибке Custom Resolver появилось в очереди публикации? Любые другие идеи для передачи отзывов пользователю не публикуются? В этом примере я пытаюсь отправить страницу на внешнюю веб-службу и когда внешняя служба не может ее опубликовать. – robrtc

+0

Вы используете R5.3? Я вижу, что вы ссылаетесь на это в комментарии ниже – GourmetCMS

ответ

7

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

Как упоминает Puntero, если вы хотите удалить элемент из Опубликованной транзакции, то есть здесь находится Custom Resolver. Здесь вы не можете связаться со службой публикации, но у вас есть доступ к Tridion Logger (eventlog) :

Tridion.Logging.Logger.Write("your message string", "MyResolver", LoggingCategory.General, TraceEventType.Information); 

Что касается вашего LocalizableMessage в системе событий, вы должны быть в состоянии сделать следующее:

throw new PublisherException(new LocalizableMessage(Properties.Resources.ResourceManager, "PagePublishErrorMessage")); 

Если ResourceName указывает на имя ресурса Струнный у вас есть в вашем Проект.

+2

Спасибо за информацию и предложение использовать регистратор Tridion. Я мог бы использовать расширение SignalR GUI для передачи информации пользователю в MessageCenter. Но я по-прежнему предпочитаю событие OnRenderPre в 5.3 и используя исключение для отказа одного элемента и сообщение об исключении в очереди публикации. – robrtc

3

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

Я попытался поднять предупреждение, чтобы предупредить пользователей о том, что один элемент не решен, но не удалось. Но здесь могут быть некоторые полезные советы/идеи: Raising a “warning” status during SDL Tridion 2011 publishing

В конце концов, единственный способ получить что-нибудь на работу - установить «Разрешить X-сбои», а затем выполнить проверку в шаблоне и поднимите там ошибку. Это будет считаться ошибкой Render и позволит издателю перейти к следующему элементу в транзакции публикации.

Что касается сообщения? Какое сообщение вы хотите отобразить?

+1

Очень интересно! Если я правильно понял, вы вызываете исключение в настраиваемом преобразователе, а затем проверяете это исключение в шаблоне? Как выглядит проверка в шаблоне? – robrtc

+0

Ну, это то, что я пытался сделать, но не мог этого сделать, не злоупотребляя AppData или чем-то еще. Таким образом, мы просто закончили тем, что выбрали ошибку в шаблоне. – GourmetCMS