問題
UiPathからSalesforceを操作するパッケージは4種類あります。
パッケージ名 | 種類 | 備考 |
---|---|---|
Salesforce | 単独 | クラシックアクティビティ |
UiPath.Salesforce.Activities | 単独 | Sales Cloud用 |
SalesforceMarketingCloud | 単独 | Marketing Cloud用 |
Integration Service | 統合 | 利用可能 > Salesforceから使用 |
Salesforceの日付型はDate
、日時型はDateTime
ですが、UiPath上ではどちらもDateTimeOffset
として扱われますが、
このうち 【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で行われるため、実際にはDateTime
のyyyy-MM-ddTHH:mm:ss.SSS+/-HH:mm
で渡す必要があります
例: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
解決方法
ミリ秒の桁数の差が問題であるものの、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桁と合わない→エラーになる。