// SAP送信はWF値を送信しないので、before更新でも問題ない 
 | 
trigger NFM001AgencyContract on Account (before insert, before update, after insert) { 
 | 
    if (StaticParameter.EscapeNFM001AgencyContractTrigger) { 
 | 
System.debug('Escape、EscapeNFM001AgencyContractTrigger:::::' + StaticParameter.EscapeNFM001AgencyContractTrigger); 
 | 
        return; 
 | 
    } 
 | 
     
 | 
    // WFなど設定により、2回目呼び出される場合もある、2回目をここに入らないように NFM001Controller.isRunning を判断する 
 | 
    if (NFM001Controller.isRunning) { 
 | 
        return; 
 | 
    } 
 | 
  
 | 
    // 更新対象 Id をセット 
 | 
    List<String> accIds = new List<String>(); 
 | 
    Map<String, String> purposeOfAdviceMap = new Map<String, String>();    // 1:Delete 2:Add(Insert) 3:Change(Update) 
 | 
  
 | 
//    if (NFM001Controller.isInsert && Trigger.isUpdate) { 
 | 
//        NFM001Controller.isRunning = true; 
 | 
//        // insertだけど、WFにて更新項目があって、isUpdateになります。 
 | 
//        for(Account a : Trigger.new) { 
 | 
//            if (String.isBlank(a.AgencyContract_Management_Code__c)) { 
 | 
//                accIds.add(a.Id); 
 | 
//                purposeOfAdviceMap.put(a.Id, '2'); 
 | 
//                NFM001Controller.debug_msg = 'NFM001_callout_insert_' + a.Name; 
 | 
//            } else { 
 | 
//                accIds.add(a.Id); 
 | 
//                purposeOfAdviceMap.put(a.Id, '3'); 
 | 
//                NFM001Controller.debug_msg = 'NFM001_callout_update_' + a.Name; 
 | 
//            } 
 | 
//        } 
 | 
//    } 
 | 
  
 | 
    // 送信対象のレコードタイプ 
 | 
    String[] needSendTypes = new String[] {'契約', '販売店'}; 
 | 
    List<RecordType> rects = [select Id, Name from RecordType where IsActive = true and SobjectType = 'Account' and Name IN :needSendTypes]; 
 | 
    Map<String, String> needSendRectMap = new Map<String, String>(); 
 | 
    for (RecordType rect : rects) { 
 | 
        needSendRectMap.put(rect.Id, rect.Name); 
 | 
    } 
 | 
     
 | 
    if (Trigger.isInsert) { 
 | 
        if (Trigger.isBefore) { 
 | 
            System.debug(Logginglevel.DEBUG, 'NFM001AgencyContract isBefore isInsert'); 
 | 
        } else { 
 | 
            System.debug(Logginglevel.DEBUG, 'NFM001AgencyContract isAfter isInsert'); 
 | 
//            // TODO 重複チェック 
 | 
//            Boolean hasError = false; 
 | 
//            Map<String, Account> agentStateIds = new Map<String, Account>(); 
 | 
//            for(Account a : Trigger.new) { 
 | 
//                if (needSendRectMap.get(a.RecordTypeId) == '契約') { 
 | 
//                    agentStateIds.put(a.ParentId + ':' + a.State_Master__c, a); 
 | 
//                    System.debug(Logginglevel.DEBUG, 'agentStateIds.add <== ' + a.ParentId + ':' + a.State_Master__c); 
 | 
//                } 
 | 
//            } 
 | 
//            List<Account> doubleChildList = ControllerUtil.getDoubleChildForAgent(agentStateIds); 
 | 
//            for (Account doubleA : doubleChildList) { 
 | 
//                Account a = agentStateIds.get(doubleA.Agency_State_Master__c); 
 | 
//                if (String.isBlank(a.AgencyContract_Management_Code__c)) { 
 | 
//                    a.addError('当前数据 ' + a.Id + ' 和 ' + doubleA.Id + ' 的数据处于同一个省,不能使用新的客户编码。'); 
 | 
//                    NFM001Controller.debug_msg = 'NFM001_AgencyContract_Management_Code__c_double 1'; 
 | 
//                    hasError = true; 
 | 
//                } else if (a.AgencyContract_Management_Code__c != doubleA.AgencyContract_Management_Code__c) { 
 | 
//                    a.addError('当前数据 ' + a.Id + ' 和 ' + doubleA.Id + ' 的数据处于同一个省,但是客户编码不同。'); 
 | 
//                    NFM001Controller.debug_msg = 'NFM001_AgencyContract_Management_Code__c_double 2'; 
 | 
//                    hasError = true; 
 | 
//                } 
 | 
//            } 
 | 
//            if (!hasError) { 
 | 
                  for(Account a : Trigger.new) { 
 | 
                      if (needSendRectMap.get(a.RecordTypeId) == null || needSendRectMap.get(a.RecordTypeId) == '販売店') { 
 | 
                          continue; 
 | 
                      } 
 | 
                      NFM001Controller.isRunning = true; 
 | 
                      System.debug(Logginglevel.DEBUG, 'NFM001AgencyContract isInsert a.AgencyContract_Management_Code__c::::' + a.AgencyContract_Management_Code__c); 
 | 
                      if (String.isBlank(a.AgencyContract_Management_Code__c)) { 
 | 
                          accIds.add(a.Id); 
 | 
                          purposeOfAdviceMap.put(a.Id, '2'); 
 | 
                          NFM001Controller.debug_msg = 'NFM001_callout_insert_' + a.Name; 
 | 
                      } else { 
 | 
                          accIds.add(a.Id); 
 | 
                          purposeOfAdviceMap.put(a.Id, '3'); 
 | 
                          NFM001Controller.debug_msg = 'NFM001_callout_update_' + a.Name; 
 | 
                      } 
 | 
                  } 
 | 
//            } 
 | 
        } 
 | 
    } else if (Trigger.isUpdate && NFM001Controller.isRunning == false) { 
 | 
        List<String> agentIds = new List<String>(); 
 | 
        for(Account a : Trigger.new) { 
 | 
            if (needSendRectMap.get(a.RecordTypeId) == null) { 
 | 
                continue; 
 | 
            } 
 | 
  
 | 
            // NFM001の送信項目として、isChanged かを確認 
 | 
            Boolean isChanged = false; 
 | 
            Boolean needChild = false; 
 | 
            // TODO 論理削除/復活の対応 
 | 
             
 | 
            // TODO 下記の項目変更を対応する 
 | 
            // Name, City_Master__c, Parent 
 | 
            if (Trigger.oldMap.get(a.Id).get('OCM_Category__c') != a.OCM_Category__c 
 | 
                    && isChanged == false) {   // 実はいらないけど、再送信がdataloaderにてできるために使う 
 | 
                isChanged = true; 
 | 
            } 
 | 
            if (Trigger.oldMap.get(a.Id).get('Name') != a.Name 
 | 
                    && isChanged == false) { 
 | 
                if (needSendRectMap.get(a.RecordTypeId) == '販売店') { 
 | 
                    isChanged = true; 
 | 
                    needChild = true; 
 | 
                    NFM001Controller.debug_msg = 'Name_' + a.Name; 
 | 
                } 
 | 
            } 
 | 
            if (Trigger.oldMap.get(a.Id).get('City_Master__c') != a.City_Master__c 
 | 
                    && isChanged == false) { 
 | 
                isChanged = true; 
 | 
                NFM001Controller.debug_msg = 'City_Master__c'; 
 | 
            } 
 | 
            if (Trigger.oldMap.get(a.Id).get('ParentId') != a.ParentId 
 | 
                    && isChanged == false) { 
 | 
                isChanged = true; 
 | 
                NFM001Controller.debug_msg = 'Parent'; 
 | 
            } 
 | 
             
 | 
            if (isChanged) { 
 | 
                NFM001Controller.isRunning = true; 
 | 
                if (needSendRectMap.get(a.RecordTypeId) == '契約') accIds.add(a.Id); 
 | 
                purposeOfAdviceMap.put(a.Id, '3'); 
 | 
                NFM001Controller.debug_msg += '_NFM001_callout_update'; 
 | 
                if (needChild) { 
 | 
                    agentIds.add(a.Id); 
 | 
                } 
 | 
            } 
 | 
             
 | 
            // 契約の空更新 と 販売店毎に、作成日最新の契約を送信するため purposeOfAdviceMap にデータをセット 
 | 
            ControllerUtil.collectChildIdForAgent(accIds, purposeOfAdviceMap, agentIds); 
 | 
  
 | 
        } 
 | 
  
 | 
    } 
 | 
     
 | 
    System.debug(Logginglevel.DEBUG, 'NFM001AgencyContract accIds.size():::::' + accIds.size()); 
 | 
  
 | 
    if (accIds.size() > 0) { 
 | 
        //----------XinHongLu--------------------------AddStart-------------------20180914------------------------------ 
 | 
        // MessageGroupNumber の採番 
 | 
        if (StaticParameter.EscapeNFM001AgencyContractTrigger2) { 
 | 
            System.debug('Escape、EscapeNFM001AgencyContractTrigger2:::::' + StaticParameter.EscapeNFM001AgencyContractTrigger2); 
 | 
            return; 
 | 
        } 
 | 
        //----------XinHongLu--------------------------EndStart-------------------20180914------------------------------ 
 | 
        BatchIF_Log__c iflog = new BatchIF_Log__c(); 
 | 
        iflog.Type__c = 'NFM001'; 
 | 
        iflog.Log__c  = 'callout start\n'; 
 | 
        insert iflog; 
 | 
        iflog = [Select Id, Name from BatchIF_Log__c where Id = :iflog.Id]; 
 | 
        System.debug(Logginglevel.DEBUG, 'NFM001_' + iflog.Name + ' start');                  // callout の中 end のlogを出します 
 | 
        NFM001Controller.callout(iflog.Id, accIds, purposeOfAdviceMap, needSendRectMap); 
 | 
         
 | 
    } 
 | 
} 
 |