2

我正在尝试通过 Tooling API 创建触发器。这在 Salesforce 内执行,并在同一个 Salesforce 组织上执行。这是在开发组织中完成的,运行用户是管理员。

当我创建MetadataContainer它时,它按预期工作。当我创建ApexTriggerMember时,出现以下错误:

INSUFFICIENT_ACCESS_ON_CROSS_REFERENCE_ENTITY

以下是过程中的一些调试:

The JSON that is sent to create the MetadataContainer
{"Name":"Container 2013-03-08 17:28:06"}

它被发送到的 URL

https://na11.salesforce.com/services/data/v27.0/tooling/sobjects/MetadataContainer/

响应:

{"id":"1dcG0000000PAwZIAW","success":true,"errors":[]}

为创建 ApexTriggerMember 而发送的 JSON

{"MetadataContainerId":"1dcG0000000PAwZIAW","Body":"trigger TestTrg1 on Account (after insert, after update, before insert, before update) {\n\n}"}

它被发送到的 URL:

https://na11.salesforce.com/services/data/v27.0/tooling/sobjects/ApexTriggerMember/

响应:

[{"fields":[],"message":"insufficient access rights on cross-reference id","errorCode":"INSUFFICIENT_ACCESS_ON_CROSS_REFERENCE_ENTITY"}]

任何帮助是极大的赞赏。

4

1 回答 1

1

我只是通过工具 API 的 SOAP 版本尝试了同样的事情。

如果我将 ApexTriggerMember.ContentEntityId 指定为现有的触发器 ID(键前缀 01q),它工作正常。当然,这是更新现有触发器而不是创建新触发器。

如果我没有设置 ContentEntityId 我会得到与你完全相同的错误。“交叉引用 ID 的访问权限不足”(StatusCode.INSUFFICIENT_ACCESS_ON_CROSS_REFERENCE_ENTITY)

文档说(我的重点):

ContentEntityId
类型:引用
属性:创建、过滤器、组、排序
描述:
对 Apex 触发器的引用。每个 ApexTriggerMember 只能有一个 ContentEntityId,否则会报错。 此字段是必需的。

所以该字段是必需的,但我们还没有要分配给它的 ID...

请注意,我在专用的 Salesforce StackExchange 上提出了类似的问题 -如何使用工具 API 创建新的 Apex 触发器?

于 2013-03-15T01:43:41.383 回答