Configure config.json for DMO-to-DMO Transforms (Beta)

For DMO-to-DMO transforms (transforms that read from and write to data model objects), don't use the datacustomcode scan command as you must pass the DMO schema. Instead, follow the schema standards to configure the config.json file manually.

Code extension is a pilot or beta service that is subject to the Beta Services Terms at Agreements - Salesforce.com or a written Unified Beta Agreement if executed by Customer, and applicable terms in the Product Terms Directory. Use of this pilot or beta service is at the Customer's sole discretion.

This schema example demonstrates the structure of a config.json file for DMO-to-DMO transforms:

Your config.json file must include these root-level properties.

PropertyRequiredDescription
entryPointYesThe main script file that is executed when your custom code is run
dataspaceYesThe dataspace to which the DMOs you read and write to belong (typically "default")
permissionsYesRead and write permissions for data objects
dataObjectsYesRequired when writing to DMOs

The permissions object defines which data model objects your script reads from and writes to. It must follow this schema structure.

Schema Requirements:

  • Include both read and write permissions.
  • Use dmo for data model objects.
  • Use different object names for read and write operations.
  • Every DMO in the write list must have a corresponding schema definition in dataObjects. You don't have to define schemas for DMOs in the read list.

The dataObjects array contains schema definitions for each output DMO that your script writes to. Each object in the array defines the complete structure of a data model object, including its fields, data types, and primary keys.

Each object in the dataObjects array represents one data model object and must include these properties.

PropertyRequiredTypeDescription
nameYesStringDMO name. Must match a name in permissions.write.dmo.
categoryYesStringSet to "profile" (case-insensitive).
fieldsYesArrayArray of field definitions. Include at least one field.
labelNoStringHuman-readable label
typeNoString"dataModelObject"
descriptionNoStringDescription of the DMO

Each field in the fields array defines a property of the data model object. Each field must include these properties.

PropertyRequiredTypeDescription
nameYesStringField name. Can’t be blank.
dataTypeYesStringData type. Can’t be blank.
isPrimaryKeyYesBooleanWhether this field is a primary key
labelNoStringHuman-readable label
keyQualifierFieldNameNoStringName of the key qualifier field

Use these data type values in the dataType property for your DMO fields.

  • text - Text or string values
  • email - Email addresses
  • dateTime - Date and time values
  • number - Numeric values
  • boolean - True or false values

When defining primary keys for your DMO, use keyQualifierFieldName to reference another field that provides more context for the primary key.

The keyQualifierFieldName references another field in your schema that provides more context for the primary key.

If your script writes to multiple DMOs, define a schema for each one in the dataObjects array. Each DMO must have its own object definition with a complete field schema.

This example shows a complete config.json file that follows all the required schema standards for a DMO-to-DMO transform.

Your config.json file must meet these validation requirements.

  • Read and write permissions must not be empty.
  • Dataspace must not be blank.
  • Don't read and write the same object.
  • dataObjects must be present and not empty.
  • Every DMO in permissions.write.dmo must have a matching schema in dataObjects.
  • Each object's name must not be blank.
  • Each object's category must be "profile".
  • Each object must have at least one field.
  • Each field's name must not be blank.
  • Each field's dataType must not be blank.
  • isPrimaryKey must be specified for each field.

These errors occur during package validation when your config.json doesn't follow the required schema standards.

Error MessageSolution
No DMO schema foundAdd dataObjects array with schemas for all write DMOs
Some DMO write targets do not have a schemaEnsure all DMO names in write.dmo have matching entries in dataObjects
Invalid DMO Schema: name missingAdd name property to data object
Invalid DMO Schema: invalid object categorySet category to "profile"
Invalid DMO fields schemaEnsure all fields have name and dataType
Can't read and write from/to the same entityUse different DMO names for read vs write

Currently, all these validation errors surface to the Connect API as error code 2999 ("Unknown error occurred"). The specific error messages preceding are available in logs for debugging.

  1. Start with Write targets: List all DMOs you write to in permissions.write.dmo.
  2. Create matching schemas: Make sure that each DMO has a corresponding entry in dataObjects with the same name.
  3. Define all output fields: Include all fields that your script writes.
  4. Set the Primary Keys correctly: Identify primary keys and mark them with isPrimaryKey: true.
  5. Match your script output: Ensure field names match what your Python script produces.
  6. Use descriptive labels: While optional, labels improve readability and debugging.