2

我试图让 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 以允许用户在其下方创建数据源项目。

我已经成功实现了一个管道来检查项目,如果项目不存在则创建它,并且“选择呈现数据源”对话框显示新创建的项目并允许用户在其下方创建一个新的数据源项目,正如预期的那样。但是,单击“确定”后,会显示一条警报,并显示“发生错误”消息。关闭此对话框并再次执行操作(当数据源根目录已经存在时)工作正常。

使用反射器,我已经验证了从对话框创建的项目 (Sitecore.Shell.Applications.Dialogs.SelectRenderingDatasourceForm) 是否正确返回,并且使用正确的参数和使用预期项目的 SetDialogValue 调用关闭了对话框。

我想我的问题是;关闭此对话框后会发生什么?触发什么管道来实际设置渲染上的数据源?我需要弄清楚这个错误是在哪里引发的,当然,修复任何错误......

我意识到这可能有点难以理解,如果需要,我很乐意提供代码。

4

2 回答 2

1

我们做一些非常相似的事情,但作为当前项目的子项。参考这里的代码:

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

我会确保您在创建项目时使用 SiteContextSwitcher。否则,PageEditor 的事件处理程序可能会产生未知的副作用。其中一些事件处理程序是由 Sitecore 在代码中创建的,不能在配置中禁用。

于 2012-11-14T15:48:35.190 回答
0

我认为这是导致错误的事件,而不是管道处理器。可能是 OnItemSaving 事件。

默认情况下,Sitecore 已配置Sitecore.Tasks.ItemEventHandler.OnItemSaving为在保存项目时执行。

于 2012-11-14T10:21:28.783 回答