vlocode-project - v2.4.5
    Preparing search index...

    Building export definitions

    An export definition tells the exporter how to turn a Salesforce record into a datapack: which fields identify it, which child records to embed, which fields to ignore, and how to split it into files. Definitions are written in YAML (or JSON) and passed with --definitions or referenced from an export manifest's exportDefinitions key.

    This page is the reference for the definition format. The TypeScript types behind it live in exportDefinitions.ts.

    A definitions file is a map of datapack type → definition:

    Product2:            # <-- datapack type (the key)
    objectType: Product2
    name:
    - Name
    matchingKeyFields:
    - GlobalKey__c
    # ... more datapack types
    Pricebook2:
    objectType: Pricebook2
    name:
    - Name
    matchingKeyFields:
    - Name

    The top-level key is the datapack type (a logical name, used for the output folder and to look the definition up). The objectType inside the definition is the Salesforce SObject API name. They are often the same for standard objects but differ for custom/Vlocity objects (e.g. type Product2 → objectType Product2; type CalculationMatrix → objectType %vlocity_namespace%__CalculationMatrix__c).

    You may also wrap the map under a definitions: key — both shapes are accepted.

    Anywhere an API name contains the Vlocity managed-package namespace, write %vlocity_namespace%__ instead of the literal prefix (e.g. %vlocity_namespace%__CalculationMatrix__c). Vlocode substitutes the real namespace at runtime, so the same definitions work against any org.

    A DatapackExportDefinition supports the following keys.

    The SObject API name to export. Inherited from ObjectFilter.

    objectType: '%vlocity_namespace%__CalculationMatrix__c'
    

    The format used to build the datapack's folder/file name. It is a field-value expression:

    • As a string, {FieldName} placeholders are replaced with field values: name: "{Name}".
    • As an array, each element is evaluated as an expression; literal constants are prefixed with _:
    name:
    - Name
    - _v
    - VersionNumber__c # → "<Name>v<VersionNumber>"

    The fields that uniquely identify the record. These drive the source key on export and the upsert lookup on import. Choose stable business fields, not Ids.

    matchingKeyFields:
    - ParentId
    - Name

    If omitted, the exporter falls back to org DataRaptor matching keys, then to auto-detected unique/DeveloperName/Name fields. See Concepts → Matching key for the full resolution order.

    When true, the matching key is an auto-generated value rather than one derived from field data. Only valid for records that are not referenced via lookup fields (the generated key cannot be reproduced from another datapack). Use this for dependent child records that have no natural key.

    SBQQ__LookupQuery__c:
    objectType: SBQQ__LookupQuery__c
    dependent: true
    autoGeneratedMatchingKey: true

    When true, this object is exported only when referenced by another exported object — never as a top-level datapack. Use it for child records that should travel with their parent but never be the root of an export.

    PricebookEntry:
    dependent: true
    objectType: PricebookEntry
    name:
    - Name
    matchingKeyFields:
    - Pricebook2Id
    - Product2Id

    Fields to exclude from the export entirely. Commonly used to drop volatile or runtime fields so datapacks stay clean and diff-friendly.

    ignoreFields:
    - '%vlocity_namespace%__DRBundleName__c'
    - '%vlocity_namespace%__DRProgressData__c'
    - '%vlocity_namespace%__DRError__c'
    - '%vlocity_namespace%__DRStatus__c'

    A condition that restricts which records are exported. See Filters below.

    Maximum number of records to return for this object. Inherited from ObjectFilter; most useful on embedded objects.

    A map of child records to embed inside this datapack. See Embedded objects.

    Per-field export settings — file expansion, processors, embedded lookups. See Field settings.

    A filter selects which records belong to a (top-level or embedded) object. It can take three forms:

    1. Field/value object — keys are field names, values are matched for equality. Placeholders in {...} are resolved against the parent record:

    filter:
    Product2Id: '{Product2:Id}'
    Pricebook2Id: $StandardPricebookId

    2. Field/value with an operator — give a value an explicit comparison operator with the op / value form:

    filter:
    '%vlocity_namespace%__MatrixRecordType__c':
    op: '<>'
    value: RowVersioned

    3. Raw SOQL string — for complex conditions, supply a WHERE-clause string; placeholders are interpolated before the query runs:

    filter: "AccountId = '{parent.Id}' AND IsActive = true"
    

    4. Array of filters — a list is treated as alternatives (an OR of the branches), each branch being a field/value object:

    filter:
    - '%vlocity_namespace%__CalculationMatrixId__c': '{%vlocity_namespace%__CalculationMatrix__c:Id}'
    '%vlocity_namespace%__CurrentStatus__c': Active
    - '%vlocity_namespace%__CalculationMatrixId__c': '{%vlocity_namespace%__CalculationMatrix__c:Id}'
    '%vlocity_namespace%__CurrentStatus__c': Pending

    Inside filter values and name/fileName formats:

    Syntax Meaning
    {Field} A field on the current record.
    {Parent:Field} A field on the parent datapack, addressed by the parent's object/datapack type.
    {Parent:Child:Field} A nested path through the export hierarchy.
    {A|B} or {A;B} Try A, fall back to B.
    $variable A special variable provided by the exporter (e.g. $StandardPricebookId).

    A top-level definition typically filters by Id so that an export of specific Ids resolves to those exact records:

    Attachment:
    objectType: Attachment
    name:
    - Name
    matchingKeyFields:
    - ParentId
    - Name
    filter:
    - Id: '{Id}'
    - ParentId: '{Id}'

    embeddedObjects pulls child records into the same datapack instead of emitting them as separate, referenced datapacks. Each entry is keyed by the name under which the children are written, and its value is an object filter (plus any field settings):

    AttributeCategory:
    objectType: '%vlocity_namespace%__AttributeCategory__c'
    name:
    - Name
    matchingKeyFields:
    - Code__c
    embeddedObjects:
    '%vlocity_namespace%__Attribute__c':
    objectType: '%vlocity_namespace%__Attribute__c'
    filter:
    '%vlocity_namespace%__AttributeCategoryId__c': '{%vlocity_namespace%__AttributeCategory__c:Id}'

    The filter usually references the parent's Id with the {Parent:Id} placeholder. You can nest embeddedObjects arbitrarily deep; the exporter resolves each level with batched queries.

    Alternatively, an embedded object can be expressed as a relationship by name instead of a filter:

    embeddedObjects:
    ChildItems:
    relationshipName: '%vlocity_namespace%__ProductChildItems__r'

    A practical rule observed in the bundled definitions: when you embed a child via a parent's embeddedObjects and give that child no top-level definition and no matching key, the deploy engine recreates those child rows rather than upserting them. Conversely, shared records that several parents point at should stay as standalone definitions with matching keys, and be embedded only once to avoid exporting the same SObject twice. Choose embedding to model ownership: private children embed (and may be recreated), shared records are referenced.

    The fields map (and any embedded-object entry) accepts per-field settings via ExportFieldDefinition:

    When set, the field's value is written to a separate file instead of inline in the datapack JSON. The value uses the same field-value expression format as name (string with {...}, or array with _-prefixed constants). If no extension is given it is inferred from the field type (.json for JSON, .bin for binary).

    fields:
    '%vlocity_namespace%__Content__c':
    fileName: '{Name}' # writes Content to <Name>.html / .json / .bin

    When true, an array-valued field is expanded so each item becomes its own file. Combine with --expand on the export command.

    fields:
    '%vlocity_namespace%__Sequence__c':
    expandArray: true

    When true on a lookup field, the referenced record is exported as an embedded object in the same datapack instead of as an external reference. Use ignoreFields alongside it to break circular references (for example, exclude the back-reference from the embedded child to its parent):

    fields:
    AccountId:
    embeddedLookup: true
    ignoreFields:
    - ParentId # avoid Account <-> Contact cycle

    When exporting a field as an embedded collection, sortFields lists the fields to sort by, keeping output stable and diff-friendly:

    sortFields:
    - '%vlocity_namespace%__SequenceNumber__c'

    A JavaScript snippet that processes the field value before it is written. The snippet runs with access to the field value (and supporting context such as the datapack and a logger) and returns the transformed value:

    fields:
    Config__c:
    processor: 'JSON.stringify(value)'

    Use processors sparingly — they are an escape hatch for data that needs massaging that the declarative options cannot express.

    Product2:
    objectType: Product2
    name:
    - Name
    matchingKeyFields:
    - GlobalKey__c
    ignoreFields:
    - '%vlocity_namespace%__DRBundleName__c'
    - '%vlocity_namespace%__DRProgressData__c'
    fields:
    '%vlocity_namespace%__JSONAttribute__c':
    fileName: '{Name}_attributes' # split JSON blob into its own file
    embeddedObjects:
    PricebookEntry:
    objectType: PricebookEntry
    filter:
    Product2Id: '{Product2:Id}'
    Pricebook2Id: $StandardPricebookId
    limit: 500
    '%vlocity_namespace%__ProductChildItem__c':
    objectType: '%vlocity_namespace%__ProductChildItem__c'
    filter:
    '%vlocity_namespace%__ParentProductId__c': '{Product2:Id}'

    # Referenced-only child: never a top-level datapack, travels with its parent.
    PricebookEntry:
    dependent: true
    objectType: PricebookEntry
    name:
    - Name
    matchingKeyFields:
    - Pricebook2Id
    - Product2Id

    Several complete, real-world definition files ship in the repository root and are good starting points:

    Field Type Applies to Purpose
    objectType string definition, embedded SObject API name to export.
    name string | string[] definition Folder/file name format.
    matchingKeyFields string[] definition Fields that identify the record (source key + upsert).
    autoGeneratedMatchingKey boolean definition Use a generated key (non-lookup records only).
    dependent boolean definition Export only when referenced; never top-level.
    ignoreFields string[] definition, field Fields to exclude.
    filter string | object | object[] definition, embedded Records to select.
    limit number definition, embedded Max records to return.
    embeddedObjects map definition Child records to embed.
    relationshipName string embedded Embed by relationship instead of filter.
    fields map definition Per-field settings.
    fileName string | string[] field, embedded Write value to a separate file.
    expandArray boolean field Split an array field into files.
    embeddedLookup boolean field Inline a lookup target as an embedded object.
    sortFields string[] field, embedded Sort embedded collections deterministically.
    processor string field JS snippet to transform the value.