У меня есть карта Я хочу вставить учетную запись в Salesforce и создать новую карту - PullRequest
0 голосов
/ 31 января 2020

Большое спасибо за помощь.

Постановка проблемы

У меня есть карта, содержащая Map, ключ строки и учетную запись Salesforce, я хочу вставить учетную запись, но для каждой учетной записи я хочу создать новую Карту с той же строкой, что и ключ, и идентификатором учетной записи в качестве значения.

Пытался

Что на самом деле я делал, я повторяю по карта получает значение для вставки в базу данных, а затем, если запись успешно вставлена, я добавляю значение на новую карту: « Я вставляю учетную запись в For L oop, что является плохой практикой, может достигнуть предела DML"

Код Судо

Account acc = new Account(Name ='Test');
Map<String,Id> accMapId = new Map<String,Id>();
Map<String,Account> accMap = new Map<String,Account>();
accMap.put('A13',acc);

for(String accIterate : accMap.keySet()){
    Database.SaveResult rt = Database.insert(accMap.get(accIterate));
    if(rt.isSuccess()){
            accMapId.put(accIterate,rt.id);
    }
}

Вопрос: Как избежать вставки объекта учетной записи в течение L oop и Постройте мой accMapId

1 Ответ

1 голос
/ 31 января 2020

Используйте myMap.values ​​(), чтобы «сплющить» карту в Список (в вашем списке счетов), вставить весь список. Такое выравнивание просто сохраняет ссылки, поэтому исходные учетные записи на карте будут автоматически обновляться с созданным идентификатором записи.

Map<String, Account> accounts = new Map<String, Account>{
    'A13' => new Account(Name ='Test'),
    'B14' => new Account(Name = 'Another')
};
insert accounts.values(); // You can use Database.insert() if you want, it accepts a list too.

Map<String, Id> idsByKey = new Map<String, Id>();
for(String s : accounts.keyset()){
    idsByKey.put(s, accounts.get(s).Id);
}
System.debug(idsByKey);
...