New in Softadmin® 7.38.0

Custom Distribution of Info Boxes

By default, info boxes will be laid out in a way that minimizes the height of the tallest column. While this does reserve as much space as possible for the component under them, it also makes their placement less predictable.

If you require full control, you can now use the BreakOn<n>Columns special columns, to manually insert column breaks.

SELECT
	'Task description' AS Title,
	'Box 1' AS Plaintext;

SELECT
	1 AS BreakOn2Columns,
	1 AS BreakOn3Columns,
	1 AS BreakOn4Columns;

SELECT
	'Comment' AS Title,
	'Box 2' AS Plaintext;

SELECT
	1 AS BreakOn4Columns;

SELECT
	'Company' AS Title,
	'Box 3' AS Plaintext;

SELECT
	1 BreakOn3Columns,
	1 BreakOn4Columns;

SELECT
	'Country' AS Title,
	'Box 4' AS Plaintext;

Four, three, and two-column layouts

Node Graph

The Node Graph component has received some design touch-ups, and new features.

Flowchart

The new flowchart component mode introduces box shapes suited for flowcharts.

Picture of a flowchart

Node Groups

Node groups can be used as visual aid to group nodes together. Users can't use the mouse to resize node groups, but you can use the "node group link" link type to enable editing of them.

nodegroups.png

Independently Positioned Labels

Connections can now be customized with independently positioned labels. Instead of a straight arrow from one node to another, the connection can be routed from the start node to the label, and then from the label to the end node, offering more control over the visual layout. Use the columns LabelX and LabelY to position labels.

By setting CanDrag on the connection itself, you can allow users to drag the labels just as they can drag nodes.

nodegraph_labels.png

Connection Styling

You can now color connections, and a few new dash and dot styles have been introduced.

arrowstyles.png

Changes to Column Names

The columns NodeColor and IconColor have been replaced by a single Color column. This should simplify the API, as you were only allowed to specify at most one of the columns.

Chart

Aspect Ratio for Charts

The new aspectRatio property on charts can be used to make them wider, or narrower. Shown below are ratio 2 and 0.75.

The same chart in wide and narrow versions

Support for Hiding Individual Labels on Axis

You can now hide individual labels on a chart axis. This is more useful than emitting '' as label, as the label will then still be readable in the data point's tooltip.

A chart with times 0 to 23 where odd times have their label hidden

Other UX features

Radio Cards Gets More Sizes

The Radio Cards control now comes in three sizes, with Small and Medium being new in this version.

alt text

Remove Description Toggle from Week Calendar

The Calendar component includes a Show Description toggle in its UI, which lets users expand or collapse appointment details.

You can now configure the calendar to hide this toggle, which is useful when calendar items don't include descriptions.

Performance Logging

We have increased the types of entities that are logged, and the amount of data that is logged.

Performance Center

This release introduces an early version of the Performance Center, a tool designed to help identify current performance issues and analyze trends to predict future problems. It replaces the previous Slow menu items menu item in the Admin group.

This is an initial version, and we encourage all feedback.

Performance center example.png

Public Log API View

You can use SoftadminApi.PerformanceLog to do your own performance reports or ad-hoc queries.

Raw Web Service Publishing

Raw web service publishing has left beta status this version.

File Support

The new web services can now send and receive files/binary data.

Request Logging

You can now configure logging of requests received by the new raw web service publishing mode.

Other Features

Web Service Call Can Use Credentials in Raw Body and Custom Headers

Credentials for web service calls must be handled securely to prevent exposure, even if the database is compromised. To achieve this, credentials can be encrypted in the database, fetched on-demand from Azure Key Vault, or injected as application configuration during startup. However, this means that the database can't access them directly.

Previously, the Web Service Call component could only use credentials for standard authentication. If the target web service required custom headers or credentials in the request body, there was no secure way to handle that.

We have now introduced a way to inject credentials into headers, and for raw mode also into the body of a message.

  1. Create Credentials: Define the credentials you need for the web service.
  2. Bind Credentials: Edit the menu item to bind the credentials to the web service call. This generates a unique GUID for the menu item and credentials.
  3. Refer to Credentials: Use the generated GUID in your code with a special syntax.
IF @Action = 'GetRawData'
BEGIN
	-- Inject credential into a custom header
	SELECT
		'X-Custom-Api-Key' AS HttpHeaderName,
		'{G:0FDB557D-020F-1B9D-4933-0A8CABD37AA6.SuperSecretApiKey.Secret}' AS HttpHeaderValue

	-- Inject credential into the message body
	SELECT JSON_OBJECT(
		'keystring': 'the key is {G:0FDB557D-020F-1B9D-4933-0A8CABD37AA6.SuperSecretApiKey.Secret}'
	) AS TextContent
END

Azure Service Bus Can Filter Extra Properties

By default, a service bus listener will receive all message properties in the #MessageExtraProperties temp table. However, not all data types a message can use are supported by SQL Server, and string values may be longer than can fit inside sql_variant.

You can now configure listeners to whitelist the keys the listener needs and ignore all other extra properties.

Validation Supports Open Intervals

Previously, validations were limited to inclusive ranges, like "0 or greater." This worked fine for integers, where "greater than 0" could be rewritten as "1 or greater," but it restricted decimal validations. Now, you can define both inclusive and exclusive numeric validations.

User Table Logs Last Successful Login

The SoftadminApi.LoginLog table contains comprehensive, but short lived information about recent logins, including IP address and browser. Since it is short lived, there is no way to differentiate a user who hasn't logged in for a month from one who hasn't logged in for a year.

From this version, the SoftadminApi.User table has been extended with the LastSuccessfulLogin timestamp.

New Columns for Custom NewEdit Buttons

Previously, if you used custom buttons in NewEdit then whichever button had NULL as its button ID became the default. Now, you can instead choose to use the IsDefaultButton column, and assign a non-NULL ID to each button.

Additionally, the new IsCancelButton column deprecates the more obscure CidStepsBack column for designating cancel buttons.