Skip to content

Support logging Platform Event SObjects #911

@TrangOul

Description

@TrangOul

Support logging Platform Event SObjects in setRecord(SObject)

Platform Events are SObjects:

Object obj = new MyPlatformEvent__e(MyField__c = 'MyValue');
System.debug(obj instanceof SObject);
true


However, trying to log them with the usual `setRecord(SObject)` (or deprecated `setRecordId(SObject)`) fails:
MyPlatformEvent__e evt = new MyPlatformEvent__e(MyField__c = 'MyValue');
EventBus.publish(evt);
Logger.fine('Platform Event Log').setRecord(evt);
Logger.saveLog();
Error on line 463, column 1: System.SObjectException: Invalid field Id
Class.LogEntryEventBuilder.setRecord: line 463, column 1
AnonymousBlock: line 3, column 1
AnonymousBlock: line 3, column 1

OTOH, logging a list of platform events with setRecord(List<SObject>) works:

List<MyPlatformEvent__e> evts = new List<MyPlatformEvent__e>{
	new MyPlatformEvent__e(MyField__c = 'MyValue'),
	new MyPlatformEvent__e(MyField__c = 'MyValue2')
};
EventBus.publish(evts);
Logger.fine('Platform Events Log').setRecord(evts);
Logger.saveLog();
Image

The issue with a single record is that the Logger tries to read the record's ID, and Platform Events do not have one. After commenting the line 463 in `LogEntryEventBuilder`, the log is saved correctly (although, obviously, without the record ID or link to it):
class LogEntryEventBuilder {
	(...)
	//this.logEntryEvent.RecordId__c = record.Id;
Image

EventUuid field could be used in place of the Id, but its format is incompatible with Salesforce IDs (and RecordId__c).

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions