Mule 3与Mule 4调用Salesforce复合请求的响应差异原因咨询
Mule 3到Mule 4 Salesforce复合请求响应差异原因解析
核心差异根源:allOrNone参数配置不一致
Mule 3的行为逻辑
你的Mule 3配置中显式设置了allOrNone="true":
<sfdc-composite:execute-composite-request config-ref="SFC" allOrNone="true" doc:name="Retrieve Composite"/>
这个参数直接映射到Salesforce复合API的同名参数,作用是将整个复合请求标记为原子事务:
- 只要复合请求中的任意一个操作失败,所有已执行的操作都会被回滚
- 所有操作条目都会返回
PROCESSING_HALTED错误(HTTP 400状态码)
这就是Mule 3中两个操作均返回400的原因——PATCH操作失败触发了整个事务的回滚,GET操作的结果被撤销并标记为错误。
Mule 4的行为逻辑
你的Mule 4配置中没有设置allOrNone参数:
<salesforce-composite:execute-composite-request doc:name="composite request" config-ref="Composite_Config"/>
Mule 4的Salesforce连接器中,allOrNone的默认值为false(与Mule 3的配置行为不一致)。当该参数为false时:
- Salesforce不会将复合请求视为原子事务,成功完成的操作结果会被保留
- 只有失败的操作会返回错误
你看到的GET操作返回200,是因为该查询本身执行成功(返回空结果集),而PATCH操作因引用失败返回400,完全符合allOrNone=false的预期行为。
修复建议
要让Mule 4的行为与Mule 3完全一致,只需在Mule 4的复合请求组件中添加allOrNone="true"配置:
<salesforce-composite:execute-composite-request doc:name="composite request" config-ref="Composite_Config" allOrNone="true"/>
同时注意修正你提供的Mule 4请求载荷中的JSON语法错误,确保PATCH条目格式正确:
{ "compositeRequest": [ { "method": "GET", "url": "/services/data/v43.0/query/?q=select xyz ...", "referenceId": "studentExtId" }, { "method": "PATCH", "url": "/services/data/v43.0/sobjects/Student/@{studentId}", "body": {"name": "ABC"}, "referenceId": "studentUpdate" } ] }
内容的提问来源于stack exchange,提问作者boomslaw
相关产品推荐
相关产品推荐

