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)

サイトは、テンプレートのWebサイト、datasourcefolder、およびstartpageに基づいてアイテムを作成するブランチテンプレートを使用して作成されます。

これが私がしたいことです:

新しいサブレイアウトが追加されたら、ソースが存在するかどうかを確認します。存在しない場合は、指定されたテンプレート(親データソーステンプレートとして定義され、サブレイアウトテンプレートに追加)に基づいてsite1 / Datasources/[モジュール名]に新しいアイテムを作成します。次に、この新しいアイテムをダイアログDatasourceRootsに追加して、ユーザーがその下にデータソースアイテムを作成できるようにします。

パイプラインを正常に実装して、アイテムが存在しない場合はアイテムをチェックして作成しました。[レンダリングデータソースの選択]ダイアログに新しく作成されたアイテムが表示され、ユーザーは期待どおりにその下に新しいデータソースアイテムを作成できます。ただし、[OK]をクリックすると、「エラーが発生しました」というメッセージとともにアラートが表示されます。このダイアログを閉じて操作を再実行すると(データソースルートがすでに存在する場合)、問題なく機能します。

Reflectorを使用して、ダイアログ(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 に答える