如何在Mule 4中通过APEX调用向SFDC传递路径/URI参数?
Mule 3 迁移到 Mule 4:Apex REST 调用的路径参数传递
原 Mule 3 实现
Mule 3 通过 <sfdc:invoke-apex-rest-method> 调用 Apex GET 接口,同时传递路径参数和查询参数,代码如下:
<sfdc:invoke-apex-rest-method config-ref="SFDC_config" restMethodName="EmpMaintenanceDetails||getEmpMaintenanceDetails^/services/apexrest/EmpMaintenanceDetails/ #[flowVars.empId]?id=#[flowVars.empId]^HttpGet^application/json^" doc:name="Salesforce: EmpMaintenanceDetails"/>
#[flowVars.empId]作为路径参数嵌入URL路径id=#[flowVars.empId]是同名的查询参数
已实现的 Mule 4 查询参数处理
在 Mule 4 中,已经通过 DataWeave 完成查询参数的传递,代码如下:
<ee:transform doc:name="set empId as query param" > <ee:message > <ee:set-payload > <![CDATA[%dw 2.0 output application/json --- { queryParams:{ id: message.attributes.uriParams.'empId' } }]]> </ee:set-payload> </ee:message> </ee:transform>
Mule 4 路径参数传递解决方案
当前 Mule 4 的 <salesforce:invoke-apex-rest-method> 自动填充的方法名如下:
<salesforce:invoke-apex-rest-method doc:name="SF EmpMaintenanceDetails GET call" config-ref="SFDC_config" className="EmpMaintenanceDetails" methodName="getEmpMaintenanceDetails^/EmpMaintenanceDetails/*^HttpGet^void^" />
要传递路径参数,只需两步调整:
1. 修改方法名的路径模板
把方法名中的通配符*替换为带占位符的路径格式,比如{empId},修改后的方法名:
getEmpMaintenanceDetails^/EmpMaintenanceDetails/{empId}^HttpGet^void^
2. 在 DataWeave 中添加路径参数配置
在现有的 Transform 组件里,同时添加pathParams节点传入参数值:
<ee:transform doc:name="set empId as query and path param" > <ee:message > <ee:set-payload > <![CDATA[%dw 2.0 output application/json --- { queryParams:{ id: message.attributes.uriParams.'empId' }, pathParams:{ empId: message.attributes.uriParams.'empId' } }]]> </ee:set-payload> </ee:message> </ee:transform>
最终完整调用代码
调整后的 Apex REST 调用组件代码:
<salesforce:invoke-apex-rest-method doc:name="SF EmpMaintenanceDetails GET call" config-ref="SFDC_config" className="EmpMaintenanceDetails" methodName="getEmpMaintenanceDetails^/EmpMaintenanceDetails/{empId}^HttpGet^void^" />
这样就能完全复刻 Mule 3 中的逻辑,同时传递路径参数和同名查询参数。
内容的提问来源于stack exchange,提问作者boomslaw
相关产品推荐
相关产品推荐

