| trigger SyncProduct2 on Product2 (after delete, after insert, after update) { | 
|     if (StaticParameter.EscapeSyncProduct2Trigger) { | 
| System.debug('Escape、EscapeSyncProduct2Trigger:::::' + StaticParameter.EscapeSyncProduct2Trigger); | 
|         return; | 
|     } | 
|     List<Product2> pr2s = new List<Product2>(); | 
|      | 
|     if (Trigger.isDelete) { | 
|         for (Product2 pr2 : Trigger.old) { | 
|             pr2s.add(pr2); | 
|         } | 
|     } else { | 
|         for (Product2 pr2 : Trigger.new) { | 
|             if (Trigger.isInsert | 
|                     || Trigger.isUpdate | 
|                             && (pr2.Name != Trigger.oldMap.get(pr2.Id).get('Name') | 
|                                     || pr2.Asset_Model_No__c != Trigger.oldMap.get(pr2.Id).get('Asset_Model_No__c') | 
|                                     || pr2.IsActive != Trigger.oldMap.get(pr2.Id).get('IsActive') | 
|                                     || pr2.SFDA_Status__c != Trigger.oldMap.get(pr2.Id).get('SFDA_Status__c'))) | 
|             pr2s.add(pr2); | 
|         } | 
|     } | 
|      | 
|     Map<String, Product2__c> pr2Map = new Map<String, Product2__c>(); | 
|     if (pr2s.size() > 0) { | 
|         List<Product2__c> pr2Cs = ControllerUtil.pr2SelectForSync(pr2s); | 
|         for (Product2__c pr2 : pr2Cs) { | 
|             pr2Map.put(pr2.Product2__c, pr2); | 
|         } | 
|     } | 
|      | 
|     List<Product2__c> insPr2 = new List<Product2__c>(); | 
|     List<Product2__c> updelPr2 = new List<Product2__c>(); | 
|     List<Product2__c> delPr2 = new List<Product2__c>(); | 
|     for (Product2 pr : pr2s) { | 
|         // 見付かったら更新/削除 | 
|         if (pr2Map.containsKey(pr.Id)) { | 
|             Product2__c pr2 = pr2Map.get(pr.Id); | 
|             // 「準備中」「新製品申請中」は対象外 | 
|             if (pr.IsActive | 
|                     && pr.SFDA_Status__c != '準備中' && pr.SFDA_Status__c != '新製品申請中') { | 
|                 pr2.Name = pr.Asset_Model_No__c != null ? pr.Asset_Model_No__c.mid(0, 80) : pr.Name.mid(0, 80); | 
|                 pr2.Name_Text__c = pr.Name; | 
|                 pr2.OT_CODE_Text__c = pr.ProductCode; | 
|                 pr2.CurrencyIsoCode = pr.CurrencyIsoCode; | 
|                 if (Trigger.isDelete) { | 
|                     pr2.DeleteFlag__c = true; | 
|                 } else { | 
|                     pr2.DeleteFlag__c = false; | 
|                 } | 
|                 updelPr2.add(pr2); | 
|             } else { | 
|                 pr2.DeleteFlag__c = true; | 
|                 delPr2.add(pr2); | 
|             } | 
|         // 新規 | 
|         } else { | 
|             if (pr.IsActive | 
|                     && pr.SFDA_Status__c != '準備中' && pr.SFDA_Status__c != '新製品申請中') { | 
|                 Product2__c pr2 = new Product2__c( | 
|                     Product2__c = pr.Id, | 
|                     Name = pr.Asset_Model_No__c != null ? pr.Asset_Model_No__c.mid(0, 80) : pr.Name.mid(0, 80), | 
|                     Name_Text__c = pr.Name, | 
|                     OT_CODE_Text__c = pr.ProductCode, | 
|                     CurrencyIsoCode = pr.CurrencyIsoCode | 
|                 ); | 
|                 insPr2.add(pr2); | 
|             } | 
|         } | 
|     } | 
|      | 
|     if (Trigger.isDelete) { | 
|         //ControllerUtil.delPr2List(updelPr2); | 
|         ControllerUtil.updelPr2List(updelPr2, null); | 
|     } | 
|     if (Trigger.isUpdate) { | 
|         ControllerUtil.updelPr2List(updelPr2, null); | 
|         ControllerUtil.updelPr2List(delPr2, null); | 
|     } | 
|     if (!Trigger.isDelete) ControllerUtil.insPr2List(insPr2); | 
|   | 
|     // HWAG-AWLAU6 2018/3/7 "是否多年保修"的值拷贝到"是否多年保修(文本)"中 | 
|     List<String> proId = new List<String>(); | 
|     List<String> conformChangeProId = new List<String>(); | 
|     if (Trigger.isInsert || Trigger.isUpdate) { | 
|         for (Product2 pro : Trigger.new) { | 
|             proId.add(pro.Id); | 
|             //XHL -----20190523----UpdateStart-- | 
|             if (Trigger.isInsert){ | 
|                 conformChangeProId.add(pro.Id); | 
|             } else if (Trigger.isUpdate && (pro.Extend_new_product_gurantee__c != Trigger.oldMap.get(pro.Id).Extend_new_product_gurantee__c ||  | 
|                         pro.Extend_Gurantee_Start__c != Trigger.oldMap.get(pro.Id).Extend_Gurantee_Start__c ||  | 
|                         pro.Extend_Gurantee_End__c != Trigger.oldMap.get(pro.Id).Extend_Gurantee_End__c)){ | 
|                 conformChangeProId.add(pro.Id);     | 
|             } | 
|             //XHL -----20190523----UpdateEnd | 
|              | 
|         } | 
|     } | 
|     if (conformChangeProId.size() > 0) { | 
|         //List<Asset> assList = [select id, IS_Extend_Gurantee__c,GuaranteeFlag__c ,IS_Extend_Gurantee_Txt__c, Extend_Gurantee_Txt_Manual__c from Asset where Product2Id IN : proId AND GuaranteeFlag__c = true]; | 
|         List<Asset> assList = [select id, IS_Extend_Gurantee__c,GuaranteeFlag__c , | 
|                                     IS_Extend_Gurantee_Txt__c, Extend_Gurantee_Txt_Manual__c, | 
|                                     Product2Id  | 
|                                 from Asset  | 
|                                 where Product2Id IN : conformChangeProId]; | 
|         if (assList != null && assList.size() > 0) { | 
|             List<Asset> updAsset = new List<Asset>(); | 
|             for(Asset ass : assList) { | 
|                 //XHL -------------20190118----UpdateStart----------在保有设备中创建GuaranteeFlag__c字段----20190523将其还原 | 
|                 if (ass.IS_Extend_Gurantee__c != ass.IS_Extend_Gurantee_Txt__c && ass.Extend_Gurantee_Txt_Manual__c == false) { | 
|                     ass.IS_Extend_Gurantee_Txt__c = ass.IS_Extend_Gurantee__c; | 
|                     updAsset.add(ass); | 
|                 } | 
|                 //XHL -------------20190118----UpdateEnd----------20190523将其还原 | 
|             } | 
|             if (updAsset.size() > 0) { | 
|                 update updAsset; | 
|             } | 
|         } | 
|     } | 
|   | 
|     // CHAN-AX9485 2018/3/27 关于产品配套有效无效的判断--产品变更时更新产品配套是否有效 | 
|     if (Trigger.isUpdate) { | 
|         List<Product_Set_Detail__c> psdList = [select Id, Effective_Product_detail__c, EffectiveNo_Product_detail__c, Total_price_RMB__c, | 
|                                             List_price_total_RMB_text__c from Product_Set_Detail__c where Product__c IN : proId]; | 
|         List<Product_Set_Detail__c> updPsdList = new List<Product_Set_Detail__c>(); | 
|         if (psdList != null && psdList.size() > 0) { | 
|             for(Product_Set_Detail__c psd : psdList) { | 
|                 if (psd.Effective_Product_detail__c != psd.EffectiveNo_Product_detail__c | 
|                     || psd.Total_price_RMB__c != psd.List_price_total_RMB_text__c) { | 
|                     updPsdList.add(psd); | 
|                 } | 
|             } | 
|         } | 
|         if (updPsdList.size() > 0) { | 
|             update updPsdList; | 
|         } | 
|     } | 
| } |