Sitecore — создать родительский источник данных Произошла ошибка SetSublayout

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

мы создаем многосайтовое решение, в котором каждый сайт представлен так (концептуально)

site1 (template = website)
    Datasources (template = datasourcefolder)
        Module X Sources (template = module1container)
            Module Source 1 (template = module1)
        Module Y Sources (template = module2container)
        ...
    Home (template = startpage)

Сайты будут созданы с использованием шаблона филиала, который будет создавать элементы на основе веб-сайта шаблонов, папки источника данных и стартовой страницы.

Вот что я хочу, чтобы произошло:

При добавлении нового вложенного макета проверьте, существует ли источник, если нет, создайте новый элемент в site1/Datasources/[Module name] на основе указанного шаблона (определяемого как Родительский шаблон источника данных). и добавлен в шаблон Подмакет). Затем добавьте этот новый элемент в диалоговое окно DatasourceRoots, чтобы пользователь мог создавать элементы источника данных под ним.

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

Используя Reflector, я убедился, что элемент, созданный из диалогового окна (Sitecore.Shell.Applications.Dialogs.SelectRenderingDatasourceForm), возвращается правильно, и диалог закрывается с правильными аргументами и вызовом SetDialogValue с ожидаемым элементом.

Я предполагаю, что мой вопрос; что происходит ПОСЛЕ закрытия этого диалога? Какой конвейер запускается для фактической установки источника данных при рендеринге? Мне нужно выяснить, где возникает эта ошибка, и, конечно же, исправить то, что не так...

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


person Andreas Bergström    schedule 14.11.2012    source источник
comment
Вы можете проверить журналы для исключения?   -  person Marek Musielak    schedule 14.11.2012
comment
@Maras, к сожалению, журналы не показывают никаких ошибок (исключений или предупреждений).   -  person Andreas Bergström    schedule 14.11.2012
comment
и если вы подключаетесь с помощью Visual Studio к веб-приложению, показывает ли оно какую-либо ошибку?   -  person Marek Musielak    schedule 14.11.2012
comment
Нет, ошибок в журнале или при отладке нет. Я предполагаю, что это не ошибка, а скорее нулевая проверка (или что-то подобное), пропускающая SheerResponse.Alert при сбое (опять же, просто предположение).   -  person Andreas Bergström    schedule 14.11.2012
comment
Не могли бы вы вставить код конвейера, который создает корень источника данных, и URL-адрес диалогового окна для выбора источника данных? Можете ли вы попробовать создать источник данных за пределами созданного корня и проверить, работает он или нет?   -  person Marek Musielak    schedule 14.11.2012


Ответы (2)


Мы делаем что-то очень похожее, но как дочерний элемент текущего элемента. Ссылка на код здесь:

https://github.com/techphoria414/pageeditor-unleashed/blob/master/PageEditor.Unleashed.Classes/Pipelines/GetRenderingDatasource/CreateContentFolder.cs

Я бы убедился, что вы используете SiteContextSwitcher при создании элемента. В противном случае обработчики событий для PageEditor могут иметь неизвестные побочные эффекты. Некоторые из этих обработчиков событий создаются в коде Sitecore и не могут быть отключены в конфигурации.

person nickwesselman    schedule 14.11.2012
comment
SiteContextSwitcher — это то, чего не хватало! Спасибо Спасибо! - person Andreas Bergström; 14.11.2012

Я думаю, что это событие вызывает ошибку, а не конвейерный процессор. Вероятно, событие OnItemSaving.

По умолчанию Sitecore настроил Sitecore.Tasks.ItemEventHandler.OnItemSaving для выполнения при сохранении элемента.

person Ruud van Falier    schedule 14.11.2012
comment
О, это мне вообще не пришло в голову. Я посмотрю на это! - person Andreas Bergström; 14.11.2012
comment
Хорошо, поэтому я отключил все события в элементе: сохранено и элементе: сохранено, но все еще вижу предупреждение об ошибке :( - person Andreas Bergström; 14.11.2012
comment
Хм... тогда, возможно, это один из клиентских конвейеров, например, в ‹saveUI› или ‹uiSaveLayout› - person Ruud van Falier; 14.11.2012
comment
Отключил все в saveUI и uiSaveLayout без каких-либо улучшений. - person Andreas Bergström; 14.11.2012