global class SBG017WebService { global class GeDatas { webservice NFMUtil.Monitoring Monitoring; webservice SBG017WebService.GeData[] GeData; } global class GeData { webservice String OpportunityCode; webservice String SAPQuotationCode; webservice String StockAnswer; webservice String Other1; webservice String Other2; webservice String Other3; } webservice static void SBG017(GeDatas geDatas) { if (geDatas == null) { return; } NFMUtil.Monitoring Monitoring = GeDatas.Monitoring; if (Monitoring == null) { return; } BatchIF_Log__c rowData = NFMUtil.saveRowData(Monitoring, 'SBG017', GeDatas.GeData); if (String.isBlank(rowData.Log__c) == false) execute(rowData.Id); } global static void execute(String rowData_Id) { Integer batch_retry_max_cnt = Integer.valueOf(System.Label.batch_retry_max_cnt); BatchIF_Log__c rowData = [Select Id, Name, Log__c, ErrorLog__c, Log2__c, Log3__c, Log4__c, Log5__c, Log6__c, Log7__c, Log8__c, Log9__c, Log10__c, Log11__c, Log12__c, MessageGroupNumber__c from BatchIF_Log__c where RowDataFlg__c = true and Id = :rowData_Id]; String logstr = rowData.MessageGroupNumber__c + ' start\n'; BatchIF_Log__c iflog = new BatchIF_Log__c(); iflog.Type__c = 'SBG017'; iflog.MessageGroupNumber__c = rowData.MessageGroupNumber__c; iflog.Log__c = logstr; iflog.ErrorLog__c = ''; insert iflog; String rowDataStr = NFMUtil.getRowDataStr(rowData); List achievementList = (List) JSON.deserialize(rowDataStr, List.class); if (achievementList == null || achievementList.size() == 0) { return; } Savepoint sp = Database.setSavepoint(); try { // 更新対応配列とMapなどをセット List oppNoList = new List(); for (SBG017WebService.GeData GeData : achievementList) { if (GeData.OpportunityCode == null || GeData.OpportunityCode == '' || GeData.SAPQuotationCode == null || GeData.SAPQuotationCode == '' || GeData.StockAnswer == null || GeData.StockAnswer == '' ) { // 必須項目がない場合、処理と飛ばす continue; } oppNoList.add(GeData.OpportunityCode); } List oppList = [select Id, SAP_QuotationCode__c,InquiryNumber__c,Stock_Answer__c from Opportunity where InquiryNumber__c in :oppNoList]; Map oppsMap = new Map(); for (Opportunity opp : oppList) { oppsMap.put(opp.InquiryNumber__c, opp); } // 更新対応配列をセット Map oppUpdateMap = new Map(); for (SBG017WebService.GeData GeData : achievementList) { if (GeData.OpportunityCode == null || GeData.OpportunityCode == '') { // 必須項目がない場合、処理と飛ばす iflog.ErrorLog__c += 'OpportunityCode is required\n'; continue; } if (GeData.SAPQuotationCode == null || GeData.SAPQuotationCode == '') { // 必須項目がない場合、処理と飛ばす iflog.ErrorLog__c += 'SAPQuotationCode is required\n'; continue; } if (GeData.StockAnswer == null || GeData.StockAnswer == '') { // 必須項目がない場合、処理と飛ばす iflog.ErrorLog__c += 'StockAnswer is required\n'; continue; } Opportunity opp = oppsMap.get(GeData.OpportunityCode); if (opp == null) { // 更新対象商談がない場合 iflog.ErrorLog__c += '[' + GeData.OpportunityCode + ']Opportunity[' + GeData.SAPQuotationCode + ']NotExist\n'; continue; } // 項目セット //opp.InquiryNumber__c = GeData.OpportunityCode; opp.SAP_QuotationCode__c = GeData.SAPQuotationCode; opp.Stock_Answer__c = GeData.StockAnswer; oppUpdateMap.put(opp.Id, opp); } if (oppUpdateMap.size() > 0) { update oppUpdateMap.values(); } logstr += '\nend'; rowData.retry_cnt__c=0; } catch(Exception ex) { // エラーが発生した場合 Database.rollback(sp); System.debug(Logginglevel.ERROR, 'SBG017_' + rowData.MessageGroupNumber__c + ':' + ex.getMessage()); System.debug(Logginglevel.ERROR, 'SBG017_' + rowData.MessageGroupNumber__c + ':' + ex.getStackTraceString()); logstr += '\n' + ex.getMessage(); iflog.ErrorLog__c = ex.getMessage() + '\n' + ex.getStackTraceString() + '\n' + iflog.ErrorLog__c; 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+'错误次数已经超过自动收信设定的最大次数,请手动收信'; } } update rowData; iflog.Log__c = logstr; if (iflog.Log__c.length() > 131072) { iflog.Log__c = iflog.Log__c.subString(0, 131065) + ' ...'; } if (iflog.ErrorLog__c.length() > 32768) { iflog.ErrorLog__c = iflog.ErrorLog__c.subString(0, 32760) + ' ...'; } update iflog; } }