Salesforce B2C CommerceのB2C CRM Sync(機能内容編)

※ これから記載する事項は、私が所属する会社とは一切関係のない事柄です。

この記事ではb2c-crm-syncレポジトリREADME内の[Feature Summary](https://github.com/SalesforceCommerceCloud/b2c-crm-sync#feature-summary)をもとにB2C CRM Syncの機能を画面のスクリーンショットと共に紹介しようと思います。
実装方法については、[Salesforce B2C CommerceのB2C CRM Sync(実装手順編)](https://qiita.com/syunyama/items/b0c92a21ae90f5481fac)を参照してください。



# b2c-crm-syncの機能内容


※ Salesforce Customer 360 Platform (以下、Platformと言います) 
※ Salesforce B2C Commerce (以下、Commerceと言います) 


### Platform 内に複数のCommerceの環境設定ができる

複数のインスタンスの設定をレコードとして複数管理できる。
![スクリーンショット 2022-01-05 18.38.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/e1cd690b-2b9a-21af-b150-8160fee624be.png)


### Platform 内にCommerce の複数のサイト・顧客リストの設定できる

複数のサイトの設定をレコードとして管理できる。
![スクリーンショット 2022-01-05 18.38.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/928a289e-b1a0-957e-a5aa-e14f059e704d.png)

複数の顧客リストをレコードとして管理できる。
![スクリーンショット 2022-01-05 18.40.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/4db172b1-5606-55c6-6034-b56968b58ce7.png)



### JWT を利用したPlatformとCommerce間のパスワードレス通信ができる

JWTを利用するための設定をレコードとしてもち、PlatformからCommerceへパスワードなしでの通信を実現している。
![スクリーンショット 2022-01-05 18.41.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/c323641a-80fc-57f9-4c4b-a97ed7e4b671.png)

コネクテッドアプリケーションを利用して、CommerceからPlatformのAPIをパスワードなしで呼んでいる。
![スクリーンショット 2022-01-05 11.02.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/b1adbca5-6bac-95cb-58ba-316136ecf730.png)


### インスタンス、顧客リスト、サイトのCommerceとの相互的なインテグレーションを粒状で管理し、さらにメッセージも受信できる

若干わからなかったので推測ではありますが、
`npm run crm-sync:sf:b2cinstance:setup`
でCommerceからインスタンス、顧客リスト、サイトを取得して、Platformのレコードをアップデートすることができ、さらにエラー時にメールが飛んできたり、コマンドラインにも実行結果が表示される。


### Platformの顧客データモデルとしてPersonAccounts またはBase (Account[取引先] / Contact[取引先責任者])を利用することができる

Baseのデータモデルを利用した場合の見た目。取引先担当者と取引先にCommerceの顧客データが保存されている。
![スクリーンショット 2022-01-05 18.43.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/3c4f9266-c416-4e17-2921-7875b5ea96c7.png)




### Commerceの顧客データがほぼリアルタイムでPlatformに連携される


Commerceのストアフロントから顧客データを編集すると、
![スクリーンショット 2022-01-05 18.55.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/08fab4a0-11e7-6258-e01c-8a4605294e9e.png)



Platformの情報も編集される。（Platform→Commerceも同様に連携される）
![スクリーンショット 2022-01-05 18.56.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/77ccccca-420d-40b7-6998-bda9eced8659.png)



そのほかにも「Custom.B2CCRMSync.SynchronizeCustomers」というジョブステップが用意されているので、スケジュールや手動でもCommerceからPlatformに顧客データを連携することもできる。


### カスタマーがPlatformから代理注文(OOBO[Order on Behalf of])を起動できる


取引先責任者のページレイアウトを設定し、OOBOをできるようにすると、
![スクリーンショット 2022-01-05 18.31.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/fa73c100-d28f-d09b-ef4c-d11a2450fd18.png)
![スクリーンショット 2022-01-05 18.32.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/223cf6b4-b3f9-6dce-c667-9ae1b5b6c8e7.png)


取引先責任者のセッションで代理ログインし、購入や情報の編集を行うことができる。

![スクリーンショット 2022-01-05 18.32.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/7ce60959-5349-7eb2-ddd8-29e73db8bcd3.png)




### Platformから顧客の住所録へのアクセスできる(エンタープライズエディションのみ)

![スクリーンショット 2022-01-05 19.00.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/8068b425-f8c0-841d-a17d-afbbc7a1e761.png)



### Account ID / Contact ID を会員購入・ゲスト購入ともに注文に紐づけられる

Commerceの注文の属性にAccount/Contact ID が紐づけられている。
![スクリーンショット 2022-01-04 16.10.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/9abdffb4-570f-f871-0722-69e3f4b65a0f.png)



### ヘッドレスでも顧客データの同期やIDの注文の紐付けが可能

[OCAPI Hooks](https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/OCAPI/current/usage/Hooks.html?resultof=%22%64%77%2e%6f%63%61%70%69%2e%73%68%6f%70%2e%63%75%73%74%6f%6d%65%72%22%20)を利用しているので、OCAPI経由のユーザ登録や注文でも同期や紐付けを行うことができる。


# b2c-crm-syncのコマンドでできること

基本的にできることは大きく分けて３つかと思います。
その他多くのコマンドがありますが、詳細は `npm run crm-sync:help` で確認できます。


### 1. b2c-crm-syncレポジトリにあるリソースのアップロード

レポジトリの `/src` 配下にあるリソース群をアップロード

例：
`npm run crm-sync:sf:org:deploy`
`npm run crm-sync:b2c:build`

![image (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/460c9bc5-5bfe-e8a3-6fb6-7e96664126a3.png)




### 2. 各種テスト

* それぞれのサービスへの接続テスト
* ローカル環境のユニットテスト
* Apexクラスのテスト
* .envファイルの評価テスト

例：
`npm run crm-sync:b2c:verify`
`npm run crm-sync:test:b2c`
`npm run crm-sync:test:cli`
`npm run crm-sync:test:use-cases`
`npm run crm-sync:b2c:auth:jwt`
`npm run crm-sync:b2c:auth:clientcreds`

![image (7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/21fd9e56-4f0e-4a4d-b9e3-4f6b106814d8.png)





### 3. 設定データの移行

.env内の情報やAPIで取得した設定情報をそれぞれのサービスへアップロード

例：
`npm run crm-sync:sf:b2cclientid:setup`
`npm run crm-sync:sf:b2cinstance:setup`

![image (8).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/c0eea11d-b012-9609-567b-1f008b4b0544.png)