我是Salesforce的新用戶,想要編寫一個需求,我在字符串變量中通過一個名稱來創建該類的對象。通過Salesforce中的類名稱創建類對象
例如,對象名稱是存儲在字符串變量中的Account。 String var ='Account'
現在我想創建'Account'對象。在java中,可以通過Class.forName('Account'),但類似的方法在Salesforce Apex中不起作用。
任何人都可以請幫我在這。
我是Salesforce的新用戶,想要編寫一個需求,我在字符串變量中通過一個名稱來創建該類的對象。通過Salesforce中的類名稱創建類對象
例如,對象名稱是存儲在字符串變量中的Account。 String var ='Account'
現在我想創建'Account'對象。在java中,可以通過Class.forName('Account'),但類似的方法在Salesforce Apex中不起作用。
任何人都可以請幫我在這。
看看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';
}
'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;' –
嗨,感謝您的詳細信息。我試過以上的信息和編碼,但仍然拋出無效的類型,可能是因爲編譯器只需編譯時需要對象類型。以上是失敗的確切代碼片段 –
檢查更新後的答案? – eyescream