Sitecore - 创建数据源父级“出错”SetSublayout

时间:2012-11-14 09:04:33

标签: sitecore sitecore6 page-editor

我正在尝试让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调用关闭对话框。

我想我的问题是;关闭此对话框后会发生什么?触发什么管道来实际设置渲染数据源?我需要找出引发此错误的位置,当然,还要修复出错的地方......

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

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