DEV Community

tackme
tackme

Posted on

3 1

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

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs