骆驼Salesforce组件REST API salesforce:查询无法检索记录

时间:2019-06-12 09:15:35

标签: java apache-camel salesforce

我想通过使用Camel Salesforce组件salesforce:query API执行SOQL,以使用AccountId检索SObject联系人。但是它只返回所有字段均为空的DTO联系人。我已经调试了Camel Salesforce组件源代码,发现它得到了响应,代码为200。

顺便说一句,有谁知道如何实现动态SOQL,我发现我无法在其中使用$ {body},例如,“ sObjectQuery = SELECT LastName FROM Contact WHERE AccountID ='$ {body}'”

  1. 这是一个简单的maven项目
  2. DTO:联系人,帐户是由camel-salesforce-maven-plugin生成的
  3. 其他骆驼Salesforce组件REST API:可以运行salesforce:upsertSObject,salesforce:getSObjectWithId,salesforce:deleteSObjectWithId和salesforce:createSObject并返回正确的结果

路线:

from("direct:query")
    .to("salesforce:query?sObjectQuery=SELECT LastName FROM Contact&sObjectClass="+ Contact.class.getName())
    .process(exchange -> {
        Object body = exchange.getIn().getBody();
        System.out.println(body.getClass());
        System.out.println(body);
 });
ProducerTemplate template = camelCtx.createProducerTemplate();
Object obj = template.requestBody("direct:query", null, Object.class);

实际结果: com.salesforce.test.Contact类 {“ Reporting_States__c”:null,“ Specialty__c”:null}

预期结果:   返回一个QueryRecordsContact对象,其中包含联系人列表的字段。 (QueryRecordsContact是由Camel Salesforce maven插件生成的DTO)

2 个答案:

答案 0 :(得分:0)

尝试像这样重写路线:

    from("direct:query")
        .setHeader("sObjectQuery", simple("SELECT LastName FROM Contact WHERE id='${body}'"))
        .to("salesforce:query?sObjectQuery=&sObjectClass=" + QueryRecordsContact.class.getName())
        .process(exchange -> {
            Object body = exchange.getIn().getBody();
            System.out.println(body.getClass());
            System.out.println(body);
        });
  • 您可以在sObjectQuery标头上放置您感兴趣的查询,并在那里动态构建它
  • SF查询返回一个包含记录列表的json,因此您应该将QueryRecordsContact传递给端点以进行正确的映射

答案 1 :(得分:0)

实际上,查询返回“ done”,“ totalSize”,“ records”作为响应。无论您要查询哪种Salesforce查询都在记录中。要查看此内容,您必须在类中添加以下行以及它们的getter和setter。 / p>

private List <yourClassName> records;

,然后将对象列表映射到适当的类。

有关更多详细信息:https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_query.htm