/** 
 | 
 * Maintenance_Contract__c は Reapire__c(Account経由) と Maintenance_Contract_Asset__c ともに主従関係、そのままupdate OK 
 | 
 */ 
 | 
trigger MaintenanceContractAfterUpdate on Maintenance_Contract__c ( after update) { 
 | 
    if (StaticParameter.EscapeMaintenanceContractAfterUpdateTrigger) { 
 | 
System.debug('Escape、EscapeMaintenanceContractAfterUpdateTrigger:::::' + StaticParameter.EscapeMaintenanceContractAfterUpdateTrigger); 
 | 
        return; 
 | 
    } 
 | 
     
 | 
    // ---------------------------------------------------------------------- 
 | 
    // ここより、修理のサービスコントラクト項目を自動的に更新するロジック 
 | 
    // ---------------------------------------------------------------------- 
 | 
     
 | 
    List<Maintenance_Contract__c> targetList = new List<Maintenance_Contract__c>(); 
 | 
     
 | 
    for ( Integer i = 0; i < Trigger.new.size(); i++) { 
 | 
        // 契約開始日と契約終了日のどちらかが変わっていた場合のみ処理をする 
 | 
        if ( 
 | 
            Trigger.old[i].Contract_Start_Date__c != Trigger.new[i].Contract_Start_Date__c 
 | 
            || 
 | 
            Trigger.old[i].Contract_End_Date__c != Trigger.new[i].Contract_End_Date__c 
 | 
        ) { 
 | 
            // 処理対象に加える 
 | 
            targetList.add( Trigger.new[i]); 
 | 
        } 
 | 
    } 
 | 
     
 | 
    if ( targetList.size() > 0) { 
 | 
        // 納入商品を得る処理 
 | 
         
 | 
        // 一意の納入商品IDを得る 
 | 
        List<Maintenance_Contract_Asset__c> assetlist = [SELECT Asset__c FROM Maintenance_Contract_Asset__c WHERE Maintenance_Contract__c IN :targetList]; 
 | 
        Set<Id> assetIds = new Set<Id>(); 
 | 
        for ( Maintenance_Contract_Asset__c middleTable : assetList) { 
 | 
            assetIds.add( middleTable.Asset__c); 
 | 
        } 
 | 
         
 | 
        // 修理を得る 
 | 
        List<Repair__c> repairList = [SELECT Id FROM Repair__c WHERE Delivered_Product__c IN :assetIds  
 | 
                                                                    and Status2__c !='00.删除' 
 | 
                                                                    and Status2__c !='00.取消' 
 | 
                                                                    and Status2__c !='17.付款完毕' 
 | 
                                                                    and Status2__c !='00.关闭' 
 | 
                                                                    and Status2__c !='16.完毕']; 
 | 
         
 | 
        // 修理を空更新 
 | 
        update repairList; 
 | 
    } 
 | 
  
 | 
    // ---------------------------------------------------------------------- 
 | 
    // ここまで、修理のサービスコントラクト項目を自動的に更新するロジック 
 | 
    // ---------------------------------------------------------------------- 
 | 
  
 | 
} 
 |