loading...

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

xirtardauq profile image Takumi Yamada ・1 min read

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()
}

Discussion

pic
Editor guide