/** * 仪表板用询价关系对象每日增量写入数据用Batch * Author:shashiming 2024-03-06 * Ver 1.0 Schedule重复执行Batch,对象作为传入参数,由于需要写入的对象比较多,这种方式可能导致启动不了,需要修改。 * Ver 1.1 (待彤彤修改)修改Start方法,从辅助表里取对象(新增type),预计挂在招标项目的定时任务里,凌晨6:00-7:00间执行 */ global class ReportOppLinkFromOppBatch implements Database.Batchable { // 检索对象 public String insertObject; // 创建日开始时间 public string inputdate; // 带参的构造函数 global ReportOppLinkFromOppBatch(String insertObject, String inputdate) { this.insertObject = String.isNotBlank(insertObject) ? insertObject : null; this.inputdate = String.isNotBlank(inputdate) ? inputdate : null; } global Database.QueryLocator start(Database.BatchableContext bc) { String query = 'SELECT id FROM '; query += String.isNotBlank(this.insertObject) ? this.insertObject : 'Opportunity'; query += ' WHERE CreatedDate >= '; query += String.isNotBlank(this.inputdate) ? (this.inputdate + 'T00:00:00.000+0800') : 'LAST_N_DAYS:0'; query += ' ORDER BY CreatedDate'; return Database.getQueryLocator(query); } global void execute(Database.BatchableContext BC, list scope) { // 写入日志 BatchIF_Log__c iflog = new BatchIF_Log__c(); iflog.Type__c = 'ReportOppLinkFromOppInsert'; iflog.Log__c = 'ReportOppLinkFromOppBatch start\n'; iflog.ErrorLog__c = ''; insert iflog; try { // 先确认对象 Id objid = scope != null && scope.size() > 0 ? scope.get(0).Id : null; if (objid == null) { iflog.Log__c += 'There is no data query from database\n'; update iflog; return; } SObjectType objType = objid.getSObjectType(); String objTypeStr = objType.getDescribe().getName(); iflog.Log__c += 'Insert object type is ' + objTypeStr; // 获取所有id List ids = new List(); for (Sobject obj: scope) { ids.add(obj.Id); } // 获得已存在的数据 List links = null; if (objTypeStr == 'Opportunity'){ links = [select Id, Opportunity__c, Product_inquiry_sheet__c, task__c, Lead__c, Tender_Information__c, Statu_Achievements__c, AgencyOpportunity__c from Report_Opp_Link__c where Opportunity__c in :ids]; } else if (objTypeStr == 'Inquiry_form__c') { links = [select Id, Opportunity__c, Product_inquiry_sheet__c, task__c, Lead__c, Tender_Information__c, Statu_Achievements__c, AgencyOpportunity__c from Report_Opp_Link__c where Product_inquiry_sheet__c in :ids]; } else if (objTypeStr == 'task__c') { links = [select Id, Opportunity__c, Product_inquiry_sheet__c, task__c, Lead__c, Tender_Information__c, Statu_Achievements__c, AgencyOpportunity__c from Report_Opp_Link__c where task__c in :ids]; } else if (objTypeStr == 'Lead') { links = [select Id, Opportunity__c, Product_inquiry_sheet__c, task__c, Lead__c, Tender_Information__c, Statu_Achievements__c, AgencyOpportunity__c from Report_Opp_Link__c where Lead__c in :ids]; } else if (objTypeStr == 'Tender_Information__c') { links = [select Id, Opportunity__c, Product_inquiry_sheet__c, task__c, Lead__c, Tender_Information__c, Statu_Achievements__c, AgencyOpportunity__c from Report_Opp_Link__c where Tender_Information__c in :ids]; } else if (objTypeStr == 'Statu_Achievements__c') { links = [select Id, Opportunity__c, Product_inquiry_sheet__c, task__c, Lead__c, Tender_Information__c, Statu_Achievements__c, AgencyOpportunity__c from Report_Opp_Link__c where Statu_Achievements__c in :ids]; } else if (objTypeStr == 'Agency_Opportunity__c') { links = [select Id, Opportunity__c, Product_inquiry_sheet__c, task__c, Lead__c, Tender_Information__c, Statu_Achievements__c, AgencyOpportunity__c from Report_Opp_Link__c where AgencyOpportunity__c in :ids]; } List waitToInsert = new List(); for (String oid : ids) { Boolean insertFlag = true; if (links != null && links.size() > 0) { for(Report_Opp_Link__c l : links) { if (l.Opportunity__c == oid || l.Product_inquiry_sheet__c == oid || l.Lead__c == oid || l.Tender_Information__c == oid || l.Statu_Achievements__c == oid || l.AgencyOpportunity__c == oid ) { insertFlag = false; break; } } } if (insertFlag) { Report_Opp_Link__c link = new Report_Opp_Link__c(); if (objTypeStr == 'Opportunity'){ link.Opportunity__c = oid; } else if (objTypeStr == 'Inquiry_form__c') { link.Product_inquiry_sheet__c = oid; } else if (objTypeStr == 'task__c') { link.task__c = oid; } else if (objTypeStr == 'Lead') { link.Lead__c = oid; } else if (objTypeStr == 'Tender_Information__c') { link.Tender_Information__c = oid; } else if (objTypeStr == 'Statu_Achievements__c') { link.Statu_Achievements__c = oid; } else if (objTypeStr == 'Agency_Opportunity__c') { link.AgencyOpportunity__c = oid; } else { continue; } waitToInsert.add(link); } } if (waitToInsert != null && waitToInsert.size() > 0) { insert waitToInsert; } iflog.Log__c += waitToInsert.size() + ' datas insert'; update iflog; } catch (Exception ex) { iflog.ErrorLog__c += ex.getMessage(); update iflog; } } global void finish(Database.BatchableContext BC) { } }