0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UiPathからSalesforce日付項目を更新するとJSON_PARSER_ERRORが起きる

Posted at

問題

UiPathからSalesforceを操作するパッケージは4種類あります。

パッケージ名 種類 備考
Salesforce 単独 クラシックアクティビティ
UiPath.Salesforce.Activities 単独 Sales Cloud用
SalesforceMarketingCloud 単独 Marketing Cloud用
Integration Service 統合 利用可能 > Salesforceから使用

Salesforceの日付型はDate、日時型はDateTimeですが、UiPath上ではどちらもDateTimeOffsetとして扱われますが、

up_sf1.png

このうち 【UiPath.Salesforce.Activities】のレコードを更新アクティビティを使用して日付型項目にDateTimeOffsetで更新をするとエラーが発生します。

Provider Error Message: 無効な要求 - この問題は、要求パラメーターが見つからない場合に頻繁に起こります。
RequestId: XXXXXXXXXXXXXXXXXXXXXXXX
ProviderMessage: [{"message":"VALUE_STRING 値 2025-04-01T00:00:00.0000000+09:00 から date のインスタンスを並列化できないか、要求に必須項目がない可能性があります at [line:2, column:3]","errorCode":"JSON_PARSER_ERROR"}]

現行の統合Integration Serviceでは発生しないため、特に理由がなければIntegration Serviceパッケージを使うのがいいと思います。

原因

Salesforce側の日付形式と.NET側の日付形式に差異があるため、型不一致でエラーとなります。
ミリ秒の桁数がSalesforceは3桁、.NETは7桁。

Salesforce側(受信側)

Salesforceでは日付型はDateなので、yyyy-MM-ddのフォーマットである必要があります。
が、UiPath → Salesforce間はREST APIで行われるため、実際にはDateTimeyyyy-MM-ddTHH:mm:ss.SSS+/-HH:mmで渡す必要があります:bulb:

例:2025-04-01TT00:00:00.000+09:00

REST API 開発者ガイド - Date および DateTime の有効な書式
SalesforceREST API のパラメータに指定する日付フォーマットについて

.NET側(送信側)

UiPathではSalesforceの日付型、日時型はどちらもDateTimeOffsetとして扱われます。
なので、DateTimeOffset.Nowなどを実行するとyyyy-MM-ddTHH:mm.ss:fffffffKのフォーマットで生成されます。

例:2025-04-01T12:10:20.1234567+09:00

Microsoft Learn - カスタム日時形式文字列

解決方法

ミリ秒の桁数の差が問題であるものの、Salesforce側でミリ秒定義は省略可能なため、
DateTimeOffsetをミリ秒なしフォーマットで文字列変換し、文字列からDateTimeOffsetを作成すればOK。
Salesforce側にデータが渡された際、日付型であれば時間部分が無視され、日時型であればそのまま入ります。

DateTimeOffset.Parse(DateTimeOffset.Now.ToString("yyyy-MM-ddTHH:mm:ssK"))

ダメな例

Salesforce側のミリ秒が3桁なので、以下のようにミリ秒3桁のDateTimeOffsetを作ればOK!
……とはならず、3桁目が0のタイミングで作成するとエラーになります。

DateTimeOffset.Parse(DateTimeOffset.Now.ToString("yyyy-MM-ddTHH:mm:ss.fffK"))

例として2025-04-01T12:10:20.1234567+09:00のタイミングで生成を行うと、ミリ秒に0埋めが発生し040となるはずですが、これをParseする際に後続の0が飛んでしまうためミリ秒が04の2桁となってしまい、Salesforce側の3桁と合わない→エラーになる。

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?