2012-04-04 4 views
0

다음은 모든 연락처에 HD 품질 주문이 포함 된 쿼리입니다. 하위 쿼리 필드를 업데이트하는 방법은 무엇입니까? salesforce, soql, apex

for(Orderc__c o: orders){ 
    if(o.Customer__r.Number_of_HD_Orders__c==null) 
    o.Customer__r.Number_of_HD_Orders__c=0.0; 
    o.Customer__r.Number_of_HD_Orders__c++; 
} 

지금, 문제는 내가 연락처를 업데이트 할 수 있습니다 방법입니다

`Orderc__c[] orders = [SELECT id,customer__c, Customer__r.Number_of_HD_Orders__c,` `Quality_Code__c FROM Orderc__c where Quality_Code__c='HD'];` 

는 나는 각 연락처에 대해 HD의 주문 번호를 업데이트하려면 다음 코드를 사용하여 변경할 수 있습니다. "업데이트 명령;" 연락처를 업데이트하지 않습니다. 등의 업데이트에 너무 많은 연락처를 확인하지 않습니다,

map<Id, Contact> contacts = new map<Id, Contact>(); 

for(Orderc__c o: orders) { 
    if(o.Customer__r.Number_of_HD_Orders__c == null) { 
     o.Customer__r.Number_of_HD_Orders__c=0.0; 
    } 

    Contact sContact = contacts.get(o.Customer__c); 

    if(sContact != null) { 
     sContact.Number_of_HD_Orders__c++; 
    } else { 
     o.Customer__r.Number_of_HD_Orders__c++; 
     contacts.put(o.Customer__c, new Contact(id = o.Customer__c, Number_of_HD_Orders__c = o.Customer__r.Number_of_HD_Orders__c)); 
    } 
} 

update contacts.values(); 

참고이 매우 거친이지만 :

답변

0

당신은 단지를 업데이트 한 다음 새 컬렉션에 모든 연락처를 추가 할 필요가 올바른 방향으로 사고해야합니다!

+0

감사합니다. 그러나 귀하의 코드는 오류를 일으킬 것입니다 : 목록에 중복 ID. 왜 목록에 중복 ID를 허용하지 않는지 모르겠다. 나는 이것이 몇몇 접촉에 의하여 원인이 다수 HD 순서가다는 것을 생각한다. 그래서 내가 어떻게 고칠 수 있니? –

+0

연락처를지도에 추가하기 전에 목록 대신지도를 사용하여지도에 이미 있는지 확인하십시오. 그럴 경우 해당 값을 증가시키고, 그렇지 않으면 추가하십시오. 그런 다음 맵의 값을 업데이트하면됩니다 : update mymap.values ​​();' –

+0

nvm, 연락처에 연락처를 추가 한 다음 목록에 세트를 추가하기 만하면됩니다. 목록을 업데이트하십시오. DML은 목록이 설정되지 않은 경우에만 작동합니다. –

관련 문제