Skip to content

Instantly share code, notes, and snippets.

@sfdcale
Last active January 23, 2018 18:06
Show Gist options
  • Save sfdcale/d4be25da88b6e3c52045cf6a9e99f1e1 to your computer and use it in GitHub Desktop.
Save sfdcale/d4be25da88b6e3c52045cf6a9e99f1e1 to your computer and use it in GitHub Desktop.
Find Salesforce Reports using specific fields
package com.MyProject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
//This class looks into the reports folder and finds reports using the specific fields that we are interested in.
public class ReportsFinder {
//This variable holds report name as key and API field names(we are interested) in as values.
static Map<String, Set<String>> reportFieldSet = new HashMap<>();
//This variable contains the API field names that we are looking for in Reports.
static List<String> fieldNames = new ArrayList<String>();
public static void main(String[] args){
// Base reports folder.
File folder = new File("/home/ram/deter/My_SFDC_Project/src/reports");
//Add field names to the list
fieldNames.add("FieldOne__c");
fieldNames.add("FieldTwo__c");
try{
searchReports(folder);
}catch(Exception e){
System.out.println(e.getMessage());
}
for(String reportName: reportFieldSet.keySet()){
if(reportFieldSet.get(reportName).size() > 0){
System.out.println(reportName + " uses the below fields: ");
}
for(String fieldName: reportFieldSet.get(reportName)){
System.out.println(" " + fieldName);
}
}
}
public static void searchReports(File folderName) throws FileNotFoundException,IOException{
for (File fileEntry : folderName.listFiles()) {
if(fileEntry.isDirectory()){
searchReports(fileEntry);
}else{
reportFieldSet.put(folderName.getName() + "/" + fileEntry.getName(), new HashSet<>());
FileReader fileReader = new FileReader(fileEntry);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String line;
while ((line = bufferedReader.readLine()) != null) {
for(String fieldName : fieldNames){
if(line.contains(fieldName)){
reportFieldSet.get(folderName.getName() + "/" + fileEntry.getName()).add(fieldName);
}
}
}
fileReader.close();
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment