use*_*497 2 salesforce apex-code
我正处于Salesforce Apex的学习阶段.我已经阅读了Dynamic Apex的主题,并且无法理解这个概念.有人可以解释它如何处理它以及在哪种情况下最好使用它?提前致谢.
用例1:
您正在开发一个页面,该页面读取salesforce对象元数据以向用户显示对象记录.您想使用describe全局方法,但您不知道如何将标准SOQL与泛型SObject类型结合使用.
标准SOQL,例如
Person__c [] persons = [SELECT Id, Name, Age__c, Height__c FROM Person__c];
Run Code Online (Sandbox Code Playgroud)
但描述全局元数据方法返回SObject类型.
解:
使用describe global方法获取对象列表,然后进一步获取该对象上的所有字段.在包含所有字段的本地字符串变量中构建SELECT语句,然后使用执行查询Database.query().
string objectfullname = 'scenario__c';
Schema.SObjectType targetType = Schema.getGlobalDescribe().get('scenario__c');
if (targetType == null) {
system.debug('Type not found: '+objectFullname);
throw new TypeNotFoundException(objectFullName);
}
Schema.DescribeSObjectResult typedescription = targetType.getDescribe();
Map<String, schema.Sobjectfield> resultMap = typedescription.Fields.getMap();
string query = 'SELECT ' + string.join(new List<string>(resultMap.keySet()), ',') + ' FROM '+ objectfullname + ' LIMIT 100';
sobject [] records = Database.query(query);
Run Code Online (Sandbox Code Playgroud)
用例2
您希望将代码与beta托管打包中的自定义对象松散耦合,以便可以卸载和升级托管打包.
解
当您使用该Database.query()方法时,您的代码不会针对自定义对象进行编译,因此可以重新安装它,而无需注释掉代码以删除依赖项.
用例3
根据动态字段映射架构,您有一个触发器在插入后将记录复制到另一个自定义对象.您无法以标准方式对其进行编码,[SELECT ...]因为您只知道在运行时插入的对象.
解
再次,使用describe global methods&Database.query来获取记录和类型信息,然后就可以像普通DML一样插入到目标对象中.
sobject newRecord = ...
for (integer i = 0; i < fieldCount; i++) {
newRecord.put(fields[i],values[i]);
}
insert newRecord;
Run Code Online (Sandbox Code Playgroud)
如果您像往常一样进行批量插入,请确保不要将DML(插入,更新)语句放在循环中.
| 归档时间: |
|
| 查看次数: |
6030 次 |
| 最近记录: |