# Salesforce Commerce Cloud インポート連携

Commerce Cloudは、あらゆる業界に対応した顧客中心のコマースにより、どこからでもカスタマージャーニーを繋ぎ、成功を促進します。

- デジタルカスタマージャーニーを完全に接続
  - 顧客中心のコマースでエンゲージメントをパーソナライズ
  - データを統合し、すべてのインタラクションをパーソナライズし、自動化、AI、単一の信頼できる情報源により、チャネル全体で収益を拡大
- カスタマージャーニーにコマースを接続
  - マーケティングから販売、コマース、フルフィルメント、サービス、そしてそれ以降まで、シームレスなカスタマージャーニーで、より多くの顧客を獲得し、ロイヤルティを促進します。クリックベースまたはコードベースのツールを選択して構築できます。
- アジャイルでスケーラブル、かつ安全なプラットフォームで迅速に適応
  - 顧客のスピードでイノベーションを起こし、グローバルに簡単にスケールし、あらゆるレベルの需要に対応します。拡張現実、マーケットプレイスなどの体験を提供するアプリのパートナーエコシステムでコマースを拡張できます。


## この連携でできること

- Salesforce Commerce Cloud インポート連携は、以下の機能を提供します:
  - OAuthによるAPI Clientを使用した認証
  - 特定のリストの顧客情報の取り込み
  - 顧客リソースの取り込み、例えば:
    - 顧客情報
    - 名前、性別、メールアドレス
  - 商品リソースの取り込み、例えば:
    - 商品のリスト
    - 商品情報
  - 在庫および商品在庫リソースの取り込み、例えば:
    - 在庫のリスト
    - 商品在庫の割り当て
    - 商品在庫の在庫レベル
    - 商品在庫ID
  - カテゴリおよび商品割り当てリソースの取り込み、例えば:
    - カテゴリ情報
    - 各カテゴリに属する商品
  - ストアリソースの取り込み、例えば:
    - すべてのストア
    - ID、住所、郵便番号、国、在庫IDを含むストア情報
  - カタログリソースの取り込み、例えば:
    - カタログ情報
    - 割り当てられた商品数


## 前提条件

- Treasure Dataの基本知識
- Treasure CLIの基本知識
- Salesforce Commerce Cloudの基本知識
- Open Commerce Cloud APIの基本知識
- Commerce Cloud Account Manager Systemへのアクセス


## 制限事項

- アプリケーションシークレットには `%` 文字を含めることはできません。SFCCの認証サーバーの内部的な問題により、`%` 文字を含むシークレットは認証できません。
- 増分読み込みは作成日のみサポートされ、変更日はサポートされていません
- 大量のデータは低パフォーマンスを引き起こす可能性があります
- プレビューモードでは、データプレビューの取得に時間制限があるため、コネクタは詳細なデータプレビューの生成をサポートしていません
- 商品がない在庫リストでも1レコードとして挿入され、商品在庫リストに属するプロパティはnullになります


## 増分読み込みについて

増分読み込みとは、ソースからTreasure Dataに新規または更新されたレコードのみを読み込むことです。特に大規模なデータセットにおいて、フルロードと比較して効率的に実行されるため便利です。

増分読み込みは、多くのTreasure Data連携で利用可能です。単純なチェックボックスの選択で済む場合もあれば、増分読み込みを選択した後に、指定する必要のある他のフィールドが提供される場合もあります。

### 連携における増分読み込みについて

Treasure Dataの増分読み込みには4つのパターン(3種類のデータコネクタ + 1つのワークフローtd_loadオペレータ)があり、3つのデータコネクタの読み込み例は以下の通りです:

- クラウドストレージサービス(例: AWS S3、GCSなど)
  - ファイル名の辞書順
- クエリ(例: MySQL、BigQueryなど)
  - 日時
- 可変期間(Google Analyticsなど)
  - 読み込みにstart_dateを使用


### コネクタの増分読み込み

増分読み込みが選択されている場合、コネクタのデータは増分的に読み込まれます。

このモードは、前回のスケジュール実行以降に変更されたオブジェクトターゲットのみを取得する場合に便利です。

例えば、UIでは:

![](/assets/snippet-about-incremental-loading-2024-11-18-1.63417e89e255d0e02570d0882a4929cde027422a934af21ba7541c5001c313a7.7499f82f.png)

MySQL、BigQuery、SQL Serverなどのデータベース連携では、増分データを読み込むためにカラムまたはフィールド名が必要です。

![](/assets/snippet-about-incremental-loading-2024-11-18.398c24903f2c97039ca73ab56fd98e5cd1158120244ca53bf37dce03cf0513bb.7499f82f.png)

### 制限事項、サポート、提案

- 一部の連携では、増分読み込みを選択する場合、フルテーブルスキャンを回避するために、カラムにインデックスがあることを確認する必要がある場合があります。
- Timestamp、Datetime、および数値カラムのみがincremental_columnsとしてサポートされています。
- 複雑なクエリのプライマリキーを検出できないため、生のクエリにはincremental_columnsが必要です。


## Commerce Cloud Account Manager SystemでAPI Clientを作成

これらの手順は、連携の認証を定義するために必要な認証情報を作成するために必要です。

1. Salesforce Cloud Commerce UIにアクセスしてログインします。例えば、[Account Manager UI](https://account.demandware.com/dw/account/Home#/)。


![](/assets/image2021-6-29_11-22-1.174409bb434f9aa760e0da14f511c0e2ba80a3f8b7b0b3092cafb831cd3c1bf4.34709991.png)

1. **API Client**を選択します。


![](/assets/screen-shot-2021-05-18-at-10.47.20.be4fec22b1256686095d473c7740365177027c0ed2e9ffb8b6c407a080314b68.34709991.png)

1. **Add API Client**を選択します。


![](/assets/screen-shot-2021-05-18-at-10.48.06.8889c5457f7f0dc1e4bafc2ad44bac3bbe46fdd7e7fd1d12800d528888272d6e.34709991.png)

1. 以下の値を入力します:


- **Display Name**
- **Password**
- **Confirm Password**


1. Access Controlを選択して有効にします。
2. Organizationsエリアで、組織を選択します。
3. Rolesエリアで、**Add**を選択します。
4. 適切なロールを選択します。例えば、**Sandbox API User**。
![](/assets/screen-shot-2021-05-18-at-10.52.00.2f412cde157b2237cb6cd3c2ac84c5f2d268266671525d06102ec07de59d79ef.34709991.png)
5. **Add**を選択します。
6. ロールが追加されたら、それに関連付けられたすべてのサンドボックスを選択します。


![](/assets/screen-shot-2021-05-18-at-10.56.20.819b3044b29100a213ff1d6adff5194069c1ec3060f6553b1ad5c4c3522312d4.34709991.png)

1. **Add**を選択します。
2. Open ID Connectまでスクロールダウンします。
3. **Default Scopes**を追加します:


- **mail**
- **roles**
- **tenantFilter**
- **profile**


1. **Redirect URI**を追加します。例えば:


[https://admin.us01.dx.commercecloud.salesforce.com/oauth2-redirect.html](https://admin.us01.dx.commercecloud.salesforce.com/oauth2-redirect.html)

1. Token Endpoint Auth Methodセクションまでスクロールします。
2. **client_secret_basic**を選択します。
3. Access Token Formatには**JWT**を選択します。


![](/assets/screen-shot-2021-05-18-at-10.59.42.caff70407f1f595dd5532a653e7edfde4981c4ce8eead310e35bc53cd184cd1e.34709991.png)

1. **Save**を選択します。
2. API Client画面に戻ります。


![](/assets/screen-shot-2021-05-18-at-11.00.12.cb9834691790cd0d23f476174914356bc415e19090c477b458ea6855ea7b1f08.34709991.png)

1. **API Client ID**と**Password**を書き留めるか、安全な場所に保存します。


これらは、SFCCインスタンスと連携するための認証資格情報として使用されます。

## Data APIへのアクセスをAPI Clientに許可

これらの手順により、API ClientをData APIおよびSalesforce B2C Commerce Cloudコネクタで使用できるようになります。

1. Business Managerを開きます。例えば:


[https://{YOUR_INSTANCE_URL}.commercecloud.salesforce.com/on/demandware.store/Sites-Site/default/ViewApplication-DisplayWelcomePage](https://treasure-data.atlassian.net/wiki/spaces/EN/pages/1957200062/Salesforce+Commerce+Cloud+Sandbox+access)

1. **Administration**を選択します。
2. **Open Commerce API Settings**を選択します。


![](/assets/screen-shot-2021-05-18-at-11.14.56.22f4966f9acc62700502855a8614f8279229742bef4096f8e623c4ee65c4de85.34709991.png)

Typeとして**Data**を選択します。

![](/assets/screen-shot-2021-05-18-at-11.17.04.c1b302b94a60b61d7fcf3e0bd611ed1efbbab4856fb53942f53957ac5716e6f3.34709991.png)

Data APIの設定が表示されます。

1. テキストフィールドに以下を入力またはコピーします:



```json
{
  "_v": "21.6",
  "clients": [
    {
      "client_id": "your_api_client_id",
      "resources": [
        {
          "methods": [
            "get",
            "post",
            "put",
            "patch",
            "delete"
          ],
          "read_attributes": "(**)",
          "write_attributes": "(**)",
          "resource_id": "/**"
        }
      ]
    }
  ]
}
```

1. Select Contextで**Global (organization-wide)**を選択します。


![](/assets/screen-shot-2021-05-18-at-11.20.52.2e465d6b6b5f91ad7b9806e8a67739889dcb08227a3671a7b60e69f05a562b61.34709991.png)

1. **Save**を選択します。


少なくとも3分間待ちます。

これでAPI ClientがData APIおよびSalesforce B2C Commerce Cloudコネクタで使用できる準備が整いました。

## Treasure コンソールを使用して接続を作成

### 新しい接続を作成

Treasure Dataでは、クエリを実行する前にデータ接続を作成および設定する必要があります。データ接続の一部として、連携にアクセスするための認証を提供します。

**Treasure コンソール**を開きます。

**Integrations Hub** > **Catalog**に移動します。

**Salesforce B2C Commerce Cloud**を検索して選択します。

![](/assets/screen-shot-2021-06-29-at-10.23.14-am.95fe1756c7a15029a255225954eb4c44ee6592a62323634326e49fdff2d19c4c.34709991.png)

**Create Authentication**を選択します。

以下のダイアログが開きます:

![](/assets/screen-shot-2021-06-29-at-10.26.36-am.820d595d84b6053b95bc3d3ae74dfce26b90dfcbac6acd3c53293a19ecdbc71d.34709991.png)

必要な情報を入力または選択します:

| Parameter | Description |
|  --- | --- |
| API Client ID | Commerce CloudのAccount Manager Applicationでアプリケーションを作成した後に取得したキー。 |
| API Client Password | Commerce CloudのAccount Manager ApplicationでAPI Clientを作成する際のパスワード。 |
| Base URI | Business Manager ApplicationにアクセスするためのURL。例: https://xxxx.commercecloud.salesforce.com/ |


1. 接続の名前を入力します。


![](/assets/screen-shot-2021-06-29-at-10.29.48-am.f501d8dc4735de285c585836bb0c0e4ea5ae593d95ad78cf9e1372834485b588.34709991.png)

1. **Continue**を選択します。


### Treasure Dataへのデータ転送

認証された接続を作成すると、自動的にAuthenticationsに移動します。

1. 作成した接続を検索します。


![](/assets/screen-shot-2021-06-29-at-10.37.51-am.483161564aa5c70e0fbfa6860c5b93a1c136046e6e9dc9810a4064637e6d604c.34709991.png)

1. **New Source**を選択します。
2. Data Transferフィールドで**Source**の名前を入力します。


![](/assets/screen-shot-2021-06-29-at-10.39.30-am.0f71ffe4ddd930c62ee4c3aefae3dc2fa900ff7e4b65ae171e5d04537f8123e3.34709991.png)

1. **Next**を選択します。
2. Source Tableダイアログが開きます。
3. 以下のパラメータを編集します:


![](/assets/d63b3e0c-bb0c-42e1-ac47-d7a453b90ff0.a48efca75fe1acbf0f32b8f313d30bd1969e36f4d439e7af2b47450d7d6ee8ea.34709991.png)

| Parameters | Description | Description of Data Types |
|  --- | --- | --- |
| Data Type | Treasure Dataに取り込みたいデータオブジェクト: |  |
|  | **Customers From List** | 特定の顧客リストからの顧客情報 |
|  | **Products** | Salesforce Commerce Cloudアカウントの商品情報 |
|  | **Categories and Product Assignments** | 商品カテゴリ情報と各カテゴリに属する商品 |
|  | **Inventory Lists and Product Inventories** | 在庫リストと各在庫リスト内の商品 |
|  | **Stores** | ストア情報、場所、ストアに属する在庫 |
|  | **Catalogs** | 商品カタログ情報と各カタログの商品数 |
| Customer List ID | 顧客情報をインポートしたい顧客リストID |  |
| Incremental loading | 前回の取り込み以降に**新しく作成された**データのみを取り込む場合に選択します。 |  |
| Created From | データを取り込みたい特定の時刻(`YYYYMMDDHH`形式)。 |  |


1. **Next**を選択します。
2. Data Settingsページは、必要に応じて変更するか、ページをスキップできます。


オプションで、以下のパラメータを編集します:

![](/assets/screen-shot-2021-06-29-at-10.48.43-am.88b0b629cf1587026b98a4aec100886c2381608b4a7dfce8e00ffc6182df1e50.34709991.png)

1. **Next**を選択します。


### Data Preview

インポートを実行する前に、Generate Preview を選択してデータの[プレビュー](/products/customer-data-platform/integration-hub/batch/import/previewing-your-source-data)を表示できます。Data preview はオプションであり、選択した場合はダイアログの次のページに安全にスキップできます。

1. **Next** を選択します。Data Preview ページが開きます。
2. データをプレビューする場合は、**Generate Preview** を選択します。
3. データを確認します。


### Data Placement

データの配置について、データを配置したいターゲット database と table を選択し、インポートを実行する頻度を指定します。

1. **Next** を選択します。Storage の下で、インポートされたデータを配置する新しい database を作成するか、既存の database を選択し、新しい table を作成するか、既存の table を選択します。
2. **Database** を選択 > **Select an existing** または **Create New Database** を選択します。
3. オプションで、database 名を入力します。
4. **Table** を選択 > **Select an existing** または **Create New Table** を選択します。
5. オプションで、table 名を入力します。
6. データをインポートする方法を選択します。
  - **Append** (デフォルト) - データインポートの結果は table に追加されます。
table が存在しない場合は作成されます。
  - **Always Replace** - 既存の table の全体の内容をクエリの結果出力で置き換えます。table が存在しない場合は、新しい table が作成されます。
  - **Replace on New Data** - 新しいデータがある場合のみ、既存の table の全体の内容をクエリの結果出力で置き換えます。
7. **Timestamp-based Partition Key** 列を選択します。
デフォルトキーとは異なるパーティションキーシードを設定したい場合は、long または timestamp 列をパーティショニング時刻として指定できます。デフォルトの時刻列として、add_time フィルターで upload_time を使用します。
8. データストレージの **Timezone** を選択します。
9. **Schedule** の下で、このクエリを実行するタイミングと頻度を選択できます。


#### 一度だけ実行

1. **Off** を選択します。
2. **Scheduling Timezone** を選択します。
3. **Create & Run Now** を選択します。


#### 定期的に繰り返す

1. **On** を選択します。
2. **Schedule** を選択します。UI では、*@hourly*、*@daily*、*@monthly*、またはカスタム *cron* の 4 つのオプションが提供されます。
3. **Delay Transfer** を選択して、実行時間の遅延を追加することもできます。
4. **Scheduling Timezone** を選択します。
5. **Create & Run Now** を選択します。


転送が実行された後、**Data Workbench** > **Databases** で転送の結果を確認できます。

# 利用可能な設定

| **Configuration name** | **Type** | **Available when** | **Required** | **Sample value** | **Description** |
|  --- | --- | --- | --- | --- | --- |
| base_url | STRING | default | yes | [https://xxxx.example.com](https://xxxx.example.com) | SFCCインスタンスのベースURL |
| catalog_id | STRING | target = categories | no | test | カタログID |
| client_id | STRING | default | yes | abcdef | アプリケーションID |
| client_secret | STRING | default | yes | abcdef | アプリケーションシークレット |
| customer_list_id | STRING | target = customers | yes if target = customers | test | 顧客リストID |
| incremental | BOOLEAN | target = customers  target = products  target = catalog | no | true | 増分取り込みを行うかどうか |
| initial_retry_wait | LONG | default | no | 1 | 再試行時の最初の待機時間(秒) |
| inventory_list_id | STRING | target = inventory_lists | no | test | 在庫リストID |
| last_value | STRING | target = customers  target = products  target = catalog | no | 2021-05-25T02:49:29.000Z | データの取り込みを開始するタイムスタンプ |
| levels | LONG | target = categories | yes if target = categories | 0 | target = categoriesの場合に取り込むサブカテゴリのレベル |
| maximum_retries | LONG | default | no | 5 | 最大再試行回数 |
| maximum_retry_wait | LONG | default | no | 120 | 再試行時の最大待機時間(秒) |
| site_id | STRING | target = products  target = stores | yes if target = stores | test | サイトID |
| target | ENUM (customers , stores , categories , products , catalogs , inventory_lists ) | default | yes | customers | 取り込むターゲットデータタイプ |
| product_inventory_records_count | INTEGER | target = inventory_lists | no | 300 | 商品在庫レコードのサブセットのみを取得する場合のカウント。デフォルト: 200、最小: 25 |


# サンプル設定

## Customers


```
in:
  type: salesforce_commerce_cloud
  client_id: xxx
  client_secret: yyy
  base_url: https://{realm_id}-001.sandbox.us01.dx.commercecloud.salesforce.com/
  target: customers
  customer_list_id: phu_test
  last_value: 2021-05-25T02:49:29.000Z
  incremental: true
```

## Products


```
in:
  type: salesforce_commerce_cloud
  client_id: xxx
  client_secret: yyy
  base_url: https://{realm_id}-001.sandbox.us01.dx.commercecloud.salesforce.com/
  target: products
  site_id: phu_test
  incremental: true
  last_value: 2021-05-25T02:55:28.000Z
```

## Stores


```
in:
  type: salesforce_commerce_cloud
  client_id: xxx
  client_secret: yyy
  base_url: https://{realm_id}-001.sandbox.us01.dx.commercecloud.salesforce.com/
  target: stores
  site_id: phu_test2
```

## Inventory Lists and Product Assignments


```
in:
  type: salesforce_commerce_cloud
  client_id: xxx
  client_secret: yyy
  base_url: https://{realm_id}-001.sandbox.us01.dx.commercecloud.salesforce.com/
  target: INVENTORY_LISTS
```

## Categories


```
in:
  type: salesforce_commerce_cloud
  client_id: xxx
  client_secret: yyy
  base_url: https://{realm_id}-001.sandbox.us01.dx.commercecloud.salesforce.com/
  target: categories
  catalog_id: phu_cat
```

## Catalogs


```
in:
  type: salesforce_commerce_cloud
  client_id: xxx
  client_secret: yyy
  base_url: https://{realm_id}-001.sandbox.us01.dx.commercecloud.salesforce.com/
  target: catalogs
  incremental: true
  last_value: 2021-05-26T02:55:28.000Z
```