非常感谢您的帮助。
问题陈述
我有一个Map,其中包含Map字符串键和Salesforce帐户,我想插入一个帐户,但是我想为每个帐户创建一个新的地图并使用与键相同的字符串,并将帐户ID作为值。
已尝试
我实际上在地图上进行的迭代得到了要插入数据库的值,然后,如果记录成功插入,我向新地图中添加了值,“ 我在For Loop中插入帐户,这很糟糕练习可能会达到DML限制“
Sudo代码
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);
}
}
问题:如何避免在for Loop中插入帐户对象并构建我的accMapId
使用myMap.values()将地图“展平”到一个列表中(在您的情况下为客户列表),插入整个列表。这种拼合只是保留引用,因此将使用生成的记录ID静默更新地图中的原始帐户。
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);