This month’s release is full of tweaks and improvements to the Fuuz platform, including two Schema Designer features we’re excited to share: one small quality of life change and one large roadmap item. Read on to learn more!
The May 2024 release includes a significant new feature in the schema designer: the ability to specify deletion behavior for reference fields! This new configuration field will appear in the screen designer on the “source” or “one” end of a relation, and allows app designers to specify what behavior they want to occur for this model when related data is deleted.

We’ll use the following example schema for the rest of this section: Inventory, which has a required InventoryStatus relation and an optional MasterUnit relation. We’ll use the following hypothetical scenario to illustrate how the new configuration options behave:
Inventory number 00001 is linked to Master Unit number A. A user tries to delete Master Unit A.

This new configuration option comes with four settings:
Prevent: If there is related data, prevent deletion and throw an error explaining why deletion can’t proceed. In the hypothetical scenario described above, a user would receive an error saying The document cannot be deleted. It is referenced by an Inventory with number 00001. This option is the default when not specified, and matches the behavior of the schema system prior to the release of this feature. You’ll typically want to use this option in cases where both related models capture important data that needs to be retained with referential integrity, such as types, statuses, and master data - like the inventoryStatus relation in the example schema above.
Cascade: If there is related data, attempt to delete the related records. This will check all the relations on the related model, potentially cascading to further models depending on their deletion reference behavior. In our hypothetical scenario, both Master Unit A and Inventory 00001 would be deleted. You’ll typically want to use this option in cases where the relation represents a hierarchical “parent/child” structure in the data, where the one model is meaningless without the context of the other. One example might be a Customer and related Customer Address records: without the Customer, a Customer Address is useless, and it makes sense to delete related Customer Address records automatically when a user deletes a Customer.
Set Null: If there is related data, attempt to set the relation ID field to null, thereby removing the relationship. In our hypothetical scenario, Master Unit A would be deleted, and Inventory 00001 would be updated to set the masterUnitId field to null, removing it from any master unit. This option only makes sense for optional references; if a reference is required, this option will cause any attempted deletion to fail. You’ll typically want to use this option for cases where data is loosely related, like a default value.
Ignore: If there is related data, simply ignore the relation and proceed with deletion. In our hypothetical scenario, Master Unit A would be deleted, but Inventory 00001 would retain a reference to the deleted record, which would result in warnings any time a screen or user tries to query master unit information related to Inventory 00001. You’ll only want to use this option in scenarios where your application can gracefully handle those broken relations; it generally applies to history, log, or transactional models which might otherwise be set to Cascade. Setting the deletion reference behavior to Ignore instead allows you to retain those history records and the ID of the previously related data for audit or reporting purposes, even though the data they used to relate to may be deleted. Use this option with care!
As mentioned above, the Cascade option will continue to check related models until all either all related data is deleted, set null, or ignored, or until a relation set to Prevent is found, in which case the entire delete operation will fail.
This new feature will enable app builders to streamline the data management process for end users, permitting easier cleanup of related data more flexibility in app behavior. It also lays the groundwork for similar enhancements to the Create and Update mutations, which might allow creating or updating related data with a single mutation. We’ll be applying these deletion reference behavior options to our own internal system data models over the coming months, as well!
This month’s release also includes a smaller quality of life feature for the Schema Designer. Fields that relate to other data models are now displayed as clickable links in both the diagram and field list; clicking those links will pull that data model into the diagram if it’s not already added, and then select it. This streamlines the process of “expanding” a diagram and navigating between related models to understand the overall structure of your data!

Added support for cascade deletion behavior on data model relations
Corrected description for Float Format setting
Added links to diagram fields to open related models
Added validation to ensure field names start with lowercase letters
Updated user reactivation to reset user’s inactivity-based expiration
Updated user reactivation to send an email to notify the user their account was reactivated
Added a Default flag to identity providers to streamline user creation
Added an Integration tenant type to handle internal and external integrations
Added a global default policy to clean up abandoned queues
Upgraded core services to Redis 7, RabbitMQ 11, and MongoDB 6
Added support for building the Device Gateway for Linux and in containerized environments (e.g. Docker)
Updated OPCUA driver configuration schema to allow connecting to a device without authentication
Updated OPCUA driver to apply a maximum number of connection retries on startup
Updated TCP driver to not attempt to connect with the device is marked as inactive
Updated ENIP PLC library to prevent a potential crash when the TCP connection breaks
Updated HTTP connector to utilize a Fuuz-internal HTTP request library for better security and error handling
Added a connector for TecCom Web Services
Updated JSONata version to address a security vulnerability
Added validation to prevent excessively large payloads from being saved in flow nodes
Updated flow designer to correctly update internal state after using the Edit Properties file menu option
Updated module assignments on custom mutations to clarify permission errors during package installation
Updated drawer menu to only display if a user is assigned at least one role with a menu or home screen configured
Corrected help/documentation links to point to https://community.fuuz.com
Updated system to clear some portions of the application state when changing tenants to address a number of edge cases that could occur
Updated Cards element to support filter form configuration, matching existing system for tables
Corrected an issue causing the “newer version” indicator to pop up for screens that haven’t been saved yet
Corrected an issue with the field picker when used with data models from the System API
Corrected an issue causing the Save New Screen dialog to display when the New file menu option was used
Updated Tab Bar component to use the Icon Picker rather than separate properties for icon color/variant
Updated action buttons to not display the default icon when the icon field is cleared
Corrected a display issue that would occur when increasing the Default Width on a Resizable Panel element
Corrected a display issue that would cause the screen designer’s properties panel to be pushed off the side of the screen rather than shrinking