diff --git a/force-app/main/default/classes/Timeline_Queries.cls b/force-app/main/default/classes/Timeline_Queries.cls index 62bc903..9caa0f2 100644 --- a/force-app/main/default/classes/Timeline_Queries.cls +++ b/force-app/main/default/classes/Timeline_Queries.cls @@ -43,12 +43,12 @@ public with sharing class Timeline_Queries { for (TimelineParent__mdt mdt : sObjectsToQuery) { // only query an sobject once - if (!queriedSobjects.contains(mdt.Timeline_Child__r.SObjectName__c + mdt.SObjectRelationshipField__c)) { + if (!queriedSobjects.contains(mdt.Timeline_Child__r.SObjectName__c + mdt.SObjectRelationshipField__c + mdt.Timeline_Child__r.CreateableObject_RecordType__c)) { if (String.isNotBlank(mdt.Timeline_Child__r.CreateableObject_RecordType__c)) { recordTypeId = recordTypesMap.get(mdt.Timeline_Child__r.SObjectName__c + mdt.Timeline_Child__r.CreateableObject_RecordType__c); } queries.add(Timeline_QueriesHelper.getQuery(sObjectsToQuery, mdt, recordId, amountOfMonths, recordTypeId)); - queriedSobjects.add(mdt.Timeline_Child__r.SObjectName__c + mdt.SObjectRelationshipField__c); + queriedSobjects.add(mdt.Timeline_Child__r.SObjectName__c + mdt.SObjectRelationshipField__c + mdt.Timeline_Child__r.CreateableObject_RecordType__c); recordTypeId = ''; } } @@ -62,14 +62,18 @@ public with sharing class Timeline_Queries { public static List getSObjectsFromQueries(List queries) { List sObjects = new List(); + Map uniqueSObjects = new Map(); for (String query : queries) { - System.debug('query: ' + query); List sObjs = Database.query(query); sObjects.addAll(sObjs); + for (SObject sObj : sObjs) { + // Added to remove duplicates + uniqueSObjects.put(sObj.Id, sObj); + } } - return sObjects; + return uniqueSObjects.values(); } // --------------------------------------------------- // @@ -116,8 +120,8 @@ public with sharing class Timeline_Queries { String recordTypeId = ''; for (TimelineParent__mdt mdt : sObjectsToQuery) { - if (!queriedSobjects.contains(mdt.Timeline_Child__r.SObjectName__c + mdt.SObjectRelationshipField__c)) { - String fields = 'Count()'; + if (!queriedSobjects.contains(mdt.Timeline_Child__r.SObjectName__c + mdt.SObjectRelationshipField__c + mdt.Timeline_Child__r.CreateableObject_RecordType__c)) { + String fields = 'Id'; String sObjectType = mdt.Timeline_Child__r.SObjectName__c; String parameter = mdt.SObjectRelationshipField__c + ' = \'' + recordId + '\''; @@ -128,9 +132,10 @@ public with sharing class Timeline_Queries { recordTypeId = recordTypesMap.get(mdt.Timeline_Child__r.SObjectName__c + mdt.Timeline_Child__r.CreateableObject_RecordType__c); parameter += ' AND RecordTypeId = \'' + recordTypeId + '\''; } + parameter += ' GROUP BY Id'; queries.add(Timeline_QueriesHelper.buildSoqlQuery(fields, sObjectType, parameter, null)); - queriedSobjects.add(mdt.Timeline_Child__r.SObjectName__c + mdt.SObjectRelationshipField__c); + queriedSobjects.add(mdt.Timeline_Child__r.SObjectName__c + mdt.SObjectRelationshipField__c + mdt.Timeline_Child__r.CreateableObject_RecordType__c); recordTypeId = ''; } } @@ -138,7 +143,8 @@ public with sharing class Timeline_Queries { Integer count = 0; for (String query : queries) { - count += Database.countQuery(query); + List results = Database.query(query); + count += results.size(); } return count;