/** * NFM001.triggerから呼び出す */ public without sharing class NFM001Controller { //NFM001修改Rest start public static String status; public class NFM001 { public Endusers_element Endusers; } public class Endusers_element { public NFMUtil.Monitoring Monitoring; public Enduser_element[] Enduser; } public class Enduser_element { public String CompanyCode; public String CompanyDescription; public String DepartmentCode; public String DepartmentDescription; public String CompanyDescription2; public String CompanyAreaCode; public String DepartmentPostalCode; public String DepartmentAddress; public String CompanyCategory; public String DepartmentTelephone; public String DepartmentFax; public String DepartmentCategory; public String DepartmentEffectiveDateTo; public String PurposeOfAdvice; } //NFM001修改Rest end public static boolean isRunning = false; public static String debug_msg = ''; /** * NFM001の送信処理 * * @param iflog_Id ログテーブルのId * @param accIds 送信対象取引先 * @param purposeOfAdviceMap 1:Delete 2:Add(Insert) 3:Change(Update) * @param needSendRectMap 送信対象のレコードタイプのmap */ @future (callout=true) public static void callout(String iflog_Id, List accIds, Map purposeOfAdviceMap, Map needSendRectMap) { calloutNotFuture(iflog_Id,accIds,purposeOfAdviceMap,needSendRectMap); } public static void calloutNotFuture(String iflog_Id, List accIds, Map purposeOfAdviceMap, Map needSendRectMap) { if (accIds == null || accIds.size() == 0) { return; } /*Nfm001Sync.HTTPS_Port stub = new Nfm001Sync.HTTPS_Port(); stub.timeout_x = 100000; // timeout in milliseconds stub.endpoint_x = NFMUtil.NFM001_ENDPOINT; stub.inputHttpHeaders_x = new Map(); stub.inputHttpHeaders_x.put('Authorization', NFMUtil.Authorization);*/ /*if (NFMUtil.CLIENT_CERT_NAME != null) { stub.clientCertName_x = NFMUtil.CLIENT_CERT_NAME; }*/ // MessageGroupNumber の取得 List iflogList = [Select Id, Name, Log__c, ErrorLog__c from BatchIF_Log__c where Id = :iflog_Id]; BatchIF_Log__c iflog = new BatchIF_Log__c(); //BatchIF_Log__c iflog = null; if (iflogList.size() > 0) { iflog = iflogList.get(0); iflog.ErrorLog__c = ''; } else { // データ取れってないとは、rollbackされていることです //return; iflog.Type__c = 'NFM001'; iflog.ErrorLog__c = ''; iflog.Log__c = 'callout start\n'; } String logstr = iflog.Log__c + ' ' + 'NumberOfRecord=' + accIds.size() + '\n'; // Monitoringの設定 Datetime nowDT = Datetime.now(); String nowStr = nowDT.format('yyyyMMddHHmm'); //NFM001修改Rest start //Nfm001Sync.Endusers_element endusers = new Nfm001Sync.Endusers_element(); Endusers_element endusers = new Endusers_element(); //NFM001修改Rest end endusers.Monitoring = new NFMUtil.Monitoring(); endusers.Monitoring.Tag = 'MSGH'; endusers.Monitoring.Sender = '8402'; endusers.Monitoring.Receiver = '1330'; endusers.Monitoring.MessageType = 'NFM001'; endusers.Monitoring.MessageGroupNumber = iflog.Name; endusers.Monitoring.NumberOfRecord = '' + accIds.size(); endusers.Monitoring.TransmissionDateTime = nowStr; endusers.Monitoring.Text = ''; BatchIF_Log__c rowData = null; // BatchIF転送表 から、コード変換のMapを作成 Map transferMap = new Map(); List transferList = [select Table__c, Column__c, External_value__c, Internal_value__c from BatchIF_Transfer__c where Dropped_Flag__c = false and Table__c = 'Account']; for (BatchIF_Transfer__c t : transferList) { transferMap.put(t.Column__c + t.Internal_value__c, t.External_value__c); } try { // 転送データを取得、参照先のデータがあるので、ここで検索必要です。 List accList = [select Id, RecordTypeId, Management_Code__c, Name, Site, Department_Name__c, Phone, Fax, Is_Medical_F__c, Postal_Code__c, Address__c, OCM_Category__c, //NFM001修改Rest start Is_Active_Formula__c, //NFM001修改Rest end City_Master__r.Level2_Sys_No__c, Hospital__r.Name, Hospital__r.Management_Code__c, Hospital__r.Site, Hospital__r.City_Master__r.Level2_Sys_No__c, Hospital__r.Postal_Code__c, Hospital__r.Address__c, Hospital__r.OCM_Category__c, // HWAG-BBNBXK LHJ 20190429 Start Hospital__r.Is_Medical_F__c, // HWAG-BBNBXK LHJ 20190429 End // 契約の対応 Parent.AgentCode_Ext__c, Parent.Name, Parent.Phone, Parent.Fax, Parent.Postal_Code__c, // 20190729 合同中的省,通过经销商抓取,传给SAP City_Master_TOSAP__c, Parent.Address_Together__c, AgencyContract_Management_Code__c, Parent.Ban_On_Use_Date__c from Account where Id IN :accIds All ROWS]; System.debug(Logginglevel.DEBUG, 'NFM001_ accList.size()=' + accList.size()); // Enduserのデータの設定 //NFM001修改Rest start //endusers.Enduser = new List(); endusers.Enduser = new List(); //NFM001修改Rest end for (Account acc : accList) { System.debug('purposeOfAdviceMap='+purposeOfAdviceMap); System.debug('needSendRectMap='+needSendRectMap); System.debug('acc.RecordTypeId='+acc.RecordTypeId); System.debug('needSendRectMap.get(acc.RecordTypeId)'+needSendRectMap.get(acc.RecordTypeId)); //NFM001修改Rest start //Nfm001Sync.Enduser_element enduser = new Nfm001Sync.Enduser_element(); Enduser_element enduser = new Enduser_element(); endusers.Enduser.add(enduser); //NFM001修改Rest end if (needSendRectMap.get(acc.RecordTypeId) == '契約') { System.debug('accList.size()=' + accList); enduser.CompanyCode = acc.AgencyContract_Management_Code__c; enduser.CompanyDescription = acc.Parent.Name + '(最终用户)'; enduser.DepartmentCode = acc.AgencyContract_Management_Code__c; enduser.DepartmentDescription = acc.Parent.Name; enduser.CompanyDescription2 = acc.Parent.Name; //enduser.CompanyAreaCode = acc.City_Master__r.Level2_Sys_No__c; enduser.CompanyAreaCode = acc.City_Master_TOSAP__c; enduser.DepartmentPostalCode = null; enduser.DepartmentAddress = acc.Address__c; enduser.CompanyCategory = 'NORMAL(L)'; enduser.DepartmentTelephone = acc.Parent.Phone; enduser.DepartmentFax = acc.Parent.Fax; enduser.DepartmentCategory = null; enduser.DepartmentEffectiveDateTo = (acc.Parent.Ban_On_Use_Date__c == null) ? '99991231' : NFMUtil.formatDate2Str(acc.Parent.Ban_On_Use_Date__c); enduser.PurposeOfAdvice = purposeOfAdviceMap.get(acc.Id); } else { System.debug(acc.RecordTypeId); if (needSendRectMap.get(acc.RecordTypeId) == '病院') { enduser.CompanyCode = acc.Management_Code__c; enduser.CompanyDescription = acc.Name; enduser.DepartmentCode = acc.Management_Code__c; enduser.DepartmentDescription = acc.Name; //--------CHAN-B3N9KB---------------AddStart------xinhonglu---------------------------------------- //wangweipeng 2021/10/08 如果是民营,那么传接口值为私立 start enduser.CompanyDescription2 = acc.Site +','+ (acc.Is_Medical_F__c == '民营' ? '私立':acc.Is_Medical_F__c); //wangweipeng 2021/10/08 如果是民营,那么传接口值为私立 end //--------CHAN-B3N9KB---------------AddEnd------xinhonglu----------------------------------------- enduser.CompanyAreaCode = acc.City_Master__r.Level2_Sys_No__c; enduser.DepartmentPostalCode = acc.Postal_Code__c; enduser.DepartmentAddress = acc.Address__c; enduser.CompanyCategory = NFMUtil.getMapValue(transferMap, 'OCM_Category__c', acc.OCM_Category__c, iflog); } else { System.debug('accList.size()=' + accList); enduser.CompanyCode = acc.Hospital__r.Management_Code__c; enduser.CompanyDescription = acc.Hospital__r.Name; enduser.DepartmentCode = acc.Management_Code__c; enduser.DepartmentDescription = acc.Department_Name__c; // HWAG-BBNBXK LHJ 20190429 Start //enduser.CompanyDescription2 = acc.Hospital__r.Site; //wangweipeng 2021/10/08 如果是民营,那么传接口值为私立 start enduser.CompanyDescription2 = acc.Hospital__r.Site +','+ (acc.Hospital__r.Is_Medical_F__c == '民营' ? '私立':acc.Hospital__r.Is_Medical_F__c); //wangweipeng 2021/10/08 如果是民营,那么传接口值为私立 end // HWAG-BBNBXK LHJ 20190429 End enduser.CompanyAreaCode = acc.Hospital__r.City_Master__r.Level2_Sys_No__c; enduser.DepartmentPostalCode = acc.Hospital__r.Postal_Code__c; enduser.DepartmentAddress = acc.Hospital__r.Address__c; enduser.CompanyCategory = NFMUtil.getMapValue(transferMap, 'OCM_Category__c', acc.Hospital__r.OCM_Category__c, iflog); } enduser.DepartmentTelephone = acc.Phone; enduser.DepartmentFax = acc.Fax; enduser.DepartmentCategory = null; // deleteがないので、有効終了 日に 99991231 をセットして更新 String purposeOfAdvice = purposeOfAdviceMap.get(acc.Id); if (purposeOfAdvice == '1') { enduser.DepartmentEffectiveDateTo = NFMUtil.formatDate2Str(System.today()); enduser.PurposeOfAdvice = '3'; } else { enduser.DepartmentEffectiveDateTo = '99991231'; enduser.PurposeOfAdvice = purposeOfAdvice; } } logstr += enduser.DepartmentCode + '(' + enduser.PurposeOfAdvice + ')' + ' '; } if (EndUsers.Enduser.size() > 0) { NFMUtil.Monitoring Monitoring = new NFMUtil.Monitoring(); Monitoring.Tag = EndUsers.Monitoring.Tag; Monitoring.Sender = EndUsers.Monitoring.Sender; Monitoring.Receiver = EndUsers.Monitoring.Receiver; Monitoring.MessageType = EndUsers.Monitoring.MessageType; Monitoring.MessageGroupNumber = EndUsers.Monitoring.MessageGroupNumber; Monitoring.NumberOfRecord = EndUsers.Monitoring.NumberOfRecord; Monitoring.TransmissionDateTime = EndUsers.Monitoring.TransmissionDateTime; Monitoring.Text = ''; // NFM001修改Rest 新增 start NFM001 nfm001 = new NFM001(); nfm001.EndUsers = new EndUsers_element(); nfm001.EndUsers = EndUsers; // NFM001修改Rest 新增 end //NFM001修改Rest start rowData = NFMUtil.makeRowData(Monitoring, 'NFM001', nfm001); //NFM001修改Rest end execute(rowData, iflog); if (System.Label.NFM001_IsOn == '1') { // Nfm001Sync.Endusers_element[] pEndusers = new Nfm001Sync.Endusers_element[] { endusers }; logstr += '\ncallout count=' + EndUsers.Enduser.size(); // OlympusCoJpCommonMessage.LOG_element[] logs = stub.NFM001_Sync_BC2GPI(pEndusers); } else { iflog.ErrorLog__c += 'NFM001_IsOff'; } // 原則非同期ですので、logsを確認する必要がないでしょう。 } logstr += '\nend'; } catch(Exception ex) { // エラーが発生した場合 System.debug(Logginglevel.ERROR, 'NFM001_' + iflog.Name + ':' + ex.getMessage()); System.debug(Logginglevel.ERROR, 'NFM001_' + iflog.Name + ':' + ex.getStackTraceString()); logstr += ex.getMessage(); iflog.ErrorLog__c += ex.getMessage() + '\n'; iflog.ErrorLog__c += ex.getStackTraceString() + '\n'; } if (rowData != null) { System.debug('+++++rowData+++++insert:' + rowData); insert rowData; System.debug('+++++rowData+++++afterinsert:' + rowData.Id); } System.debug(Logginglevel.DEBUG, 'NFM001_' + iflog.Name + ' end'); iflog.Log__c = logstr; upsert iflog; } public static void execute(BatchIF_Log__c rowData, BatchIF_Log__c iflog) { Integer batch_retry_max_cnt = Integer.valueOf(System.Label.batch_retry_max_cnt); String rowDataStr = NFMUtil.getRowDataStr(rowData); // NFM001修改Rest start //Nfm001Sync.Endusers_element endusers = (Nfm001Sync.Endusers_element) JSON.deserialize(rowDataStr, Nfm001Sync.Endusers_element.class); NFM001 nfm001 = (NFM001) JSON.deserialize(rowDataStr, NFM001.class); //String logstr = endusers.Monitoring.MessageGroupNumber + ' start\n'; String logstr = nfm001.endusers.Monitoring.MessageGroupNumber + ' start\n'; // NFM001修改Rest start end Boolean needUpdateIflog = false; if (iflog == null) { needUpdateIflog = true; iflog = new BatchIF_Log__c(); iflog.Type__c = 'NFM001'; // NFM001修改Rest start iflog.MessageGroupNumber__c = nfm001.endusers.Monitoring.MessageGroupNumber; // NFM001修改Rest end iflog.Log__c = logstr; iflog.ErrorLog__c = ''; //insert iflog; //iflog = [Select Id, Name, Log__c, ErrorLog__c from BatchIF_Log__c where Id = :iflog.Id]; } else { logstr = iflog.Log__c; } try{ //gaozw // NFM001修改Rest start /*Nfm001Sync.HTTPS_Port stub = new Nfm001Sync.HTTPS_Port(); stub.timeout_x = 100000; // timeout in milliseconds stub.endpoint_x = NFMUtil.NFM001_ENDPOINT; stub.inputHttpHeaders_x = new Map(); stub.inputHttpHeaders_x.put('Authorization', NFMUtil.Authorization); if (NFMUtil.CLIENT_CERT_NAME != null) { stub.clientCertName_x = NFMUtil.CLIENT_CERT_NAME; } Nfm001Sync.Endusers_element[] pEndusers = new Nfm001Sync.Endusers_element[] { endusers }; NFM001Controller.debug_msg += ', execute()'; OlympusCoJpCommonMessage.LOG_element[] logs = stub.NFM001_Sync_BC2GPI(pEndusers);*/ // NFM001修改Rest end // 原則非同期ですので、logsを確認する必要がないでしょう。 // NFM001修改Rest start status =NFMUtil.sendToSapRet(rowDataStr, NFMUtil.NFM001_ENDPOINT); if (status == 'OK') { rowData.retry_cnt__c = 0; } else { if (rowData.retry_cnt__c == null) rowData.retry_cnt__c = 0; if (rowData.retry_cnt__c < batch_retry_max_cnt) { rowData.retry_cnt__c++; LogAutoSendSchedule.assignOneMinute(); } if (rowData.retry_cnt__c >= batch_retry_max_cnt) { rowData.ErrorLog__c = 'status:' + status + '\n错误次数已经超过自动送信设定的最大次数,请手动送信'; } } // NFM001修改Rest end }catch(Exception ex) { // TODO IOException // エラーが発生した場合 System.debug(Logginglevel.ERROR, 'NFM001_' + iflog.Name + ':' + ex.getMessage()); System.debug(Logginglevel.ERROR, 'NFM001_' + iflog.Name + ':' + ex.getStackTraceString()); //NFM624触发001和201接口 20221102 LY start // Callout from triggers are currently not supported. if (!String.valueOf(ex.getMessage()).contains('Callout from triggers')) { logstr += ex.getMessage(); iflog.ErrorLog__c += ex.getMessage() + '\n'; iflog.ErrorLog__c += ex.getStackTraceString() + '\n'; } //NFM624触发001和201接口 20221102 LY end //---Gaozw---add if (rowData.retry_cnt__c == null) rowData.retry_cnt__c = 0; if (rowData.retry_cnt__c < batch_retry_max_cnt){ rowData.retry_cnt__c++; LogAutoSendSchedule.assignOneMinute(); } if (rowData.retry_cnt__c >= batch_retry_max_cnt){ rowData.ErrorLog__c = ex.getMessage() + '\n' + ex.getStackTraceString() + '\n' + rowData.ErrorLog__c+'错误次数已经超过自动送信设定的最大次数,请手动送信'; } } iflog.Log__c = logstr; System.debug('logdate2' + rowData); if (needUpdateIflog) { upsert iflog; upsert rowData; } } }