DEV Community

tackme
tackme

Posted on

Sitecore PowerShellでStorefrontContext依存の処理を実行する

Sitecore PoewrShellはデプロイしたAPIの動作検証に大変便利なツールです。例えば、作成したコントローラリポジトリを検証するために、以下のようなスクリプトを実行することが多々あります。

using namespace Sitecore.DependencyInjection # リポジトリをDIコンテナから取得 $repository = [ServiceLocator]::ServiceProvider.GetService([Namespace.To.IMyRepository]) # モデルを作成し、プロパティが正しく設定されているか確認 $model = $repository.GetModel() echo ($model.MyModelProperty) 
Enter fullscreen mode Exit fullscreen mode

しかし、リポジトリがStorefrontContextに依存している場合、このコードは期待した動作にはなりません。Sitecore PowerShellが実行されるSiteコンテキストがshellになっており、SitefrontContextが正しく設定されないのが原因です。

以下のように、処理の実行前後にSiteコンテキストを切り替える処理を記述することで、Storefront依存の処理を実行することができるようになります。

# ストアフロントのサイト名を指定 $storefront = "MyStorefront" $siteInfo = [Sitecore.Sites.SiteContextFactory]::GetSiteInfo($storefront) $siteswitcher = New-Object Sitecore.Sites.SiteContextSwitcher($siteInfo) $dbswitcher = New-Object Sitecore.Data.DatabaseSwitcher($SitecoreContextItem.Database) try { # StorefrontContext依存の処理 } finally { $dbswitcher.Dispose() $siteswitcher.Dispose() } 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)