Salesforce B2B/D2C Commerce でカートオブジェクトから注文オブジェクトへの項目の連携

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

Salesforce B2B/D2C Commerce ではチェックアウト完了時にカートオブジェクトから注文オブジェクトが作成され、注文オブジェクトから注文概要オブジェクトが作成されます。
**カート→注文→注文概要** といった流れです。
その際にそれぞれのオブジェクトのフィールドがどのようにマッピングされるのか紹介したいと思います。

:::note
注文概要オブジェクトは注文管理で利用するものですが、詳細はヘルプの「[注文概要](https://help.salesforce.com/s/articleView?id=sf.om_order_summary.htm&type=5)」をご覧ください。
:::


## オブジェクトと標準フィールドのマッピング

対応する標準オブジェクト下記の通りです。

|カート関連オブジェクト	|注文関連オブジェクト	|注文概要関連オブジェクト	|
|---	|---	|---	|
|WebCart	|Order	|OrderSummary	|
|CartItem	|OrderItem	|OrderItemSummary	|
|CartDeliveryGroup	|OrderDeliveryGroup	|OrderDeliveryGroupSummary	|
|CartItemPriceAdjustment	|OrderItemAdjustmentLineItem	|OrderItemAdjustmentLineSummary	|
|CartTax	|OrderItemTaxLineItem	|OrderItemTaxLineItemSummary	|
|*WebCartAdjustmentGroup*	|OrderAdjustmentGroup	|OrderAdjustmentGroupSummary	|

また、それぞれ対応するフィールドは「[Map Cart Data to Order Data](https://developer.salesforce.com/docs/atlas.en-us.b2b_b2c_comm_dev.meta/b2b_b2c_comm_dev/b2b_b2c_comm_import_export_carttoorder.htm)」をご覧ください。



## カスタムフィールド

同一名称、同一タイプ、同一の設定（例：長さ、小数点、 項目レベルセキュリティ）の場合に自動でマッピングされます。現状対応しているマッピング可能なタイプは下記の通りです。

* Checkbox
* Currency
* Date
* DateTime
* Email
* Html
* LongTextArea
* Number
* Percent
* Phone
* Text
* TextArea
* Url




## 実際にやってみる

### やること

**「Note」「TaxNote」** という名前のカスタムフィールドを **WebCart、Order、OrderSummary** と **CartTax、OrderItemTaxLineItem、OrderItemTaxLineItemSummary** に設定しそれぞれどのようにマッピングされるかを確認する。



### カスタムフィールドの作成

下画像のように **「Note」** というフィールドを **WebCart、Order、OrderSummary** に、**「TaxNote」** というフィールドを **CartTax、OrderItemTaxLineItem、OrderItemTaxLineItemSummary** に設定します。

:::note warn
この際、それぞれ同一名称、同一タイプ、同一の設定であることが必要です。
:::

![スクリーンショット 2023-10-06 13.51.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/51c8d28d-69b7-2e96-236d-1b95caba1784.png)



### WebCart のカスタムフィールドを編集する

自作した「[GeneriCartField](https://github.com/SalesforceDevelopersJapan/jp-cc-se/tree/main/packages/GeneriCartField)」というカートページやチェックアウトページで WebCart オブジェクトのカスタムフィールドを編集できるコンポーネントを利用して編集します。

下記のように **[Note]** というフィールドを編集できるようにコンポーネントを設定しました。
![スクリーンショット 2023-10-06 17.54.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/43290852-93f8-3546-7abe-aac881df04dc.png)


そしてサイトからチェックアウト時に **「テスト」** という文字を入力し、チェックアウトを完了しました。
![スクリーンショット 2023-10-06 14.47.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/b8424053-39c0-a89b-43aa-b984421527af.png)



### CartTax のカスタムフィールドを編集する

CartTax のオブジェクトをサイトの画面上から編集するのは難しいので、[チェックアウトインテグレーション](https://developer.salesforce.com/docs/atlas.ja-jp.b2b_b2c_comm_dev.meta/b2b_b2c_comm_dev/b2c_comm_integration_arch.htm)の[税金のインテグレーション](https://developer.salesforce.com/docs/atlas.ja-jp.b2b_b2c_comm_dev.meta/b2b_b2c_comm_dev/b2b_b2c_comm_tax_reference_package.htm)の際に利用する Apex を修正して編集します。
自作した[税金インテグレーションのためのサンプルコード](https://gist.github.com/syunyama/ea2078b3432ff8e9a1bb52c6003df619)を下記のように修正し、チェックアウト時に **「テスト税」** という値が **[TaxNote]** フィールドに入力されます。

```apex
// -----省略-----
CartTax tax = new CartTax(
          Amount = amount * (B2BTaxSample.TAX_RATE / 100),
          CartItemId = item.Id,
          Name = item.Name,
          TaxCalculationDate = Date.today(),
          TaxRate = B2BTaxSample.TAX_RATE,
          TaxType = 'Actual',
          TaxNote__c = 'テスト税'
        );
cartTaxesToInsert.add(tax);
// -----省略-----
```





### Order、OrderSummary の値の確認

下画像のように **[Note]** に **「テスト」** という値が入っていることを確認できます。

Order
![スクリーンショット 2023-10-06 14.47.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/d6f003a6-62fe-d26c-938d-153b16763d39.png)

OrderSummary
![スクリーンショット 2023-10-06 14.47.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/42c8d4f4-3de7-6e1c-096a-9614dbe317f9.png)



### OrderItemTaxLineItem、OrderItemTaxLineItemSummary の値の確認

下画像のように **[TaxNote]** に **「テスト税」** という値が入っていることを確認できます。 

OrderItemTaxLineItem
![スクリーンショット 2023-10-06 17.06.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/68e819a1-1fbf-9559-3424-42c44ceb5e81.png)

OrderItemTaxLineItemSummary
![スクリーンショット 2023-10-06 17.09.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/d5a302dd-a519-ff7b-b5d0-a1de3fdf0a37.png)