我正在开发Salesforce应用程序。该应用程序包含一些自定义对象,其中一个是Project。我创建了一个Visualforce页面来管理这些项目。我们也正在开发一个扩展。在扩展中,新的自定义字段将添加到Project对象中。 在原始包中,我想更改visualforce页面以显示该字段的值(如果已安装扩展名)。所以我需要检查是否安装了扩展名,如果是,则显示该扩展名的字段。
有没有办法做到这一点?
答案 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')
可能值得检查吗?