2012-12-22 37 views
2

我正處於Salesforce Apex的學習階段。我已經閱讀了Dynamic Apex的主題,並且無法理解這個概念。有人可以解釋它如何處理它,以及在哪種情況下最好使用? 在此先感謝。什麼是salesforce中的動態頂點?

+0

你能給你想要解釋的地方嗎?動態頂點有很多部分。 –

回答

5

使用案例1:

你正在開發一個網頁,上面寫着Salesforce的對象元數據,以顯示對象記錄給用戶。你想要使用描述性的全局方法,但是你不知道如何將標準的SOQL和通用的SObject類型結合起來。

標準SOQL如

Person__c [] persons = [SELECT Id, Name, Age__c, Height__c FROM Person__c]; 

但描述全局元數據的方法返回的sObject類型。

解決方案:

使用說明全球的方法來獲取對象的列表,然後再獲取對象的所有領域。用本地字符串變量在所有字段中構建一條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); 

使用案例2

你想鬆耦合你的代碼的自定義對象管理的封裝測試版,以便管理封裝可以卸載和升級。

解決方案

當您使用Database.query()方法,因此它可以無需任何重新安裝註釋掉的代碼刪除依賴你的代碼不會被編譯針對自定義對象。

使用案例3

您有副本記錄到另一個自定義對象插入後,根據動態字段映射架構的觸發器。你不能用標準的方式編碼它[SELECT ...],因爲你只知道你在運行時插入什麼對象。

解決方案

此外,使用說明全局方法& Database.query得到記錄和類型信息,那麼你可以插入到像正常DML的目標對象。

sobject newRecord = ... 
for (integer i = 0; i < fieldCount; i++) { 
    newRecord.put(fields[i],values[i]); 
} 
insert newRecord; 

如果你是做批量插入,像往常一樣,請確保你不把DML(INSERT,UPDATE)的循環語句。

+0

不錯的徹底的答案! – Bryan