0

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

我正在使用 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();
4

1 回答 1

0

假设“产品描述”是 Case 上的自定义字段并且它不是一个长的测试区域(在 WHERE 子句中是不允许的),SOQL 查询看起来是这样的:

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

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

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

于 2013-04-07T04:36:06.317 回答