Created
July 26, 2016 18:35
-
-
Save fernandomitre7/a7a59ec262d8069ffbb2058acc9b253a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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