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