|  |  | 
 |  |  | /** | 
 |  |  |  * Maintenance_Contract_Asset__c と Reapire__c(Account経由)は主従関係、そのままupdate OK | 
 |  |  |  */ | 
 |  |  | trigger MaintenanceContractAssetTrigger on Maintenance_Contract_Asset__c ( after insert, after delete ) { | 
 |  |  | trigger MaintenanceContractAssetTrigger on Maintenance_Contract_Asset__c ( before insert, before update ) { | 
 |  |  |  | 
 |  |  | System.debug( '-----+MaintenanceContractAssetTrigger start'); | 
 |  |  |  | 
 |  |  | 
 |  |  |     // ---------------------------------------------------------------------- | 
 |  |  |  | 
 |  |  |     // 前処理 | 
 |  |  |     Set<Id> assetIds = new Set<Id>(); | 
 |  |  |     // Set<Id> assetIds = new Set<Id>(); | 
 |  |  | //    Set<Id> serviceIds = new Set<Id>(); | 
 |  |  |     for ( Maintenance_Contract_Asset__c local : ( Trigger.isInsert ? Trigger.New : Trigger.old)) { | 
 |  |  |         assetIds.add( local.Asset__c); | 
 |  |  | //        serviceIds.add( local.Maintenance_Contract__c); | 
 |  |  |      | 
 |  |  |     List<String> locallastList = new List<String>(); | 
 |  |  |     List<String> locallist = new List<String>(); | 
 |  |  |      | 
 |  |  |     for ( Maintenance_Contract_Asset__c local : Trigger.New) { | 
 |  |  |         locallastList.add(local.LastMContract__c); | 
 |  |  |         locallist.add(local.Maintenance_Contract__c); | 
 |  |  |     } | 
 |  |  |     List<Maintenance_Contract__c> llmc = [select id,contractNextYear_new__c,serviceContractNextYear_new__c | 
 |  |  |                                              from Maintenance_Contract__c | 
 |  |  |                                             where Id in :locallastList]; | 
 |  |  |     List<Maintenance_Contract__c> lmc = [select id,RecordType.name from Maintenance_Contract__c where Id in :locallist];                                   | 
 |  |  |      | 
 |  |  |     Map<Id, Maintenance_Contract__c> map1 = new Map<Id, Maintenance_Contract__c>(); | 
 |  |  |     Map<Id, Maintenance_Contract__c> map2 = new Map<Id, Maintenance_Contract__c>(); | 
 |  |  |  | 
 |  |  |          for (Maintenance_Contract__c mc:llmc ) { | 
 |  |  |             if (!map1.containsKey(mc.id)) { | 
 |  |  |                 map1.put(mc.id,mc); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         for (Maintenance_Contract__c mc:lmc ) { | 
 |  |  |             if (!map2.containsKey(mc.id)) { | 
 |  |  |                 map2.put(mc.id,mc); | 
 |  |  |             }  | 
 |  |  |         } | 
 |  |  |     List<Maintenance_Contract__c> mcList = new List<Maintenance_Contract__c>(); | 
 |  |  |     for ( Maintenance_Contract_Asset__c local : Trigger.New) { | 
 |  |  |          // 2000/07/19 进程生成器 - 来年合同设置 | 
 |  |  |             Maintenance_Contract__c mc1 = new Maintenance_Contract__c(); | 
 |  |  |             Maintenance_Contract__c mc2 = new Maintenance_Contract__c(); | 
 |  |  |             if (map1.containsKey(local.LastMContract__c)) { | 
 |  |  |                 mc1 = map1.get(local.LastMContract__c); | 
 |  |  |                 if (local.LastMContract_Gap__c <= 365 && mc1.contractNextYear_new__c == null) { | 
 |  |  |                  //更新上一期维修合同的来年维修合同 | 
 |  |  |                     mc1.contractNextYear_new__c = local.Maintenance_Contract__c; | 
 |  |  |                  } | 
 |  |  |             } | 
 |  |  |             if (map2.containsKey(local.Maintenance_Contract__c)&&map1.containsKey(local.LastMContract__c)) { | 
 |  |  |                 mc2 = map2.get(local.Maintenance_Contract__c); | 
 |  |  |                 if (local.LastMContract_Gap__c <= 365 && mc1.serviceContractNextYear_new__c == null && mc2.RecordType.name == '服务合同') { | 
 |  |  |                      //更新上一期维修合同的来年服务合同 | 
 |  |  |                  mc1.serviceContractNextYear_new__c = local.Maintenance_Contract__c; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             System.debug( '添加mc1='+mc1); | 
 |  |  |             // System.debug( 'mc1.length='+mc1.length()); | 
 |  |  |             // system.assertEquals(mc1,null); | 
 |  |  |             if (mc1.id!=null && !mcList.contains(mc1)){ | 
 |  |  |  | 
 |  |  |                  mcList.add(mc1); | 
 |  |  |             } | 
 |  |  |     } | 
 |  |  |     System.debug( '开始更新'+mcList); | 
 |  |  |     if (mcList!=null&&mcList.size()!=0) { | 
 |  |  |         update mcList; | 
 |  |  |     } | 
 |  |  |      | 
 |  |  |  | 
 |  |  |     // 処理対象となる修理一覧を得る | 
 |  |  | //    List<Repair__c> repairList = [SELECT Id, SERVICE_CONTRACT_JUDEGE_DAY__C, Maintenance_Contract__c FROM Repair__C WHERE Delivered_Product__c IN :assetIds]; | 
 |  |  |     // 修理を更新すれば、修理のTriggerによって、修理のサービスコントラクト項目に値がセットされる | 
 |  |  | 
 |  |  |     // ---------------------------------------------------------------------- | 
 |  |  |     // ここまで、サービスコントラクト項目を自動的に更新するロジック | 
 |  |  |     // ---------------------------------------------------------------------- | 
 |  |  |       | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  | System.debug( '-----+MaintenanceContractAssetTrigger end'); | 
 |  |  |  |