trigger TrainingTestResultTrigger on Training_test_Result__c (before insert, before update, after insert, after update, after delete) { 
 | 
    // 更新对象 Contact  
 | 
    Map<Id, SObject> updateContact = new Map<Id, SObject>(); 
 | 
    if (trigger.isBefore) { 
 | 
        Map<Id, Id> contactIdForUser = new Map<Id, Id>(); 
 | 
        for (Training_test_Result__c local : trigger.New) { 
 | 
            if (local.employee__c != null 
 | 
                    && (trigger.isInsert 
 | 
                        || trigger.oldMap.get(local.Id).employee__c != local.employee__c 
 | 
                    ) 
 | 
            ) { 
 | 
                contactIdForUser.put(local.employee__c, local.employee__c); 
 | 
            } 
 | 
        } 
 | 
        // OwnerIdの設定 
 | 
        if (contactIdForUser.size() > 0) { 
 | 
            Map<Id, Contact> contacMap = ControllerUtil.selectActiveUserFromContact(contactIdForUser.values()); 
 | 
            for (Training_test_Result__c local : trigger.New) { 
 | 
                if (local.employee__c != null 
 | 
                        && (trigger.isInsert 
 | 
                            || trigger.oldMap.get(local.Id).employee__c != local.employee__c 
 | 
                        ) 
 | 
                ) { 
 | 
                    Contact employee = contacMap.get(local.employee__c); 
 | 
                    if (employee == null) { 
 | 
                        // local.employee__c.addError('请选择有效的用户'); 
 | 
                        local.OwnerId = '00510000000fSYI'; // 无效用户时,设batch用户,本番和测试环境id一致 
 | 
                    } else { 
 | 
                        local.OwnerId = employee.User__c; 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
    else if (trigger.isAfter) { 
 | 
        if (trigger.isDelete) { 
 | 
            for (Training_test_Result__c old : trigger.old) { 
 | 
                if (old.RecordTypeId != null && old.employee__c != null) { 
 | 
                    if (!updateContact.containsKey(old.employee__c)) { 
 | 
                        SObject so = new Contact(Id = old.employee__c); 
 | 
                        updateContact.put(old.employee__c, so); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        } else { 
 | 
            for (Training_test_Result__c local : trigger.New) { 
 | 
                // 记录受到插入和更新影响的学会 
 | 
                if (local.RecordTypeId != null 
 | 
                        && (trigger.isInsert 
 | 
                            || trigger.oldMap.get(local.Id).RecordTypeId != local.RecordTypeId 
 | 
                            || trigger.oldMap.get(local.Id).employee__c != local.employee__c 
 | 
                        ) 
 | 
                ) { 
 | 
                    if (local.employee__c != null 
 | 
                            && !updateContact.containsKey(local.employee__c)) { 
 | 
                        SObject so = new Contact(Id = local.employee__c); 
 | 
                        updateContact.put(local.employee__c, so); 
 | 
                    } 
 | 
                    if (trigger.isUpdate && trigger.oldMap.get(local.Id).employee__c != null 
 | 
                            && !updateContact.containsKey(trigger.oldMap.get(local.Id).employee__c)) { 
 | 
                        SObject so = new Contact(Id = trigger.oldMap.get(local.Id).employee__c); 
 | 
                        updateContact.put(trigger.oldMap.get(local.Id).employee__c, so); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
     
 | 
    // 汇总社内培训考试结果件数 
 | 
    if (updateContact.size() > 0) { 
 | 
        Map<String, String> apiMap = new Map<String, String>(); 
 | 
        List<RecordType> rtList = ControllerUtil.recordTypeSelectForTrainingtestResult(); 
 | 
        for (RecordType rt : rtList) { 
 | 
            // 根据RecordType拼接字段 
 | 
            apiMap.put(rt.DeveloperName, 'Number_of_participant_for_' + rt.DeveloperName + '__c'); 
 | 
        } 
 | 
         
 | 
        for (SObject so : updateContact.values()) { 
 | 
            for (RecordType rt : rtList) { 
 | 
                so.put(apiMap.get(rt.DeveloperName), 0); 
 | 
            } 
 | 
        } 
 | 
         
 | 
        List<Training_test_Result__c> ttrList = ControllerUtil.trainingtestResultSelectByContactIds(updateContact.keySet()); 
 | 
        // 逐条汇总计算 
 | 
        for (Training_test_Result__c ttr : ttrList) { 
 | 
            SObject so = updateContact.get(ttr.employee__c); 
 | 
            Integer cnt = Integer.valueof(so.get(apiMap.get(ttr.RecordType.DeveloperName))) + 1; 
 | 
            so.put(apiMap.get(ttr.RecordType.DeveloperName), cnt); 
 | 
        } 
 | 
         
 | 
        ControllerUtil.updateSObjectContact(updateContact.values()); 
 | 
    } 
 | 
} 
 |