| /** | 
|  * キャンペーンのトリガーです。 | 
|  */ | 
| trigger CampaignTriggerBefIns on Campaign (before insert, before update,after insert, after update) { | 
|     //可以多次执行trigger,触发多次 thh 2021-11-12 start | 
|     // 服务技师 2018/12/24  Start | 
|     CampaignTriggerBefInsHandler handler = new CampaignTriggerBefInsHandler(); | 
|     handler.run(); | 
|     //可以多次执行trigger,触发多次 thh 2021-11-12 end | 
|     // 服务技师 2018/12/24  end | 
|     //CHAN-BC69RE start 减少检索 | 
|     // キャンペーン:内部トレーニングのレコードタイプを取得 | 
|     ID campaignRC = Schema.SObjectType.Campaign.getRecordTypeInfosByDeveloperName().get('Internal_training').getRecordTypeId(); | 
|      | 
|     // キャンペーンメンバー:内部向けのレコードタイプを取得FV | 
|     id campaignMemberRC = | 
|     Schema.SObjectType.CampaignMember.getRecordTypeInfosByDeveloperName().get('Internal_training_participants').getRecordTypeId(); | 
|     // キャンペーンメンバー:外部向けのレコードタイプを取得 | 
|     id campaignMemberOuterRC = | 
|     Schema.SObjectType.CampaignMember.getRecordTypeInfosByDeveloperName().get('Workshop').getRecordTypeId(); | 
|     //CHAN-BC69RE end 减少检索 | 
|     //SWAG-BSZ3VQ 【委托】学会导致取消申请单报错 精琢技术 wql 2020/08/31 start | 
|     //设置只进一次trigger | 
|     if(!StaticParameter.EscapeCampain){ | 
|   | 
|     List<Id> userIdList = new List<Id>(); | 
|     if (Trigger.isBefore | 
|      // CHAN-BAN5BS 2019/03/27 start | 
|      //&& Trigger.isInsert | 
|      // CHAN-BAN5BS 2019/03/27 end | 
|      ) { | 
|         for ( Campaign target : Trigger.New) { | 
|             userIdList.add(target.OwnerId); | 
|         } | 
|     } | 
|     Map<Id, User> userMap = new Map<Id, User>(); | 
|     List<user> OwnerList = New List<user>(); | 
|     // 服务技师 2018/12/24  Start | 
|     OwnerList = [SELECT Id, SalesManager__c, BuchangApprovalManagerSales__c, | 
|                  JingliApprovalManager__c, BuchangApprovalManager__c, ZongjianApprovalManager__c, | 
|                  OCM_man_province__c, Province__c | 
|                  FROM user WHERE id = :userIdList]; | 
|     // 服务技师 2018/12/24  end | 
|     for (User u : OwnerList) { | 
|         userMap.put(u.Id, u); | 
|     } | 
|     // キャンペーンのレコードタイプに応じて、キャンペーンメンバーの | 
|     // レコードタイプを自動的に決定します。 | 
|     list<ID> TargetOwnerId = new list<ID>(); | 
|   | 
|     if (Trigger.isBefore && Trigger.isInsert) { | 
|   | 
|         for ( Campaign target : Trigger.New) { | 
|             target.LoadNum__c=''; //2020-10-23 zh 计划出借备品信息清空 | 
|             if (String.isNotBlank(target.OwnerId)) { | 
|                 TargetOwnerId.add(target.OwnerId); | 
|             } | 
|             if ( target.RecordTypeId == CampaignRC) { | 
|                 // 内部トレーニングだった | 
|                 target.CampaignMemberRecordTypeId = campaignMemberRC; | 
|             } else { | 
|                 // 外部向けだった | 
|                 target.CampaignMemberRecordTypeId = campaignMemberOuterRC; | 
|             } | 
|             // 经理、部长、总监审批 | 
|             /** | 
|              * 服务技师 2018/12/24  Start | 
|              * 1、分别设置审批的经理、部长、总监是谁 | 
|              * 2、设置服务技师的服务企划部窗口是谁 | 
|              * 3、对应所在省为非直辖市的城市进行一一对应 | 
|              */ | 
|             if (target.RecordTypeid != (ID) system.label.RecordType_CampaignService ) { | 
|                 target.JingliApprovalManager__c = userMap.get(target.OwnerId).SalesManager__c; | 
|                 target.BuchangApprovalManager__c = userMap.get(target.OwnerId).BuchangApprovalManagerSales__c; | 
|                 target.ZongjianApprovalManager__c = userMap.get(target.OwnerId).ZongjianApprovalManager__c; | 
|             } else { | 
|                 target.JingliApprovalManager__c = userMap.get(target.OwnerId).JingliApprovalManager__c == null ? target.OwnerId :  userMap.get(target.OwnerId).JingliApprovalManager__c; | 
|                 target.BuchangApprovalManager__c = userMap.get(target.OwnerId).BuchangApprovalManager__c == null ? target.OwnerId :  userMap.get(target.OwnerId).BuchangApprovalManager__c; | 
|                 target.ZongjianApprovalManager__c = userMap.get(target.OwnerId).ZongjianApprovalManager__c == null ? target.OwnerId :  userMap.get(target.OwnerId).ZongjianApprovalManager__c; | 
|   | 
|                 if (target.Salesdepartment__c != null && target.Salesdepartment__c.equals('1.华北')) { | 
|                     target.ServiceDesignDep__c = System.Label.ServiceDesignDep_NC; | 
|                 } | 
|                 if (target.Salesdepartment__c != null && target.Salesdepartment__c.equals('2.东北')) { | 
|                     target.ServiceDesignDep__c = System.Label.ServiceDesignDep_NE; | 
|                 } | 
|                 if (target.Salesdepartment__c != null && target.Salesdepartment__c.equals('3.西北')) { | 
|                     target.ServiceDesignDep__c = System.Label.ServiceDesignDep_NW; | 
|                 } | 
|                 if (target.Salesdepartment__c != null && target.Salesdepartment__c.equals('4.西南')) { | 
|                     target.ServiceDesignDep__c = System.Label.ServiceDesignDep_SW; | 
|                 } | 
|                 if (target.Salesdepartment__c != null && target.Salesdepartment__c.equals('5.华东')) { | 
|                     target.ServiceDesignDep__c = System.Label.ServiceDesignDep_EC; | 
|                 } | 
|                 if (target.Salesdepartment__c != null && target.Salesdepartment__c.equals('6.华南')) { | 
|                     target.ServiceDesignDep__c = System.Label.ServiceDesignDep_SC; | 
|                 } else { | 
|                     target.ServiceDesignDep__c = System.Label.ServiceDesignDep_NC; | 
|                 } | 
|                 target.Society_Type__c = '区域'; | 
|                 target.Open_scope__c = userMap.get(target.OwnerId).Province__c; | 
|                 switch on userMap.get(target.OwnerId).Province__c { | 
|                     when '深圳市' { | 
|                         target.Open_scope__c = '广东省'; | 
|                     } | 
|                     when '大连市' { | 
|                         target.Open_scope__c = '辽宁省'; | 
|                     } | 
|                     when '青岛市' { | 
|                         target.Open_scope__c = '山东省'; | 
|                     } | 
|                     when '海南省' { | 
|                         target.Open_scope__c = '广东省'; | 
|                     } | 
|                     when '西藏自治区' { | 
|                         target.Open_scope__c = '四川省'; | 
|                     } | 
|                 } | 
|             } | 
|   | 
|             // 服务技师 2018/12/24  end | 
|         } | 
|   | 
|     } | 
|   | 
|     if (Trigger.isBefore && Trigger.isUpdate) { | 
|         List<String> CampaignId = new List<String>(); | 
|         for ( Campaign campaign : Trigger.New) { | 
|             //判断状态变更时,才走更新的逻辑 SWAG-BSZ3VQ 【委托】学会导致取消申请单报错 精琢技术 wql start | 
|             //服务企划部窗口 只有新建的时候会设置 根据会议的8个审批流进行判断· | 
|             Campaign oldC = Trigger.oldMap.get(campaign.Id); | 
|             if(oldC.Status != Campaign.Status || Campaign.Status== '草案中' | 
|              ||Campaign.Status== '计划提交' ||Campaign.Status=='报告提交' || Campaign.Status=='取消申请中' | 
|              ||Campaign.Status=='时间修改申请中'||oldC.CostStatus__c != Campaign.CostStatus__c | 
|              ||Campaign.CostStatus__c=='费用已提交'){ | 
|                 // CHAN-BAN5BS 2019/03/27 start | 
|                 if (campaign.RecordTypeid != (ID) system.label.RecordType_CampaignService ) { | 
|                     campaign.JingliApprovalManager__c = userMap.get(campaign.OwnerId).SalesManager__c; | 
|                     campaign.BuchangApprovalManager__c = userMap.get(campaign.OwnerId).BuchangApprovalManagerSales__c; | 
|                     campaign.ZongjianApprovalManager__c = userMap.get(campaign.OwnerId).ZongjianApprovalManager__c; | 
|                 }else { | 
|                     campaign.JingliApprovalManager__c = userMap.get(campaign.OwnerId).JingliApprovalManager__c == null ? campaign.OwnerId :  userMap.get(campaign.OwnerId).JingliApprovalManager__c; | 
|                     campaign.BuchangApprovalManager__c = userMap.get(campaign.OwnerId).BuchangApprovalManager__c == null ? campaign.OwnerId :  userMap.get(campaign.OwnerId).BuchangApprovalManager__c; | 
|                     campaign.ZongjianApprovalManager__c = userMap.get(campaign.OwnerId).ZongjianApprovalManager__c == null ? campaign.OwnerId :  userMap.get(campaign.OwnerId).ZongjianApprovalManager__c; | 
|                 } | 
|                 // CHAN-BAN5BS 2019/03/27 end | 
|   | 
|                 //SWAG-B3U63C 2018/8/21 更新 OCM管理省的备品助理(提醒借用备品用) start | 
|                 if (String.isNotBlank(campaign.OwnerId)) { | 
|                     TargetOwnerId.add(campaign.OwnerId); | 
|                 } | 
|                 //SWAG-B3U63C 2018/8/21 更新 OCM管理省的备品助理(提醒借用备品用) end | 
|   | 
|                 Campaign old = Trigger.oldMap.get(campaign.Id); | 
|                 if (campaign.Status != old.Status && campaign.Status == '取消申请中') { | 
|                     CampaignId.add(campaign.Id); | 
|                 } | 
|             } | 
|             //判断状态变更时,才走更新的逻辑 SWAG-BSZ3VQ 【委托】学会导致取消申请单报错 精琢技术 wql end | 
|         } | 
|         //wwp   减少SQL的使用                2021/08/26      start | 
|         if(CampaignId != null && CampaignId.size() > 0){ | 
|             String userId = UserInfo.getUserId(); | 
|             List<user> Useracc = New List<user>(); | 
|             Useracc = [SELECT Id, ZongjianApprovalManager__c, BuchangApprovalManager__c FROM user WHERE id = :userId]; | 
|             if(Useracc.size() > 0){ | 
|                 for(String cId : CampaignId){ | 
|                     Trigger.newMap.get(cId).ZongjianApprovalManager_CancleShen__c = Useracc[0].ZongjianApprovalManager__c; | 
|                     Trigger.newMap.get(cId).BuchangApprovalManager_CancleShen__c = Useracc[0].BuchangApprovalManager__c; | 
|                 } | 
|             } | 
|         } | 
|         //wwp   减少SQL的使用                2021/08/26      end | 
|     } | 
|   | 
|     if (TargetOwnerId.size() > 0 ) { | 
|         //SWAG-B3U63C 2018/8/21 更新 OCM管理省的备品助理(提醒借用备品用) start | 
|   | 
|         list<User> users = [select id, OCM_man_province_Rental__c | 
|                             //OBPM 增加展示平台窗口LY 20211224 start | 
|                             ,OCM_man_province__c | 
|                             //OBPM 增加展示平台窗口LY 20211224 end | 
|                             from User where id in :TargetOwnerId]; | 
|         //list<string> OCM_man_province_RentalName = new list<string>(); | 
|         //OBPM 增加展示平台窗口LY 20211224 start | 
|         Map<ID, User> userProvinceMap = new Map<ID, User>(); | 
|         //OBPM 增加展示平台窗口LY 20211224 end | 
|         if (users.size() > 0) { | 
|             for (User temUser : users ) { | 
|                 //OCM_man_province_RentalName.add(temUser.OCM_man_province_Rental__c); | 
|                 //OBPM 增加展示平台窗口LY 20211224 start | 
|                 userProvinceMap.put(temUser.Id,temUser); | 
|                 //OBPM 增加展示平台窗口LY 20211224 end | 
|             } | 
|         } | 
|          | 
|         // Map<string, ID> OCM_Management_ProvinceMap = new Map<string, ID>(); | 
|         //OBPM 增加展示平台窗口LY 20211224 start | 
|         Map<string, OCM_Management_Province__c> ocsmMap = new Map<string, OCM_Management_Province__c>(); | 
|         List<OCM_Management_Province__c> temOCMList =[select ID, Name, Admin_assistant__c, | 
|                     OnlinePlatformWindow1__c, | 
|                     OnlinePlatformWindow2__c, | 
|                     OnlinePlatformWindow3__c | 
|                     from OCM_Management_Province__c];      | 
|         //OBPM 增加展示平台窗口LY 20211224 end | 
|         // if (users.size() > 0) { | 
|         //     for (OCM_Management_Province__c temOCMMP : [select ID, Name, Admin_assistant__c | 
|         //             from OCM_Management_Province__c | 
|         //             where Name in: OCM_man_province_RentalName]) { | 
|         //         OCM_Management_ProvinceMap.put(temOCMMP.Name, temOCMMP.Admin_assistant__c); | 
|         //     } | 
|         // } | 
|         if (temOCMList.size()>0) { | 
|             for (OCM_Management_Province__c ocmTemp :temOCMList) { | 
|                 ocsmMap.put(ocmTemp.Name, ocmTemp); | 
|             } | 
|         } | 
|         // map<ID, ID> UserToAdmin_assistantMap = new map<ID, ID>(); | 
|         // for (User temUser : users ) { | 
|         //     UserToAdmin_assistantMap.put(temUser.id, OCM_Management_ProvinceMap.get(temUser.OCM_man_province_Rental__c)); | 
|   | 
|         // } | 
|         for ( Campaign target : Trigger.New) { | 
|             // ID Admin_assistantID = UserToAdmin_assistantMap.get(target.OwnerId); | 
|             // target.OCM_MP_Admin_assistant__c = Admin_assistantID; | 
|             target.OCM_MP_Admin_assistant__c = userProvinceMap.get(target.OwnerId) != null && ocsmMap.get(userProvinceMap.get(target.OwnerId).OCM_man_province_Rental__c) != null ? ocsmMap.get(userProvinceMap.get(target.OwnerId).OCM_man_province_Rental__c).Admin_assistant__c : null; | 
|             target.OnlinePlatformWindow1__c = userProvinceMap.get(target.OwnerId) != null && ocsmMap.get(userProvinceMap.get(target.OwnerId).OCM_man_province__c) != null ? ocsmMap.get(userProvinceMap.get(target.OwnerId).OCM_man_province__c).OnlinePlatformWindow1__c : null; | 
|             target.OnlinePlatformWindow2__c = userProvinceMap.get(target.OwnerId) != null && ocsmMap.get(userProvinceMap.get(target.OwnerId).OCM_man_province__c) != null ? ocsmMap.get(userProvinceMap.get(target.OwnerId).OCM_man_province__c).OnlinePlatformWindow2__c : null; | 
|             target.OnlinePlatformWindow3__c = userProvinceMap.get(target.OwnerId) != null && ocsmMap.get(userProvinceMap.get(target.OwnerId).OCM_man_province__c) != null ? ocsmMap.get(userProvinceMap.get(target.OwnerId).OCM_man_province__c).OnlinePlatformWindow3__c : null; | 
|         } | 
|   | 
|         //SWAG-B3U63C 2018/8/21 更新 OCM管理省的备品助理(提醒借用备品用) end | 
|     } | 
|      | 
|         //设置跳过学会·培训trigger | 
|         StaticParameter.EscapeCampain =true; | 
|         //SWAG-BSZ3VQ 【委托】学会导致取消申请单报错 精琢技术 wql 2020/08/31 end | 
|     } | 
|     //SWAG-BSW9CP 【委托】紧急-南方分割申请单出现报错 精琢技术wql 2020/08/28 end | 
|   | 
|     //LJPH-BSMB3M <委托>新疆领导无法审批当地OJT报告 精琢技术 wql 2020/08/19  start | 
|     if(!StaticParameter.shareToOSCMFlag){ | 
|             if ((Trigger.isAfter && Trigger.isUpdate) ||(Trigger.isAfter && Trigger.isInsert)  ) { | 
|                 //共享 | 
|                 shareToOSCM(); | 
|                 StaticParameter.shareToOSCMFlag =true; | 
|         } | 
|     } | 
|      | 
|   | 
|      // 共享给经理 を取得、CampaignShareに設定(Read) | 
|     private void shareToOSCM() {  | 
|          | 
|         //存放(学会id,共享对象) | 
|         //Map<Id,CampaignShare> insertMap = new Map<Id,CampaignShare>(); | 
|         Map<Id,List<CampaignShare>> insertMap = new Map<Id,List<CampaignShare>>(); | 
|         //存放最后需要新增的共享数据 | 
|         List<CampaignShare> lastInsertList = new List<CampaignShare>(); | 
|         //存放已有的相同的共享原因的数据 | 
|         List<Id> deleteTargetAOIdList = new List<Id>(); | 
|         //存放用于的id | 
|         List<Id> userIdList = new List<Id>(); | 
|         String rowCause = 'Manual'; | 
|         //新增一个共享原因 | 
|         // String rowCause = Schema.CampaignShare.RowCause.shareToUser__c; | 
|         System.debug('rowCause:'+rowCause); | 
|         String ownerCause = 'Owner'; | 
|         //Apex共有の理由名shareToUser | 
|         for(Campaign nObj : Trigger.new) { | 
|             System.debug('经理:'+nObj.JingliApprovalManager__c); | 
|             //存放用于新增的共享数据 | 
|             List<CampaignShare> insertList = new List<CampaignShare>(); | 
|             if(nObj.JingliApprovalManager__c != null){ | 
|   | 
|                 //SFDC-C54AWQ  【委托】 【phase5上线课题65】-紧急-审批备品申请时提示“保存记录时发生验证错误”  wql 2021/07/20 start | 
|                 //用户是否启用 | 
|                 CampaignShare aos = null; | 
|                 CampaignShare aos1 = null; | 
|                 if(nObj.JingliIsActive__c ==true){ | 
|                     //存放经理 | 
|                     aos = new CampaignShare( | 
|                         RowCause = rowCause, | 
|                         CampaignId = nObj.Id, | 
|                         UserOrGroupId = nObj.JingliApprovalManager__c, | 
|                         CampaignAccessLevel = 'Edit'); | 
|                     //存放要新增的共享数据 | 
|                     insertList.add(aos); | 
|                 } | 
|                 //用户是否启用 | 
|                 if(nObj.BuZhangIsActive__c==true){ | 
|                     //存放部长 | 
|                     aos1 = new CampaignShare( | 
|                         RowCause = rowCause, | 
|                         CampaignId = nObj.Id, | 
|                         UserOrGroupId = nObj.BuchangApprovalManager__c, | 
|                         CampaignAccessLevel = 'Edit'); | 
|                     //如果经理部长不相等 则需要共享部长 否则共享给一个人就行了 | 
|                     if(nObj.Is_JingliEqualBuzhang__c ==false){ | 
|                         insertList.add(aos1); | 
|                         userIdList.add(nObj.BuchangApprovalManager__c); | 
|                     } | 
|                 } | 
|                 //SFDC-C54AWQ  【委托】 【phase5上线课题65】-紧急-审批备品申请时提示“保存记录时发生验证错误”  wql 2021/07/20 end | 
|                 System.debug('key:'+nObj.Id); | 
|                 //存放(学会id,共享对象); | 
|                 //insertMap.put(nObj.Id,aos); | 
|                 System.debug('insertList:'+insertList); | 
|                 insertMap.put(nObj.Id,insertList); | 
|                  | 
|                 //存放已有的相同的共享原因的数据 | 
|                 deleteTargetAOIdList.add(nObj.Id); | 
|                 //存放用于的id | 
|                 userIdList.add(nObj.JingliApprovalManager__c); | 
|             } | 
|          }    | 
|          System.debug('insertMap:'+insertMap);   | 
|         if(deleteTargetAOIdList.size()>0){ | 
|             List<CampaignShare> deleteList = [SELECT Id FROM CampaignShare WHERE RowCause = :rowCause AND CampaignId IN :deleteTargetAOIdList]; | 
|             // 先 Delete 后 Insert | 
|             if(deleteList.size() > 0){ | 
|                 delete deleteList; | 
|             } | 
|         } | 
|          | 
|   | 
|         //判断需要共享的人  是不是创建人 如果是则说明有一条这个人的owner数据 则不新增 | 
|         if (insertMap!= null) { | 
|             List<CampaignShare> ownerList = [SELECT Id,CampaignId,UserOrGroupId | 
|                 FROM CampaignShare | 
|                 WHERE RowCause = :ownerCause | 
|                   AND CampaignId IN :insertMap.keySet() | 
|                   AND UserOrGroupId IN : userIdList | 
|             ]; | 
|             System.debug('ownerList:'+ownerList); | 
|             if(ownerList.size() > 0){ | 
|                 for( CampaignShare  inq:ownerList){ | 
|                     String id = String.valueOf(inq.CampaignId); | 
|                     System.debug('id:'+id); | 
|                     if(insertMap.containsKey(id)){ | 
|                         insertMap.remove(inq.CampaignId); | 
|                     } | 
|                 } | 
|             } | 
|              | 
|         } | 
|   | 
|         //如果map为空的话,则说明不用新增,已经共享给所有人了 | 
|         if(insertMap != null){ | 
|             for(List<CampaignShare> qscrsList:insertMap.values()){ | 
|                 for(CampaignShare qscrs : qscrsList){ | 
|                     lastInsertList.add(qscrs); | 
|                 } | 
|             } | 
|         } | 
|         System.debug('共享内容:' +lastInsertList); | 
|         if(lastInsertList.size() > 0){ | 
|             insert lastInsertList; | 
|         } | 
|   | 
|     } | 
|     //LJPH-BSMB3M <委托>新疆领导无法审批当地OJT报告 精琢技术 wql 2020/08/19  end | 
|      | 
| } |