| trigger ReportHpDeptUpd on Report__c (before insert, before update) { | 
|     List<String> accIds = new List<String>(); | 
|   | 
|     for(Report__c a : Trigger.new) { | 
|         if (Trigger.isInsert | 
|                 || (Trigger.isUpdate | 
|                     && (Trigger.oldMap.get(a.Id).get('Hospital_Department__c') != a.Hospital_Department__c) | 
|                         || a.AccountParentId__c != a.Department_Class_Ref__c | 
|                         || a.AccountParentParentId__c != a.Hospital_Reference__c | 
|                         || String.isBlank(a.Department_Class_Ref__c))) { | 
|             if (!String.isBlank(a.Hospital_Department__c)) { | 
|                 accIds.add(a.Hospital_Department__c); | 
|             } | 
|         } | 
|     } | 
|   | 
|     if (accIds.size() > 0) { | 
|         // 診療科レコードタイプ | 
|         String[] deptTypes = new String[] {'診療科 その他', '診療科 呼吸科', '診療科 婦人科', '診療科 普外科', '診療科 泌尿科', '診療科 消化科', '診療科 耳鼻喉科'}; | 
|         List<RecordType> deptRects = [select Id, Name from RecordType where IsActive = true and SobjectType = 'Account' and Name IN :deptTypes]; | 
|         Map<String, String> deptRectMap = new Map<String, String>(); | 
|         for (RecordType rect : deptRects) { | 
|             deptRectMap.put(rect.Id, rect.Name); | 
|         } | 
|         // TODO 販売店のレコードタイプのMapを生成 | 
|   | 
|         Map<Id, Account> accMap = new Map<Id, Account>(); | 
|         List<Account> accs = ControllerUtil.selectAccountForTrigger(accIds); | 
|         for(Account acc : accs) { | 
|             accMap.put(acc.Id, acc); | 
|         } | 
|          | 
|         for(Report__c a : Trigger.new) { | 
|             // 「診療科」に診療科を選択する場合 | 
|             Account acc = accMap.get(a.Hospital_Department__c); | 
|             if (acc != null | 
|                     && deptRectMap.get(acc.RecordTypeId) != null) { | 
|                 a.Department_Class_Ref__c = acc.ParentId; | 
|                 a.Hospital_Reference__c = acc.Parent.ParentId; | 
|             } | 
|             // TODO 「販売店」の更新 | 
|         } | 
|     } | 
| } |