错误:System.NullPointerException:尝试取消引用空对象

时间:2018-06-29 09:42:35

标签: salesforce apex

我编写了此类,我从触发器调用该类,以防止用户为同一机会选择多个机会产品,但这给了我这个错误: System.NullPointerException:尝试取消引用空对象 我似乎无法找到解决方法。

这是我的代码:

public class AP03_OpportunityLineItem {
    public static void preventmultipleOpportunityLineItems(List<OpportunityLineItem> listOppLineItems){
        Set<Id>opportunityIds = new Set<Id>();
        List<OpportunityLineItem> listOfOpportunityLineItems = new List <OpportunityLineItem>();
        // get all parent IDs
        for(OpportunityLineItem oli : listOfOpportunityLineItems)
        {
            opportunityIds.add(oli.OpportunityId);
        }
        // query for related Opportunity Line Items
        Map<Id, Opportunity> mapOpportunities = new Map<Id, Opportunity>([SELECT ID, 
                                                                          (SELECT ID 
                                                                           FROM OpportunityLineItems) 
                                                                          FROM Opportunity 
                                                                          WHERE ID IN :opportunityIds]);
        for(OpportunityLineItem olitems : listOppLineItems)
        {
            if(mapOpportunities.get(olitems.OpportunityId).OpportunityLineItems.size()>0)
            {
                olitems.addError('Ce client ne peut plus loué des véhicules');
            }
        }
    }
}

谢谢。

1 个答案:

答案 0 :(得分:0)

第4行对于您的实际需求没有意义,第4行和第6行是导致您错误决定进而导致错误代码的罪魁祸首。下面是修改后的代码版本,可以正常使用。

public class AP03_OpportunityLineItem {
public static void preventmultipleOpportunityLineItems(List<OpportunityLineItem> listOppLineItems){
    Set<Id>opportunityIds = new Set<Id>();
    //List<OpportunityLineItem> listOfOpportunityLineItems = new List <OpportunityLineItem>();  //NOT REQUIRED
    // get all parent IDs
    for(OpportunityLineItem oli : listOppLineItems)  // YOU HAVE TO USE listOppLineItems INSTEAD OF listOfOpportunityLineItems
    {
        opportunityIds.add(oli.OpportunityId);
    }
    // query for related Opportunity Line Items
    Map<Id, Opportunity> mapOpportunities = new Map<Id, Opportunity>([SELECT ID, 
                                                                      (SELECT ID 
                                                                       FROM OpportunityLineItems) 
                                                                      FROM Opportunity 
                                                                      WHERE ID IN :opportunityIds]);
    for(OpportunityLineItem olitems : listOppLineItems)
    {
        if(mapOpportunities.get(olitems.OpportunityId).OpportunityLineItems.size()>0)
        {
            olitems.addError('Ce client ne peut plus loué des véhicules');
        }
    }
}

}

关于您的NullPointerException,以上代码(尽管您的代码错误,但您的代码也是如此)将不会获得此异常,除非您通过传递null作为参数/参数来调用此方法。因此,在调用此方法之前,必须验证您没有传递null作为参数,或者可以在此方法的第二个if循环之前包含for语句(检查null)。