Determine key prefix for reference field

  • 2
  • Question
  • Updated 4 years ago
  • Answered
For a given model, skuid makes available the KeyPrefix property that provides the org specific object prefix.  This comes in very handy.

We have a scenario were we would like to build a hyperlink to the "tab/list" view for fields on a skuid page. The fields we would like this for are reference/lookup fields on the object being displayed.  For example, on our Order page, we display the Account for the order.  We would like to put a hyperlink to "/001/o" in the label area.  Getting the hyperlink in the label is easy.  Doing this dynamically to support deployments to other orgs is the challenge.

Is there a way to access the Key Prefix for a lookup field on an object?

My solution thus far is to create a remote method that gets invoked when the hyperlink is clicked that would call getDescribe() on the SObject (the name would be provided in the parameter to the remote method), return the key prefix and then redirect appropriately.  Another option might be to create VF page that does something similar.

I'm hoping there might be an easier way though.  Does skuid have this information under the covers where it might be accessible? 

Thoughts/suggestions are appreciated!
Photo of Barry Schnell

Barry Schnell, Champion

  • 18,076 Points 10k badge 2x thumb

Posted 4 years ago

  • 2
Photo of Zach McElrath

Zach McElrath, Employee

  • 49,056 Points 20k badge 2x thumb
If you go look at the field metadata for a Skuid REFERENCE field, you should be able to get what you're after:

var someModel = skuid.model.getModel('someModel');
var someField = someModel.getField('Some_Reference_Field__c');

if (!someField.namePointing) {
// For non-polymorphic reference fields,
// just grab the first entry in referenceTo,
// and return its key prefix
var targetObject = someField.referenceTo[0];
console.log('Key Prefix for ' + targetObject.objectName + ': ' + targetObject.keyPrefix);

} else {
// For polymorphic reference fields (e.g. WhoId, WhatId, OwnerId)
// there are multiple possible "target objects",
// so you'll have to loop over and find the object you're interested in
skuid.$.each(someField.referenceTo,function(){
   if (this.objectName === 'MyCustomObject__c') {
      targetObject = this;
      console.log('Key Prefix for ' + this.objectName + ': ' + this.keyPrefix);
   }
});
}


Photo of Barry Schnell

Barry Schnell, Champion

  • 18,076 Points 10k badge 2x thumb
Worked like a champ, thanks Zach!!