Skip to content

Instantly share code, notes, and snippets.

@fernandomitre7
Created July 26, 2016 18:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fernandomitre7/a7a59ec262d8069ffbb2058acc9b253a to your computer and use it in GitHub Desktop.
Save fernandomitre7/a7a59ec262d8069ffbb2058acc9b253a to your computer and use it in GitHub Desktop.
public static List<Map<String, String>> search(string keySearch, Map<String, List<String>> objects) {
String searchQuery = 'FIND \'*' + String.escapeSingleQuotes(keySearch) + '*\' IN ALL FIELDS RETURNING ';
List<List<SObject>> searchList;
Integer i = 0, j = 0;
String currentObject;
//Creating the dynamic query
for (String key : objects.keySet()) {
i++;
j = 0;
searchQuery += key + ' (';
for (String val : objects.get(key)) {
j++;
if (j < objects.get(key).size())
searchQuery += val + ', ';
else
searchQuery += val;
}
if (i < objects.keySet().size())
searchQuery += '), ';
else
searchQuery += ') ';
}
//search SOSL
Map<String, String> results = new Map<String, String>();
List<Map<String, String>> listResults = new List<Map<String, String>>();
Map<String, String> r;
searchList = search.query(searchQuery);
String fieldName;
for (List<sObject> sobj : searchList) { //List<Contact>, List<Account>
//Foreach type of object in the search
if (objects.keySet().contains(String.valueOf(sobj.getSObjectType())))
for (sObject SO : sobj) {
for (String val : objects.get(String.valueOf(sobj.getSObjectType()))) { //Lista de campos (Id, Name, Phone, HomePhone, etc)
//List of rows
if (SO.get(val) != null) {
String valueField = String.valueOf(SO.get(val)).toLowerCase();
if (valueField.contains(keySearch.toLowerCase())) {
fieldName = Schema.getGlobalDescribe().get(String.valueOf(sobj.getSObjectType())).getDescribe().fields.getMap().get(val).getDescribe().getName();
r = new Map<String, String>();
Schema.DescribeSObjectResult d = sobj.getsObjectType().getDescribe();
//If the key match with a name, add the phone field
if (fieldName == 'Name') {
if (SO.get('Phone') != null) {
r = new Map<String, String>();
r.put('id', String.valueOf(SO.get('Id')));
r.put('name', String.valueOf(SO.get('Name')));
r.put('value', String.valueOf(SO.get('Phone')));
r.put('fieldName', 'Phone');
r.put('objectType', String.valueOf(sobj.getSObjectType()));
listResults.add(r);
}
if (d.fields.getMap().containskey('HomePhone')) {
if (SO.get('HomePhone') != null) {
r = new Map<String, String>();
r.put('id', String.valueOf(SO.get('Id')));
r.put('name', String.valueOf(SO.get('Name')));
r.put('value', String.valueOf(SO.get('HomePhone')));
r.put('fieldName', 'HomePhone');
r.put('objectType', String.valueOf(sobj.getSObjectType()));
listResults.add(r);
}
}
if (d.fields.getMap().containskey('MobilePhone')) {
if (SO.get('MobilePhone') != null) {
r = new Map<String, String>();
r.put('id', String.valueOf(SO.get('Id')));
r.put('name', String.valueOf(SO.get('Name')));
r.put('value', String.valueOf(SO.get('MobilePhone')));
r.put('fieldName', 'MobilePhone');
r.put('objectType', String.valueOf(sobj.getSObjectType()));
listResults.add(r);
}
}
if (d.fields.getMap().containskey('OtherPhone')) {
if (SO.get('OtherPhone') != null) {
r = new Map<String, String>();
r.put('id', String.valueOf(SO.get('Id')));
r.put('name', String.valueOf(SO.get('Name')));
r.put('value', String.valueOf(SO.get('OtherPhone')));
r.put('fieldName', 'OtherPhone');
r.put('objectType', String.valueOf(sobj.getSObjectType()));
listResults.add(r);
}
}
} else if (fieldName != 'Id') {
r.put('id', String.valueOf(SO.get('Id')));
r.put('name', String.valueOf(SO.get('Name')));
r.put('value', valueField);
r.put('fieldName', fieldName);
r.put('objectType', String.valueOf(sobj.getSObjectType()));
listResults.add(r);
}
}
}
}
}
}
return listResults;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment