Mule4调用Salesforce Bulk API v2查询作业状态时404找不到作业ID
核对Job ID提取准确性
从Create Query Job组件输出里拿的jobId必须和Salesforce UI里显示的完全一致,注意是750开头的15/18位字符串。别因为JSON路径写错,取到了嵌套字段或者多余字符——赶紧加个Logger把提取到的jobId打出来,和UI里的对比一遍。确认API版本一致性
Create Query Job和Get Job State两个组件必须用同一个Salesforce API版本(得是40.0及以上才支持Bulk API v2)。版本不匹配的话,Salesforce后端可能不认这个job,直接返回404。去组件配置里查一下API版本设置。检查环境与权限
别搞混了生产和沙盒环境!Mule用的Salesforce账号得和你看UI的是同一个环境。另外,账号必须开API Enabled权限,还要有View All Data或者对应对象的查询权限——权限不够的话,哪怕UI能看到job,API也会返回404。调整循环调用时机
Bulk API v2的job创建后,Salesforce后端可能需要一点时间注册,要是循环立刻调用Get Job State,大概率找不到。要么在循环前加个1-2秒的Wait组件,要么把Until Successful的重试间隔调长点,别着急查状态。验证组件请求路径
Get Job State组件的请求路径得是Bulk API v2的正确路径:/services/data/vXX.X/jobs/query/{jobId}。要是误用了Bulk API v1的路径,肯定会404。可以开Mule的HTTP日志,看看实际发出去的URL对不对,jobId拼接有没有问题。
示例流代码排查点
假设你的流代码是这样的:
<flow name="bulkQueryFlow"> <sfdc:create-query-job config-ref="Salesforce_Config" object="Account" contentType="CSV" doc:name="Create Query Job"/> <set-variable variableName="jobId" value="#[payload.id]" doc:name="Set Job ID"/> <until-successful maxRetries="10" millisBetweenRetries="2000" doc:name="Until Successful"> <sfdc:get-job-state config-ref="Salesforce_Config" jobId="#[vars.jobId]" doc:name="Get Job State"/> </until-successful> </flow>
重点检查#[payload.id]是不是正确的jobId提取路径——有些版本的组件里,jobId可能在payload.jobInfo.id或者其他嵌套字段里,路径错了就会拿到无效值。
内容的提问来源于stack exchange,提问作者Arpit

