如何使用基于“”父案例产品描述“等参数的SQOP API过滤salesforce案例对象

时间:2013-04-05 09:15:08

标签: java salesforce

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

我正在使用SOAP API并尝试首先根据“父案例产品描述=某些产品”,Type = Engineering Escalation等标准过滤案例,然后检索所有者名称,帐户名称,案例产品版本等。 “父案例产品描述”和“类型”是我们可以根据这些字段从Salesforce GUI过滤案例的其他字段。

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

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

我想实现类似下面的内容, SELECT ... FROM大小写“父案例产品描述”喜欢“某些产品名称”和类型='工程升级';

请提供一些关于如何访问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();

1 个答案:

答案 0 :(得分:0)

假设“产品描述”是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代码进行进一步过滤。