我正在尝试通过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"}
发送到
的网址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}"}
发送给它的网址:
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"}]
非常感谢任何帮助。
答案 0 :(得分:1)
我只是通过Tooling API的SOAP版本尝试了同样的事情。
如果我将ApexTriggerMember.ContentEntityId指定为现有触发器ID(键前缀01q),它工作正常。当然,这是更新现有触发器而不是创建新触发器。
如果我没有设置ContentEntityId,我会得到完全相同的错误。 “对交叉引用ID的访问权限不足”(StatusCode.INSUFFICIENT_ACCESS_ON_CROSS_REFERENCE_ENTITY)
documentation说(我的重点):
<强> ContentEntityId 强>
类型:参考
属性:创建,过滤,分组,排序
说明:
对Apex触发器的引用。 每个ApexTriggerMember只能有一个ContentEntityId, 否则,报告错误。 此字段是必填字段。
因此该字段是必填字段,但我们还没有分配给它的ID ...
注意,我在专用的Salesforce StackExchange上提出了类似的问题 - How do I use the Tooling API to create a new Apex Trigger?