2012-04-04 5 views
0

ここではすべての連絡先にHD品質の注文が届くようにするクエリがあります。サブクエリフィールドの更新方法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'];` 

その後、私は、各連絡先のHDの注文数を更新するために、これらのコードを使用して変更します。

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

、質問はどのように私は連絡先を更新することができます。 「更新オーダー」として連絡先を更新しません。

答えて

0

あなただけの新しいコレクションにすべての連絡先を追加し、それを更新する必要があります。

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

ありがとうございます。あなたのコードは、エラーを引き起こします:リスト内の重複ID。私はなぜそれがリスト(セットではない)に重複するIDを許さないのかわかりません。私はこれが複数のHDオーダーを持っている連絡先の原因だと思う。どうすればこの問題を解決できますか? –

+0

連絡先をマップに追加する前に、リストの代わりにマップを使用して、既にそこに存在するかどうかを確認してください。そうであれば、それを増やし、そうでなければそれを追加します。次にマップの値を更新するだけです: 'update mymap.values();' –

+0

nvm、私は連絡先をセットに追加してから、そのセットをリストに追加するだけです。リストを更新します。 DMLはリストが設定されていない場合にのみ機能します。 –

関連する問題