有没有办法在 apex 中获取托管包的前缀名称?
我有一个 SOSL 查询,但该应用程序位于开发人员组织和托管包中,如果我有办法获取包名称,那就太好了,因为我不必对其进行硬编码。
谢谢。
AFAIK 这样做的唯一方法是使用元数据 API。您可以调用describeMetadata(),然后评估在describeMetadataResult返回的组织名称空间(字符串)值。
在Apex中,您可以使用动态 SOQL/DML 执行一种不太优雅的 try/catch 方法,至少可以确定您怀疑的东西是否确实存在。虽然这不会像元数据 API 那样告诉您实际存在的命名空间前缀。
Lacey 是正确的,您不需要前缀,尽管名称歧义可能会成为问题。因此,例如,如果您有一个自定义对象Expense__c
并安装了一个包含 的会计包,那么如果您打算访问托管包对象而不是您自己的对象ACCT__Expense__c
,那么您肯定希望明确包含前缀。ACCT__
如果传入的命名空间不是已安装包(或您正在开发的托管包)的有效命名空间,则 UserInfo.isCurrentUserLicensed('nsPrefix') 将引发 TypeException。我认为这是您在没有元数据 API 的情况下最接近的方法。