October 19, 2021

Polymorphic Field in SOQL Queries in Salesforce

For Task Object with What field:
Apex:

List < Task > listTasks =
[ SELECT Id, Subject,  
    TYPEOF What
    WHEN Opportunity THEN Name, Amount
    END
FROM Task
LIMIT 15 ];

for ( Task objTask : listTasks ) {

    System.debug( objTask.Subject );

    if ( objTask.What instanceof Opportunity ) {
    
        Opportunity objOpportunity = objTask.What;
        System.debug( objOpportunity.Name );
        System.debug( objOpportunity.Amount );
       
    }
    
}

SOQL:
SELECT WhatId FROM Task WHERE What.Type = 'Opportunity'

For Conversation Entry Object with Conversation field:
Apex:
List < ConversationEntry > listCEs =
[ SELECT Id, ActorName, ActorType, EntryType, Message,  
    TYPEOF Conversation
    WHEN MessagingSession THEN MessagingChannel.DeveloperName, PreviewDetails
    ELSE Name
    END
FROM ConversationEntry
LIMIT 15 ];

for ( ConversationEntry objCE : listCEs ) {

    if ( objCE.Conversation instanceof MessagingSession ) {
    
        MessagingSession objMS = objCE.Conversation;
        System.debug( objMS.MessagingChannel.DeveloperName );
        System.debug( objMS.PreviewDetails );
       
    }
    
}

SOQL:
SELECT MessagingChannel.DeveloperName, PreviewDetails
FROM MessagingSession
WHERE Id IN (
    SELECT ConversationId FROM ConversationEntry WHERE CreatedDate = LAST_N_DAYS:15
)


Reference Article:
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/langCon_apex_SOQL_polymorphic_relationships.htm

No comments:

Post a Comment