How to store nested data entities

A how-to guide for storing nested data entities.

Introduction

Would you like to save multiple products in your data entities? Then create nested entities in your solution by following these steps.

Prerequisites

  • You have a working solution with an EntityDataStore and an EntityTable.

1. Add a reference type property

To store nested entities, in the EntityDataStore configuration:

  • Define a property with type: Reference.
  • Define the entityType to be nested in the “root” entity..
  • Define the default values in the nested entity.

The configuration should look similar to the example below:

my-entity-datastore:
	kind: EntityDataStore
	properties:
		my-prop-a:
			type: Number
		my-nested-entities:
			type: Reference
			entityType: my-nested-entity-prop
			default: []

2. Define entityTypes

To configure the properties of the nested entities:

  • Define entityTypes the “root” entity contains. The entityTypes define the entities that can be nested in the root or other nested entities.
  • Define the properties of the nested entity.

The configuration should look similar to the example below:

my-entity-datastore:
	kind: EntityDataStore
	properties:
		my-prop-a:
      type: Number
    my-nested-entities:
      type: Reference
      entityType: my-nested-entity-prop
      default: []
	entityTypes:
		my-nested-entity-prop:
			properties:
				my-nested-entity-prop-a:
					type: Number
				my-nested-entity-prop-b:
					type: Number

💡 To nest another entity in a nested entity, define the entityType on the root level, define a Reference property and set the entityType on the nested entity level.

3. Subscribe EntityDataStore to the ControlPanel to add/edit “root” entities

To save the ControlPanel values to an entity on the “root” level in the EntityDataStore:

  • Subscribe the EntityDataStore to the ControlPanel.
  • Define the frame and source.
  • Set the action to be performed.
    • update for editing the values of an existing selected entity.
    • insert for adding a new entity with the defined values.

4. Subscribe EntityDataStore to the ControlPanel to add/edit “nested” entities

To save the ControlPanel values to an entity on the “nested” level in the EntityDataStore:

  • Subscribe the EntityDataStore to the ControlPanel.
  • Define the frame and source.
  • Set the action to be performed.
    • update for editing the values of an existing selected nested entity.
    • insertAt for adding a new nested entity with the defined values.
  • Configure the insertAt action. Define which level the entity should be inserted. To insert a nested entity, the path is defined by the nested level(s).
	my-entity-datastore:
	kind: EntityDataStore
	subscribe:
		- kind: ControlPanel
			frame: 
			source:
			action:
				type: InsertAt
				at: [my-nested-entities]

5. Subscribe the EntityTable to the EntityDataStore

To show the nested entities in a table,

  • Subscribe the EntityTable to the EntityDataStore.
  • Define the frame and the source.
  • Define the path to the nested entity with the pathToBranch property. $root refers to the root entity level. To show a nested entity in the table, the path would be the root level, followed by the nested level(s).
  • To show the nested entities in the selected root entity, set filterBySelected.
	my-entity-table:
	kind: EntityTable
	subscribe:
		- kind: EntityDataStore
			frame: my-frame
			source:  my-entity-datastore
			pathToBranch: [$root, my-nested-entities]
			filterBySelected: [$root]

💡 Afterwards, you can select nested entities in the table by subscribing the EntityDataStore to the EntityTable.

See the image below as an example.

Configuration

See the entity data store configuration docs for more information.