/** * UserToContact.trigger触发 */ public with sharing class NFM621Controller { public static String status; private static final String API = '/admin/api/user/saveOlympus'; public class NFM621 { public GeDatas GeDatas; } public class GeDatas { public NFMUtil.MonitoringToComPlat Monitoring; public Gedata[] GeData; } public class GeData { public String Name; //姓名 public String EmployeeNo; //员工编码 public String Email; //邮件 public String StayOrNot; //在职状况 public String JobCategoryPicklist; //职种 public String StatePlatForm; //省(共通平台) public String OnlinePlatformManager; //经理(共通平台) public String OnlinePlatformBuchang; //部长(共通平台) public String ZongjianApprovalManager; //总监(共通平台) public String FederationIdentifier; //联盟ID public String BusinessDivision; //本部 public String Department; //部 public String GroupDep; //课 public String State; //省 public Date JobStartDate; //入职日期 } /** * NFM621の送信処理 * * @param iflog_Id ログテーブルのId * @param userIDs 送信対象取引先 */ @future(callout = true) public static void callout(String iflog_Id, List < String > userIDs) { executefuture(iflog_Id, userIDs); } public static void executefuture(String iflog_Id, List < String > userIDs) { Datetime nowDT = Datetime.now(); String nowStr = nowDT.format('yyyyMMddHHmmss'); if (userIDs == null || userIDs.size() == 0) { return; } BatchIF_Log__c iflog = null; if (string.isNotBlank(iflog_Id)) { // MessageGroupNumber の取得 List < BatchIF_Log__c > iflogList = [Select Id, Name, Log__c, ErrorLog__c from BatchIF_Log__c where Id =: iflog_Id]; if (iflogList.size() > 0) { iflog = iflogList.get(0); iflog.ErrorLog__c = ''; } else { // データ取れってないとは、rollbackされていることです // return; iflog = new BatchIF_Log__c(); iflog.Type__c = 'NFM621'; iflog.MessageGroupNumber__c = nowStr; } } else { // return; iflog = new BatchIF_Log__c(); iflog.Type__c = 'NFM621'; iflog.MessageGroupNumber__c = nowStr; } //String logstr = iflog.Log__c + '\nNumberOfRecord=' + userIDs.size() + '\n'; String logstr = 'NumberOfRecord=' + userIDs.size() + '\n'; // Monitoringの設定 NFMUtil.MonitoringToComPlat me = new NFMUtil.MonitoringToComPlat(); me.Tag = 'MSGH'; me.Sender = 'SFDC'; me.Receiver = '共通平台/服务新系统'; me.MessageType = 'NFM621'; me.MessageGroupNumber = nowStr; //iflog.Name; if (String.isNotBlank(iflog.Name)) { me.MessageGroupNumber = iflog.Name; } me.NumberOfRecord = '' + userIDs.size(); me.TransmissionDateTime = nowStr; me.Text = ''; String randomstr = NFMUtil.randomUUID(16); Long timestamp = DateTime.now().getTime(); String timestampStr = String.valueOf(timestamp); String getToken = NFMUtil.getToken(randomstr, timestamp); me.API_RANDOM_STR = randomstr; me.API_TIME = timestampStr; me.API_TOKEN = getToken; //OCSM管理省对应自然省 List < OCM_Management_Province__c > provinceList = [select Id, Name, Real_Province__c, OnlinePlatformWindow1__c, OnlinePlatformWindow2__c, OnlinePlatformWindow3__c from OCM_Management_Province__c]; Map < String, String > provinceNameMap = new Map < String, String > (); for (OCM_Management_Province__c province1: provinceList) { if (String.isNotBlank(province1.OnlinePlatformWindow1__c)) { provinceNameMap.put(province1.OnlinePlatformWindow1__c, province1.Real_Province__c); } if (String.isNotBlank(province1.OnlinePlatformWindow2__c)) { provinceNameMap.put(province1.OnlinePlatformWindow2__c, province1.Real_Province__c); } if (String.isNotBlank(province1.OnlinePlatformWindow3__c)) { provinceNameMap.put(province1.OnlinePlatformWindow3__c, province1.Real_Province__c); } } BatchIF_Log__c rowData = null; GeDatas gds = new GeDatas(); gds.GeData = new List < GeData > (); // endusers.GeData = new List < GeData > (); try { // 転送データを取得、参照先のデータがあるので、ここで検索必要です。 List < User > userList = [select Id, Name, Employee_No__c, Email, Stay_or_not__c, Job_Category__c, OnlinePlatformManager__c, OnlinePlatformManager__r.Employee_No__c, OnlinePlatformBuchang__c, OnlinePlatformBuchang__r.Employee_No__c, ZongjianApprovalManager__c, ZongjianApprovalManager__r.Employee_No__c, FederationIdentifier, Salesdepartment__c, Category5__c, Category6__c, Province__c, Hire_Date__c, QuitDate__c from User where Id IN: userIDs All ROWS ]; System.debug(Logginglevel.DEBUG, 'NFM621_ userList.size()=' + userList.size()); // GeDatasのデータの設定 for (User user1: userList) { GeData info = new GeData(); info.Name = user1.Name; //名称 info.EmployeeNo = user1.Employee_No__c; //员工编号 info.Email = user1.Email; //电子邮件 info.JobCategoryPicklist = user1.Job_Category__c; //职种 info.OnlinePlatformManager = user1.OnlinePlatformManager__r.Employee_No__c; //经理(共通平台) info.OnlinePlatformBuchang = user1.OnlinePlatformBuchang__r.Employee_No__c; //部长(共通平台) info.ZongjianApprovalManager = user1.ZongjianApprovalManager__r.Employee_No__c; //总监(共通平台) info.FederationIdentifier = user1.FederationIdentifier; //联盟ID info.BusinessDivision = user1.Salesdepartment__c; //本部 info.Department = user1.Category5__c; //部 info.GroupDep = user1.Category6__c; //课 info.State = user1.Province__c; //省 info.JobStartDate = user1.Hire_Date__c; //入职日期 if (provinceNameMap.containsKey(user1.Id)) { info.StatePlatForm = provinceNameMap.get(user1.Id); //省(共通平台) } else { info.StatePlatForm = ''; } if (user1.QuitDate__c != null && user1.QuitDate__c <= Date.Today()) { info.StayOrNot = '已离职'; } else { info.StayOrNot = user1.Stay_or_not__c; //在职状况 } logstr += '员工编码:' +info.EmployeeNo+ '\n'; gds.GeData.add(info); } if (gds.GeData.size() > 0) { me.NumberOfRecord = '' + gds.GeData.size(); gds.Monitoring = me; NFMUtil.Monitoring Monitoring = new NFMUtil.Monitoring(); Monitoring.Tag = gds.Monitoring.Tag; Monitoring.Sender = gds.Monitoring.Sender; Monitoring.Receiver = gds.Monitoring.Receiver; Monitoring.MessageType = gds.Monitoring.MessageType; Monitoring.MessageGroupNumber = gds.Monitoring.MessageGroupNumber; Monitoring.NumberOfRecord = gds.Monitoring.NumberOfRecord; Monitoring.TransmissionDateTime = gds.Monitoring.TransmissionDateTime; Monitoring.Text = ''; NFM621 nfm621 = new NFM621(); nfm621.GeDatas = new GeDatas(); nfm621.GeDatas = gds; rowData = NFMUtil.makeRowData(Monitoring, 'NFM621', nfm621); execute(rowData, iflog); } logstr += '\nStatus:' + status; logstr += '\nend'; } catch (Exception ex) { // エラーが発生した場合 System.debug(Logginglevel.ERROR, 'NFM621_' + iflog.Name + ':' + ex.getMessage()); System.debug(Logginglevel.ERROR, 'NFM621_' + iflog.Name + ':' + ex.getStackTraceString()); logstr += ex.getMessage(); iflog.ErrorLog__c += ex.getMessage() + '\n'; iflog.ErrorLog__c += ex.getStackTraceString() + '\n'; } if (rowData != null) { upsert rowData; } 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); //GeDatas endusers = (GeDatas) JSON.deserialize(rowDataStr, GeDatas.class); String logstr = rowData.MessageGroupNumber__c + ' start\n'; Boolean needUpdateIflog = false; if (iflog == null) { needUpdateIflog = true; iflog = new BatchIF_Log__c(); iflog.Type__c = 'NFM621'; iflog.MessageGroupNumber__c = rowData.MessageGroupNumber__c; iflog.Log__c = logstr; iflog.ErrorLog__c = ''; } else { logstr = iflog.Log__c; } try { // 向共通平台及服务新系统送信 String data = NFMUtil.getRowDataStr(rowData); status = NFMUtil.sendToSapRet(data, NFMUtil.NFM621_ENDPOINT); System.debug('NFM621Log--status->' + status); if ('Accepted'.equals(status)) { logstr += status + '\n'; rowData.retry_cnt__c = 0; } else { rowData = NFMUtil.LogAutoSend(rowData, null, status); } // 发送给 AWS 临时 Start // status = NFMUtil.sendToAWS(data, API); // if ('Created'.equals(status)) { // logstr += status + '\n'; // rowData.retry_cnt__c = 0; // } else { // // rowData = NFMUtil.LogAutoSend(rowData, null, status); // } // System.debug('NFM621Log--status->' + status); // 发送给 AWS 临时 End } catch (Exception ex) { // TODO IOException // エラーが発生した場合 System.debug(Logginglevel.ERROR, 'NFM621_' + iflog.Name + ':' + ex.getMessage()); System.debug(Logginglevel.ERROR, 'NFM621_' + iflog.Name + ':' + ex.getStackTraceString()); logstr += ex.getMessage(); iflog.ErrorLog__c += ex.getMessage() + '\n'; iflog.ErrorLog__c += ex.getStackTraceString() + '\n'; 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 + '错误次数已经超过自动送信设定的最大次数,请手动送信'; } } logstr += '\nStatus:' + status; iflog.Log__c = logstr; // if (needUpdateIflog) { upsert iflog; upsert rowData; // } } }