/** * 20220210 lt 更新产品上的“预留产品”标识 * 产品 有 有效预留产品 “预留产品”标识 true * 产品 没有 有效预留产品(无预留产品 或 预留产品 无效) “预留产品”标识 false * (1) 新建 有效预留产品 --true * (2) 更新 “是否有效” false 变为 true --true * (3) 更新 “产品” 后 --true * (4) 更新 “是否有效” true 变为 false 的产品下无有效预留产品 --false * (5) 更新 “产品” 前的产品 无预留产品 或 无有效预留产品 --false */ public without sharing class LastbuyProductHandler extends Oly_TriggerHandler { private Map newMap; private Map oldMap; private List newList; private List oldList; public LastbuyProductHandler() { this.newMap = (Map) Trigger.newMap; this.oldMap = (Map) Trigger.oldMap; this.newList = (List) Trigger.new; this.oldList = (List) Trigger.old; } protected override void beforeInsert(){ } protected override void afterInsert(){ ReservedPro(); } protected override void afterUpdate(){ ReservedPro(); } protected override void afterDelete(){ ReservedPro(); } private void ReservedPro(){ //1.新建或者更新产品后,若预留产品有效,“预留产品”标识为true if(trigger.isInsert || trigger.isUpdate){ //存产品的ID List pList = new List(); for(LastbuyProduct__c lbp : newList){ if(lbp.ProductName__c != null && lbp.effectiveFLG__c == true){ pList.add(lbp.ProductName__c); } } List proList = [select id, LastbuyProductFLG__c from Product2 where Id in :pList]; List pflgList = new List(); for(Product2 pro : proList){ if(pro.LastbuyProductFLG__c == false){ pro.LastbuyProductFLG__c = true; pflgList.add(pro); } } if(pflgList.size() > 0){ update pflgList; } } //2.(1)"是否有效" 变为 false 检索产品主数据下的所有预留产品,全无效则把产品主数据的"预留产品"标识 变为 false // (2)"产品" 预留产品 更改 产品主数据之前的产品 -- 检索产品主数据下的所有预留产品(没有/全无效) // "预留产品"标识 变为 false if(trigger.isUpdate || trigger.isDelete){ //"是否有效" 变为 "否" 时 所对应的产品主数据Id &&预留产品 更改 产品主数据之前的产品 List pfList = new List(); if(trigger.isUpdate){ for(LastbuyProduct__c lbp1 : newList){ LastbuyProduct__c oldLbp1 = oldMap.get(lbp1.Id); if(oldLbp1.effectiveFLG__c != lbp1.effectiveFLG__c){ if(lbp1.effectiveFLG__c == false){ pfList.add(lbp1.ProductName__c); } } //产品发生变化时,检索两个产品的标识 if(oldLbp1.ProductName__c != lbp1.ProductName__c){ pfList.add(oldLbp1.ProductName__c); } } } else if(trigger.isDelete){ for(LastbuyProduct__c lbp2 : oldList){ pfList.add(lbp2.ProductName__c); } } System.debug('lt123需检索所有预留产品的产品ID-pfList'+pfList); //检索产品下的所有预留产品,全无效将产品主数据下的标识置为false if(pfList.size() > 0){ //Map<产品Id,预留产品> Map lbpMap = new Map(); //发生变化的产品Id下的所有预留产品 List lbpList = [select id, effectiveFLG__c,ProductName__c from LastbuyProduct__c where ProductName__c in :pfList]; //p1List effectiveFLG__c为true 的产品Id List p1List = new List(); //p2List 这个产品所有的预留产品都无效 的产品Id List p2List = new List(); if(lbpList.size() > 0){ //产品有预留产品 检查预留产品的"是否有效" for(LastbuyProduct__c lbm : lbpList){ lbpMap.put(lbm.ProductName__c,lbm); if(lbm.effectiveFLG__c == true){ p1List.add(lbm.ProductName__c); } } if(p1List.size() > 0){ for(Id p1 : p1List){ if(!lbpMap.containsKey(p1)){ p2List.add(p1); } } }else{ for(LastbuyProduct__c lbm : lbpList){ p2List.add(lbm.ProductName__c); } } } else{ //产品 没有预留产品 标识false p2List = pfList; } List pro1List = [select Id, LastbuyProductFLG__c from Product2 where Id in :p2List]; List prflgList = new List(); for(Product2 pro1 : pro1List){ pro1.LastbuyProductFLG__c = false; prflgList.add(pro1); } if(prflgList.size() > 0){ update prflgList; } } } } }