【问题标题】:Using Arraylist in Mule to query Salesforce在 Mule 中使用 Arraylist 查询 Salesforce
【发布时间】:2015-04-28 21:14:20
【问题描述】:

我们正在尝试在 where 语句中使用 ArrayList 查询 Salesforce。

以下是我们在 where 子句中尝试使用 ArrayList 时遇到的错误。

我们对 Salesforce 使用的查询:

Select Id,Billing_Number__c from Call_Log__c where Id in #[flowVars.successlist] 

successlist 包含值['a1o90000001msXwAAI', 'a1o90000001msXxAAI']

错误信息:

消息:调用查询失败。消息负载的类型:ArrayList

如何解决此错误?

【问题讨论】:

    标签: java salesforce mule esb


    【解决方案1】:

    很遗憾,您不能在 Salesforce(或数据库)查询中使用 ArrayLists 作为参数。您必须使用脚本组件动态创建查询。

    试试这个:

            <scripting:script engine="Groovy">
    <![CDATA[def sb = new StringBuilder()
    sb.append('Select Id,Billing_Number__c from Call_Log__c')
    if (flowVars.successlist != null && !flowVars.successlist.empty) {
        sb.append(' where Id in (\'')
        for (i in 0 .. flowVars.size()) {
            if (i > 0) sb.append('\',\'')
            sb.append(flowVars.successlist[i])
        }
        sb.append('\')')
    }
    flowVars.query = sb.toString()]]>
            </scripting:script>  
            <sfdc:query query="#[flowVars.query]" doc:name="Salesforce - Query"/>
    

    如果您使用的是数据库,则必须将查询类型设置为动态:

            <db:select doc:name="Database">
                <db:dynamic-query><![CDATA[#[flowVars.query]]]></db:dynamic-query>
            </db:select>
    

    【讨论】:

    【解决方案2】:

    我们使用了一个 Java 函数 string.join 来转换列表,如下所示:

    SELECT id  FROM User where Id  in   (#["'" + String.join("','", flowVars.fvCreatedbyIdList) + "'"])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-16
      相关资源
      最近更新 更多