如何解决 Mule 4 中的 SQL 无效输入错误

How to trouble shoot SOQL invalid input error in Mule4

我遇到了一个奇怪的问题,应用程序可以在 Mule DEV/QA 服务器上成功执行,但在 PRD 服务器

中抛出 SALESFORCE:INVALID_INPUT

Mule Dev/QA 服务器独立于运行时 4.3.0,连接 Salesforce QA 环境。 Mule PRD 服务器独立于连接 Salesforce PRD 环境的运行时 4.3.0。

应用程序通过Git中的分支从Dev提升到PRD,所以执行的SOQL跨服务器是一样的。

下面的 SOQL(删除了许多字段以使其更短):

SELECT CAST__c, Competitor_Currency__c FROM specification__c WHERE (recordTypeName__c LIKE 'interior%' OR recordTypeName__c LIKE 'Exterior%') AND ((Status__c = 'Pricing Requested' AND statusChangeDateTime__c > 2021-09-17T01:35:00.011-04:00) OR (Status__c = 'Pricing Provided' AND approvalDateTime__c > 2021-09-17T01:35:00.011-04:00))

我想知道 Salesforce PRD 和 QA env 之间有什么不同,但 Salesforce 团队表示他们可以直接在 SF PRD 中毫无问题地执行 SOQL。

下面网上有一个KB,但是和我的不一样,是针对application/java的MIME类型的,我例子里的分钟不是00 https://mulesoftprm.force.com/s/article/Salesforce-SOQL-Query-throws-SALESFORCE-INVALID-INPUT-with-DateTime

谁能分享一下这是怎么发生的?有什么办法找出根本原因?非常感谢!

这看起来与您引用的知识库文章所描述的完全一样。查看您的查询,我没有看到查询的任何输入参数,所以错误可能是由具有零秒的文字时间戳引起的。尝试将它们作为输入参数传递,并按照 KB 的建议将它们分配为查询外部的字符串。 Date/time 格式转换问题在数据库中也很常见,在大多数语言中都需要格外小心。

示例:

... statusChangeDateTime__c > :changeTime ...


...

changeTime: ('2021-09-17T01:35:00.011-04:00' as DateTime {format: "yyyy-MM-dd'T'HH:mm:ssz"}) as String

问题实际上是由于SOQL查询语句中的某些字段在Salesforce UAT和PRD环境中的权限设置不同所致。

顺丰更新PRD字段权限设置后,问题已修复。 Mulesoft 日志中显示的错误“SALESFORCE:INVALID_INPUT”不是很准确。