Detailview

Displays a detailed view of a database object, including tabbed miniviews consisting of linked menu items.

Component modes: InfoView | TabView | TabView (dynamic tabs)

Component mode: TabView (dynamic tabs)

The TabView mode displays other menu items in tabs created from menu item links of type Miniview Tab. It uses its component SQL to customize the tags, for example to change the title or to dynamically hide a tab.

Appearance

Overview

Overview
A Detailview can display any number of info boxes. Below the info boxes there can be zero or more tabs. A tab is an area with a Softadmin® component in it.

Tab views

Tabs
The tabs are situated below the info boxes. When the detail view is loaded, you can choose which tab is open initially. Please note that the tabs and the info boxes might compete for the vertical space if they both contain a lot of content.

Fullscreen

TabFullscreen
If there is not enough space for a tab, you can collapse one or more info boxes (se above), or you can switch the tab to fullscreen mode.

Info boxes

Info boxes
You can display any number of info boxes. They are positioned right-to-left as far as the width of the browser window allows. The width of an info box can be set to span multiple normal info boxes. If so the widened info box will always be displayed on its own row. In the example below the first two boxes are set to span two and three columns respectively, followed by three boxes with normal width. Notice how the layout changes when the browser window is resized.

Fields name/values

An info box can contain a list of field names and values. The "Car details" info box shown above has four field names: Model, Year model, Price (SEK) and Fuel.

Free text

An info box can also display free flowing text, as seen at the bottom of the "Car details" info box.

Style

alt text
The appearance of the fields can be modified by setting their color and css-styles. You can also display an icon before the field text.

Collapse info box

alt text
The up-arrow in an info box's header can be clicked, to collapse the box. It can be either collapsed or expanded by default.

Text box

alt text
An info box can be a pure text block. In this case html can be used.

alt text
The title of the info box as well as it's fields can be made into clickable links. The "E-mail" link in this case is a so called "content link", which opens the users preferred e-mail client instead of an internet browser.

QR Code

alt text
You can convert a string of characters to a QR Code. The size of the QR code will vary depending on the length of the string. It can hold a maximum of 2 kB.

Chart

alt text
You can display a chart in an info box. See below for details. (For backwards compatibility, the now deprecated Chart component can also be used in an info box, but new applications should use the JSON-based Chart).

Meter

Picture of a meter
You can display one or more meters in an info box.

External embed

alt text
An info box can contain a frame with an external webpage. Make sure the webpage doesn't use cookies.

Warnings

To grab the user's attention, you can display an error, warning, or an informational message as a special banner. In this example, one of each is shown, but you can display any number of error, warning, or info messages.

Chart

Pie chart

Overview (Pie chart)

Charts are generated using JSON. Below you can see an example Chart with its corresponding JSON.

Image showing a Chart.

{
	"Type": "Pie",
	"ShowLegend": true,
	"Heading": "Employees",
	"Unit": "employees",
	"LinkAlias": "ChartLink",
	"PieValues": [
		{
			"Value": 25,
			"Label": "HR",
			"PassingFields": { "DepartmentId": 1 }
		},
		{
			"Value": 18,
			"Label": "Economy",
			"PassingFields": { "DepartmentId": 2 }
		},
		{
			"Value": 10,
			"Label": "IT",
			"PassingFields": { "DepartmentId": 3 }
		}
	]
}

Multiple charts can be shown side by side by putting them inside an array.

[{
	// Chart properties
},
{
	// Chart properties
}]

Supported properties (Pie chart)

Type: The type of the chart, must be "Pie" for pie charts. (mandatory)

Heading: Heading displayed above the chart. (optional)

LinkAlias: Link to use for the pie slices. (optional)

ShowLegend: Whether or not to show the legend. Defaults to true. (optional)

LegendPosition: Where to show the legend. Defaults to "right". (optional)

Possible values
Right Legend is positioned to the right of the chart..
Bottom Legend is positioned below the chart.

NumberOfDecimals: The number of decimals shown for the value. Defaults to 0. (optional)

Unit: Unit to display after the value. (optional)

Prefix: Prefix to display before the value. (optional)

MaxWidth: The maximum width for the chart in pixels, use if the chart should be smaller than the infobox. Default fit to info box. (optional)

MaxHeight: The maximum height for the chart in pixels, use if the chart should be smaller than the info box. Default keep aspect ratio. (optional)

PieValues: Values to be shown in the chart. (mandatory)

GroupTinyValues: Small values that are grouped into a "Other slice". (optional)

PieValues

Recommended to order by value for esthetic reasons unless there is a logical order.

Value: The decimal value. (mandatory)

Label: The label for the value. (mandatory)

Color: Color of the pie value, if not specified the default color scheme will be used (recommended). See Colors. (optional)

Tooltip: Custom tooltip to append to or override the default tooltip when the section is hovered. Shows the value and unit by default. (optional)

OverrideTooltip: Controls whether the custom tooltip overrides or is appended to the default tooltip. (optional)

PassingFields: Object containing the passing fields for the chart link as properties. (optional)

GroupTinyValues

Label: Label of the group. (mandatory)

Threshold: All values smaller than this value are placed in the tiny value group. (optional)

ThresholdPercent: All values smaller than this percentage of the total are placed in the tiny value group. (optional)

Example SQL (Pie chart)

The following query will produce the JSON used above.

SELECT
(
	SELECT
		'Pie' AS [Type],
		1 AS ShowLegend,
		'Employees' AS Heading,
		'employees' AS Unit,
		'ChartLink' AS LinkAlias,
		(
			SELECT * FROM (SELECT
				10 AS Value,
				'IT' AS Label,
				3 AS DepartmentId
			UNION ALL
			SELECT
				18,
				'Economy',
				2 AS DepartmentId
			UNION ALL
			SELECT
				25,
				'HR',
				1 AS DepartmentId
			) X(Value, Label, [PassingFields.DepartmentId])
			ORDER BY
				X.Value DESC
			FOR JSON PATH
		) AS PieValues
	FOR JSON PATH
) AS Chart

Line/Bar chart

Overview

Charts are generated using JSON. Below you can see an example combined bar and line chart with its corresponding JSON.

Image showing a bar and line chart.

[
	{
		"Type": "xy",
		"Heading": "Sales",
		"XAxis": {
			"Scale": "Ordinal",
			"Values": [
				{
					"Value": "2019"
				},
				{
					"Value": "2020"
				},
				{
					"Value": "2021"
				},
				{
					"Value": "2022"
				},
				{
					"Value": "2023"
				}
			]
		},
		"YAxis": {
			"Unit": "TSEK",
			"Values": [
				{
					"Value": 0
				},
				{
					"Value": 10000
				},
				{
					"Value": 20000
				}
			]
		},
		"Lines": {
			"Series": [
				{
					"Label": "Goal",
					"LineShape": "smooth",
					"Values": [
						{
							"xValue": "2019",
							"yValue": 8001
						},
						{
							"xValue": "2020",
							"yValue": 8931
						},
						{
							"xValue": "2021",
							"yValue": 11203
						},
						{
							"xValue": "2022",
							"yValue": 10912
						},
						{
							"xValue": "2023",
							"yValue": 14412
						}
					]
				}
			]
		},
		"Bars": {
			"Series": [
				{
					"Label": "Sales",
					"LinkAlias": "ChartLink",
					"PassingFields": { "SalesId": 1 },
					"Values": [
						{
							"xValue": "2019",
							"yValue": 9001
						},
						{
							"xValue": "2020",
							"yValue": 11931
						},
						{
							"xValue": "2021",
							"yValue": 13203
						},
						{
							"xValue": "2022",
							"yValue": 8912
						},
						{
							"xValue": "2023",
							"yValue": 15412
						}
					]
				}
			]
		}
	}
]

Multiple charts can be shown side by side by putting them inside an array.

[{
	// Chart properties
},
{
	// Chart properties
}]

Supported properties

Type: The value displayed. Must be a valid decimal type. (mandatory)

Heading: Heading displayed above the chart. (optional)

ShowLegend: Whether or not to show the legend. Defaults to true. (optional)

LegendPosition: Where to show the legend. Defaults to "bottom". (optional)

Possible values
Right Legend is positioned to the right of the chart..
Bottom Legend is positioned below the chart.

ShowValuesInLegendTooltip: Whether or not to show all the series values in the legend tooltip in addition to the label. Default only visible if there are 2 or fewer X-values for all series. (optional)

NumberOfDecimals: The number of decimals shown for the value. Defaults to 0. (optional)

ShowXGridLines: Whether or not to show X grid lines behind the chart. Defaults to false. (optional)

ShowYGridLines: Whether or not to show Y grid lines behind the chart. Defaults to true. (optional)

MaxWidth: The maximum width for the chart in pixels, use if the chart should be smaller than the infobox. Default fit to infobox. (optional)

MaxHeight: The maximum height for the chart in pixels, use if the chart should be smaller than the infobox. Default keep aspect ratio. (optional)

AspectRatio: The width to height aspect ratio specified as a decimal number. A value bigger than 1 indicates a chart wider than the height. (optional)

XAxis: Definition of a custom X-axis. See XAxis. (optional)

YAxis: Definition of a custom Y-axis. See YAxis. (optional)

Lines: Line chart lines. See Lines. (optional)

Bars: Bar chart bar. See Bars. (optional)

XAxis

Scale: The scale to use. (mandatory)

Possible values
Linear A continuous linear number scale.
Date A continuous linear date scale.
Ordinal A scale with discrete values, for example names of categories.
Log A continuous logarithmic number scale.

Label: The label on the whole X-axis. (optional)

Prefix: Prefix to display before label or value. (optional)

Unit: Unit to display after values. (optional)

LogBase: The base when using Scale="Log". (optional)

Values: An array of custom axis values. Default derive from data. See Values (Axis values). (optional)

YAxis

Scale: The scale to use. Default "Linear". (optional)

Possible values
Linear A continuous linear number scale.
Log A continuous logarithmic number scale.

Label: The label on the whole Y-axis. (optional)

Prefix: Prefix to display before label or value. (optional)

Unit: Unit to display after values. (optional)

LogBase: The base when using Scale="Log". (optional)

AdaptAxisToValues: Whether the Y-axis should adapts its Y-values if the values are out of range or if the value should go off the chart. Default false if values are explicitly set, true if there are no explicit values. (optional)

Values: An array of custom axis values. Default derive from data. See Values (Axis values). (optional)

Values (Axis values)

Value: A custom axis value. (mandatory)

Label: Label to display instead of the value. (optional)

HideLabel: Hides the label on the axis, the label will still be displayed in the tooltip. (optional)

Lines

Series: An array of line series, each series will correspond to a line. See Series. (mandatory)

Bars

Series: An array of line series, each series will correspond to a set of bars of the same color, or for stacked bars a part in each stack. See Series. (mandatory)

Direction: The direction of the bars. Default "Vertical". (optional)

Possible values
Vertical
Horizontal

Stacked: Whether or not the bars are stacked. Default false. (optional)

ShowValuesAsLabel: Whether or not to show the values as labels in the chart rather than just with tooltip. Default false. (optional)

Series (Line)

Label: The series label. (mandatory)

Tooltip: The series tooltip. (optional)

Values: An array of values. See Values (Series values). (optional)

Color: The series color. See Colors. (optional)

Type: The series line type. Only applicable to line series. Default "Line". (optional)

Possible values
Line A consistent line.
Range A range between two Y values.
Point Only the data points are plotted.

LineShape: The line shape. Only applicable to line series. Default "Normal". (optional)

Possible values
Normal Straight lines between the data points
Smooth A smooth curve passing through all data points.
Step A line consisting of alternating horizontal and vertical lines.

Markers: The line markers. Only applicable to line series. Default "None". (optional)

Possible values
None
Round
Series (Bars)

Label: The series label. (Mandatory)

LinkAlias: Alias of the link to use for the series. (optional)

PassingFields: Object containing the link's passing fields as properties. To use specific passing fields for each value, use the passing fields property on the values instead. (optional)

Tooltip: The series tooltip. (optional)

Values: An array of values. See Values (Series values). (optional)

Color: The series color. See Colors. (optional)

Values (Series values)

XValue: The X value. (mandatory)

YValue: The Y value, number. (mandatory)

Y2Value: The Y2 value, number. Used by line series type range. (optional)

Tooltip: A custom tooltip to append to or override the default. Default a tooltip indicating the X and Y value and the series. (optional)

OverrideTooltip: Controls whether the custom tooltip overrides or is appended to the default tooltip. (optional)

PassingFields: Object containing the link's passing fields as properties. (optional)

Example SQL

The following query will produce the JSON used above.

SELECT
(
	SELECT
		'xy' AS [Type],
		'Sales' AS Heading,
		'Ordinal' AS [XAxis.Scale],
		(
			SELECT
				V.Year AS Value
			FROM
				(VALUES ('2019'), ('2020'), ('2021'), ('2022'), ('2023')) V(Year)
			FOR JSON PATH
		) AS [XAxis.Values],
		'TSEK' AS [YAxis.Unit],
		(
			SELECT
				V.Value AS Value
			FROM
				(VALUES (0), (10000), (20000)) V(Value)
			FOR JSON PATH
		) AS [YAxis.Values],
		(
			SELECT
				V.SeriesName AS Label,
				'smooth' AS LineShape,
				(
					SELECT
						V.xValue,
						V.yValue
					FROM 
						(VALUES ('2019', 8001), ('2020', 8931), ('2021', 11203), ('2022', 10912), ('2023', 14412)) V(xValue, yValue)
					FOR JSON PATH
				) AS [Values]
			FROM 
				(VALUES ('Goal')) V(SeriesName)
			ORDER BY V.SeriesName DESC
			FOR JSON PATH
		) AS [Lines.Series],
		(
			SELECT
				V.SeriesName AS Label,
				V.LinkAlias,
				V.SalesId AS [PassingFields.SalesId],
				(
					SELECT
						V.xValue,
						V.yValue
					FROM 
						(VALUES ('2019', 9001), ('2020', 11931), ('2021', 13203), ('2022', 8912), ('2023', 15412)) V(xValue, yValue)
					FOR JSON PATH
				) AS [Values]
			FROM 
				(VALUES ('Sales', 'ChartLink', 1)) V(SeriesName, LinkAlias, SalesId)
			ORDER BY V.SeriesName DESC
			FOR JSON PATH
		) AS [Bars.Series]
	FOR JSON PATH
) AS Chart

KPI

Overview (KPI)

KPIs are generated using JSON. Below you can see an example KPI with its corresponding JSON.

Image showing a KPI.

{
	"Label": "Monthly earnings",
	"Value": 56000,
	"NumberOfDecimals": 0,
	"Prefix": "$",
	"Link": "KpiLinkAlias",
	"PassingField": {
		"KpiId": 5
	},
	"Trend": {
		"Value": 15,
		"Direction": "decreasing",
		"Type": "negative",
		"Unit": "%",
		"NumberOfDecimals": 0,
		"Period": "jan-feb"
	}
}

Multiple KPIs can be shown side by side by putting them inside an array.

[{
	// KPI properties
},
{
	// KPI properties
}]

Supported properties (KPI)

KPI

Value: The value displayed. Must be a valid decimal type. (mandatory)

Label: Label displayed above the KPI. (optional)

NumberOfDecimals: The number of decimals shown for the value. Defaults to 0. (optional)

Unit: Unit to display after the value. (optional)

Prefix: Prefix to display before the value. (optional)

Link: Alias of the link to follow when clicking the KPI. (optional)

PassingField: Object containing the link's passing fields as properties. (optional)

Trend: Trend object to signify changes since previous period. (optional)

Trend

Value: The value displayed. Must be a valid decimal type. (mandatory)

Prefix: Prefix to display before the value. (optional)

Unit: Unit to display after the value. (optional)

NumberOfDecimals: The number of decimals shown for the value. Defaults to 0. (optional)

Period: Text that indicates which time period the trend refers to. (optional)

Direction: The direction of the arrow preceding the value. Defaults to none. (optional)

Possible values
increasing
decreasing
none

Type: Indicates whether the change is positive or negative by the color of the trend. Defaults to neutral. (optional)

Possible values
positive
negative
neutral

Example SQL (KPI)

The following query will produce the JSON used above.

SELECT
(
	SELECT 
		'Monthly earnings' AS [Label], 
		56000 AS [Value],
		'$' AS [Prefix],
		0 AS [NumberOfDecimals],
		-- 'KpiLinkAlias' AS [Link],
		5 AS [PassingField.KpiId],
		15 AS [Trend.Value],
		'decreasing' AS [Trend.Direction],
		'negative' AS [Trend.Type],
		0 AS [Trend.NumberOfDecimals],
		'%' AS [Trend.Unit],
		'jan-feb' AS [Trend.Period]
	FOR JSON PATH
) AS Kpi

Meters

Overview (Meter)

Meters are generated using JSON. Below you can see an example Meter with its corresponding JSON.

Image showing a Meter.

{
	"Value": 4200,
	"Heading": "Daily earnings",
	"Prefix": "$",
	"NumberOfDecimals": 0,
	"Link": "MeterCellLinkAlias",
	"PassingField": {
		MeterId: 1
	},
	"Intervals": [
		{
			"IntervalStart": 0,
			"IntervalEnd": 1000,
			"ColorName": "red",
			"Tooltip": "This is bad for business."
		},
		{
			"IntervalStart": 1000,
			"IntervalEnd": 2000,
			"ColorName": "yellow",
			"Tooltip": "This can be tolerated."
		},
		{
			"IntervalStart": 2000,
			"IntervalEnd": 5000,
			"ColorName": "green",
			"Tooltip": "The business is thriving."
		}
	]
}

Multiple meters can be shown side by side by putting them inside an array.

[{
	// Meter properties
},
{
	// Meter properties
}]

Supported properties (Meter)

Meter

Value: The value displayed. Must be a valid decimal type. (mandatory)

Heading: Heading displayed above the meter. (optional)

NumberOfDecimals: The number of decimals shown for the value. Defaults to 0. (optional)

Unit: Unit to display after the value. (optional)

Prefix: Prefix to display before the value. (optional)

Link: Alias of the link to follow when clicking the meter. (optional)

PassingField: Object containing the link's passing fields as properties. (optional)

Intervals: Intervals to be shown in the meter. (mandatory)

Intervals

IntervalStart: The start of the interval, must be exactly the end of the pervious interval if any. Must be a valid decimal type. (mandatory)

IntervalEnd: The end of the interval. Must be a valid decimal type. (mandatory)

ColorName: The name of the interval color, mandatory if more than one interval is specified. If not specified a neutral color will be used. (optional)

Possible values
green
yelllow
red

Tooltip: Tooltip for the interval. (optional)

Example SQL (Meter)

The following query will produce the JSON used above.

;WITH Intervals AS
(
	SELECT
		0 AS IntervalStart,
		1000 AS IntervalEnd,
		'red' AS ColorName,
		'This is bad for business.' AS Tooltip
	UNION ALL
	SELECT
		1000 AS IntervalStart,
		2000 AS IntervalEnd,
		'yellow' AS ColorName,
		'This can be tolerated.' AS Tooltip
	UNION ALL
	SELECT
		2000 AS IntervalStart,
		5000 AS IntervalEnd,
		'green' AS ColorName,
		'The business is thriving.' AS Tooltip
)
SELECT
(
	SELECT 
		'Daily earnings' AS [Heading], 
		4200 AS [Value],
		'$' AS [Prefix],
		0 AS [NumberOfDecimals],
		-- 'MeterCellLinkAlias' AS [Link],
		5 AS [PassingField.MeterId],
		(
			SELECT
				I.IntervalStart,
				I.IntervalEnd,
				I.ColorName,
				I.Tooltip
			FROM
				Intervals I
			FOR JSON PATH
		) AS Intervals
	FOR JSON PATH
) AS Meter

Component settings

Selected tab
The tab that is initially selected when the menu item is opened.
Tab height
The tab height in pixels. Leave empty to automatically fit to available space.

SQL

SQL Call: Customize tabs (mandatory)

Use this call to customize the tabs, for example to change the title or dynamically hide a tab.

May modify database: No

Resultset: Tabs (optional)

You do not need to return rows for all tabs that the tab view has, only for those that you need to customize.
Table count: repeated zero or more times
Row count: zero or more rows
Columns
BadgeCount optional int
Used to create an indicator on the tab for the "number of hits" in the menu item in the tab. For example, number of rows in a grid or total number of nodes in a tree view.
BadgeCountUrgent optional int
Similar to BadgeCount, but BadgeCountUrgent does not indicate "number of hits" but rather number of items that need user action.

For example, BadgeCount could indicate total number of messages and BadgeCountUrgent number of unread messages.

If BadgeCountUrgent is 0 or NULL then BadgeCount is used instead. If BadgeCountUrgent > BadgeCount then an error is raised.
IsSelected optional bit
If IsSelected=1, the tab will be initially selected. It has lower priority than selecting the initial tab with a passing field, but higher priority than any static menu item setting.
IsVisible optional bit
Used to hide tabs.

You can also hide tabs by setting Depends-on-SQL on the link directly, but using the IsVisible column usually offers better performance and readability when you need to hide more than one link.

If a tab has been hidden by its Depends-on-SQL then the IsVisible column can not override that to force the tab to become visible.
LinkAlias optional string
Alias of the link to target. If you specify the same link on more than one row then one tab will be created for each row.

Exactly one of LinkId, LinkGuid or LinkAlias must be specified.
LinkGuid optional uniqueidentifier
Id of the link to target. If you specify the same LinkGuid on more than one row then one tab will be created for each row.

Exactly one of LinkId, LinkGuid or LinkAlias must be specified.
LinkId optional int
Deprecated. Use LinkAlias instead.

Id of the link to target. If you specify the same LinkId on more than one row then one tab will be created for each row.

Exactly one of LinkId, LinkGuid or LinkAlias must be specified.
TabTitle optional string
Sets the title of the tab.

Use this column when you need dynamic tab names and simply setting a Link Label on the miniview tab link is not sufficient.
xxx optional string
Remaining columns are available to the link's passing fields. Use the type "Column value" to reference them.

SQL Call: Validate parameters

Allows you to validate the SQL parameters before any other SQL is run in the component. This call is only made if the SQL is a stored procedure and Validate parameters is checked.

May modify database: No

Parameters

@Force bit
Set to 1 if the last call to validate parameters used admin_force and the user clicked OK in the OK/Cancel dialog.
@ValidateParams bit
Set to 1 when this call is made.

Resultset: Messages (optional)

Table count: repeated zero or one time
Row count: zero or one row
Columns
ADMIN_Force optional string
Message asking the end user to confirm their parameters.
ADMIN_Message optional string
Message explaining why the parameters are rejected.

InfoSQL

SQL Call: InfoSQL

SQL that can have several resultsets that are displayed at top of component.

May modify database: No

Parameters

@IsParameterPage bit
Will be set to 1 when the call is made for the parameter page.

Resultset: Main title

Specifies the main title, which usually is the name of the entity being shown or edited by the menu item.
Table count: repeated exactly once
Row count: exactly one row
Columns
MainTitle optional string

The main title.

Resultset: Box (optional)

Defines one or more boxes to display.
Table count: repeated zero or more times
Row count: one or more rows
Columns
Title optional string
The title of the box.
TitleIcon optional string
The name of a system icon to display next to the box title.
ColumnSpan optional int
Specifies the column span for the box. If this is above one the box will be displayed on a separate row.
StartExpanded optional bit

Whether the infobox should start expanded or collapsed. NULL/Omitted means default behavior, where all boxes are expanded on big screens, and only the first box is expanded on small screens.

BoxLink optional string

Displays the link with the specified alias in the title row of the box.

The link should be of type "Top link (InfoSQL)".

Columns named PassingField_<xxx> will not be shown in the box and can be referenced from the link as a Column value with name <xxx>.

Only one BoxLink per box can be used.

TopLink optional string
Displays the link with the specified alias among the top links.

Multiple TopLink columns may appear in a single resultset.
PassingField_<xxx> optional string

Not shown in InfoSQL. The corresponding link should be of link type "Top link (InfoSQL)", "InfoSQL cell link" or "InfoSQL warning link", and one of its passing fields should have a value matching <xxx>, and be of type "Column value".

IsPrimaryTopLink optional bit

Used in conjunction with "TopLink" to mark it as a primary link. Only one link may be marked as primary.

TopLinkDisabledReason optional string
If not null the the top link will be disabled with the tooltip of the disabled button set to the content of the column.
Default: null, enabled.
BadgeCount optional int

Used in conjunction with "TopLink" to create an indicator on the top link with a corresponding number.

BadgeCountUrgent optional int

Similar to BadgeCount, but BadgeCountUrgent indicates number of items that need user action.

If BadgeCountUrgent is 0 or NULL then BadgeCount is used instead. If BadgeCountUrgent > BadgeCount then an error is raised.

<colname> optional string

Value displayed in the box. Its label will be taken from the field information whose name matches <colname>.

If the field information has Allow HTML enabled, then its content will be treated as HTML, though unsafe tags will be stripped and newlines are converted to <br> tags. If Allow HTML is not enabled then the content will be treated as text.

If the value is NULL, both value and label will be omitted.

<colname>_Color optional string

Sets the text color of <colname> to the specified color. See Colors.

<colname>_Icon optional string
The name of the system icon to show before the <colname> value.

Use the menu item "Admin>Theme>System icons" to register system icons.
<colname>_IconColor optional string

Color to use for the icon specified in <colname>_Icon. See Colors.

<colname>_CellLink optional string
Displays the link with the specified alias as a cell link for the <colname> cell.

PassingField_<xxx> columns can be referenced from the link.

Only one of <colname>_CellLink, <colname>_LinkId, <colname>_MenuItem or <colname>_MenuItemId can be used at the same time.
<colname>_MenuItem optional string

Recommended to use <colname>_CellLink instead for better tracking of links.

Supplies a link to the menu item with the specified alias when used in conjunction with <colname>.

Only one of <colname>_CellLink, <colname>_LinkId, <colname>_MenuItem or <colname>_MenuItemId can be used at the same time.

<colname>_Style optional string
Sets the CSS style for <colname>. Never use a string from a user as part of this column for security reasons.
<colname>_Tooltip optional string
Sets the tooltip for <colname>.
PlainText optional string
Displays plain text without a column title, i.e. occupies the entire vertical space available in the box. Any HTML in the text will be escaped.
Html optional string
Displays HTML without a column title, i.e. occupies the entire vertical space available in the box. Uses the Layouted HTML level to determine allowed elements and attributes.

If the Html column is too restrictive for your needs then use the SafeHtml column instead.
SafeHtml optional string
Displays HTML without a column title, i.e. occupies the entire vertical space available in the box. Uses the Safe HTML level to determine allowed elements and attributes.

The SafeHtml column is less restrictive than the Html column. Use it only when you need it.
BoxTableIdReference optional string

The id of a box table to display in the box.

WarningSuccess optional string
The text will be at the top of the menu item and displayed in green.
WarningInfo optional string
The text will be at the top of the menu item and displayed in blue.
Warning optional string
The text will be at the top of the menu item and displayed in yellow. This will match any column prefixed with Warning that is not WarningSuccess, WarningInfo, and WarningError.
WarningError optional string
The text will be at the top of the menu item and displayed in red.
WarningLink optional string
Displays the link with the specified alias inside the warning.

Columns named PassingField_<xxx> will not be shown in the box and can be referenced from the link as a Column value with name <xxx>.

Requires that the row only contains one warning.
Chart optional string

JSON to generate a row of charts. Read more

Kpi optional string

JSON to generate a KPI. Read more

Meter optional string

JSON to generate a row of meters. Read more

QrCode optional string

A QR Code will be rendered containing the text in the column.

To generate Swiss QR Code for digital payments, return an XML with the root attribute Type="Swiss". See example-XML in the documentation for the RTF Document component.

ExternalEmbedUrl optional string

Embeds content from an external server as an iframe in the infobox. The URL must be an absolute URL.

ExternalEmbedHeight optional int

Used together with the ExternalEmbedUrl column to set the height (in pixels) of the generated frame.

TitleIconId optional int

Deprecated. Use TitleIcon instead.

Displays an icon next to the box title.

TitleIconBadgeId optional int

Deprecated. Avoid using badge icons.

Override menu item badge.

LinkId optional int

Deprecated. Use TopLink/BoxLink instead.

Displays the specified link among the top links and in the title row of the box. The link will only appear in the title row if no ordinary columns lie before it in the resultset.

Columns named PassingField_<xxx> will not be shown in the box and can be referenced from the link as a Column value with name <xxx>.

Only one of TopLink, LinkId, MenuItem and MenuItemId can be used at the same time.

Multiple LinkId columns may appear in a single resultset.

MenuItem optional string

Deprecated. Recommended to use TopLink/BoxLink instead for better tracking of links.

Displays a link to the menu item with this alias among the top links and in the title row of the box. The link will only appear in the title row if no ordinary columns lie before it in the resultset.

Only one of TopLink, LinkId, MenuItem and MenuItemId can be used at the same time.

Multiple MenuItem columns may appear in a single resultset.

MenuItemId optional int

Deprecated. Use TopLink/BoxLink instead.

Displays a link to the menu item with this id among the top links and in the title row of the box. The link will only appear in the title row if no ordinary columns lie before it in the resultset.

Only one of TopLink, LinkId, MenuItem and MenuItemId can be used at the same time.

Multiple MenuItemId columns may appear in a single resultset.

NavigatorLinkText optional string

Deprecated. Use TopLink with a link label instead.

Used in combination with menuitem/menuitemid to give the navigator link a text that differs from the name of the menu item.

PassingFields optional string

Deprecated. Additional information to menuitem/menuitemid, appends values to querystring (supports simple Softadmin® parameters).

If multiple passingfield columns exists, only the first one is used and the others are disregarded.

<colname>_LinkId optional int

Deprecated. Use <colname>_CellLink instead.

Creates a cell link with the specified link id for the <colname> cell.

PassingField_<xxx> columns can be referenced from the link.

Only one of <colname>_CellLink, <colname>_LinkId, <colname>_MenuItem or <colname>_MenuItemId can be used at the same time.

<colname>_MenuItemId optional int

Deprecated. Use <colname>_CellLink or <colname>_MenuItem instead.

Supplies a link to the menu item with the specified menuitemid when used in conjunction with <colname>.

Only one of <colname>_CellLink, <colname>_LinkId, <colname>_MenuItem or <colname>_MenuItemId can be used at the same time.

<colname>_PassingFields optional string

Supplies the querystring when used in conjunction with <colname>_MenuItemId.

PlaintextFull, PlaintextLeft, PlaintextRight optional string

These columns are deprecated. Use either PlainText, Html or SafeHtml instead, depending on what behavior you need.

The content of this column will be treated as Html, but line breaks and non-breaking spaces will be converted to br-tags. In future versions this column will be escaped.

Resultset: Column breaks (optional)

Used to manally layout boxes in columns by inserting breaks in between boxes.

May not be used together with ColumnSpan.

Table count: repeated zero or more times
Row count: exactly one row
Columns
BreakOn<N>Columns mandatory any

If this contains a non NULL value, the following box will be placed in a new column in relation to the previous box when <N> columns fit on the screen.

If any box contains a column break for the current total number of columns, then no boxes will be layouted in columns automatically. This means that if "BreakOn3Columns" has been used, the boxes will be layouted as follows:

  • 2 columns fit on the screen: Boxes are layouted automatically.
  • 3 columns fit on the screen: Boxes are layouted as specified by the BreakOn3Columns usage.
  • 4 columns fit on the screen: Boxes are layouted as specified by the BreakOn3Columns usage (unless any BreakOn4Columns exists).

Resultset: Dynamic field information (optional)

Specify extra properties for fields in the InfoSql.
Table count: repeated zero or more times
Row count: zero or more rows
Columns
AdminFieldName mandatory string
The name of the field to apply the information to. The presence of this column indicates that the resultset specifies field information.
AllowHtml optional bit
Allow HTML.
ButtonJavaScript<xxx> optional string
Inserts a button next to the control that is used to execute the JavaScript supplied here. <xxx> is an arbitrary text that can be empty if only one button is required.
ButtonJavaScript<xxx>_Label optional string
The label for the JavaScript button <xxx>.
CellAlignment optional string

The alignment of grid columns and InfoSQL values.

Possible value Description
center Only applicable to grid columns.
left
right
ColumnTooltip optional string
Sets the tooltip on the column title. Only supported by the Grid component.
DefaultValue optional string
The default value for the control or if prefixed by 'SQL:' the sql to run to determine the default value.
DefaultValueSql optional string
SQL that evaluates default value for field. Can contain other fields for value dependency.
Description optional string
The description for the field.
EnabledJavaScript optional string
Javascript that controls the enabled status of the field. The control is only enabled if the expression specified here evaluates to true. The expression is evaluated every time the value of a dependent control is changed. This is only available to control types for which the enabled javascript field is visible in the user interface.
FieldGroupId optional int
The field group to use.
FieldInfoId optional int
ID of field information to base the dynamic field on. All properties not explicitly overridden by dynamic field information will be copied from this field. The referenced field must be found in the menu item's field tables.
FieldLabel optional string
If present the field label is used as the heading for fields instead of the field name.
FieldType optional string
The name of the control type to use. It is usually recommended to use FieldInfoId instead unless the column is used to make fields hidden or uneditable.
Possible value Description
boolean checkbox Legacy alias. Use "checkbox" instead.
boolean dropdown
chart
checkbox
checkbox tree
colorpicker
date
datetime
dropdown
file
file upload area
heading
heading with checkbox
hidden
html Legacy alias. Use "html editor" instead.
html editor
info text
listbox
multi-autosearch
multi-listbox
multi-picker
multirow
password
picture
radio buttons
radio cards
signature
textarea
textbox
textbox with autosearch
textbox with autosuggest
textbox with dropdown
textbox with popup
time
uneditable text
Height optional int
The height of the control.
IgnoreOnSave optional bit
Do not pass the field value to the insert/update procedure.
InfoSqlLayout optional string
Where the label is shown in relation to the contents in InfoSQL.
Possible value Description
Default Inherit layout from menu item.
LabelAbove Full width, label above.
LabelLeft Label to the left.
NoLabel Full width, no label.
Standard Deprecated. Use LabelLeft instead.
MandatoryJavaScript optional string

JavaScript that controls the mandatory status of the field, this overwrites nullchoice if set. This is only available to control types for which the mandatory JavaScript field is visible in the user interface.

MaxDate optional date
Only applicable to the Date and Datetime controls.
MinDate optional date
Only applicable to the Date and Datetime controls.
NullChoice optional bit
Specifies whether the control allows null values.
NumberOfDecimals optional int
The number of decimals to display for numeric values.
OnChangeJavaScript optional string
Javascript run when the value of the control has changed.
OutputFormat optional string
Special formatting to be applied when the field is displayed.
Possible value Description
Hyperlink
MailToLink
PhoneLink
Placeholder optional string
Text shown when the field is empty.
Sql optional string
The SQL that determines the control's behavior. (Refer to control documentation for more information)
TextDirection optional string

Which direction the script is written in. Not to be confused with the CellAlignment property.

Possible value Description
default System default. Not useful unless you are trying to override an already explicit text direction on existing field information.
ltr Left-to-right (for example English)
rtl Right-to-left (for example Arabic)
ThousandDelimiter optional string
The thousand grouping delimiter for numeric values.
TimePickerFrom optional string
Only applicable to the Time and Datetime controls.
TimePickerTo optional string
Only applicable to the Time and Datetime controls.
Width optional int

The width of the control.

At one point, this was a pixel value. Back when Softadmin used Verdana 10px, and before fields had width-categories. Now, it is just a value that is converted to a width category.

The possible values listed below are just suggestions. For example, both 1 and 30 will be converted to shortest, and both 500 and 9999 to longest.

Possible value Description
150 Medium-long
30 Shortest
300 Long
500 Longest
60 Short
90 Medium short
VisibleJavaScript optional string
JavaScript that controls the visibility of the field. The control is only visible if the expression specified here evaluates to true. The expression is evaluated every time the value of a dependent control is changed.

Resultset: Dynamic top links (optional)

Defines one or more links to be shown among the top links.
Table count: repeated zero or more times
Row count: zero or more rows
Columns
TopLink optional string

See the "Box" resultset for documentation.

TopLinkDisabledReason optional string

See the "Box" resultset for documentation.

IsPrimaryTopLink optional bit

See the "Box" resultset for documentation.

PassingField_<xxx> optional string

See the "Box" resultset documentation.

BadgeCount optional int

See the "Box" resultset for documentation.

BadgeCountUrgent optional int

See the "Box" resultset for documentation.

BoxLink optional string

See the "Box" resultset for documentation.

LinkId optional int

Deprecated, Use TopLink instead.
See the "Box" resultset for documentation.

MenuItem optional string
Deprecated. Use TopLink for better tracking of links.

Displays a link to the menu item with this alias among the top links. The title of the box will also turn into a link when the user hovers the mouse.
MenuItemId optional int
Deprecated. Use MenuItem instead, or better yet, use TopLink for better tracking of links.

Displays a link to the menu item with this id among the top links. The title of the box will also turn into a link when the user hovers the mouse.
NavigatorLinkIconBadgeId optional int
Used in combination with menuitemid or LinkId to give the navigator link an icon that differs from the icon badge of the menu item.
NavigatorLinkIconId optional int
Used in combination with menuitemid or LinkId to give the navigator link an icon that differs from the icon of the menu item. Only one of navigatorlinkiconid and navigatorlinkiconname can have a value.
NavigatorLinkText optional string
Used in combination with menuitemid to give the navigator link a text that differs from the name of the menu item.
PassingFields optional string
Additional information to 'menuitemid', appends values to querystring (supports simple Softadmin® parameters).

Resultset: JavaScripts (optional)

InfoSQL can declare JavaScript used by the menu item.

Example

SELECT
    'thirdPartyApi.showMap(street, city, country)' AS JavaScript,
    StreetAddress AS street,
    CityName AS city,
    CountryName AS country
FROM
   ...
Table count: repeated zero or more times
Row count: zero or more rows
Columns
JavaScript optional string
A piece of JavaScript to execute as the page loads, or containing one or more function declarations that can be called by other scripts on the page.
LocalJavaScriptUrl optional string
An URL, relative to the system's admin/customization folder, specifying a JavaScript file that should be imported.
ExternalJavaScriptUrl optional string
An URL specifying a JavaScript file on another server that should be imported. Take care to use an URL that is reachable by the end user's web browser.
<parameterName> optional any
Any additional columns will become parameters with the same name made available to the JavaScript. The column name must start with a lowercase letter and may only contain letters, digits, or underscores.
The parameter columns must come after the JavaScript column.

Resultset: Timeline (optional)

Displays a timeline to visualize the current state of a process.

Each row represents one step in the timeline.
Table count: repeated zero or one time
Row count: one or more rows
Columns
Timeline mandatory any

The value of this column is not used and it's only purpose is to mark this as a timeline table. Only one of this and TimelineBelow may be used.

TimelineBelow mandatory any

The value of this column is not used and it's only purpose is to mark this as a timeline table. Only one of this and Timeline may be used.

Use this column instead of "Timeline" to render the timeline below the info boxes.

StepStatus mandatory string
Specifies how the step will be visualized.
Possible value Description
Current This is the current step.
Done This step has been completed successfully.
Failed Something went wrong in this step.
Future This step is later on in the process.
StepDescription optional string
Description of the step.
StepTitle optional string
Title of the step.
StepTooltip optional string
Tooltip of the step.
StepLink optional string
Alias of the link that the step leads to.
<xxx> optional any
Any other column will be sent as a passing field to the link.

Resultset: Box tables (optional)

Defines a table that may be referenced by the BoxTableIdReference column in the Box resultset to display the table in an infobox.

Table count: repeated zero or more times
Row count: zero or more rows
Columns
BoxTableId mandatory string

The id of the table, must be the first column in the table.

May contain different values for each row to define multiple tables.

<colname> optional any

The content to be shown in a table column. The formatting of the value is determined by the connected field information.

<colname>_Style optional string

Sets the CSS style for the <colname> cell. Never use a string from a user as part of this column for security reasons.

Row_Style optional string

Sets the CSS style for the entire row. Never use a string from a user as part of this column for security reasons.

Row_Heading optional string

Displays a heading for the row.

Custom access control and logging

SQL Call: Custom access control and logging

Use this call to restrict which entries a user is allowed to view and edit, and to log which entries a user views.

Access to a menu item is normally controlled through functions and roles alone but some entities need more fine grained control. For example, a user may have access to the View Member menu item for normal members but not for members with a protected identity.

The menu items a user visits are always logged (in ADMINLogMenuItem) but for sensitive data you may need to log exactly what entries are viewed. Do the logging in this call as the common ways of viewing data (grid and InfoSQL) are not allowed to modify the database.

If you bind a scalar function instead of a stored procedure to this call then its name must end with '_GrantAccess'.

May modify database: Yes

Resultset: Access permissions

Return whether the user is allowed to visit the menu item with the current parameters.
Table count: repeated exactly once
Row count: exactly one row
Columns
GrantAccess mandatory bit
1 if the user is allowed to view the menu item, 0 if the user should not be allowed to view the menu item.

If 0 then an error will be logged as the user should not have been able to reach the menu item with the given parameters in the first place.

Querystring parameters

menuitemheading optional
String that replaces the menu item name when the menu item is loaded. It does not replace the name before that (like for example in the navigator). It is ignored if the menu item is displayed as a part in a multipart in which case the name can be set from the multipart procedure.

Examples

Dynamic Number of Tabs

You can use dynamic tabs to create multiple copies of the same link with different titles and passing fields. In this example we create one tab for each active status.

SELECT
	1 AS LinkId,
	MaintenanceItemStatus AS TabTitle,
	-- Passingfields
	MaintenanceItemStatusId
FROM
	dbo.MaintenanceItemStatus
WHERE
	IsHandled = 0
ORDER BY
	SortOrder

Hit Counters on tabs

You can use both BadgeCount and BadgeCountUrgent on the same link. Urgent will take precedence if there are any invoices due, otherwise a normal hit count will be shown.

WITH InvoiceOpen AS (
	SELECT *
	FROM
		dbo.InvoiceHead
	WHERE
		ProjectId = @ProjectId AND
		IsHandled = 0
)
SELECT
	1 AS LinkId,
	(
		SELECT COUNT(*) FROM InvoiceOpen
	) AS BadgeCount,
	(
		SELECT COUNT(*) FROM InvoiceOpen
		WHERE DueDate <= GETDATE()
	) AS BadgeCountUrgent

Best practice

Name of stored procedure

The InfoSQL stored procedure should be named <Schema>.<Table>_GetDetails.
The SQL stored procedure should be named <Schema>.<Table>_GetDetails_DynamicTabs.