salesforce 在不修改目标对象的情况下,生成超过报告生成能力的报告
salesforce根据特定条件筛选出一批opp,但是这些条件在report中无法实现,因为涉及到很多关联对象,这些对象超过report关联对象限制(3个),希望这批opp可以在报告中生成,但是不能修改opp的字段,因为这会更新opp的最后修改时间,可以考虑以下解决方案:
-
使用Apex代码进行筛选并生成自定义报告:编写Apex代码来根据复杂的条件筛选机会,然后将筛选结果存储在一个自定义对象中。这样,你可以在报告中引用这个自定义对象,而不需要直接修改机会对象。
-
利用Salesforce的外部服务进行数据处理:使用Salesforce Connect或其他集成工具,将数据导出到外部系统进行处理和分析,然后再导入筛选结果。
方案一:使用Apex代码和自定义对象
步骤1:创建自定义对象
创建一个自定义对象,例如FilteredOpportunities__c
,用来存储筛选后的机会数据。该对象的字段可以包含机会ID以及其他需要在报告中展示的信息。
步骤2:编写Apex代码
编写Apex代码,根据复杂的条件筛选机会,并将结果存储在自定义对象中。
public class OpportunityFilter {public static void filterOpportunities() {// 定义复杂的筛选条件List<Opportunity> filteredOpps = [SELECT Id, Name, Amount FROM Opportunity WHERE <complex conditions>];// 清空自定义对象中的旧数据List<FilteredOpportunities__c> oldFilteredRecords = [SELECT Id FROM FilteredOpportunities__c];delete oldFilteredRecords;// 将筛选结果插入自定义对象List<FilteredOpportunities__c> newFilteredRecords = new List<FilteredOpportunities__c>();for (Opportunity opp : filteredOpps) {FilteredOpportunities__c record = new FilteredOpportunities__c();record.OpportunityId__c = opp.Id;record.Name = opp.Name;record.Amount__c = opp.Amount;newFilteredRecords.add(record);}insert newFilteredRecords;}
}
步骤3:创建报告
在Salesforce中创建一个新的报告类型,基于自定义对象FilteredOpportunities__c
。然后,创建一个报告,展示从自定义对象中筛选出的机会数据。
方案二:利用Salesforce的外部服务进行数据处理
-
导出数据:使用Data Loader、Salesforce API或其他工具,将机会及其相关对象的数据导出到外部系统。
-
处理数据:在外部系统(如Excel、SQL数据库、Python脚本等)中,根据复杂条件处理和筛选数据。
-
导入数据:将筛选后的结果导入到Salesforce的自定义对象中,使用这些数据生成报告。
自动化过程
为了自动化筛选过程,可以创建一个Apex计划作业(Scheduled Apex),定期运行筛选逻辑。
示例Apex计划作业
public class OpportunityFilterScheduler implements Schedulable {public void execute(SchedulableContext sc) {OpportunityFilter.filterOpportunities();}
}// 使用系统管理页面或开发者控制台安排作业
String cronExp = '0 0 0 * * ?'; // 每天午夜运行
System.schedule('Daily Opportunity Filter', cronExp, new OpportunityFilterScheduler());
这种方法可以避免直接修改机会对象的字段,从而不会更新机会的最后修改时间,并且可以灵活处理复杂的关联对象条件。