[WIP] Custom Field Mappings - jongpie/NebulaLogger GitHub Wiki
Since v4.13.14, Nebula Logger provides the ability to add your own custom fields to its included custom objects. This is helpful in orgs that want to extend Nebula Logger's included data model by creating their own org/project-specific fields.
Summary
To start using custom field mappings, there are 4 steps:
- Add a custom field on
LogEntryEvent__e(using whatever data type you want). - Add a corresponding custom field on either
Log__corLogEntry__c. - Create a mapping record in
LoggerFieldMapping__mdt. - Set your custom fields in code when logging.
[!NOTE]
Note: this functionality currently only works in Apex & JavaScript. Flows & OmniStudio can't currently use this feature.
- Issue #719 is for adding equivalent functionality for Flow
- Issue #861 is for adding equivalent functionality for OmniStudio
Adding custom fields to the platform event LogEntryEvent__e
To get started, the first step is to add a field to the platform LogEntryEvent__e`
-
Create your own custom fields on
LogEntryEvent__e. Any data type supported by platform events can be used.-
In this example, a custom text field called
SomeCustomField__chas been added:
-
-
Populate your own custom fields in Apex by calling one of the two new instance methods on
LogEntryEventBuilder:setField(Schema.SObjectField field, Object fieldValue)setField(Map<Schema.SObjectField, Object> fieldToValue)
For now, this functionality is available in Apex. Long-term, equivalent functionality will hopefully be added for Flow & Lightning Components. Here is an example of using the 2 new methods in Apex:
Logger.info('hello, world')
// Set a single field
.setField(LogEntryEvent__e.SomeCustomTextField__c, 'some text value')
// Set multiple fields
.setField(new Map<Schema.SObjectField, Object>{
LogEntryEvent__e.AnotherCustomTextField__c => 'another text value',
LogEntryEvent__e.SomeCustomDatetimeField__c => System.now()
});
Adding custom fields to the custom objects Log__c, LogEntry__c, and LoggerScenario__c
If you want to store the data in one of Nebula Logger's custom objects, you can follow the above steps, and also...
-
Create an equivalent custom field on one of Nebula Logger's custom objects - right now, only
Log__c,LogEntry__c, andLoggerScenario__care supported. -
In this example, a custom text field also called
SomeCustomField__chas been added toLog__cobject - this will be used to store the value of the fieldLogEntryEvent__e.SomeCustomField__c: -
Create a record in the new CMDT
LoggerFieldMapping__mdtto map theLogEntryEvent__ecustom field to the custom object's custom field, shown below. Nebula Logger will automatically populate the custom object's target field with the value of the sourceLogEntryEvent__efield.-
In this example, a custom text field called
SomeCustomField__chas been added to bothLogEntryEvent__eandLog__c.
-
Setting Custom Fields in Apex
TODO
Setting Custom Fields in JavaScript
Resolved #718 by adding the ability to set custom fields on a log entry in JavaScript (lightning components), using a new function setField() in logEntryBuilder.js. This is the JavaScript equivalent to the Apex method overloads setField() in LogEntryEventBuilder.cls that were introduced in release v4.13.14.
-
To use the new
setField()function, pass an object as the function's single parameter. The object should contain the custom fields onLogEntryEvent__ethat you want to set, along with their corresponding values. For example:{ SomeField__c": "some value", "AnotherField__c": "another value" }import { createLogger } from "c/logger"; export default class LoggerCustomFieldDemo extends LightningElement { logger; async connectedCallback() { this.logger = await createLogger(); this.logger.info("Hello, world! This log entry has 2 custom fields set.") .setField({ SomeCustomTextField__c: "some text value", SomeCustomNumberField__c: 123, }); this.logger.debug("Hello again, world! This log entry has 1 other custom field set.") .setField({ AnotherCustomTextField__c: "another text value", }); this.logger.saveLog(); } }