Skip to main content

Sneak Peek: Salesforce Polymorphic keys

What?
Polymorphic key is a relationship field which can relate to more than one type of object as parent. Unlike Lookup and Master-detail relationships which are related to a single object, Polymorphic keys can refer to multiple objects.

Where?
As of date, Polymorphic keys cannot be created by developers. They are available for specific objects out of the box for e.g. WHOID and WHATID in Task and Event objects.

Why?
Sneak Peak: Salesforce Polymorphic Keys
As we know, Salesforce’s data model is strictly relationship based, and the type of objects at both the ends of the relationship is fixed. So, if an object is to be related with multiple objects, then a separate relationship field has to be created for each relationship. Polymorphic keys are required to maintain relationship with multiple types, for e.g. task/ event might be related with various type of records viz. Account, Contact etc. So, a polymorphic key helps in establishing unique access to such disparate relationships.

How?
Polymorphic keys are hard to handle!! As they are polymorphic the queries/ data manipulation can be tricky, as the related object can be anything, and hence the operations might or might not succeed. For e.g. functionality to update a field on Account may not work with Contact.

In order to implement such functionality, the type of the object is to be determined and hence the operations are to be applied. Further, the objects would need to be retrieved separately.

With Summer ’13 release, Polymorphic keys have become more friendly. They can be used in SOQL queries to filter out specific types, based on type specific filter criteria. Following are few ways of handling polymorphic keys in SOQL:-

SOQL TYPEOF Clause
List = [SELECT TYPEOF What WHEN Account THEN Phone WHEN Opportunity THEN Amount END FROM Event];
This would conditionally return value of field "Phone" if event is related to Account and value of field "Amount" if event is related to Opportunity


Note: TYPEOF is currently available as a Developer Preview as part of the SOQL Polymorphism feature.

Filter results by Type
List = [SELECT Description FROM Event WHERE What.Type IN ('Account', 'Opportunity')];
This would return only those events which are related with an Account or Opportunity.


For more details refer http://www.salesforce.com/us/developer/docs/soql_sosl/Content/sforce_api_calls_soql_relationships.htm?SearchType=Stem&Highlight=whatId#soql_polymorph_keys

Comments

  1. Hi,

    Do you know which standard objects (other than Event and Task) in Salesforce have Polymorphic relationships?

    Thanks.

    ReplyDelete
    Replies
    1. That'll be bit hard to find, these are rare (thankfully so). One I remember clearly is in share objects, there's a field called UserOrGroupID. As name suggests, it can relate to a user or a group record.

      Delete

Post a Comment

Popular posts from this blog

Quick Tips: Salesforce default Images

Well, I'm sure a lot of you still rely on using out of the box salesforce images for displaying quick icons within formula fields or even using them within your Visualforce pages. Lately, I realized that a lot of earlier resources are no longer accessible, so I tried to quickly extract all images from Salesforce CSS files and provide a quick reference here. Please note, I've referenced all images from SF servers directly, so if anything changes, the image should stop rendering here. As these images are completely controlled by Salesforce, and in case they change anything, it might lead to image not being accessible. Image path Image /img/samples/flag_green.gif /img/samples/flag_green.gif /img/samples/flag_red.gif /img/samples/color_red.gif /img/samples/color_yellow.gif /img/samples/color_green.gif /img/samples/light_green.gif /img/samples/light_yellow.gif /img/samples/light_red.gif /img/samples/stars_100.gif /img/samples/stars_200.gif /img/samples/stars_300.

Lightning: Generate PDF from Lightning components with in-memory data

I'm sure as everyone is diving into lightning components development, they are getting acquainted with the nuances of the Lightning components framework. As well as, its current limitations. Being a new framework, this is bound to happen. Although we have our users still using salesforce classic, we have started using lightning components framework our primary development platform and Visualforce is considered primarily for rendering lightning components within Classic Service console. Recently, while re-architecting a critical module, we encountered a problem wherein we needed to generate PDF from lightning components. Now, being Javascript intensive framework, it has limited room for such features (may be included in future roadmap). As of now, there is no native feature within the lightning framework to do so (at least I didn't find anything). Common Scenario - Create Visualforce page to retrieve data and generate PDF For scenarios where the data exist within Sa

Quick Tips: Setup SFDX Manually without Admin access

We all have faced challenges while working in different enterprise environments, where there may be lot of controls/ checks/ red-tape to get by. In such situations, getting access to simple tools (even git) can take lot of time. Note: This tutorial is to be followed at your own risk, as it may not be complaint to your organization's IT policies. What is SFDX? SFDX is a command line utility for managing salesforce builds/ deployments. Being command line, it can be easily embedded to automation chains, to help build fully automated build and deployment processes. To get started, refer  https://trailhead.salesforce.com/en/content/learn/trails/sfdx_get_started Setup SFDX on Windows machine without admin access As you may have already realized, SFDX installation needs admin access to one's machine. Which may be a luxury a lot of developers may not have. So, i tried to provide a step-by-step guide to setup SFDX on your computer without any admin access Steps: Note: