#Q1. Xplentyで使用するAPIは?
「Bulk API」です。
#Q2. データソース/デスティネーション(送信先)としてカスタムオブジェクトを指定することは可能ですか?
指定できます。
#Q3. SOQLは使えますか?
デフォルトは「Object」となっていますが、「Query」に変更することで、SOQLを使用できます。
##ヒント:Salesforceのオブジェクトで日付フィルタを指定する方法
またオブジェクトを指定した場合も、SOQLベースのフィルタ条件を設定可能です。
###固定値の場合
フィルタをかける対象のフィールドが日付型の場合、シングルクォートなしで設定ください。
###変数を使用する場合
####1) 2時間前以降のデータを取得する
変数名: two_hours_ago
変数式: SubtractDuration(CurrentTime(),'PT2H')
####2) 現在日付(日本時間)の0時以降のデータを取得する
変数式:
まず日本時間の現在日付のの0時を取得し、そこから-9時間(UTC)に変換する。
SubtractDuration(ToDate(ToString(SwitchTimeZone (CurrentTime(),'Asia/Tokyo') ,'yyyy-MM-dd\'T\'00:00:00.000')),'PT9H')
#Q5. SalesforceがDestination(送信先)の場合: 更新方法について
- Insert:レコードの追加のみ
- Upsert:レコードの追加/更新(Upsert KeyのIDを設定し、既存レコードがあった場合には、そのレコードを上書き)
-
Delete:Key列を指定し、一致するレコードを削除
データの追加、更新の目的ではなく、レコードの削除を行いたい場合に使う
列のマッピング
※関連オブジェクト(REFFERENCED OBJECT)を自動的に検知します。
#Q5. SalesforceがDestination(送信先)の場合: オブジェクトの既存レコードの一部のフィールドのみを更新することは可能ですか?**
例)商談オブジェクトの案件の確度(Probability)を更新する場合
この場合、ジョブは以下のように動作します。
- オブジェクトに指定した商談IDのデータがある場合: 対象のレコードを更新
- オブジェクトに指定した商談IDのデータがない場合: エラー
#Q6. SalesforceがDestination(送信先)の場合: エラー判定の制御について
ジョブ全体で許容できるエラーレコード件数は、「Maximum errors」の値で制御可能です。ちなみに、「Batch size」とは一回の処理で扱うレコード数ですが、エラー数はBatch sizeに関係なく、処理全体でエラーとなったレコード数がどれくらいあったかと許容できる最大エラー数の値を比較し、ジョブの結果がエラーかどうか判定します。
シナリオ | エラー最大数 | ジョブの結果 | 備考 |
---|---|---|---|
10件中1件失敗した場合 | 0 | エラー | 最大エラー数0 < 実際のエラー件数1 |
10件中1件失敗した場合 | 1 | 成功 | 最大エラー数1 = 実際のエラー件数1 |
10件中2件失敗した場合 | 1 | エラー | 最大エラー数1 < 実際のエラー件数2 |
10件中8件失敗した場合 | 10 | 成功 | 最大エラー数10 > 実際のエラー件数8 |
DBの場合は、更新に成功したレコードもロールバックされますが、Salesforceの場合は、APIの特性上、ロールバックされないので注意が必要です。詳細はこちら
#Q7. SalesforceがDestination(送信先)の場合: バッチサイズ(Batch size)の設定によるAPI制限の回避
Salesforceのドキュメントによると1バッチの最大数が10,000 レコードとなっているので、API制限にお困りの場合、バッチサイズをなるべく大きな数値に設定することでAPI制限を回避することが可能になります。