我正在尝试让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] 中创建新项目(定义为父数据源模板并添加到 Sublayout 模板中。然后将此新项添加到对话框DatasourceRoots中,以允许用户在其下创建数据源项。
我已成功实现了一个要检查的管道,如果该项目不存在则创建该项目,选择渲染数据源对话框显示新创建的项目,并允许用户创建新项目它下面的数据源项,正如预期的那样。但是,单击“确定”后,将显示一条警告,并显示“发生错误”消息。关闭此对话框并再次执行操作(当数据源根目录已存在时)可以正常工作。
使用Reflector我已验证从对话框(Sitecore.Shell.Applications.Dialogs.SelectRenderingDatasourceForm)创建的项目是否正确返回,并且使用正确的参数和带有所需项目的SetDialogValue调用关闭对话框。
我想我的问题是;关闭此对话框后会发生什么?触发什么管道来实际设置渲染数据源?我需要找出引发此错误的位置,当然,还要修复出错的地方......
我意识到这可能有点难以理解,如果需要,我很乐意提供代码。
答案 0 :(得分:1)
我们做的事非常相似,但作为当前项目的孩子。在这里参考代码:
我会确保您在创建项目时使用SiteContextSwitcher。否则,PageEditor的事件处理程序可能会产生未知的副作用。其中一些事件处理程序是由Sitecore在代码中创建的,不能在config中禁用。
答案 1 :(得分:0)
我认为这是导致错误的事件,而不是管道处理器。可能是OnItemSaving事件。
默认情况下,Sitecore已将Sitecore.Tasks.ItemEventHandler.OnItemSaving
配置为在保存项目时执行。