データ書き込み(DELETE)のAPIコール数について
Q.
Salesforceアダプタの「データ書き込み(DELETE)」のヘルプに次の記述があります。
delete() では、対象となる各レコードの ID を指定する必要があります。 ただし、本コンポーネントでは ID 以外の項目をキーとして指定することができます。この場合、ID を取得するため入力データの値をもとに query() が実行されます。
ID以外の項目をキーとして指定した場合、APIコール数はどのようになりますか。
A.
ID 以外をスキーマに指定した場合は、入力データの値を条件に query() を発行して ID を検索します。
query() は入力データの一件づつで発行するのではなく、SOQL の WHERE 句に "OR" を使用して、条件の範囲内でまとめて取得します。
・WHERE ( Name = 'data1' ) OR ( Name = 'data2' ) ...
条件とは、「バッチサイズで指定した件数に到達した」または「SOQL 全体が19,000文字(※)を超えた」となっております。
アダプタの処理手順は以下となります。
①入力データの先頭から順に SOQL を組み立て
②条件に到達したタイミングで query() を実行
③取得した ID でバッチサイズごとに delete() を実行
-- 入力データがまだ存在すれば①から繰り返し --
もし、入力データ件数が100件、バッチサイズを20とし、入力データに対して返される ID が1対1となる場合は、
・query() 5コール
・delete() 5コール
となります。※2
※1
19,000文字という基準値は、SOQLの制限である20,000文字以内という制限に触発しないための機構です。なお、「Salesforce接続設定 API26.0」およびそれ以前を使用した場合、セールスフォースのAPIの制限により9,000文字が基準値になります。
※2
バッチサイズ内で作成した SOQL 全体が19,000文字を超えない場合です。
テラスカイ管理番号 C-00008351