通过Salesforce中的类名创建Class对象

时间:2017-08-20 10:45:33

标签: salesforce apex

我是Salesforce的新手,想要编写一个要求,我在字符串变量中有一个api名称,我希望通过该名称创建该类的对象。

对于Eg。对象名称是Account,存储在字符串变量中。 String var =' Account'

现在我想创建'帐户'的对象。在Java中,可以通过Class.forName(' Account'),但类似的方法在Salesforce Apex中不起作用。

任何人都可以帮助我。

1 个答案:

答案 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';
}