0

好的,所以几周前我问了这个问题,我得到了一些很大的帮助 - 但我仍然没有 100% 解决我一直遇到的问题......任何帮助都会很棒......我仍然有这段代码的主要问题,可以使用更多帮助......

出于某种原因,它仍在将任何数字更改为 0,而不仅仅是将零添加到空字段。

如果我有 4 个具有以下内容的 LOC - 竞争对手销售率 150、125、0、空白或空丢失 False、True、True、False 我希望它们都被标记为丢失,我只希望最后一个竞争对手销售率被标记为 0

目前所有标记 Lost 和 All 更改为 0 - 我知道代码会更新,因为如果我将代码更改为将它们设为 10,它们都会更新为 10

请任何帮助都会很棒...

在机会上触发 updateLOConLostOpportunity(更新后){

//The map allows us to keep track of the opportunities that have been lost

地图 oppsWithStageLost = new Map();

for (Integer i = 0; i < Trigger.new.size(); i++) {
    if (   (Trigger.old[i].StageName != 'Lost')
        && (Trigger.new[i].StageName == 'Lost')) {
        oppsWithStageLost.put(Trigger.old[i].id,
                              Trigger.new[i]);

    }                          
}
List<Line_of_Coverage__c> updatedLOCs = new List<Line_of_Coverage__c>();
for (Line_of_Coverage__c loc : [SELECT id, Lost__c, Opportunity__c
                                  FROM Line_of_Coverage__c
                                  WHERE Opportunity__c
                                    in :oppsWithStageLost.keySet()]) {
    Opportunity parentOpp = oppsWithStageLost.get(loc.Opportunity__c);


     loc.Lost__c = TRUE; 

     if (loc.Competitor_Sold_Rate__c == NULL) {

         loc.Competitor_Sold_Rate__c = 0;

     }  


    updatedLOCs.add(loc);

}
update updatedLOCs;                                          

}

4

3 回答 3

1

添加 Competitor_Sold_Rate__c 以选择查询

for (Line_of_Coverage__c loc : [SELECT id, Lost__c, Opportunity__c,Competitor_Sold_Rate__c  
                                  FROM Line_of_Coverage__c
                                  WHERE Opportunity__c
                                    in :oppsWithStageLost.keySet()])
于 2013-03-12T20:41:53.020 回答
0

如果我没有正确理解这个问题,请原谅我,但如果我只希望最后一个元素的销售率 = 0,你可以试试这个。也像提到的其他帖子一样,您必须在查询中包含 Competitor_Sold_Rate__c

List<Line_of_Coverage__c> updatedLOCs = new List<Line_of_Coverage__c>();
list<Line_of_coverage__c> locs = [SELECT id, Lost__c, Opportunity__c, Competitor_Sold_Rate__c
                              FROM Line_of_Coverage__c
                              WHERE Opportunity__c
                                in :oppsWithStageLost.keySet()]; 

for (Integer i = 0; i < locs.size(); i++) {
  Opportunity parentOpp = oppsWithStageLost.get(locs[i].Opportunity__c);
  loc.Lost__c = TRUE; 

  //check if it's the last loc -- size would return 4
  if (loc.Competitor_Sold_Rate__c == NULL && locs.size()-1 == i) {
    loc.Competitor_Sold_Rate__c = 0; 
}  

updatedLOCs.add(loc);
.
.
.
于 2013-03-15T05:47:30.877 回答
0

Competitor_Sold_Rate__c 的具体类型是什么?如果它是一个字符串或一个选项列表,它可能永远不会专门设置为 null - 将它与空字符串 '' 进行比较可能会有更好的结果。

于 2013-03-12T19:20:34.457 回答