Sitecore PoewrShellはデプロイしたAPIの動作検証に大変便利なツールです。例えば、作成したコントローラリポジトリを検証するために、以下のようなスクリプトを実行することが多々あります。
using namespace Sitecore.DependencyInjection
# リポジトリをDIコンテナから取得
$repository = [ServiceLocator]::ServiceProvider.GetService([Namespace.To.IMyRepository])
# モデルを作成し、プロパティが正しく設定されているか確認
$model = $repository.GetModel()
echo ($model.MyModelProperty)
しかし、リポジトリが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()
}
Top comments (0)