2017-08-20 33 views
0

我是Salesforce的新用戶,想要編寫一個需求,我在字符串變量中通過一個名稱來創建該類的對象。通過Salesforce中的類名稱創建類對象

例如,對象名稱是存儲在字符串變量中的Account。 String var ='Account'

現在我想創建'Account'對象。在java中,可以通過Class.forName('Account'),但類似的方法在Salesforce Apex中不起作用。

任何人都可以請幫我在這。

回答

0

看看Type課。它的文檔並不是非常直觀,也許你會從介紹它的文章中獲益更多:https://developer.salesforce.com/blogs/developer-relations/2012/05/dynamic-apex-class-instantiation-in-summer-12.html

我在管理的程序包代碼中使用它,只在組織擁有Chatter帖子(飼料項目)啓用聊天:

sObject fItem = (sObject)System.Type.forName('FeedItem').newInstance(); 
fItem.put('ParentId', UserInfo.getUserId()); 
fItem.put('Body', 'Bla bla bla'); 
insert fItem; 

(如果我硬編碼&的FeedItem類直接將它,它會記住我的包作爲「要求顫振運行」)。

另一種方法是構建對象的JSON表示(字符串不僅包含類型,還包含一些字段值)。你可以看看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'; 
} 
+0

'String objectName = i.Name; // i.Name給出對象API名稱 //下面是推薦的代碼行 sObject fItem =(sObject)System.Type.forName(objectName).newInstance(); //下方給出錯誤的無效類型fItem 列表 s =(列表)parser.readValueAs(列表 .class); //下面的註釋行是針對一個對象的,我試圖針對多個對象執行類似的操作 // acc =(List )parser.readValueAs(List .class); //最後我插入那個對象 insert acc;' –

+0

嗨,感謝您的詳細信息。我試過以上的信息和編碼,但仍然拋出無效的類型,可能是因爲編譯器只需編譯時需要對象類型。以上是失敗的確切代碼片段 –

+0

檢查更新後的答案? – eyescream

相關問題