映射以避免重复记录

时间:2017-03-09 05:31:28

标签: triggers salesforce

  

我有一个Holiday Custom对象,它包含基于的唯一日期   基于国家/地区如何检索地图中的值

我试过了:

 List<Holiday__c> holidays = new List<Holiday__c>([Select id, Date__c,Country__c from Holiday__c]);

    Map<date, Holiday__c> mapOfHolidays = new Map<date, Holiday__c>(); 
    for (Holiday__c holiday: holidays)  mapOfHolidays.put(holiday.Date__c , holiday); 

假设例如3/8/17的日期适用于国家法国和意大利,如果我将键值作为Date__c,则Map不包含Key作为重复项,但是对于每个国家/地区唯一的日期是

所以我必须在地图中使用Key和Value,我想使用Map检索日期,请任何人帮我解答

trigger ignoreweekends on order (before insert,before update) {

    Set<id> accountIds = new Set<Id>();
    for (order ord : Trigger.new) {
        accountids.add(ord.AccountId);
    }

    map<id, account> mapOfAccounts = new map<id, account>([select id,JDE_Date_Delivery_Offset__c from account where id IN: accountIds]);

    List<Holiday__c> holidays = new List<Holiday__c>([Select id, Date__c from Holiday__c]);

    Map<date, Holiday__c> mapOfHolidays = new Map<date, Holiday__c>(); 
    for (Holiday__c holiday: holidays)  mapOfHolidays.put(holiday.Date__c , holiday); 

    for (order so : Trigger.new) {
        Account acc = mapOfAccounts.get(so.AccountId); 
        for(integer i=0;i<=acc.JDE_Date_Delivery_Offset__c;i++) {
            Datetime dt = DateTime.newInstance(Date.today() +acc.JDE_Date_Delivery_Offset__c.longvalue(), Time.newInstance(0, 0, 0, 0));
            String dayOfWeek=dt.format('EEEE');

            if(dayOfWeek == 'saturday' || dayOfWeek == 'sunday'|| mapOfHolidays.containskey(mapOfHolidays.Date__c))  

            acc.JDE_Date_Delivery_Offset__c = acc.JDE_Date_Delivery_Offset__c+ 1;

            so.JDE_Synchronization_Date__c = Date.today().addDays(acc.JDE_Date_Delivery_Offset__c.intValue());
        }
    }
}

1 个答案:

答案 0 :(得分:1)

如果我理解正确,对于一个独特的日期,您有多个国家/地区。 为此,您可以创建Date作为键和List作为值的映射,而不是创建Date of Map和Holiday_c。 例如:

Map<Date, List<Holiday__c>> mapofHolidays = new HashMap<Date, List<Holiday__c>>();

之后,您可以检索所有国家/地区的唯一日期并执行所需的处理。