Invocablemethod Apex Class 汇总多个货币字段
Invocablemethod Apex Class Rollup Multiple Currency Fields
我正在编写一个可调用方法批处理顶点 class 以将“订单包”对象上的多个货币字段汇总到其“订单位置”的父对象。我以为我已正确添加所有内容,但它似乎将“Package_Monthly_Recurring_Fees__c”和“Package_One_Time_Fees__c”更新为 Package_Monthly_Recurring_Fees__c 字段中的相同价格。有人可以帮我确定为什么它对两个字段使用相同的价格吗?非常感谢任何帮助!
global class OrderLocationRollupSummary implements Database.Batchable<sObject>, Schedulable {
//Invocable Method
@InvocableMethod(label='Rollup All Order Packages to Locations')
global static void rollupAllorderpackages(List<Order_Location_Package__c> orderpackages) {
rollupOrderPackages(orderpackages);
}
//Batchable Methods
global Database.QueryLocator start(Database.BatchableContext bc) {
return Database.getQueryLocator([SELECT Id FROM Order_New_Location__c]);
}
global void execute(Database.BatchableContext context, List<sObject> batch){
Set<Id> OrderLocationIds = new Set<Id>();
for (sObject ordloc : batch) {
OrderLocationIds.add(ordloc.Id);
}
summarizeOrderPackages(OrderLocationIds);
}
global void finish(Database.BatchableContext context) {}
//Schedulable Methods
global void execute(SchedulableContext context){
OrderLocationRollupSummary batchJob = new OrderLocationRollupSummary();
Database.executeBatch(batchJob);
}
//Static Methods
public static void rollupOrderPackages(List<Order_Location_Package__c> orderpackages) {
Set<Id> OrderLocationIds = new Set<Id>();
//Get Order Location Ids from specified orderpackages
for (Order_Location_Package__c ordpckg : orderpackages) {
OrderLocationIds.add(ordpckg.New_Location_Name__c);
}
if (OrderLocationIds.isEmpty() == false) {
/*Execute as a future call so that the user doesn't have to wait around for
the rollup to finish. Unless, already in a future or batch call state then
just perform the rollup.*/
if (System.isFuture() == false && System.isBatch() == false) {
summarizeOrderPackagesAsync(OrderLocationIds);
}
else {
new OrderLocationRollupSummary().summarizeOrderPackages(OrderLocationIds);
}
}
}
@future
public static void summarizeOrderPackagesAsync(Set<Id> OrderLocationIds) {
new OrderLocationRollupSummary().summarizeOrderPackages(OrderLocationIds);
}
//Public Methods
public void summarizeOrderPackages(Set<Id> OrderLocationIds) {
//Get Order Locations to Update
List<Order_New_Location__c> orderlocations = queryOrderLocationsById(OrderLocationIds);
Map<Id, double> results = getOrderPackagesAmountsByLocationId(OrderLocationIds);
//Loop Order Locations and set Amounts
List<Order_New_Location__c> orderlocationsToUpdate = new List<Order_New_Location__c>();
for (Order_New_Location__c ordloc : orderlocations) {
double mrf = 0;
double otf = 0;
if (results.containsKey(ordloc.Id)) {
mrf = results.get(ordloc.Id);
otf = results.get(ordloc.Id);
}
//Determine if Amounts have Changed
if (ordloc.Package_Monthly_Recurring_Fees__c != mrf ||
ordloc.Package_One_Time_Fees__c != otf) {
ordloc.Package_Monthly_Recurring_Fees__c = mrf;
ordloc.Package_One_Time_Fees__c = otf;
orderlocationsToUpdate.add(ordloc); //Add location to collection to be updated
}
}
if(orderlocationsToUpdate.isEmpty() == false) {
Database.SaveResult[] saveResults = Database.update(orderlocationsToUpdate, false);
System.debug(saveResults);
}
}
//Private Methods
public Map<Id, double> getOrderPackagesAmountsByLocationId(Set<Id> OrderLocationIds) {
Map<Id, double> resultsByOrderLocationId = new Map<Id, double>();
//Summarize Order Package Amounts by Order Location Id
AggregateResult[] results = aggregateOrderPackageAmounts(OrderLocationIds);
for (AggregateResult result : results) {
Id orderlocationId = (Id) result.get('OrderLocation');
double mrf = (double) result.get('MRFees');
double otf = (double) result.get('OTFees');
resultsByOrderLocationId.put(orderlocationId, mrf);
resultsByOrderLocationId.put(orderlocationId, otf);
}
return resultsByOrderLocationId;
}
//Query Methods
private List<Order_New_Location__c> queryOrderLocationsById(Set<Id> OrderLocationIds) {
return [SELECT
Id
,Package_Monthly_Recurring_Fees__c
,Package_One_Time_Fees__c
FROM
Order_New_Location__c
WHERE
Id IN :OrderLocationIds];
}
private AggregateResult[] aggregateOrderPackageAmounts(Set<Id> OrderLocationIds) {
return [SELECT
New_Location_Name__c OrderLocation
,SUM(Monthly_Recurring_Fees__c) MRFees
,SUM(One_Time_Fees__c) OTFees
FROM
Order_Location_Package__c
WHERE
New_Location_Name__c IN :OrderLocationIds
GROUP BY
New_Location_Name__c];
}
}
在您的 summarizeOrderPackages 方法中,以下代码将 'mrf' 和 'oft' 变量设置为相同的值。
if (results.containsKey(ordloc.Id)) {
mrf = results.get(ordloc.Id);
otf = results.get(ordloc.Id);
}
之后,您将相关字段设置为 mrf 和 otf 变量(具有相同的值)。
//Determine if Amounts have Changed
if (ordloc.Package_Monthly_Recurring_Fees__c != mrf ||
ordloc.Package_One_Time_Fees__c != otf) {
ordloc.Package_Monthly_Recurring_Fees__c = mrf;
ordloc.Package_One_Time_Fees__c = otf;
orderlocationsToUpdate.add(ordloc); //Add location to collection to be updated
}
考虑在您的 OrderLocationRollupSummary class 中添加包装器和内部 class 来解决此问题:
public class Order_New_Location_Wrapper {
Id orderlocationId = {get;set;}
Double mrf = {get;set;}
Double otf = {get;set;}
public class Order_New_Location_Wrapper (Id arg1, Double arg2, Double arg3)
orderlocationId = arg1;
mrf = arg2;
otf = arg3;
}
然后在您的 getOrderPackagesAmountsByLocationId 方法中调用这个新的内部 class:
public Map<Id, Order_New_Location_Wrapper> getOrderPackagesAmountsByLocationId(Set<Id> OrderLocationIds) {
//create a list of orderlocations to represent the collection objects coming from the wrapper
resultsByOrderLocationId = new Map<Id, Order_New_Location_Wrapper>();
//Summarize Order Package Amounts by Order Location Id
AggregateResult[] results = aggregateOrderPackageAmounts(OrderLocationIds);
for (AggregateResult result : results) {
Id orderlocationId = (Id) result.get('OrderLocation');
double mrf = (double) result.get('MRFees');
double otf = (double) result.get('OTFees');
resultsByOrderLocationId.add(orderlocationId, new OpportunityWrapper(orderlocationId, mrg, otf));
}
return resultsByOrderLocationId;
}
您还需要将 summarizeOrderPackages 方法更新为如下所示:
public void summarizeOrderPackages(Set<Id> OrderLocationIds) {
//Get Order Locations to Update
List<Order_New_Location__c> orderlocations = queryOrderLocationsById(OrderLocationIds);
Map<Id, Order_New_Location_Wrapper> results = getOrderPackagesAmountsByLocationId(OrderLocationIds);
//Loop Order Locations and set Amounts
List<Order_New_Location__c> orderlocationsToUpdate = new List<Order_New_Location__c>();
for (Order_New_Location__c ordloc : orderlocations) {
double mrf = 0;
double otf = 0;
if (results.containsKey(ordloc.Id)) {
mrf = (Order_New_Location__c) results.get(ordloc.Id).mrf;
otf = (Order_New_Location__c) results.get(ordloc.Id).otf;
}
//Determine if Amounts have Changed
if (ordloc.Package_Monthly_Recurring_Fees__c != mrf ||
ordloc.Package_One_Time_Fees__c != otf) {
ordloc.Package_Monthly_Recurring_Fees__c = mrf;
ordloc.Package_One_Time_Fees__c = otf;
orderlocationsToUpdate.add(ordloc); //Add location to collection to be updated
}
}
if(orderlocationsToUpdate.isEmpty() == false) {
Database.SaveResult[] saveResults = Database.update(orderlocationsToUpdate, false);
System.debug(saveResults);
}
}
我只需更新一些方法就可以解决这个问题,请参见下文。再次感谢您的帮助罗伯特!
global class OrderLocationRollupSummary implements Database.Batchable<sObject>, Schedulable {
//Invocable Method
@InvocableMethod(label='Rollup All Order Packages to Locations')
global static void rollupAllorderpackages(List<Order_Location_Package__c> orderpackages) {
rollupOrderPackages(orderpackages);
}
//Batchable Methods
global Database.QueryLocator start(Database.BatchableContext bc) {
return Database.getQueryLocator([SELECT Id FROM Order_New_Location__c]);
}
global void execute(Database.BatchableContext context, List<sObject> batch){
Set<Id> OrderLocationIds = new Set<Id>();
for (sObject ordloc : batch) {
OrderLocationIds.add(ordloc.Id);
}
summarizeOrderPackages(OrderLocationIds);
}
global void finish(Database.BatchableContext context) {}
//Schedulable Methods
global void execute(SchedulableContext context){
OrderLocationRollupSummary batchJob = new OrderLocationRollupSummary();
Database.executeBatch(batchJob);
}
//Static Methods
public static void rollupOrderPackages(List<Order_Location_Package__c> orderpackages) {
Set<Id> OrderLocationIds = new Set<Id>();
//Get Order Location Ids from specified orderpackages
for (Order_Location_Package__c ordpckg : orderpackages) {
OrderLocationIds.add(ordpckg.New_Location_Name__c);
}
if (OrderLocationIds.isEmpty() == false) {
/*Execute as a future call so that the user doesn't have to wait around for
the rollup to finish. Unless, already in a future or batch call state then
just perform the rollup.*/
if (System.isFuture() == false && System.isBatch() == false) {
summarizeOrderPackagesAsync(OrderLocationIds);
}
else {
new OrderLocationRollupSummary().summarizeOrderPackages(OrderLocationIds);
}
}
}
@future
public static void summarizeOrderPackagesAsync(Set<Id> OrderLocationIds) {
new OrderLocationRollupSummary().summarizeOrderPackages(OrderLocationIds);
}
//Public Methods
public void summarizeOrderPackages(Set<Id> OrderLocationIds) {
//Get Order Locations to Update
List<Order_New_Location__c> orderlocations = queryOrderLocationsById(OrderLocationIds);
Map<Id, AggregateResult> results = getOrderPackagesAmountsByLocationId(OrderLocationIds);
//Loop Order Locations and set Amounts
List<Order_New_Location__c> orderlocationsToUpdate = new List<Order_New_Location__c>();
for (Order_New_Location__c ordloc : orderlocations) {
double mrf = 0;
double otf = 0;
if (results.containsKey(ordloc.Id)) {
AggregateResult ar = results.get(ordloc.Id);
mrf = (double)ar.get('MRFees');
otf = (double)ar.get('OTFees');
}
//Determine if Amounts have Changed
if (ordloc.Package_Monthly_Recurring_Fees__c != mrf ||
ordloc.Package_One_Time_Fees__c != otf) {
ordloc.Package_Monthly_Recurring_Fees__c = mrf;
ordloc.Package_One_Time_Fees__c = otf;
orderlocationsToUpdate.add(ordloc); //Add location to collection to be updated
}
}
if(orderlocationsToUpdate.isEmpty() == false) {
Database.SaveResult[] saveResults = Database.update(orderlocationsToUpdate, false);
System.debug(saveResults);
}
}
//Private Methods
public Map<Id, AggregateResult> getOrderPackagesAmountsByLocationId(Set<Id> OrderLocationIds) {
Map<id,AggregateResult> resultsByOrderLocationId= new Map<Id,AggregateResult>();
//Summarize Order Package Amounts by Order Location Id
AggregateResult[] results = aggregateOrderPackageAmounts(OrderLocationIds);
for (AggregateResult result : results) {
Id orderlocationId = (Id) result.get('OrderLocation');
resultsByOrderLocationId.put(orderlocationId, result );
}
return resultsByOrderLocationId;
}
//Query Methods
private List<Order_New_Location__c> queryOrderLocationsById(Set<Id> OrderLocationIds) {
return [SELECT
Id
,Package_Monthly_Recurring_Fees__c
,Package_One_Time_Fees__c
FROM
Order_New_Location__c
WHERE
Id IN :OrderLocationIds];
}
private AggregateResult[] aggregateOrderPackageAmounts(Set<Id> OrderLocationIds) {
return [SELECT
New_Location_Name__c OrderLocation
,SUM(Monthly_Recurring_Fees__c) MRFees
,SUM(One_Time_Fees__c) OTFees
FROM
Order_Location_Package__c
WHERE
New_Location_Name__c IN :OrderLocationIds
GROUP BY
New_Location_Name__c];
}
}
我正在编写一个可调用方法批处理顶点 class 以将“订单包”对象上的多个货币字段汇总到其“订单位置”的父对象。我以为我已正确添加所有内容,但它似乎将“Package_Monthly_Recurring_Fees__c”和“Package_One_Time_Fees__c”更新为 Package_Monthly_Recurring_Fees__c 字段中的相同价格。有人可以帮我确定为什么它对两个字段使用相同的价格吗?非常感谢任何帮助!
global class OrderLocationRollupSummary implements Database.Batchable<sObject>, Schedulable {
//Invocable Method
@InvocableMethod(label='Rollup All Order Packages to Locations')
global static void rollupAllorderpackages(List<Order_Location_Package__c> orderpackages) {
rollupOrderPackages(orderpackages);
}
//Batchable Methods
global Database.QueryLocator start(Database.BatchableContext bc) {
return Database.getQueryLocator([SELECT Id FROM Order_New_Location__c]);
}
global void execute(Database.BatchableContext context, List<sObject> batch){
Set<Id> OrderLocationIds = new Set<Id>();
for (sObject ordloc : batch) {
OrderLocationIds.add(ordloc.Id);
}
summarizeOrderPackages(OrderLocationIds);
}
global void finish(Database.BatchableContext context) {}
//Schedulable Methods
global void execute(SchedulableContext context){
OrderLocationRollupSummary batchJob = new OrderLocationRollupSummary();
Database.executeBatch(batchJob);
}
//Static Methods
public static void rollupOrderPackages(List<Order_Location_Package__c> orderpackages) {
Set<Id> OrderLocationIds = new Set<Id>();
//Get Order Location Ids from specified orderpackages
for (Order_Location_Package__c ordpckg : orderpackages) {
OrderLocationIds.add(ordpckg.New_Location_Name__c);
}
if (OrderLocationIds.isEmpty() == false) {
/*Execute as a future call so that the user doesn't have to wait around for
the rollup to finish. Unless, already in a future or batch call state then
just perform the rollup.*/
if (System.isFuture() == false && System.isBatch() == false) {
summarizeOrderPackagesAsync(OrderLocationIds);
}
else {
new OrderLocationRollupSummary().summarizeOrderPackages(OrderLocationIds);
}
}
}
@future
public static void summarizeOrderPackagesAsync(Set<Id> OrderLocationIds) {
new OrderLocationRollupSummary().summarizeOrderPackages(OrderLocationIds);
}
//Public Methods
public void summarizeOrderPackages(Set<Id> OrderLocationIds) {
//Get Order Locations to Update
List<Order_New_Location__c> orderlocations = queryOrderLocationsById(OrderLocationIds);
Map<Id, double> results = getOrderPackagesAmountsByLocationId(OrderLocationIds);
//Loop Order Locations and set Amounts
List<Order_New_Location__c> orderlocationsToUpdate = new List<Order_New_Location__c>();
for (Order_New_Location__c ordloc : orderlocations) {
double mrf = 0;
double otf = 0;
if (results.containsKey(ordloc.Id)) {
mrf = results.get(ordloc.Id);
otf = results.get(ordloc.Id);
}
//Determine if Amounts have Changed
if (ordloc.Package_Monthly_Recurring_Fees__c != mrf ||
ordloc.Package_One_Time_Fees__c != otf) {
ordloc.Package_Monthly_Recurring_Fees__c = mrf;
ordloc.Package_One_Time_Fees__c = otf;
orderlocationsToUpdate.add(ordloc); //Add location to collection to be updated
}
}
if(orderlocationsToUpdate.isEmpty() == false) {
Database.SaveResult[] saveResults = Database.update(orderlocationsToUpdate, false);
System.debug(saveResults);
}
}
//Private Methods
public Map<Id, double> getOrderPackagesAmountsByLocationId(Set<Id> OrderLocationIds) {
Map<Id, double> resultsByOrderLocationId = new Map<Id, double>();
//Summarize Order Package Amounts by Order Location Id
AggregateResult[] results = aggregateOrderPackageAmounts(OrderLocationIds);
for (AggregateResult result : results) {
Id orderlocationId = (Id) result.get('OrderLocation');
double mrf = (double) result.get('MRFees');
double otf = (double) result.get('OTFees');
resultsByOrderLocationId.put(orderlocationId, mrf);
resultsByOrderLocationId.put(orderlocationId, otf);
}
return resultsByOrderLocationId;
}
//Query Methods
private List<Order_New_Location__c> queryOrderLocationsById(Set<Id> OrderLocationIds) {
return [SELECT
Id
,Package_Monthly_Recurring_Fees__c
,Package_One_Time_Fees__c
FROM
Order_New_Location__c
WHERE
Id IN :OrderLocationIds];
}
private AggregateResult[] aggregateOrderPackageAmounts(Set<Id> OrderLocationIds) {
return [SELECT
New_Location_Name__c OrderLocation
,SUM(Monthly_Recurring_Fees__c) MRFees
,SUM(One_Time_Fees__c) OTFees
FROM
Order_Location_Package__c
WHERE
New_Location_Name__c IN :OrderLocationIds
GROUP BY
New_Location_Name__c];
}
}
在您的 summarizeOrderPackages 方法中,以下代码将 'mrf' 和 'oft' 变量设置为相同的值。
if (results.containsKey(ordloc.Id)) {
mrf = results.get(ordloc.Id);
otf = results.get(ordloc.Id);
}
之后,您将相关字段设置为 mrf 和 otf 变量(具有相同的值)。
//Determine if Amounts have Changed
if (ordloc.Package_Monthly_Recurring_Fees__c != mrf ||
ordloc.Package_One_Time_Fees__c != otf) {
ordloc.Package_Monthly_Recurring_Fees__c = mrf;
ordloc.Package_One_Time_Fees__c = otf;
orderlocationsToUpdate.add(ordloc); //Add location to collection to be updated
}
考虑在您的 OrderLocationRollupSummary class 中添加包装器和内部 class 来解决此问题:
public class Order_New_Location_Wrapper {
Id orderlocationId = {get;set;}
Double mrf = {get;set;}
Double otf = {get;set;}
public class Order_New_Location_Wrapper (Id arg1, Double arg2, Double arg3)
orderlocationId = arg1;
mrf = arg2;
otf = arg3;
}
然后在您的 getOrderPackagesAmountsByLocationId 方法中调用这个新的内部 class:
public Map<Id, Order_New_Location_Wrapper> getOrderPackagesAmountsByLocationId(Set<Id> OrderLocationIds) {
//create a list of orderlocations to represent the collection objects coming from the wrapper
resultsByOrderLocationId = new Map<Id, Order_New_Location_Wrapper>();
//Summarize Order Package Amounts by Order Location Id
AggregateResult[] results = aggregateOrderPackageAmounts(OrderLocationIds);
for (AggregateResult result : results) {
Id orderlocationId = (Id) result.get('OrderLocation');
double mrf = (double) result.get('MRFees');
double otf = (double) result.get('OTFees');
resultsByOrderLocationId.add(orderlocationId, new OpportunityWrapper(orderlocationId, mrg, otf));
}
return resultsByOrderLocationId;
}
您还需要将 summarizeOrderPackages 方法更新为如下所示:
public void summarizeOrderPackages(Set<Id> OrderLocationIds) {
//Get Order Locations to Update
List<Order_New_Location__c> orderlocations = queryOrderLocationsById(OrderLocationIds);
Map<Id, Order_New_Location_Wrapper> results = getOrderPackagesAmountsByLocationId(OrderLocationIds);
//Loop Order Locations and set Amounts
List<Order_New_Location__c> orderlocationsToUpdate = new List<Order_New_Location__c>();
for (Order_New_Location__c ordloc : orderlocations) {
double mrf = 0;
double otf = 0;
if (results.containsKey(ordloc.Id)) {
mrf = (Order_New_Location__c) results.get(ordloc.Id).mrf;
otf = (Order_New_Location__c) results.get(ordloc.Id).otf;
}
//Determine if Amounts have Changed
if (ordloc.Package_Monthly_Recurring_Fees__c != mrf ||
ordloc.Package_One_Time_Fees__c != otf) {
ordloc.Package_Monthly_Recurring_Fees__c = mrf;
ordloc.Package_One_Time_Fees__c = otf;
orderlocationsToUpdate.add(ordloc); //Add location to collection to be updated
}
}
if(orderlocationsToUpdate.isEmpty() == false) {
Database.SaveResult[] saveResults = Database.update(orderlocationsToUpdate, false);
System.debug(saveResults);
}
}
我只需更新一些方法就可以解决这个问题,请参见下文。再次感谢您的帮助罗伯特!
global class OrderLocationRollupSummary implements Database.Batchable<sObject>, Schedulable {
//Invocable Method
@InvocableMethod(label='Rollup All Order Packages to Locations')
global static void rollupAllorderpackages(List<Order_Location_Package__c> orderpackages) {
rollupOrderPackages(orderpackages);
}
//Batchable Methods
global Database.QueryLocator start(Database.BatchableContext bc) {
return Database.getQueryLocator([SELECT Id FROM Order_New_Location__c]);
}
global void execute(Database.BatchableContext context, List<sObject> batch){
Set<Id> OrderLocationIds = new Set<Id>();
for (sObject ordloc : batch) {
OrderLocationIds.add(ordloc.Id);
}
summarizeOrderPackages(OrderLocationIds);
}
global void finish(Database.BatchableContext context) {}
//Schedulable Methods
global void execute(SchedulableContext context){
OrderLocationRollupSummary batchJob = new OrderLocationRollupSummary();
Database.executeBatch(batchJob);
}
//Static Methods
public static void rollupOrderPackages(List<Order_Location_Package__c> orderpackages) {
Set<Id> OrderLocationIds = new Set<Id>();
//Get Order Location Ids from specified orderpackages
for (Order_Location_Package__c ordpckg : orderpackages) {
OrderLocationIds.add(ordpckg.New_Location_Name__c);
}
if (OrderLocationIds.isEmpty() == false) {
/*Execute as a future call so that the user doesn't have to wait around for
the rollup to finish. Unless, already in a future or batch call state then
just perform the rollup.*/
if (System.isFuture() == false && System.isBatch() == false) {
summarizeOrderPackagesAsync(OrderLocationIds);
}
else {
new OrderLocationRollupSummary().summarizeOrderPackages(OrderLocationIds);
}
}
}
@future
public static void summarizeOrderPackagesAsync(Set<Id> OrderLocationIds) {
new OrderLocationRollupSummary().summarizeOrderPackages(OrderLocationIds);
}
//Public Methods
public void summarizeOrderPackages(Set<Id> OrderLocationIds) {
//Get Order Locations to Update
List<Order_New_Location__c> orderlocations = queryOrderLocationsById(OrderLocationIds);
Map<Id, AggregateResult> results = getOrderPackagesAmountsByLocationId(OrderLocationIds);
//Loop Order Locations and set Amounts
List<Order_New_Location__c> orderlocationsToUpdate = new List<Order_New_Location__c>();
for (Order_New_Location__c ordloc : orderlocations) {
double mrf = 0;
double otf = 0;
if (results.containsKey(ordloc.Id)) {
AggregateResult ar = results.get(ordloc.Id);
mrf = (double)ar.get('MRFees');
otf = (double)ar.get('OTFees');
}
//Determine if Amounts have Changed
if (ordloc.Package_Monthly_Recurring_Fees__c != mrf ||
ordloc.Package_One_Time_Fees__c != otf) {
ordloc.Package_Monthly_Recurring_Fees__c = mrf;
ordloc.Package_One_Time_Fees__c = otf;
orderlocationsToUpdate.add(ordloc); //Add location to collection to be updated
}
}
if(orderlocationsToUpdate.isEmpty() == false) {
Database.SaveResult[] saveResults = Database.update(orderlocationsToUpdate, false);
System.debug(saveResults);
}
}
//Private Methods
public Map<Id, AggregateResult> getOrderPackagesAmountsByLocationId(Set<Id> OrderLocationIds) {
Map<id,AggregateResult> resultsByOrderLocationId= new Map<Id,AggregateResult>();
//Summarize Order Package Amounts by Order Location Id
AggregateResult[] results = aggregateOrderPackageAmounts(OrderLocationIds);
for (AggregateResult result : results) {
Id orderlocationId = (Id) result.get('OrderLocation');
resultsByOrderLocationId.put(orderlocationId, result );
}
return resultsByOrderLocationId;
}
//Query Methods
private List<Order_New_Location__c> queryOrderLocationsById(Set<Id> OrderLocationIds) {
return [SELECT
Id
,Package_Monthly_Recurring_Fees__c
,Package_One_Time_Fees__c
FROM
Order_New_Location__c
WHERE
Id IN :OrderLocationIds];
}
private AggregateResult[] aggregateOrderPackageAmounts(Set<Id> OrderLocationIds) {
return [SELECT
New_Location_Name__c OrderLocation
,SUM(Monthly_Recurring_Fees__c) MRFees
,SUM(One_Time_Fees__c) OTFees
FROM
Order_Location_Package__c
WHERE
New_Location_Name__c IN :OrderLocationIds
GROUP BY
New_Location_Name__c];
}
}