반응형
「Map를 사용할 수 있어. 이상.」으로 끝입니다만, 너무 맛있지 않기 때문에 실제로 있을 것 같은 구체예를 2개 소개하겠습니다.
예 1 : Trigger.new에 대한 루프에서 SOQL을 피합니다.
나쁜 예
trigger AccountTrigger on Account(brefore update){
for(Account acc: Trigger.new){
List<Contact> contactList = [SELECT Id,Test__c FROM Contact WHERE AccountId =: acc.Id];
for(Contact con: contactList){
//取引先責任者に対する任意の処理
}
}
}
↑ 거래처에 묶는 거래처 책임자를 취득함에 있어서, for 루프내에서 SOQL문을 써 버리고 있습니다.
좋은 예
trigger AccountTrigger on Account(brefore update){
List<Account> accountListWithCountacts = [SELECT Id,(SELECT Id,Test__c FROM Contacts) FROM Account WHERE Id IN:Trigger.newMap.keySet()];
for(Account acc: accountListWithCountacts){
for(Contact con: acc.Contacts){
//取引先責任者に対する任意の処理
}
}
}
↑아이 관계명을 이용해 사전에 거래처에 묶는 거래처 책임자를 취득하는 것으로, for 루프내에서의 SOQL의 기술을 회피하고 있습니다.
예 2 : SOQL에서 얻은 목록에 대한 루프의 SOQL을 피합니다.
나쁜 예
List<Account> accountList = [SELECT Id FROM Account LIMIT 100];
for(Account acc: accountList){
List<Contact> contactList = [SELECT Id,Test__c FROM Contact WHERE AccountId =: acc.Id];
for(Contact con: contactList){
//取引先責任者に対する任意の処理
}
}
}
↑ 거래처의 아이 레코드인 거래처 책임자를 취득할 때, for 루프내에서 SOQL를 써 버리고 있습니다.
좋은 예
List<Account> accountList = [SELECT Id FROM Account LIMIT 100];
Map<Id,Account> accountMap = new Map<Id,Account>();
for(Account acc: AccountList){
accountMap.put(acc.Id,acc);
}
List contactList = [SELECT Id,Test__c FROM Contact WHERE AccounId =: accountMap.keySet()];
for(Contact con: contactList){
//取引先責任者に対する任意の処理
}
↑map의 keySet()를 이용하는 것으로, 리스트로 취득한 거래처를 부모에게 가지는 거래처 책임자만의 좁혀를 실현해, for 루프내에서의 SOQL을 회피하고 있습니다.
반응형
'개발자정보' 카테고리의 다른 글
세일즈포스(Salesforce)개발자 콘솔의 로깅 수준 변경 (0) | 2022.01.17 |
---|---|
세일즈포스(Salesfroce)영업일 기준 일수 판정 로직의 구현 방법 (0) | 2022.01.17 |
(Salesforce)특정 항목의 값이 입력되어 있는 레코드의 수나 비율을 표시하는 리포트 작성 방법 (0) | 2022.01.17 |
세일즈포스(Salesforce) Apex의 데이터형 변환 정리 (0) | 2022.01.17 |
Gmail이 이메일을 Salesforce에 동기화하는 방법 (0) | 2022.01.17 |