我是Salesforce的新手,想要编写一个要求,我在字符串变量中有一个api名称,我希望通过该名称创建该类的对象。
对于Eg。对象名称是Account,存储在字符串变量中。 String var =' Account'
现在我想创建'帐户'的对象。在Java中,可以通过Class.forName(' Account'),但类似的方法在Salesforce Apex中不起作用。
任何人都可以帮助我。
答案 0 :(得分:0)
看看Type课程。它的文档并不十分直观,也许你会从引入它的文章中获益更多:https://developer.salesforce.com/blogs/developer-relations/2012/05/dynamic-apex-class-instantiation-in-summer-12.html
我在托管包代码中使用此功能,只有当组织启用了Chatter时才会插入Chatter帖子(Feed项):
sObject fItem = (sObject)System.Type.forName('FeedItem').newInstance();
fItem.put('ParentId', UserInfo.getUserId());
fItem.put('Body', 'Bla bla bla');
insert fItem;
(如果我对FeedItem
类进行硬编码并直接插入它,则将我的包标记为“需要Chatter运行”。)
替代方法是构建对象的JSON表示(String不仅包含类型,还包含一些字段值)。您可以查看https://salesforce.stackexchange.com/questions/171926/how-to-deserialize-json-to-sobject
至少现在你知道什么是关键词&搜索的例子:)
修改强>
根据您的代码段 - 尝试以下内容:
String typeName = 'List<Account>';
String content = '[{"attributes":{"type":"Account"},"Name":"Some account"},{"attributes":{"type":"Account"},"Name":"Another account"}]';
Type t = Type.forName(typeName);
List<sObject> parsed = (List<sObject>) JSON.deserialize(content, t);
System.debug(parsed);
System.debug(parsed[1].get('Name'));
// And if you need to write code "if it's accounts then do something special with them":
if(t == List<Account>.class){
List<Account> accs = (List<Account>) parsed;
accs[1].BillingCountry = 'USA';
}