2012-04-04 85 views
0

下面是查询,它会让我所有的联系人都有高清质量订单。如何更新子查询字段? 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(不是一组)。我认为这是由一些联系人引起的多个高清订单。所以我如何解决这个问题? – 2012-04-04 05:17:33

+0

在将联系人添加到地图之前,请先使用地图而不是列表,然后查看它是否已存在。如果是这样,请增加那个,否则添加它。然后,只需更新地图的值:'update mymap.values();' – 2012-04-04 05:29:38

+0

nvm,我简单地需要将联系人添加到一个集合,然后将该集合添加到列表中。并更新列表。因为DML仅适用于未设置列表。 – 2012-04-04 05:30:27

相关问题