2017-02-01 6 views
1

У меня есть приложение, которое использует комбинацию ContentService.Saved & ContentService.Saving расширить Umbraco для управления контентом.Umbraco7 - ContentService.SaveAndPublishWithStatus VS ContentService.SendToPublication

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

До сих пор у меня все работает так, как я хотел.

Теперь я хочу добавить функцию, которая: в зависимости от того, какой пользователь Umbraco вошел в систему, либо опубликует контент, либо просто отправит его на утверждение.

Так я изменил несколько строк кода из:

cs.SaveAndPublishWithStatus(savedNode, 0, false) 

Для этого:

cs.SendToPublication(savedNode); 

Теперь проблема, что я нахожу в том, что в отличие от() метод SaveAndPublishWithStatus, то cs.SendToPublication(); не имеет возможности передать false, чтобы событие сохранения не было поднято. Поэтому я попадаю в бесконечный цикл.

Когда я прикрепляю отладчик и вручную останавливаю бесконечный цикл при первом вызове cs.SendToPublication (savedNode); Я получаю именно то поведение, которое я хочу.

Любые идеи о том, как я могу обойти эту проблему? Есть ли другой метод, который я должен использовать?

+0

Есть ли причина, по которой вы делаете это в коде, а не на основе ролей пользователя? – Mark

+0

Да, эта установка Umbraco управляет двумя веб-сайтами. Когда пользователь обновляет контент на Сайте 1, это изменение отражается на Сайте 2 (автоматически), но до того, как он фактически будет опубликован на сайт 2, он должен быть разрешен менеджером сайта два. –

+1

А я вижу, у меня нет ответа для вас, но, возможно, если вы посмотрите код ContentService, вы найдете ответы https://github.com/umbraco/Umbraco-CMS/blob/10b8fd9fb973ddb9b86ebf4e0f5755c43cd22496/src/ Umbraco.Core/Услуги/ContentService.cs – Mark

ответ

0

Вы правы в том, что в настоящее время невозможно установить raiseEvents на значение false при отправке товара на публикацию - это проблема. Я добавил, что перегрузка в версии 7.6 (http://issues.umbraco.org/issue/U4-9490).

Однако, учитывая, что вам это нужно сейчас, промежуточное решение может заключаться в том, что вы убедитесь, что ваш код запускается только один раз при запуске событиями /.Saving.

Одним из способов сделать это будет проверка последней сохраненной даты (UpdateDate) в вашем коде. Если содержимое было сохранено в течение последней секунды текущей операции сохранения, вы знаете, что это событие сохранения, вызванное сохранением, происходящим в действии SendToPublication. Затем вы также знаете, что элемент уже отправлен в публикацию и что это не нужно делать снова, тем самым предотвращая бесконечный цикл.