2012-04-04 4 views
0

Hier ist die Abfrage, die mir alle Kontakte haben HD-Qualität Aufträge erhalten.Wie aktualisiert man die Unterabfragefelder? salesforce, soql, apex

`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'];` 

dann ändere ich diesen Code verwenden, um die Anzahl der HD-Aufträge für jeden Kontakt zu aktualisieren:

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++; 
} 

nun, die Frage ist, wie kann ich die Kontakte aktualisieren. als "Update-Bestellungen"; aktualisiert die Kontakte nicht.

Antwort

0

Sie müssen nur alle Kontakte zu einer neuen Sammlung hinzuzufügen und dann das Update:

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(); 

Hinweis: dieser sehr rau ist, überprüft nicht zu viele Kontakte in einem Update usw., aber es sollte dein Denken in die richtige Richtung bringen!

+0

Danke für die Information. aber Ihr Code wird den Fehler verursachen: doppelte ID in der Liste. Ich weiß nicht, warum es doppelte ID in einer Liste nicht erlaubt (kein Satz). Ich denke, das ist der Grund, dass einige Kontakte mehrere HD-Bestellungen haben. also wie könnte ich das beheben? –

+0

Verwenden Sie eine Karte anstelle einer Liste, bevor Sie den Kontakt zur Karte hinzufügen, um zu sehen, ob sie bereits dort vorhanden ist. Ist dies der Fall, erhöhen Sie den Wert, andernfalls fügen Sie ihn hinzu. Dann nur die Werte Karten aktualisieren: 'Update mymap.values ​​();' –

+0

NVM, ich einfache Notwendigkeit, die Kontakte zu einem Satz hinzuzufügen, fügen Sie dann den Satz auf eine Liste. und aktualisiere die Liste. da DML nur für nicht gesetzte Listen funktioniert. –

Verwandte Themen