| trigger ProDocMidTblBefUpd on Product_and_document_middle_table__c (before insert, before update) { | 
|     List<Product2> pnList = new List<Product2>(); | 
|     for (Product_and_document_middle_table__c pdmt : Trigger.new) { | 
|         if (Trigger.isInsert || Trigger.isUpdate && pdmt.Product_name__c != Trigger.oldMap.get(pdmt.Id).get('Product_name__c')) { | 
|             if (!String.isBlank(pdmt.Product_name__c)) { | 
|                 pnList.add(new Product2(Id = pdmt.Product_name__c)); | 
|             } | 
|         } | 
|     } | 
|      | 
|     Map<String, String> pr2Map = new Map<String, String>(); | 
|     if (pnList.size() > 0) { | 
|         List<Product2__c> pr2List = ControllerUtil.pr2SelectForSync(pnList); | 
|         for (Product2__c pr2 : pr2List) { | 
|             pr2Map.put(pr2.Product2__c, pr2.Id); | 
|         } | 
|     } | 
|      | 
|     for (Product_and_document_middle_table__c pdmt : Trigger.new) { | 
|         if (pdmt.Product_name__c != null && pr2Map.containsKey(pdmt.Product_name__c)) { | 
|             pdmt.Product2__c = pr2Map.get(pdmt.Product_name__c); | 
|         } else { | 
|             pdmt.Product2__c = null; | 
|         } | 
|     } | 
| } |