triggers - 如何使用 Map 集合在 Account 和 Opportunity 之间进行关联
问题描述
每当创建超过 99 名员工的帐户时,如何编写一个触发器来创建 10 个相同的机会。确保所有机会都与帐户相关联。对 Opportunities 上的字段使用任何值并使用 Map 集合。
Map<Id, Account> accountMap = new Map<Id, Account>([SELECT Id, Name FROM Account WHERE Id IN: accList AND NumberOfEmployees > 99]);
List<Opportunity> oppList = new List<Opportunity>();
for(Integer i = 0; i < 10; i++) {
for(Account acc : [SELECT Id, Name FROM Account WHERE Id IN: accountMap.keySet()]) {
Opportunity opp = new Opportunity();
opp.AccountId = acc.Id;
opp.Name = acc.Name;
opp.CloseDate = Date.today();
opp.StageName = 'Prospecting';
oppList.add(opp);
}
}
insert oppList;
这是我编写的代码,我只想不使用嵌套循环,因为插入操作时的记录没有得到很好的优化,对于触发器来说也不是很好的做法。
解决方案
如果您希望在创建新的 Account 记录后直接发生这种情况,那么您可以在 Account 对象的 After Insert 事件期间调用它(确保不直接在触发器中包含代码,使用处理程序类来包含逻辑。 )
您不必查询帐户记录,因为所有这些字段都在 AFTER insert 的 Trigger.new 列表中可用(包括新帐户的 ID)。请参阅下面的代码示例。
List<Opportunity> oppList = new List<Opportunity>();
for (Account acc : Trigger.new) {
if (acc.NumberOfEmployees > 99) {
for(Integer i = 0; i < 10; i++) {
Opportunity opp = new Opportunity(
AccountId = acc.Id,
Name = acc.Name,
CloseDate = Date.today(),
StageName = 'Prospecting'
);
oppList.add(opp);
}
}
}
insert oppList;
这解决了您的问题,但您是否只是在寻找有关如何使用地图、实例化 SObject 等的其他代码示例?
推荐阅读
- python - 使用python从Excel表格中提取图像
- vb.net - 使用 vb.net 使用公钥进行 pgp 加密
- angular - 如何防止 Angular 应用程序在 Index.html 中加载
- android - Parcelable Map的正确方法?
- joomla - 如何在 Joomla 中为插件添加参数?
- php - 根据列值动态选择列
- mongodb - StreamSets 获取 MongoDB 字段
- git - 如何从另一台计算机更新现有的 github 存储库?
- sql - 将表和数据库服务器传递给存储过程
- spring - 将 Mapstruct 上下文包含到内部映射器中