【问题标题】:How to filter salesforce case object using SQOP API based on parameters like ""Parent Case Product Description"如何根据“父案例产品描述”等参数使用 SQOP API 过滤 Salesforce 案例对象
【发布时间】:2013-04-05 09:15:07
【问题描述】:

我正在尝试获取已打开并分配给工程团队并特定于少数产品的案例列表。

我正在使用 SOAP API 并尝试首先根据“父案例产品描述=某些产品”、类型=工程升级等标准过滤案例,然后检索所有者名称、帐户名称、案例产品版本等。 “父案例产品描述”和类型是附加字段,我们可以根据这些字段从 Salesforce GUI 中筛选案例。

但是我无法根据上述字段过滤案例,因为这些不是案例对象的字段。 我在这里检查了http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_objects_case.htm

我可以访问该字段(不是案例对象的一部分),例如帐户名称字段在案例对象中不存在,但我可以在 SOQL 查询中使用“case.Account.name”检索它。 但我的问题是,我找不到访问诸如“父案例产品描述=某些产品”和类型=工程升级之类的参数的方法。

我想实现以下目标, SELECT ... FROM case where "Parent Case Product Description" LIKE "some product name" AND Type = 'Engineering Escalation';

请提供一些关于如何访问 where 子句中提到的参数的指示。

注意:请注意,我在上例中提到的“类型”与“案例对象字段”-类型不同。

以下是我正在尝试的代码部分。

Private void querySample() {
  String soqlQuery = "SELECT Case.ParentId, AccountId, CaseNumber, Subject, OwnerId, Case.Account.name FROM Case'";
  try {
     QueryResult qr = connection.query(soqlQuery);
     boolean done = false;

     if (qr.getSize() > 0) {
        System.out.println("\nLogged-in user can see "
              + qr.getRecords().length + " records.");

        while (!done) {
           System.out.println("");
           SObject[] records = qr.getRecords();
           for (int i = 0; i < records.length; ++i) {
              Case con = (Case) records[i];
              String CNumber = con.getCaseNumber();
              String Csubject = con.getSubject();
              String CownerId = con.getOwnerId();
              com.sforce.soap.enterprise.sobject.Account CaseAccount = con.getAccount();
              String name = CaseAccount.getName();

【问题讨论】:

    标签: java salesforce


    【解决方案1】:

    假设“产品描述”是 Case 上的一个自定义字段并且它不是一个长的测试区域(即 not allowed in WHERE clauses),那么 SOQL 查询将如下所示:

    SELECT Id FROM Case WHERE Parent.Product_Description__c LIKE '%something%' AND Type__c = 'Engineering Escalation'
    

    我在您的查询中注意到的一件事是,对于父关系,您添加了 Case 前缀(例如 Case.ParentId),这并不是真正需要的(即只需 ParentId 即可)。这并不重要,只是把它说出来,因为它会导致一些关于遍历关系的混淆。

    另外,对于手头的任务,使用SOSL search 可能比SOQL query 更好地解决。 SOSL 将允许您在长文本区域中查找文本,并且可以搜索整个对象,这可能会更好并且应该更快,因为数据已被索引。它可能会发现太多,但它确实允许您向下过滤记录,并且您可以使用 SOQL 或在您的 Java 代码中进行进一步过滤。

    【讨论】:

    • 感谢瑞恩的回复。我尝试了您提到的查询,但是它给出了以下错误。猜猜它为什么抱怨? [MalformedQueryFault [ApiQueryFault [ApiFault exceptionCode='MALFORMED_QUERY' exceptionMessage='case.product2.name FROM Case Parent.Product_Description__c LIKE ^ ERROR at Row:1:Column:109 Invalid alias Parent.Product_Description__c'] row='1' column=' 109']]
    • 您在 WHERE 子句中缺少 WHERE 关键字。也就是应该是...FROM Case WHERE Parent.Product_Description__c...
    • 查询:SELECT Case.ParentId, CaseNumber, Subject FROM Case WHERE Parent.Product_Description__c LIKE '%Control C%'" Output: [InvalidFieldFault [ApiQueryFault [ApiFault exceptionCode='INVALID_FIELD' exceptionMessage=' case.Account.name FROM Case WHERE Parent.Product_Description__c LIKE ^ ERROR at Row:1:Column:95 No such column 'Product_Description__c' on entity 'Case'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.' ]
    • Ryan 如果你能给我指点,那将是很大的帮助。我是 Salesforce API 的新手。
    • 谢谢瑞恩。我能够解决这个问题。首先,我使用 SOAP API 文档中给出的 describeSObjectsSample 代码确定了案例表字段。然后提供精确的自定义参数作为过滤器。查询是这样的SELECT CaseNumber, Subject FROM Case where Type__c ='Engineering Escalation' AND Parent_Case_Product_Description__c LIKE '%product name%'
    猜你喜欢
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 2020-11-16
    • 1970-01-01
    相关资源
    最近更新 更多