检查Salesforce中是否安装了某个扩展

时间:2012-12-17 10:03:04

标签: salesforce apex-code visualforce

我正在开发Salesforce应用程序。该应用程序包含一些自定义对象,其中一个是Project。我创建了一个Visualforce页面来管理这些项目。我们也正在开发一个扩展。在扩展中,新的自定义字段将添加到Project对象中。 在原始包中,我想更改visualforce页面以显示该字段的值(如果已安装扩展名)。所以我需要检查是否安装了扩展名,如果是,则显示该扩展名的字段。

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:2)

我最终使用的解决方案是在基类中创建一个接口,其默认实现不会做太多。然后我创建了一个自定义设置,其中应该输入实现该接口的另一个类名。同样在基类中,我创建了一个可用于获取接口实现的Factory。我使用this guide作为基础。

答案 1 :(得分:1)

你最好在Salesforce-dedicated Stack site提出同样的问题。似乎有很多成员构建托管包。

我会尝试一些动态Apex(如describe methods)来检查对象&字段存在。

例如,如果您已经从AppExchange安装了Chatter取消关注应用程序并希望依赖其'对象:

String objectName = 'chttrunfollow__UnfollowRule__c';
String fieldName = 'chttrunfollow__Active__c';

Map<String, Schema.SObjectType> gd = Schema.getGlobalDescribe();
Schema.SObjectType t = gd.get(objectName);
if(t != null) {
    Schema.DescribeSObjectResult sobjectDescribe = t.getDescribe();
    System.debug(sobjectDescribe.isAccessible());

    Map<String, Schema.SObjectField> fields = sobjectDescribe.fields.getMap();
    if(fields != null && fields.get(fieldName) != null && fields.get(fieldName).getDescribe().isAccessible()) {
        System.debug('Show it!');
    }
} else {
    System.debug(LoggingLevel.ERROR, 'Not found');
}

这可能是一项非常昂贵的操作,因此您可能希望将结果缓存到某个位置(自定义设置?)。

有一个System.requestVersion()电话,但我认为它只返回“你的”当前版本(不能用它来询问在给定的组织中安装了什么)。如果您使用许可证 - UserInfo.isCurrentUserLicensed('namespace')可能值得检查吗?