New in Softadmin® 8.5.0

September 2025

New UX Features

Table of Contents in NewEdit

The NewEdit component now has the ability to display a table of contents, based on the titles of its field groups. It provides users with an overview of the page. It also highlights those sections that have validation errors.

The feature is best used for pages with several headings, and where all headings have a title.

toc.png

Calendar Action Row

Component Content Links, introduced in the prior version, are now also supported by the Calendar component. They are used to separate links that work directly on the calendar items from top links, and the same recommendations apply as for the grid component's use of content links.

calendar_contentlink.png

Disable Smallscreen mode-toggle for Grid

On mobile, some grids only work well in either List view or Table view. You can now configure menu items to not show the toggle button to end users.

Node Graph Can Drag & Drop Onto Node Groups

When configured for drag & drop, if nodes are dropped onto a node group the procedure will now receive the group's id.

You can see this feature in action in the Database Designer, where function blocks can now be dragged between system blocks.

UX Changes

Redesigned Time Line

The timeline layout has been updated for better clarity and no longer stretches to fill the full width of the screen.

timeline.png

Redesigned Color Picker

The color picker has been redesigned and now includes all available colors and shades.

colorpicker.png

Faster Enterprise Search With Many Search Words

Enterprise Search grows slower for each word searched for. Previous versions have alleviated this somewhat by filtering out common words, but this version should improve performance further when there are many words in the search string.

Improved Design of Inline Document on Mobile

Inline documents on mobile have a download button and show the file name, description, and an icon indicating the file type.

inline_doc_mobile.png

New Features

Simplified AI support

In earlier versions, you had to use the Web Service Call component to call AI services.

Now, we introduce dedicated administration for providers and models, as well as the GenAI component.

ai_providers.png

This is an example using the component for chatting. A separate NewEdit-menu item (not included) is responsible for inserting the user's questions into the chat log.

CREATE OR ALTER PROCEDURE Example.GenAI_ContractChat
	@ChatId uniqueidentifier = '44520744-D8BF-48F4-86FA-FE6461B5F7FA',
	@Action varchar(50) = NULL,
	@Response nvarchar(MAX) = NULL
AS
BEGIN
	SET NOCOUNT, XACT_ABORT ON;

	IF @Action = 'Init'
	BEGIN
		CREATE TABLE #Messages
		(
			RowId int IDENTITY,
			Role varchar(50) NOT null,
			Message nvarchar(MAX) null
		);

		INSERT #Messages (Role, Message)
		SELECT
			'System' AS Role,
			'You will be provided with the text of a contract.
Your task is to help the user by answering their questions about the contract.' AS Message;

		INSERT #Messages (Role, Message)
		SELECT
			'User' AS Role,
			CONCAT('This is the contract =======', '<contract text>') AS Message;
		
		INSERT #Messages (Role, Message)
		SELECT
			[Role],
			[Message]
		FROM
			Example.ChatLog
		ORDER BY
			ChatLogId;

		SELECT
			Role,
			Message
		FROM
			#Messages
		ORDER BY
			RowId;
	END;

	IF @Action = 'StoreResponse'
	BEGIN
		INSERT Example.ChatLog (ChatId, Role, Message)
		VALUES (@ChatId, 'Assistant', @Response);
	END;
END;

This is an example using the component for batch processing. In real use, you should use a better, more detailed system prompt.

CREATE OR ALTER PROCEDURE Example.GenAI_CodeReview
	@Action varchar(50) = NULL,
	@Response nvarchar(MAX) = NULL,
	@PromptId int = NULL
AS
BEGIN
	SET NOCOUNT, XACT_ABORT ON;

	IF @Action = 'Init'
	BEGIN
		SELECT TOP (3)
			'You are to review TSQL code for code quality and security.' AS SystemPrompt,
			CONCAT('Review this code: ', M.definition) AS Prompt,
			P.object_id AS PromptId
		FROM
			sys.procedures P
			JOIN sys.sql_modules M ON M.object_id = P.object_id
		WHERE
			P.name LIKE '%insertupdate';

		RETURN;
	END;

	IF @Action = N'StoreResponse'
	BEGIN
		INSERT Example.CodeReview (object_id, Review)
		VALUES (@PromptId, @Response);
	END;
END;

Subscribe to the Dead Letter Subqueue for Azure Service Bus

When a message fails delivery, it eventually ends up in a dead letter queue. You can now create listeners to subscribe to messages from the dead letter queues as well, for example, to determine if a message truly contains bad data, or if it was just unfortunate and suffered deadlocks each time delivery was attempted.

Previously, two of the Node Graph component's link types did not support dependencies.

The link type Graph link can now depend on a SQL procedure.

The link type Graph node group link can now depend on values from the node group table.

Developer Features

Save as Copy for Menu Items

Edit menu item now has a Save as copy button, which optionally also copies all links leading from the menu item.

save_as_copy.png

Dynamic Impersonation Control Type

The user impersonation dropdown will now become a textbox with autosearch instead, if the current user has ten or more options to choose from.

user_switcher.png

Database Designer

The Database Designer now supports creating and editing tables, system blocks, and function blocks.

Search for column usage

There is a new specialized menu item for finding where in procedures, key constraints, etc. columns are used.

find_column.png

Abbreviated Auto Comment

For objects where references can be found, the auto comment block will now only list those places, and not also list all the data types that were searched.

Security

Send Email on Password Change

Following best practices, the built-in menu item where users can change their own password will now send an email when a password is changed.

If you construct custom password change menu items, the SoftadminApi.User_UpdatePassword procedure now accepts a @SendMail parameter.

Internal Changes

New Log Levels

The previous log types (e.g., "Page Warning", "Menu Item Error") combined severity and error source, leading to inconsistencies and many error sources without a corresponding log type.

Starting from this version, we will adopt a more standardized set of log types that focus solely on severity. These log levels have been chosen to align with those used by popular logging solutions.

The new log levels are:

  • Trace
  • Debug
  • Information
  • Warning
  • Error
  • Critical

Previously, the log type "Diagnostics" served as a catch-all category, encompassing various levels of detail. "Diagnostics" has been replaced by three distinct levels: Trace, Debug, and Information.

New Old
Trace Diagnostics
Debug Diagnostics
Information Diagnostics
Warning Menuitem Warning
Warning Page Warning
Error Deploy
Error Event Error
Error Internal Error
Error Job Error
Error Menuitem Error
Error Page Error
Error Project-specific Error
Error Webservice Error
Critical Webservice setup Error

Web Service Call: Support For Parameters in Content Type

The Web Service Call component now supports media type parameters in the Content-Type header. Previously, only standard content types such as:

application/json

were accepted. With this update, it is now possible to specify content types that include additional parameters, for example:

application/json; version=2.1; format=compact