Filtered picklist values for a relatedto field

  • 1
  • Question
  • Updated 2 years ago
  • Answered
for a relatedTo(whatID) on task I want to allow a certain number of objects that the task can be related to. I found another snippet that allows me to set the target objects but I still want the autocomplete to work based on the target object the user has selected from the picklist. Essentially I want to work like the out of the box picklist renderer with autocomplete but with a defined set of target objects.

//
// CONFIGURATION
//
// Define the possible target objects
var targetObjects = ['Opportunity','Account','RPS_Business_Plan__c'];
// Render as a Picklist instead of an Autocomplete?
var renderAsPicklist = false;
var field = arguments[0],
value = skuid.utils.decodeHTML(arguments[1]),
metadata = field.metadata,
$ = skuid.$;
if (field.mode == 'edit') {
field.options.type = 'REFPICK';

// Limit the set of target objects
var targets = [],
uniqueTargets = {};
$.each(metadata.referenceTo,function(i,r){
if (($.inArray(r.objectName,targetObjects) != -1) && (!uniqueTargets[r.objectName])) {
targets.push(r);
uniqueTargets[r.objectName] = 1;
if (targets.length == targetObjects.length) return false;
}
});
if (targets.length) {
// Make this field render as a picklist?
if (renderAsPicklist) field.options.type = 'REFPICK';
// Override the current referenceTo
metadata.referenceTo.length = 0;
metadata.ref = $.map(targets,function(targ){return targ.objectName;}).join();
metadata.referenceTo = targets;
}
}
// Run the standard renderer
skuid.ui.fieldRenderers[metadata.displaytype][field.mode](field,value);
field.options.type = 'CUSTOM';
Photo of Jaime

Jaime

  • 1,220 Points 1k badge 2x thumb

Posted 2 years ago

  • 1
Photo of Zach McElrath

Zach McElrath, Employee

  • 49,056 Points 20k badge 2x thumb
I'm not exactly sure which part of this is not working for you, but what I'm hearing is that you are trying to have the renderer be "Auto-Complete" but with a defined, limited set of target objects. In that case, I think that you only need to change these lines: 

if (field.mode == 'edit') { 
field.options.type = 'REFPICK'; 

to be:

if (field.mode == 'edit') { 
   if (renderAsPicklist) field.options.type = 'REFPICK'; 
Photo of Jaime

Jaime

  • 1,220 Points 1k badge 2x thumb

Zach....yes  that's right.  But when I do that it does filter out the objects...but for the actual value it shows a dropdown list as opposed to the autocomplete where you could type in a value and have it search for a matching record.

Photo of Zach McElrath

Zach McElrath, Employee

  • 49,056 Points 20k badge 2x thumb
Did you actually make the code change I provided? I just copied and pasted the code you provided above, made the change that I suggested, and it displays an autocomplete. Did you switch the field to use the Custom Field Renderer snippet?