Revision: 30553
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at August 17, 2010 05:22 by d3developer
Initial Code
public with sharing class EnhancedLookupController extends EnhancedComponentController { String secondDisplayColumn; public String displayColumn { get; set; } public String objectToLookup { get; set; } public String displayName { get; set; } public String filterString { get; set; } public transient List<JsonObject> jsonObjs { get; set; } public Boolean bigset { get; set; } private transient String jsonData; public List<String> paramValues { get; set; } public List<String> paramKeys { get; set; } public Map<String,String> params { get; set; } public String getOnLoad(){ onLoad(); if(bigset == null) bigset = false; List<String> columns = new List<String>(); List<String> displayCols = new List<String>(); if (displayColumn == null) displayColumn = 'name'; else { displayCols = displayColumn.split('[.]'); if(displayCols.size() > 1) { displayColumn = displayCols.get(0); secondDisplayColumn = displayCols.get(1); } } String initialize; //columns.add('id'); columns.add(displayColumn); if(!bigset) { jsonData = JsonUtils.getJsonFromObject(objectToLookup, columns, filterString); initialize = 'var ' + uid + 'data = ' + jsonData + ';\n' + '$(".L' + uid + '").autocomplete(' + uid + 'data, { \n' + '\n' + ' formatItem: function(item) { \n' + ' return item.' + displayColumn + '; \n' + ' } \n' + '\n' + ' }).result(function(event, item) {\n' + ' $(".' + uid + '").val(item.id);\n' + ' }); \n'; } else { uid = 'LL' + uid; initialize = '' + ' $(".L' + uid + '").autocomplete({\n' + ' source: function(request, response) {\n' + ' $.getJSON("' + System.Page.largeLookup.getUrl() + '?otl=' + objectToLookup + '&", {\n' + // Not sure if we need this // see: http://www.tgerm.com/2010/02/visualforce-salesforce-jquery-ajax-how.html // "core.apexpages.devmode.url" :'1', ' term: request.term\n' + ' }, response);\n' + ' },\n' + ' select: function(event, ui) {\n' + ' $(".' + uid +'").val(ui.item.id);\n' + ' },\n' + ' minLength: 2\n' + ' });\n'; } if (myValueHolder != null) initialize += '$(".' + uid + '").val("' + (String) myValueHolder + '");\n'; addOnLoadJavascriptToParentController(initialize); return ''; } public override Object getCastedValue() { String s = (String) myValueHolder; if(s == '') return null; else return myValueHolder; } /** invoked on an Ajax request */ public void doSearch() { params = ApexPages.currentPage().getParameters(); paramValues = params.values(); paramKeys = new List <String>(); paramKeys.addAll(params.keySet()); for(String s: paramKeys) System.debug('k:' + s); for(String s: paramValues) System.debug('v:' + s); if(params.get('otl') != null) objectToLookup = params.get('otl'); else if (objectToLookup == null) objectToLookup = 'Account'; if(params.get('dc') != null) displayColumn = params.get('dc'); else if (displayColumn == null) displayColumn = 'name'; if(params.get('filterstring') != null) filterString = params.get('filterstring'); else if (filterString == null) filterString = ''; // Do SOQL query to see if there are any records ! List<Sobject> records = getRecords(params.get('term')); if (!records.isEmpty()) { // Jsonify the results ! jsonObjs = new List<JSONObject>(); for (Sobject o : records) { JSONObject cjson = new JSONObject(); cjson.putOpt('id', new JSONObject.value((String) o.get('id'))); if(secondDisplayColumn != null) cjson.putOpt('label', new JSONObject.value((String) o.get(displayColumn) + '(' + ( (String) o.get(secondDisplayColumn) ) + ')' )); else cjson.putOpt('label', new JSONObject.value((String) o.get(displayColumn))); cjson.putOpt('value', new JSONObject.value((String) o.get(displayColumn))); jsonObjs.add(cjson); } } } // Does the SOQL query, using Ajax request data public List<SObject> getRecords(String filter) { List<SObject> records = new List<SObject>(); String limitString; if(filter.length() > 3) limitString = 'limit 100'; else limitString = 'limit 8'; if (filter != null && filter.trim().length() > 0){ String completeFilter = '%' + String.escapeSingleQuotes(filter) + '%'; if(filterString.trim().startsWith('WHERE')) filterString = 'AND' + filterString.trim().substring(5, filterString.length()); String queryString = 'select id, ' + displayColumn; if(secondDisplayColumn != null) queryString += ', ' + secondDisplayColumn; queryString += ' from ' + objectToLookup + ' where ' + displayColumn + ' like \'' + completeFilter + '\' '; if(filterString.toLowerCase().contains('limit')) queryString += filterString; else queryString += filterString + ' ' + limitString; System.debug('QUERYSTRING: ' + queryString); records = Database.query(queryString); } else { String queryString = 'select id, ' + displayColumn; if(secondDisplayColumn != null) queryString += ', ' + secondDisplayColumn; queryString += ' from ' + objectToLookup + ' '; if(filterString.toLowerCase().contains('limit')) queryString += filterString; else queryString += filterString + ' ' + limitString; System.debug('QUERYSTRING: ' + queryString); records = Database.query(queryString); } return records; } // Returns the JSON result string public String getResult() { if(jsonObjs != null) return JsonUtils.jsonify(jsonObjs); else return '[ ]'; } }
Initial URL
Initial Description
Initial Title
@fractastical Visualforce jQuery autocomplete Controller
Initial Tags
Initial Language
Other