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());
|
}
|
}
|