SalesforceのDML操作をマスターしよう!

今回はSalesforceオブジェクトのDML操作となる基本の4つのコネクションの使い方を押さえておきましょう。

スポンサーリンク

今回使うコンポーネント

コンポーネントアイコン用途
CreateSalesforceレコードのInsert処理を行う
UpdateSalesforceレコードのUpdate処理を行う
UpsertSalesforceレコードのUpsert処理を行う
DeleteSalesforceレコードのDelete処理を行う

DML操作を行う4つのDML

Create

呼び方はCreateですがInsert処理です。設定で必須となるのは以下の2つです。

Type作成対象となるオブジェクト名(API名)を指定します。
Records作成するレコードをJSON形式の配列で指定します。

Accountを作成するときのRecordsの例は以下のような形式になります。

%dw 2.0
output application/java
---
[
    {
        Name: "test1"
    },
    {
        Name: "test2"
    }
]

Createコンポーネントの戻り値(Payload)は以下のような形となります(JSON形式に変換)。

{
  "id": null,
  "items": [
    {
      "exception": null,
      "message": null,
      "payload": {
        "success": true,
        "id": "0015h00001FK9dAAAT",
        "errors": []
      },
      "id": "0015h00001FK9dAAAT",
      "successful": true,
      "statusCode": null
    },
    {
      "exception": null,
      "message": null,
      "payload": {
        "success": true,
        "id": "0015h00001FK9dBAAT",
        "errors": []
      },
      "id": "0015h00001FK9dBAAT",
      "successful": true,
      "statusCode": null
    }
  ],
  "successful": true
}

itemsの配列にレコード単位のInsert結果が含まれています。successfulが2つ含まれていますが最上位のsuccessfulはレコード全体に対しての結果、itemsの下のsuccessfulはレコード単位でのInsert結果になります。Insert後のIdやエラー内容などがレスポンスとして連携されるので、itemsの中の配列を解いて結果を解析することになります。

Update

Type更新対象となるオブジェクト名(API名)を指定します。
Records更新するレコードをJSON形式の配列で指定します。Idを必ず含めます。

Accountを更新するときのRecordsの例は以下の通りです。Createとそれほど大差はありませんが、UpdateのためIdが必須となります。

%dw 2.0
output application/java
---
[
    {
        Id: "0015h00001FK9clAAD",
        Name: "test1"
    },
    {
        Id: "0015h00001FK9cqAAD",
        Name: "test2"
    }
]

Updateコンポーネントの戻り値はCreateと同様の形となります。こちらもレコード単位でitems要素に配列で結果が格納されます。

Upsert

Upsert処理をする場合はUpsertコンポーネントを使用します。外部IDとしてExternal id field nameを指定する以外は使い方はUpsertと同じです。

Object Type削除対象となるオブジェクト名(API名)を指定します。
External id field nameUpsertのキーとなる外部ID項目を指定します。Object Typeを選択することで、そのオブジェクトの外部ID項目が選択肢として現れます。
Records挿入・更新するレコードをJSON形式の配列で指定します。External id field nameで指定した項目は必ず含めます。

Delete

レコードを削除するDMLになります。こちらはオブジェクトの指定がなく、レコードのIDを指定してあげることで削除が可能になります。

Type削除対象となるオブジェクト名(API名)を指定します。
Records To Delete Ids削除するレコードのIDのリストを配列形式で指定します。上記のコンポーネントと異なりJSONのオブジェクトの配列ではないため注意。

Records To Delete Idsは他のRecords項目と違い、Id(文字列)の配列として指定します。JSON形式ではありません。

[
	"0015h00001FK9dAAAT",
	"0015h00001FK9dBAAT"
]

DML操作を扱う上での注意点

上記のコンポーネントにより、SalesforceのDML操作をコンポーネントの配置だけで簡潔に行うことができます。ただ、コンポーネントである上、型にハメた使い方しかできず、以下の扱いづらい点もあるため注意しましょう。

一度に処理できるレコードは200レコードまで

Createなどを行うコンポーネントは裏でREST APIベースのロジックが組まれているためか、1回の操作で扱えるレコード数は最大200となります。

上限200を超えるとエラー

200件以上のレコードを扱う場合には、200件ごとに分割して複数回実施するなどの対応が必要になります。

トランザクション管理ができない

DML操作自体のコンポーネントは用意されていますが、セーブポイントの設定やロールバックなどの操作は用意されていないため、トランザクション管理ができません。Createしたらそのまま即コミットが入るような感じになるため、複数回のDML操作が伴う場合はトランザクションの原始性が保たれなくなるため注意しましょう。

次回はQueryについての使い方を取り上げていきたいと思います。

MuleSoft
スポンサーリンク

コメント