LoginSignup
1
0
この記事誰得? 私しか得しないニッチな技術で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

Azure Data Factory にてSalesforce REST API によりシンクするコピーアクティビティを実施した際の Deserialization failed エラーへの対応方法

Posted at

概要

Azure Data Factory (ADF)にて ADF 標準の Salesforce コネクターでなく Salesforce REST API によるコピーアクティビティを実施した際に発生する下記のような Deserialization failed エラーへの対応方法を共有します。Create a Recordを実施する際に渡す json が配列ではなく、単一のオブジェクトとして渡す必要があります。コピーアクティビティでは配列で渡されているような動作をしているため、単一のオブジェクトとして渡すように修正する必要があります。

[{"message":"Json Deserialization failed on token 'null' and has left off in the middle of parsing a row. Will go to end of row to begin parsing the next row","errorCode":"INVALID_FIELD"}]

image.png

データを追加する REST API のドキュメントにて、下記のように単一のオブジェクトを渡すことが記述されています。

image.png

引用元:Create a Record | REST API Developer Guide | Salesforce Developers

本記事ではエラーとなったパイプライン、配列の json を渡した際に同様のエラーが発生するパイプラインにおける実行結果とその対応方法を共有します。

エラーの再現方法

Salesforce REST API によりシンクするパイプラインを実行

アクセストークンを取得後に REST API によるシンクのコピーアクティビティを実行すると下記のようなエラーが発生しました。

image.png

Failure happened on 'Sink' side. ErrorCode=RestCallFailedWithClientError,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Rest call failed with client error, status code 400 BadRequest, please check your activity settings.
Request URL: https://{salesforceDomainName}.my.salesforce.com/services/data/v61.0/sobjects/Account.
Response: [{"message":"Json Deserialization failed on token 'null' and has left off in the middle of parsing a row. Will go to end of row to begin parsing the next row","errorCode":"INVALID_FIELD"}],Source=Microsoft.DataTransfer.ClientLibrary,'

image.png

配列の json を渡す web アクティビティのパイプラインを実行

下記のような配列の json を渡す web アクティビティのパイプラインを実行すると、同様のエラーが発生しました。

[
	{
		"Name": "abc"
	}
]

image.png

[{"message":"Json Deserialization failed on token 'null' and has left off in the middle of parsing a row. Will go to end of row to begin parsing the next row","errorCode":"INVALID_FIELD"}]

image.png

対応方法

lookup アクティビティにて取得した json の値をループにより REST API を実行

lookup アクティビティにてソースから json 形式で値を取得後、ForEach アクティビティにてその値をループ処理に単一のオブジェクトとして web アクティビティにて Salesforce REST API を実行するようにします。

image.png

上記のパイプラインを実行後、Salesforce にて想定通りにデータが書きこまれていることを確認できました。

image.png
image.png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0