Всем доброго утра! Осень - замечательная и в то же время суровая пора года. Судите сами, что осень - это эдакой мост к неизбежному, к студенческой сессии. А что самое важное для хорошего студента? Правильно хорошо составленная шпаргалка. Итак, представляю вашему вниманию небольшую шпаргалку по Salesforce.com для самых маленьких. (и впредь думаю писать такого рода вещички, авось кому понадобиться).
Итак, представьте, вы успешный salesforce-девелопер и тешитесь в лучах собственной гордости за то, что вы одолели такую монструозную штуковину как SF. И тут к вам, то ли враг, то ли ворон - подходит надоедливый сосед справа и говорит: "Developer, я хочу, чтобы на этапе выполнения программы у меня заполнялись поля динамически?"(Или для тех кто поопытнее. Есть три пакета (пускай managed package). Базовый пакет в котором есть объект А и три поля. Одно поле текстовое, одно поле расширяется в пакете B, а другое поле расширяется в пакете C. Как мне записать значения в пакетные поля, если у меня, например, установлен managed package А и B, но нет C?).
Подумали? А теперь - решение. Динамика. Есть такое простое решение как взять эти поля динамически в зависимости от того, какую бизнес-логику вы хотите реализовать.
Положим. Есть стандартный объект Account. И три поля кастомных (вы их можете создать на своем орге).
A_PACKAGE__Field - text (256);
B_PACKAGE__Field - text (256);
C_PACKAGE__Field - text (256);
Давайте теперь применим выше названную динамику в действии.
Подумали? А теперь - решение. Динамика. Есть такое простое решение как взять эти поля динамически в зависимости от того, какую бизнес-логику вы хотите реализовать.
Положим. Есть стандартный объект Account. И три поля кастомных (вы их можете создать на своем орге).
A_PACKAGE__Field - text (256);
B_PACKAGE__Field - text (256);
C_PACKAGE__Field - text (256);
Давайте теперь применим выше названную динамику в действии.
- Account accountToSave = new Account(Name='Test');
- Map<String, Schema.SObjectField> accountFields = Schema.getGlobalDescribe()
- .get('Account').getDescribe().fields.getMap();
- if(accountFields.containsKey('A_PACKAGE__Field')){
- accountToSave.put('A_PACKAGE__Field', 'TestA');
- } if(accountFields.containsKey('B_PACKAGE__Field')){
- accountToSave.put('B_PACKAGE__Field', 'TestB');
- }if(accountFields.containsKey('C_PACKAGE__Field')){
- accountToSave.put('C_PACKAGE__Field', 'TestC');
- }
- insert accountToSave;
Что мы видим. Берем наш SObject объект и разбираем его по косточкам филдам, которые мы и тянем далее из мапы. Вот и все. Такими простыми манипуляциями мы динамически записали значения в поля. Пресследуя свои цели, данный подход можно использовать и при SOQL-запросах. Пользуйтесь на здоровье и помните: вы лучший salesforce-developer...ведь если не вы, то кто??