Sitecore Commerceで独自のEnvironmentを作成する方法
Tags: sitecore, commerce
Published: 2020-05-25 04:18:24

Sitecore Commerceではインストールするとデフォルトで HabitatAuthoringやAdventureWorksといったサンプルのEnvironmentが入っています。実際にウェブサイトを作成する際には独自のEnvironmentを作成する必要があります。

追加方法についてはドキュメントにも記述されているのですが、ところどころ躓いたので、その方法をまとめておきたいと思います。

## 作成方法
① 全てのコマースエンジンで以下のファイルを複製し、`Habitat`の部分を任意の名前に変更します。（今回は`MyEnv`で作成します）

- `{commerce engine}/wwwroot/data/Environments`
    - `PlugIn.Habitat.CommerceAuthoring-1.0.0.json`
    - `PlugIn.Habitat.CommerceMinions-1.0.0.json`
    - `PlugIn.Habitat.CommerceShops-1.0.0.json`

② それぞれのファイルを開き、以下のプロパティの値を修正してください。

|プロパティ名|値|
|:-|:-|
|`ArtifactStoreId`|全てのファイルで共通のGUID|
|`Id`|`Entity-CommerceEnvironment-{Environment名}`|
|`Name`|`{Environment名}`|

`{Environment名}`は、MyEnvAuthoring, MyEnvMinionsといった名前を設定しましょう。

③ （スキップ可）それぞれのファイル内に不要なポリシーがある場合や、変更したいポリシーがある場合は修正します。

以下の記事が参考になります。
- [Core policies](https://doc.sitecore.com/developers/92/sitecore-experience-commerce/en/core-policies.html)

④ （スキップ可）それぞれのファイルの`EnvironmentInitializationPolicy`から、以下の項目を削除します。削除しないとHabitatのカタログが生成されます。

- `Environment.Habitat.DefaultRelationships-1.0`
- `Environment.Habitat.SellableItems-1.0`
- `Environment.Habitat.Pricing-1.0`
- `Environment.Habitat.Promotions-1.0`
- `Environment.Habitat.Catalog-1.0`

⑤ 各コマースエンジンの以下のファイルに、新しいEnvironmentを追加します。

- `{commerce engine}/wwwroot/bootstrap/Global.json`

```diff
{
    "$type": "Sitecore.Commerce.Plugin.BusinessUsers.EnvironmentBusinessToolsPolicy,Sitecore.Commerce.Plugin.BusinessUsers",
    "EnvironmentList": {
        "$type": "System.Collections.Generic.List`1[[System.String, mscorlib]], mscorlib",
        "$values": [
            "AdventureWorksShops",
            "AdventureWorksAuthoring",
            "HabitatAuthoring",
            "HabitatShops",
+           "MyEnvAuthoring",
+           "MyEnvShops"
        ]
    }
},
```

⑥ 全てのコマースエンジンで、以下のファイルの`EnvironmentName`プロパティの値を更新します。

- `{commerce engine}/wwwroot/config.json`

```diff
        "SiteTitle": "CommerceAuthoring_mysite",
        "BootStrapFile": "Global",
        "DeploymentId": "Deployment01",
-       "EnvironmentName": "HabitatAuthoring",
+       "EnvironmentName": "MyEnvAuthoring",
        "EncryptionProtectionType": "Machine",
```

⑧ IISを再起動し、Postmanで以下のリクエストを投げます。

- `SitecoreCommerce_DevOps/`
    - `Environment Bootstrap/`
        - `Bootstrap Sitecore Commerce`
    - `Clean Environment/`
        - `Clean Environment`（各Environmentに対して実行）
    - `Environment Initialize/`
        - `Initialize Environment`（各Environmentに対して実行）

⑨ 以下のconfigを修正し、ストアフロントで使用するEnvironmentを変更します。

- `{sitecore xp}/App_Config/Include/Y.Commerce.Engine/Sitecore.Commerce.Engine.Connect.config`

```diff
 <configuration xmlns:patch="http://www.sitecore.net/xmlconfig/" xmlns:role="http://www.sitecore.net/xmlconfig/role/">
  <sitecore role:require="Standalone or ContentDelivery or ContentManagement">
    <commerceEngineConfiguration type="Sitecore.Commerce.Engine.Connect.CommerceEngineConfiguration, Sitecore.Commerce.Engine.Connect">
      <shopsServiceUrl>https://commerceauthoring.mysite.com/api/</shopsServiceUrl>
      <commerceOpsServiceUrl>https://commerceauthoring.mysite.com/commerceops/</commerceOpsServiceUrl>
      <commerceRequestTimeout>210</commerceRequestTimeout>
      <enforceSsl>true</enforceSsl>
-     <defaultEnvironment>HabitatAuthoring</defaultEnvironment>
+     <defaultEnvironment>MyEnvAuthoring</defaultEnvironment>
      <defaultShopName>CommerceEngineDefaultStorefront</defaultShopName>
```

⑩ ビジネスツールの以下のconfigを修正し、デフォルトのEnvironmentを変更します。

- `{BizFx root}/assets/config.json`
```diff
 {
-  "EnvironmentName": "HabitatAuthoring",
+  "EnvironmentName": "MyEnvAuthoring",
   "EngineUri": "https://commerceauthoring.habitat.com",
   "IdentityServerUri": "https://habitat.identityserver",
   "BizFxUri": "https://bizfx.my.com",
   "Language": "en",
   "Currency": "USD",
   "ShopName": "CommerceEngineDefaultStorefront",
   "LanguageCookieName": "selectedLanguage",
   "EnvironmentCookieName": "selectedEnvironment",
   "AutoCompleteTimeout_ms": 300
 }
```

## 確認作業
以下の2つを確認してください。

- ビジネスツールにアクセスし、Environmentを選択するドロップダウンリストに新しく追加したEnvironmentが追加されている
- Authoringでカタログを作成してワークフローを回すと、Shopsにコピーされている

## 参考
- [Create a custom Commerce Engine environment](https://doc.sitecore.com/developers/90/sitecore-experience-commerce/en/create-a-custom-commerce-engine-environment.html)
- [Setting up a new Sitecore Commerce Environment | XCentium](https://xcentium.com/blog/2018/07/07/setting-up-a-new-sitecore-commerce-environment)