SolidX
ReferenceMetadata Schema

Actions

Metadata schema for defining actions in SolidX applications.

Where it lives

JSON Pointer: /actions JSONPath: $.actions Parent: Root of the metadata file

Overview

Action metadata defines what happens when a user interacts with a menu item, button, or other clickable UI element in a SolidX application.

Menus, buttons, and links resolve to actions. An action is therefore the binding layer between a user interaction and the runtime surface that should open or execute.

When a user clicks one of these UI elements, the corresponding action is triggered and the defined behavior is executed.

Key Configuration Points

  1. Module and view association All actions belong to a module. When the action opens a generated SolidX view, it should also reference the relevant viewUserKey, and in most cases the matching modelUserKey.

  2. solid actions Use solid actions when the target is a generated SolidX view. In this case, viewUserKey and modelUserKey are the main linkage fields, and customComponent is not needed.

  3. custom actions Use custom actions when the target is a custom frontend surface rather than a generated view. In this case, customComponent is required, and customIsModal controls whether that component is shown as a modal dialog.

Note

If a custom action is not associated with a model, modelUserKey can be left empty.

Action Types

  1. solid actions: Use solid actions for standard SolidX views such as list, form, tree, card, or kanban views.

  2. custom actions: Use custom actions when the target is a custom frontend component or page rather than a generated SolidX view.

Configuration Examples

Solid Action Example

Below is a solid action that opens a generated institute list view.

Solid action example
{
    ..., // Other metadata
    "actions": [
        {
            "displayName": "Institute List View",      // User-friendly action name
            "name": "institute-list-view",             // Internal action reference (kebab-case)
            "type": "solid",                           // Action type: solid, custom
            "domain": "",                              // Domain context (optional)
            "context": "",                             // Additional configuration (optional)
            "customComponent": "",                     // UI route path
            "customIsModal": true,                     // Display as modal dialog
            "serverEndpoint": "",                      // Feature to be implemented
            "viewUserKey": "institute-list-view",      // Target view reference
            "moduleUserKey": "fees-portal",            // Module this action belongs to
            "modelUserKey": "institute"                // Model for standard actions
        },
        ... // Other actions
    ]
}

Custom Action Example

Below is a custom action that routes into a custom frontend surface for the fees portal home page.

Custom action example
{
    ..., // Other metadata
    "actions": [
        {
            "displayName": "Fees Portal Home",
            "name": "fees-portal-home-action",
            "type": "custom", // Custom action
            "domain": "",
            "context": "",
            "customComponent": "/admin/core/fees-portal/home", // Required for custom actions
            "customIsModal": true,
            "serverEndpoint": "", // Feature to be implemented
            "viewUserKey": "",
            "moduleUserKey": "fees-portal",
            "modelUserKey": ""
        },
        ... // Other actions
    ]
}

Complete Navigation Structure Example

This example shows how menu items and actions are authored together inside one module:

Navigation structure example
{
  "menus": [
    {
      "displayName": "Home",
      "name": "fees-portal-home-menu",
      "sequenceNumber": 1,
      "actionUserKey": "fees-portal-home-action"
    },
    {
      "displayName": "Institute",
      "name": "institute-menu-item",
      "sequenceNumber": 2,
      "actionUserKey": "institute-list-action",
      "roles": ["Institute Admin", "App Admin"]
    },
    ... // Additional menus
  ],
  "actions": [
    {
      "displayName": "fees-portal Home",
      "name": "fees-portal-home-action",
      "type": "custom",
      "customComponent": "/admin/core/fees-portal/home",
      "customIsModal": true,
      "moduleUserKey": "fees-portal"
    },
    {
      "displayName": "Institute List Action",
      "name": "institute-list-action",
      "type": "solid",
      "customComponent": "",
      "customIsModal": true,
      "viewUserKey": "institute-list-view",
      "modelUserKey": "institute",
      "moduleUserKey": "fees-portal",
    }
    // ... Additional actions
  ]
}

Action Metadata Attributes

name (string, required, unique)

Name of the action item (column/property).
Default: N/A

displayName (string, required)

Display name of the action item (shown in the UI).
Default: N/A

type (string, required)

Type of action. Supported types:

  • solid: Opens or resolves to a generated SolidX view.
  • custom: Custom action that uses a custom frontend component. Provide customComponent for this type. Default: N/A

domain (JSON, optional)

JSON object defining domain-specific parameters for the action.
Default: N/A

context (JSON, optional)

JSON object defining context-specific parameters for the action.
Default: N/A

customComponent (string, optional)

Path to the custom frontend component to be used for the action.
Applies: Only if type is custom.
Default: N/A

customIsModal (boolean, optional)

Indicates if the custom component should be displayed as a modal dialog. Applies: Only if type is custom.
Default: false

serverEndpoint (string, optional)

Backend server endpoint to be called for the action.
Applies: Only if type is custom.
Default: N/A

viewUserKey (string, optional)

User key of the view associated with the action.
Default: N/A

moduleUserKey (string, required)

User key of the module this action belongs to.
Default: N/A

modelUserKey (string, optional)

User key of the model this action operates on. This is typically present for solid actions and may be empty for custom actions that are not model-bound.
Default: N/A