• James Sheridan
  • NEWBIE
  • 10 Points
  • Member since 2014

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 1
    Questions
  • 2
    Replies
In my last for loop (last 4-5 lines of code that I post here) I get a cannot de-reference null object error when I try to insert an AHU record into the database.  I've gone over the code a couple of times, and can't figure out what object I don't instantiate. 


trigger updateGatewayCounts on AHU__c (after update, after delete, after insert) {
AHU__c editedAHU = new AHU__c();
if (Trigger.isDelete) {editedAHU = trigger.old[0];}
else {editedAHU = trigger.new[0];}

Map<Control_Gateway__c, Integer[]> cggwCounts = new Map<Control_Gateway__c, Integer[]>();
List<AHU__c> project_AHUs = [SELECT AHU_Project__c, AHU_Site__c, Name, AHU_Control_Group__c
        FROM AHU__c
        WHERE AHU_Project__c = :editedAHU.AHU_Project__c
        ORDER BY Name];
for (AHU__c ahu: project_AHUs) {
  List<AHU_Point__c> points = [SELECT AHU_Point_Source__c, AHU_Point_Type__c, AHU_Point_Gateway__c FROM AHU_Point__c WHERE AHU_Point_AHU__c =: ahu.Id];
  if (points.size() > 0) {
   Map<String, AHU_Point__c[]> sensorMap = new Map<String, AHU_Point__c[]>();
   for (AHU_Point__c point: points) {
    AHU_Point__c[] sensorList = sensorMap.get(point.AHU_Point_Source__c);
    if (sensorList == null) {sensorList = new List<AHU_Point__c>();}
    sensorList.add(point);
    sensorMap.put(point.AHU_Point_Source__c, sensorList);
   }

   for (AHU_Point__c[] hwList: sensorMap.values()) {
    Integer temperature = 0;
    Integer voltage = 0;
    Integer int_temp = 0;
    Integer other = 0;
    String gw = '';
    String source = '';
    for (AHU_Point__c point: hwList) {
     List<Point__c> port = [SELECT Point_Port__c FROM Point__c WHERE Point_Name__c =: point.AHU_Point_Type__c];
     if (port.size() > 0) {
      if (port[0].Point_Port__c == 'Temperature') {temperature += 1;}
      else if (port[0].Point_Port__c == 'Voltage') {voltage += 1;}
      else if (port[0].Point_Port__c == 'Internal Temperature') {int_temp += 1;}
     }
     else {other += 1;}
     gw = point.AHU_Point_Gateway__c;
     source = point.AHU_Point_Source__c;
    }
    List<Control_Gateway__c> cggw = [SELECT CGGW_WAM_Count__c, CGGW_WSM_AHU_Count__c, CGGW_WSM_Power_Count__c
            FROM Control_Gateway__c
            WHERE CGGW_Project__c = :editedAHU.AHU_Project__c AND CGGW_Gateway__c = :gw AND CGGW_Control_Group__c = :ahu.AHU_Control_Group__c];
    Integer[] counts = cggwCounts.get(cggw[0]);
    if (counts == null) {counts = new List<Integer>();counts.add(0);counts.add(0);counts.add(0);}
    if (source == 'WAM') {counts.set(0, counts.get(0)+1);}
    else if (source != 'BACnet') {if (voltage > 0) {counts.set(1, counts.get(1)+1);} else {counts.set(2, counts.get(2)+1);}}
    cggwCounts.put(cggw[0], counts);
   }
  }
}
for (Control_Gateway__c cggw: cggwCounts.keySet()) {
  cggw.CGGW_WAM_Count__c = cggwCounts.get(cggw).get(0);
  cggw.CGGW_WSM_Power_Count__c = cggwCounts.get(cggw).get(1);
  cggw.CGGW_WSM_AHU_Count__c = cggwCounts.get(cggw).get(2);
  upsert(cggw);
}
}
In my last for loop (last 4-5 lines of code that I post here) I get a cannot de-reference null object error when I try to insert an AHU record into the database.  I've gone over the code a couple of times, and can't figure out what object I don't instantiate. 


trigger updateGatewayCounts on AHU__c (after update, after delete, after insert) {
AHU__c editedAHU = new AHU__c();
if (Trigger.isDelete) {editedAHU = trigger.old[0];}
else {editedAHU = trigger.new[0];}

Map<Control_Gateway__c, Integer[]> cggwCounts = new Map<Control_Gateway__c, Integer[]>();
List<AHU__c> project_AHUs = [SELECT AHU_Project__c, AHU_Site__c, Name, AHU_Control_Group__c
        FROM AHU__c
        WHERE AHU_Project__c = :editedAHU.AHU_Project__c
        ORDER BY Name];
for (AHU__c ahu: project_AHUs) {
  List<AHU_Point__c> points = [SELECT AHU_Point_Source__c, AHU_Point_Type__c, AHU_Point_Gateway__c FROM AHU_Point__c WHERE AHU_Point_AHU__c =: ahu.Id];
  if (points.size() > 0) {
   Map<String, AHU_Point__c[]> sensorMap = new Map<String, AHU_Point__c[]>();
   for (AHU_Point__c point: points) {
    AHU_Point__c[] sensorList = sensorMap.get(point.AHU_Point_Source__c);
    if (sensorList == null) {sensorList = new List<AHU_Point__c>();}
    sensorList.add(point);
    sensorMap.put(point.AHU_Point_Source__c, sensorList);
   }

   for (AHU_Point__c[] hwList: sensorMap.values()) {
    Integer temperature = 0;
    Integer voltage = 0;
    Integer int_temp = 0;
    Integer other = 0;
    String gw = '';
    String source = '';
    for (AHU_Point__c point: hwList) {
     List<Point__c> port = [SELECT Point_Port__c FROM Point__c WHERE Point_Name__c =: point.AHU_Point_Type__c];
     if (port.size() > 0) {
      if (port[0].Point_Port__c == 'Temperature') {temperature += 1;}
      else if (port[0].Point_Port__c == 'Voltage') {voltage += 1;}
      else if (port[0].Point_Port__c == 'Internal Temperature') {int_temp += 1;}
     }
     else {other += 1;}
     gw = point.AHU_Point_Gateway__c;
     source = point.AHU_Point_Source__c;
    }
    List<Control_Gateway__c> cggw = [SELECT CGGW_WAM_Count__c, CGGW_WSM_AHU_Count__c, CGGW_WSM_Power_Count__c
            FROM Control_Gateway__c
            WHERE CGGW_Project__c = :editedAHU.AHU_Project__c AND CGGW_Gateway__c = :gw AND CGGW_Control_Group__c = :ahu.AHU_Control_Group__c];
    Integer[] counts = cggwCounts.get(cggw[0]);
    if (counts == null) {counts = new List<Integer>();counts.add(0);counts.add(0);counts.add(0);}
    if (source == 'WAM') {counts.set(0, counts.get(0)+1);}
    else if (source != 'BACnet') {if (voltage > 0) {counts.set(1, counts.get(1)+1);} else {counts.set(2, counts.get(2)+1);}}
    cggwCounts.put(cggw[0], counts);
   }
  }
}
for (Control_Gateway__c cggw: cggwCounts.keySet()) {
  cggw.CGGW_WAM_Count__c = cggwCounts.get(cggw).get(0);
  cggw.CGGW_WSM_Power_Count__c = cggwCounts.get(cggw).get(1);
  cggw.CGGW_WSM_AHU_Count__c = cggwCounts.get(cggw).get(2);
  upsert(cggw);
}
}