2

当我在开发人员控制台中执行此代码时

PushTopic pushTopic = new PushTopic();
pushTopic.ApiVersion = 23.0;
pushTopic.Name = 'Test';
pushTopic.Description = 'test';
pushtopic.Query = 'SELECT Id, Account.Name FROM Case';
insert pushTopic;
System.debug('Created new PushTopic: '+ pushTopic.Id);

我收到这条消息:

致命错误 System.DmlException:插入失败。第 0 行的第一个异常;第一个错误:INVALID_FIELD,不支持关系:[QUERY]

相同的查询在查询编辑器上运行良好,但是当我将它分配给推送主题时,我得到了 INVALID_FIELD 异常。

如果底线是异常消息所说的,即推送主题对象不支持关系,我如何创建一个推送主题对象来返回我正在寻找的数据?

4

2 回答 2

5

为什么

Salesforce 阻止了这种情况,因为它需要他们加入表,由于多租户,在 Salesforce 数据库中的加入是昂贵的。通常,当他们添加新功能时,他们将不支持连接,因为它需要对功能进行更多优化。

Push Topics 对系统来说仍然很新,需要实时,任何会减慢它们的东西我都会说需要修剪。

我建议您更仔细地查看您的要求,看看是否还有其他适合您的方法。

解决方法

一种潜在的解决方法是向 Case 对象添加一个公式字段,其中包含您需要的数据,并将其包含在查询中。这可能不起作用,因为它仍然需要加入才能工作。

最后一个选项可能是使用工作流规则或触发器将帐户名称更新为 Case 对象上的自定义字段,这样数据是本地的,因此不需要加入...

于 2013-08-02T11:44:49.593 回答
0

PushTopics 支持非常小的 SOQL 查询子集,请在此处查看更多信息: https ://developer.salesforce.com/docs/atlas.en-us.api_streaming.meta/api_streaming/unsupported_soql_statements.htm

但是,这应该有效:

PushTopic casePushTopic = new PushTopic();
pushTopic.ApiVersion = 23.0;
pushTopic.Name = 'CaseTopic';
pushTopic.Description = 'test';
pushtopic.Query = 'SELECT Id, Account.Id FROM Case';
insert pushTopic;

PushTopic accountPushTopic = new PushTopic();
pushTopic.ApiVersion = 23.0;
pushTopic.Name = 'AccountTopic';
pushTopic.Description = 'test';
pushtopic.Query = 'SELECT Id, Name FROM Account';
insert pushTopic;

不过,这实际上取决于您的用例,如果要复制到 RDBMS 中就足够了,您可以使用连接来获取完整数据。

于 2015-07-13T11:32:55.040 回答