Tables
Reference for all tables in the Aptean Mesh SDUI framework. These tables store the configuration, runtime state, and audit data that drive the mobile application.
Mobile App Bundle 220FDW
Table 73167873 -- The top-level configuration entity for an Aptean Mesh mobile deployment.
- Namespace:
Aptean.Mesh.SDUI - Caption: Mobile App Bundle
- Data Classification: CustomerContent
Fields
| No. | Name | Type | Description |
|---|---|---|---|
| 1 | ID | Guid | Unique identifier for the bundle. Auto-generated on insert. |
| 11 | Code | Code[20] | Human-readable code for the bundle. Must not be blank. |
| 12 | Description | Text[50] | Short description of the bundle. |
| 13 | Version | Integer | Version number (starts at 1, read-only). |
| 14 | Publisher | Text[30] | Publisher of the bundle (read-only). |
| 15 | Locked | Boolean | Whether this is a system bundle that cannot be modified or deleted (read-only). |
| 16 | Status | Enum AppBundleStatus220FDW | Lifecycle status: Dev, Test, Production, or Archive. Only one Production bundle may exist at a time. |
| 17 | Root Page ID | Code[50] | The initial page to render when the mobile app loads this bundle. References MobilePage220FDW."Page ID". |
| 18 | Mobile Page Count | Integer | FlowField -- count of mobile pages in this bundle. |
| 19 | Workflow Count | Integer | FlowField -- count of workflows in this bundle. |
| 20 | Service Setup Count | Integer | FlowField -- count of service registrations in this bundle. |
| 21 | Dependency Count | Integer | FlowField -- count of dependencies for this bundle. |
| 22 | Min Client Version | Integer | Minimum mobile client VERSION_CODE required. 0 allows all versions. |
Keys
| Name | Fields | Properties |
|---|---|---|
| PK | ID | Clustered |
| PublisherVersion | Publisher, Version | |
| UniqueBundle | Code, Publisher, Version | Unique |
Purpose
The app bundle is the root container for all mobile configuration -- pages, workflows, service registrations, and dependencies. Aptean Mesh resolves which bundle to serve at runtime:
- If the current user has a User Assignment pointing to a Dev or Test bundle, that bundle is used.
- Otherwise, the single Production bundle is used.
Developers typically work with Dev bundles during development, promote to Test for validation, and finally set the status to Production for go-live. Locked bundles (shipped by Aptean) cannot be modified directly -- copy them to create a customizable version.
Mobile App Dependency 220FDW
Table 73167874 -- Tracks BC app dependencies required by a mobile app bundle.
- Namespace:
Aptean.Mesh.SDUI - Caption: Mobile App Dependency
- Data Classification: CustomerContent
Fields
| No. | Name | Type | Description |
|---|---|---|---|
| 1 | App Bundle ID | Guid | The parent app bundle. References Mobile App Bundle 220FDW.ID. |
| 2 | Dependency App ID | Guid | Unique identifier of the dependent BC app. |
| 11 | Dependency App Name | Text[250] | Name of the dependent BC app. |
| 12 | Dependency Publisher | Text[250] | Publisher of the dependent BC app. |
| 13 | Min Version | Text[50] | Minimum required version of the dependent app. |
Keys
| Name | Fields | Properties |
|---|---|---|
| PK | App Bundle ID, Dependency App ID | Clustered |
Purpose
Records which BC extensions a bundle depends on. This allows the mobile infrastructure to verify that all required extensions are installed before serving a bundle to a mobile client.
MobilePage220FDW
Table 73167875 -- Defines a single page within a mobile app bundle.
- Namespace:
Aptean.Mesh.SDUI - Caption: Mobile Page
- Data Classification: CustomerContent
Fields
| No. | Name | Type | Description |
|---|---|---|---|
| 1 | App Bundle ID | Guid | The parent app bundle. References Mobile App Bundle 220FDW.ID. |
| 2 | Page ID | Code[50] | Unique identifier for this page within the bundle. Must not be blank. |
| 11 | App Bundle Code | Code[20] | FlowField -- code of the parent bundle. |
| 12 | Description | Text[100] | Description of this mobile page. |
| 13 | Page Json | Blob | The SDUI JSON definition that describes the page layout and behavior. |
| 14 | Service | Code[50] | The mobile service code that handles RPC calls for this page. References Mobile Service Registry 220FDW. |
| 15 | Workflow | Code[20] | The workflow code for guided scan flows on this page. References Mobile Workflow 220FDW. |
Keys
| Name | Fields | Properties |
|---|---|---|
| PK | App Bundle ID, Page ID | Clustered |
Purpose
Each mobile page stores its UI definition as a JSON blob in the Page Json field. The SDUI (Server-Driven UI) JSON is sent to the mobile client, which renders the page dynamically. Pages are linked to a service (for RPC handling) and optionally to a workflow (for guided scan flows). Developers typically edit the page JSON through the Mobile Page Card page in Business Central, which provides a JSON editor control add-in.
Mobile Setup 220FDW
Table 73167871 -- Singleton configuration table for global Aptean Mesh mobile settings.
- Namespace:
Aptean.Mesh.SDUI - Caption: Mobile Setup
- Data Classification: CustomerContent
Fields
| No. | Name | Type | Description |
|---|---|---|---|
| 1 | Primary Key | Code[10] | Singleton key (always blank). |
| 11 | Enable Request Logging | Boolean | Whether RPC request/response logging is enabled. |
| 12 | Tenant ID | Text[250] | Azure AD tenant identifier. Auto-populated for SaaS environments (read-only). |
| 13 | Client ID | Text[250] | Azure AD application (client) ID for OAuth2 authentication. References AAD Application. |
| 14 | Telemetry Connection String | Text[250] | Azure Application Insights connection string for mobile telemetry. |
Keys
| Name | Fields | Properties |
|---|---|---|
| PK | Primary Key | Clustered |
Purpose
This is a singleton setup table (one record per company) that stores global mobile configuration. It provides:
- Authentication settings -- Tenant ID and Client ID used by the mobile app for OAuth2 login.
- Logging toggle -- Enables or disables RPC request/response logging to the Mobile Request Log.
- Telemetry -- Connection string for Azure Application Insights to track mobile app usage and errors.
- API URL generation -- Internal methods build the BC API and RPC endpoint URLs dynamically from the current environment.
Administrators configure these values through the Mobile Setup page in Business Central.
Mobile User Assignment 220FDW
Table 73167879 -- Assigns a specific user to a Dev or Test app bundle for development and testing.
- Namespace:
Aptean.Mesh.SDUI - Caption: Mobile User Assignment
- Data Classification: CustomerContent
Fields
| No. | Name | Type | Description |
|---|---|---|---|
| 1 | User ID | Code[50] | The assigned user. References User."User Name". Must not be blank. |
| 2 | App Bundle ID | Guid | The assigned Dev or Test bundle. References Mobile App Bundle 220FDW.ID (filtered to Dev/Test status). |
| 3 | Language Code | Code[10] | BC Language Code that overrides the user's BC UI language for translation purposes. Set this to control which XLIFF translations the mobile client receives for this user. Resolved by MobileLocalization220FDW.GetUserCultureTag(). |
| 11 | App Bundle Code | Code[20] | FlowField -- code of the assigned bundle. |
| 12 | App Bundle Version | Integer | FlowField -- version of the assigned bundle. |
Keys
| Name | Fields | Properties |
|---|---|---|
| PK | User ID | Clustered |
Purpose
User assignments allow individual users to be routed to a specific Dev or Test bundle instead of the Production bundle. This is how developers test their changes in isolation -- only assigned users see the non-production bundle, while all other users continue to use Production.
MobileRequestLog220FDW
Table 73167876 -- Audit log of all RPC requests and responses between the mobile app and Business Central.
- Namespace:
Aptean.Mesh.SDUI - Caption: Mobile Request Log
- Data Classification: CustomerContent
Fields
| No. | Name | Type | Description |
|---|---|---|---|
| 1 | Entry No. | BigInteger | Auto-incrementing unique identifier. |
| 11 | Request Date/Time | DateTime | When the RPC request was received. |
| 12 | Response Date/Time | DateTime | When the RPC response was sent. |
| 13 | App Bundle ID | Guid | The bundle that handled the request. |
| 14 | App Bundle Code | Code[50] | FlowField -- code of the handling bundle. |
| 15 | Mobile Service Code | Code[50] | The service that handled the request. |
| 16 | Rpc Method | Text[50] | The RPC method that was called. |
| 17 | Request Json | Blob | Full JSON request received from the mobile app. |
| 18 | Response Json | Blob | Full JSON response sent to the mobile app. |
| 19 | Error Message | Text[2048] | Error message if the RPC call failed. |
| 20 | Error Call Stack | Blob | Full error call stack for debugging. |
Keys
| Name | Fields | Properties |
|---|---|---|
| PK | Entry No. | Clustered |
| SK2 | App Bundle ID, Mobile Service Code |
Purpose
When request logging is enabled in Mobile Setup, every RPC call between the mobile app and BC is recorded here. This is invaluable for debugging -- you can see the exact JSON sent by the mobile client, the response returned by BC, and any error details. Log entries can be configured for automatic cleanup using the standard BC data retention framework with the custom 2-day retention period.
BCRPC220FDW
Table 73167870 -- Internal API table that serves as the RPC entry point for mobile-to-BC communication.
- Namespace:
Aptean.Mesh.SDUI - Data Classification: CustomerContent
Fields
| No. | Name | Type | Description |
|---|---|---|---|
| 1 | ID | Integer | Auto-incrementing identifier. |
| 2 | Response | Blob (Json) | The JSON response blob returned to the mobile client. |
| 3 | IsDirty | Boolean | Flag indicating whether the response has been updated. |
Keys
| Name | Fields | Properties |
|---|---|---|
| PK | ID | Clustered |
Purpose
This is a system-internal table exposed through the BC API page BCRPC220FDW. The mobile client calls the CallRPC method on this table, passing a JSON request string. The table dispatches the request to the appropriate service codeunit via MobileRPCRegistry220FDW, captures the JSON response, and stores it in the Response blob for the API to return. Developers do not interact with this table directly -- it is the plumbing behind the RPC mechanism.
Mobile Service Registry 220FDW
Table 73167878 -- Maps mobile service codes to AL codeunits that handle them.
- Namespace:
Aptean.Mesh.SDUI - Caption: Mobile Service Registry
- Data Classification: CustomerContent
Fields
| No. | Name | Type | Description |
|---|---|---|---|
| 1 | App Bundle ID | Guid | The parent app bundle. References Mobile App Bundle 220FDW.ID. |
| 2 | Mobile Service Code | Code[50] | Unique key sent by the mobile app to trigger this service (e.g., RECEIVE). Must not be blank. |
| 11 | Codeunit Id | Integer | The AL codeunit that handles this service. Must implement the IBCRPC220FDW interface. |
| 12 | Handler Name | Code[250] | FlowField -- name of the handler codeunit. |
| 13 | App Bundle Code | Code[20] | FlowField -- code of the parent bundle. |
Keys
| Name | Fields | Properties |
|---|---|---|
| PK | App Bundle ID, Mobile Service Code | Clustered |
Purpose
The service registry is the routing table for RPC calls. When the mobile app sends a request with a service code (e.g., RECEIVE), the MobileRPCRegistry220FDW codeunit looks up the registry to find which codeunit should handle the request. The handler codeunit must implement the IBCRPC220FDW interface.
Mobile Scan Entry 220FDW
Table 73167900 -- Stores individual scan entries captured by mobile warehouse operations.
- Namespace:
Aptean.Mesh.SDUI - Caption: Mobile Scan Entry
- Data Classification: CustomerContent
Fields
| No. | Name | Type | Description |
|---|---|---|---|
| 1 | Entry No. | BigInteger | Auto-incrementing unique identifier. |
| 15 | Status | Enum Scan Entry Status 220FDW | Current status of the scan entry (Pending, Transferred, Deleted, Overwritten). |
| 20 | Item No. | Code[20] | Scanned item number. References Item. |
| 25 | Location Code | Code[10] | Warehouse location code. References Location. |
| 30 | Variant Code | Code[10] | Item variant code. References Item Variant. |
| 35 | Bin Code | Code[20] | Warehouse bin code. References Bin. |
| 50 | Source Type | Integer | Source document table ID (e.g., Database::"Warehouse Activity Line"). |
| 55 | Source Subtype | Integer | Source document subtype. |
| 60 | Source ID | Code[20] | Source document number. |
| 65 | Source Batch Name | Code[20] | Source batch name. |
| 70 | Source Prod. Order Line | Integer | Source production order line number. |
| 75 | Source Ref. No. | Integer | Source reference line number. |
| 100 | Lot No. | Code[50] | Lot/batch number. |
| 105 | Serial No. | Code[50] | Serial number. |
| 110 | Expiration Date | Date | Expiration date for item tracking. |
| 150 | Quantity | Decimal | Scanned quantity in the specified unit of measure. |
| 155 | Quantity (Base) | Decimal | Quantity converted to base unit of measure (read-only, auto-calculated). |
| 160 | Unit of Measure Code | Code[10] | Unit of measure for the scanned quantity. References Item Unit of Measure. |
| 165 | Qty. per Unit of Measure | Decimal | Conversion factor from UOM to base (read-only, auto-calculated). |
Keys
| Name | Fields | Properties |
|---|---|---|
| PK | Entry No. | Clustered |
| Key1 | Source ID, Source Ref. No., Source Type, Source Subtype, Source Batch Name, Source Prod. Order Line, Status, Lot No., Serial No., Variant Code | SumIndexFields: Quantity, Quantity (Base) |
| Key2 | Item No. | |
| Key3 | Location Code, Bin Code, Item No., Variant Code, Lot No., Serial No., Source Type, Status | SumIndexFields: Quantity, Quantity (Base) |
Purpose
Scan entries are the core data records created during mobile warehouse operations. Each time a user completes a scan workflow (e.g., scanning an item, entering a quantity), a scan entry is created in Pending status. The ScanEntryMgt220FDW codeunit provides all CRUD and query operations for these records. Once the warehouse activity line is registered, the entry is marked as Transferred. The SumIndexFields on Key1 and Key3 enable efficient quantity aggregation without reading individual records.
ParsedBarcodeData220FDW
Table 73167872 -- Temporary table for holding parsed GS1 barcode data.
- Namespace:
Aptean.Mesh.SDUI - Caption: Parsed Barcode Data
- Table Type: Temporary
Fields
| No. | Name | Type | Description |
|---|---|---|---|
| 1 | AI | Code[30] | GS1 Application Identifier (e.g., 01 for GTIN, 10 for Lot, 17 for Expiration Date). |
| 11 | Value | Text[100] | The parsed value for the application identifier. |
Keys
| Name | Fields | Properties |
|---|---|---|
| PK | AI | Clustered |
Purpose
This temporary table is populated by the FromJson method when the mobile client sends parsed GS1 barcode data. The mobile app parses GS1-128 or DataMatrix barcodes on-device and sends the extracted application identifier/value pairs as a JSON array. The FromJson method deserializes this array into temporary records that workflow step handlers can then query to extract item numbers, lot numbers, expiration dates, and other encoded data.
Mobile Workflow 220FDW
Table 73167880 -- Defines a guided scan workflow within an app bundle.
- Namespace:
Aptean.Mesh.SDUI - Caption: Mobile Workflow
- Data Classification: CustomerContent
Fields
| No. | Name | Type | Description |
|---|---|---|---|
| 1 | App Bundle ID | Guid | The parent app bundle. References Mobile App Bundle 220FDW.ID. |
| 2 | Workflow Code | Code[20] | Unique identifier for the workflow within the bundle. Must not be blank. |
| 11 | App Bundle Code | Code[20] | FlowField -- code of the parent bundle. |
| 12 | Description | Text[100] | Description of the workflow purpose. |
| 13 | Resolver Codeunit ID | Integer | The codeunit that handles all step logic. Must implement IStepHandler220FDW. |
| 14 | Resolver Name | Text[249] | FlowField -- name of the resolver codeunit. |
Keys
| Name | Fields | Properties |
|---|---|---|
| PK | App Bundle ID, Workflow Code | Clustered |
Purpose
A workflow is a sequence of steps that guide a mobile user through a warehouse operation (e.g., receiving, picking, put-away). Each workflow has a resolver codeunit that implements the IStepHandler220FDW interface and contains the business logic for validating input at each step, determining the next step, and finalizing the operation. Deleting a workflow cascades to delete all its steps.
Mobile Workflow Step 220FDW
Table 73167881 -- Defines a single step within a mobile workflow.
- Namespace:
Aptean.Mesh.SDUI - Caption: Mobile Workflow Step
- Data Classification: CustomerContent
Fields
| No. | Name | Type | Description |
|---|---|---|---|
| 1 | App Bundle ID | Guid | The parent app bundle. References Mobile Workflow 220FDW. |
| 2 | Workflow Code | Code[20] | The parent workflow. References Mobile Workflow 220FDW."Workflow Code". |
| 3 | Sequence | Integer | Execution order within the workflow. Lower numbers execute first. Auto-assigned in increments of 10 if not specified. |
| 11 | App Bundle Code | Code[20] | FlowField -- code of the parent bundle. |
| 12 | Step Type | Enum StepType220FDW | The type of data to capture (Bin, Item, LicensePlate, Quantity, etc.). |
| 13 | Step Input Type | Enum StepInputType220FDW | The input control to display (Barcode, Numeric, DatePicker, Choice, etc.). |
| 14 | Instruction | Text[50] | The instruction text shown to the user on the mobile device. |
| 15 | GS1 AI | Code[30] | GS1 Application Identifiers for barcode parsing, separated by semicolons (e.g., 01;10). |
Keys
| Name | Fields | Properties |
|---|---|---|
| PK | App Bundle ID, Workflow Code, Sequence | Clustered |
| StepType | App Bundle ID, Workflow Code, Step Type |
Public Methods
SetWorkflowFilters
procedure SetWorkflowFilters(BundleId: Guid; WorkflowCode: Code[20])
Sets filters to retrieve all steps for a specific workflow. Call FindSet() or FindFirst() after this to iterate steps.
GetFirstSequence
procedure GetFirstSequence(): Integer
Returns the first (lowest) sequence number in the currently filtered workflow. Raises an error if no steps are configured.
FindByStepType
procedure FindByStepType(StepType: Enum StepType220FDW): Boolean
Finds the step matching the given step type within the current filters. Returns true if found, with the record positioned on that step.
Purpose
Workflow steps define the sequence of user interactions in a mobile workflow. Each step specifies what data to capture (Step Type), how to capture it (Step Input Type), and what instruction to show the user. The GS1 AI field enables automatic extraction of values from GS1 barcodes -- when a user scans a GS1 barcode at a step with GS1 AIs configured, the system automatically extracts the matching values and can auto-advance through subsequent steps.
Example: Receipt Workflow Steps
| Sequence | Step Type | Input Type | Instruction |
|---|---|---|---|
| 10 | Init | -- | -- |
| 20 | Item | Barcode | Scan item |
| 30 | LotNumber | Barcode | Scan lot number |
| 40 | ExpirationDate | DatePicker | Enter expiration date |
| 50 | Quantity | Numeric | Enter quantity |
| 60 | Completed | -- | -- |
MobileLabelRequest220FDW
Table 73167882 -- Temporary table that carries all data for a single label print request to the active IMobileLabelProvider220FDW implementation.
- Namespace:
Aptean.Mesh.Services - Caption: Mobile Label Request
- Table Type: Temporary
- Data Classification: SystemMetadata
Fields
| No. | Name | Type | Description |
|---|---|---|---|
| 1 | Entry No. | Integer | Unique identifier for this label request entry. |
| 2 | Document Type | Integer | Source document type (e.g., Database::"Purchase Line"). |
| 3 | Document No. | Code[20] | Source document number (e.g., purchase order number). |
| 4 | Document Line No. | Integer | Line number on the source document. |
| 5 | Source Type | Enum SourceTypeCustomLabelFDW | Type of the source party: Vendor, Customer, or None. |
| 6 | Source No. | Code[20] | Vendor or customer number from the source document. |
| 7 | Item No. | Code[20] | Item number to be labelled. |
| 8 | Description | Text[100] | Item description, captured from the warehouse receipt line before posting. |
| 9 | Variant Code | Code[10] | Item variant code. |
| 10 | Location Code | Code[10] | Warehouse location where the item is stored. |
| 11 | Bin Code | Code[20] | Bin within the warehouse location. |
| 12 | Lot No. | Code[50] | Lot number. When populated, a lot tag label is printed instead of a receiving label. |
| 13 | Expiration Date | Date | Lot expiration date. |
| 14 | Quantity (Base) | Decimal | Total quantity for the item or lot in the base unit of measure. |
| 15 | No. of Labels | Integer | Number of label copies to print. |
Keys
| Name | Fields | Properties |
|---|---|---|
| PK | Entry No. | Clustered |
Purpose
This temporary table is the data contract passed to IMobileLabelProvider220FDW.PrintLabel(). It is populated by MobileLabelMgt220FDW -- either from a posted warehouse receipt line (PrintReceiptLabel) or from warehouse location/lot data (PrintBinLotLabel) -- then passed into a background StartSession() call. The background session constructs the management codeunit with this record as Rec and calls PrintLabel on the resolved provider.
Providers should be defensive: not all fields are guaranteed to be populated. For example, Lot No. is blank for plain receiving labels and populated for lot tag labels. Source No. and Source Type are populated only when the receipt line originates from a purchase or sales order.
See Label Printing Extensibility for the full provider implementation guide.