<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.tsnocode.dev/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tvi</id>
	<title>TS NoCode wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.tsnocode.dev/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tvi"/>
	<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Special:Contributions/Tvi"/>
	<updated>2026-04-11T10:24:14Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.0</generator>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Developing_codeunits&amp;diff=7259</id>
		<title>Developing codeunits</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Developing_codeunits&amp;diff=7259"/>
		<updated>2025-04-01T13:36:39Z</updated>

		<summary type="html">&lt;p&gt;Tvi: /* Using the provided Dev-image */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Steps for creating a new codeunit ==&lt;br /&gt;
&lt;br /&gt;
# Create a new Java project in your favorite IDE&lt;br /&gt;
# Import the p2eShared.jar in the project&lt;br /&gt;
# Create a new class:&lt;br /&gt;
## The abstract parts are found in: dk.p2e.blanket.codeunit&lt;br /&gt;
## Implement all abstract methods&lt;br /&gt;
## Code the method bodies (normally &amp;quot;execute&amp;quot;)&lt;br /&gt;
# Compile and build&lt;br /&gt;
# Deploy to webservser: [Application]\WEB-INF\lib&lt;br /&gt;
&lt;br /&gt;
After first test of the codeunit a server reboot is needed for each redeployment, as there is no way of removing the loaded classes from memory.&lt;br /&gt;
&lt;br /&gt;
== Error handling ==&lt;br /&gt;
&lt;br /&gt;
Exceptions are handled by themselves using the errorRegistration(Exception e) method.&lt;br /&gt;
&lt;br /&gt;
In case the errors are not caught by the codeunit itself, the generic error handler takes over&lt;br /&gt;
# Logs the error in the eventlog&lt;br /&gt;
# Returns a standard error page to the user&lt;br /&gt;
&lt;br /&gt;
Other debugging options include log4j and specialized TempusServa '''Systemout.print''' functions (yes, the class name is &amp;quot;Systemout&amp;quot;).&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Systemout.println(&amp;quot;hello world&amp;quot;);&lt;br /&gt;
Systemout.printSql(myStatment);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration / parameters ==&lt;br /&gt;
&lt;br /&gt;
Parameters are delivered through the method call, packed in a nice &amp;lt;String&amp;gt; Hashtable for easy access.&lt;br /&gt;
&lt;br /&gt;
Please note that values are sent as-is, so make sure to escape values before DB operations using &amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
DbConnection.escapeSql(String s);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Configurations can be stored using the getConfiguration methods of the command object. These values can be editedthrough the designer, depending on the Codeunit type&lt;br /&gt;
&lt;br /&gt;
* System configurations: Designer &amp;gt; Modules &amp;gt; Static content&lt;br /&gt;
* Solution configurations: Designer &amp;gt; [Solution] &amp;gt; Advanced &amp;gt; Configurations &lt;br /&gt;
&lt;br /&gt;
Value names will be prefixed with Class simple name - example + &amp;quot;.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  com'''.tsnocode.MyExampleCodeunit.'''myParameter&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
Variables can have a scope of either &lt;br /&gt;
* Request&lt;br /&gt;
* User session&lt;br /&gt;
* Application&lt;br /&gt;
&lt;br /&gt;
For permanent variables user server configurations.&lt;br /&gt;
&lt;br /&gt;
=== Request variables ===&lt;br /&gt;
Request scope variables should be stored in the Hashtable '''sharedObjects''' in the '''Command''' object.&lt;br /&gt;
&lt;br /&gt;
Note that the HTTP request parameters are stored in '''requestParameters'''.&lt;br /&gt;
&lt;br /&gt;
=== User session variables ===&lt;br /&gt;
Acces the '''sessionValues''' attribute in  the '''Security''' object&lt;br /&gt;
* boolean hasSessionValue(String name)&lt;br /&gt;
* void setSessionValue(String name, boolean value)&lt;br /&gt;
* int getSessionInteger(String name, int defaultValue)&lt;br /&gt;
* int getSessionInteger(String name)&lt;br /&gt;
* void setSessionInteger(String name, int value)&lt;br /&gt;
* String getSessionString(String name, String defaultValue)&lt;br /&gt;
* String getSessionString(String name)&lt;br /&gt;
* void setSessionString(String name, String value)&lt;br /&gt;
&lt;br /&gt;
All variables her are serilizable and will survive server restarts.&lt;br /&gt;
&lt;br /&gt;
Certain special user properties can also be accessed from the '''Security''' object&lt;br /&gt;
* boolean hasProperty(String name)    &lt;br /&gt;
* String getProperty(String name)&lt;br /&gt;
&lt;br /&gt;
Finally it is possible to store objects in the Hashtable '''sessionObjects'''  in  the '''Security''' object, but be aware that data are transient and '''will not survive server restarts'''.&lt;br /&gt;
&lt;br /&gt;
=== Application variables ===&lt;br /&gt;
Application variables are persistent and accessed through the '''Command''' object&lt;br /&gt;
&lt;br /&gt;
Their storage position depends on wether theres is a solution context or not:&lt;br /&gt;
* Solution present: Variables are saved to the solution '''Configurations'''&lt;br /&gt;
* None (SagID = 0): Variables are saved to the '''Static content'''&lt;br /&gt;
&lt;br /&gt;
Access the the variables goes through get methods with default values.&lt;br /&gt;
* String getConfigurationValue(String name)&lt;br /&gt;
* String getConfigurationValue(String name, String defaultValue)&lt;br /&gt;
&lt;br /&gt;
If the variable does not exist it will be created, and set to the default value (if present).&lt;br /&gt;
&lt;br /&gt;
Note that it is possible to force the use of Statis content by explicitly calling &lt;br /&gt;
* String getSystemConfigurationValue(String name)&lt;br /&gt;
* String getSystemConfigurationValue(String name, String defaultValue)&lt;br /&gt;
&lt;br /&gt;
== Different codeunit types ==&lt;br /&gt;
&lt;br /&gt;
Please read the: [[Codeunit reference]]&lt;br /&gt;
&lt;br /&gt;
Most likely you will need to create a [[Codeunit/Formevents]] that will allow specific changes for a solution, during views, updates or exports.&lt;br /&gt;
&lt;br /&gt;
Most interactions wil require interaction with the following objects&lt;br /&gt;
* Security&lt;br /&gt;
* Command&lt;br /&gt;
* DbConnection&lt;br /&gt;
* EventHandler&lt;br /&gt;
&lt;br /&gt;
== Using the provided Dev-image ==&lt;br /&gt;
We provide a ready-to-go image of a virtual machine, running Debian 12, for [https://www.virtualbox.org/wiki/Downloads VirtualBox].&lt;br /&gt;
&lt;br /&gt;
The machine is setup with all the required software and helper scripts, to enable development of custom codeunits.&lt;br /&gt;
&lt;br /&gt;
=== Getting the image running ===&lt;br /&gt;
The image is build for VirtualBox, so install that.&lt;br /&gt;
&lt;br /&gt;
Once you have the image downloaded, start the import wizard in VirtualBox (ctrl + i) and follow it.&lt;br /&gt;
&lt;br /&gt;
Now you should be able to boot the VM. The username and password for the user is noted in the comment on the VM.&lt;br /&gt;
&lt;br /&gt;
The machine includes the following programs:&lt;br /&gt;
&lt;br /&gt;
* Firefox, to access the local Tomcat server&lt;br /&gt;
* NetBeans 11.3, to develop codeunits&lt;br /&gt;
* DBeaver CE 24, to access the local DB&lt;br /&gt;
&lt;br /&gt;
=== Deploying codeunits ===&lt;br /&gt;
To deploy you code to the local Tomcat instance do the following:&lt;br /&gt;
&lt;br /&gt;
# build the project (right-click it in the project-browser on the left and select build)&lt;br /&gt;
# copy the generated .jar file from &amp;lt;code&amp;gt;/home/developer/NetBeansProjects/[ApplicationName]/dist&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;/mnt/sda/deploy&amp;lt;/code&amp;gt;&lt;br /&gt;
# Clear the cache (open http://localhost:8080/app/service?CacheClear)&lt;br /&gt;
&lt;br /&gt;
=== Debugging codeunits ===&lt;br /&gt;
Attach the NetBeans debugger to the local Tomat server:&lt;br /&gt;
&lt;br /&gt;
Click &amp;quot;debug&amp;quot; in the top-left menu -&amp;gt; click &amp;quot;attach debugger&amp;quot; -&amp;gt; click &amp;quot;OK&amp;quot;, the default settings should work&lt;br /&gt;
&lt;br /&gt;
Add a breakpoint to you code and try to invoke it from the browser.&lt;br /&gt;
&lt;br /&gt;
=== Updating the API and platform ===&lt;br /&gt;
To update the local environment to the latest version of the TS-API and TS Platform, open a terminal and execute the following commands.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
updateAPI&lt;br /&gt;
ts -w app upgrade-alphaapp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be prompted to input the password for the user.&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=User_Group_Membership&amp;diff=7255</id>
		<title>User Group Membership</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=User_Group_Membership&amp;diff=7255"/>
		<updated>2025-03-24T15:47:46Z</updated>

		<summary type="html">&lt;p&gt;Tvi: subgroups added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tempus Serva uses a classic permission structure with some minor extensions&lt;br /&gt;
&lt;br /&gt;
'''Users'''&lt;br /&gt;
* User profiles can be bound to existing AD/LDAP repositories&lt;br /&gt;
* Special properties on users include&lt;br /&gt;
** Administrator: Allow access to backend&lt;br /&gt;
** Data handler: Bulk upload data&lt;br /&gt;
** User creator&lt;br /&gt;
&lt;br /&gt;
'''Membership''' is the relation between a user and a group&lt;br /&gt;
* Previous membership are logged in the database for forensic purposes&lt;br /&gt;
&lt;br /&gt;
'''Groups''' are list of users tied to certain permissions in solutions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Overview_permissionstructure.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Subgroups ==&lt;br /&gt;
If the policy doAdvancedGroupSecurity is enabled subgroups is enabled. Eg. groups can be nested under each other.&lt;br /&gt;
&lt;br /&gt;
=== Assigned Groups ===&lt;br /&gt;
When using subgroups with Assigned groups, the parent group gains access equal to all the subgroups.&lt;br /&gt;
&lt;br /&gt;
This can be used to create a super-user group that has all other groups as subgroups, thus allowing access to the entire system, without granting the super-user group direct access.&lt;br /&gt;
&lt;br /&gt;
=== Exclusive Groups ===&lt;br /&gt;
When using subgroups with Exclusive groups, the parent group gets access to all records tagget with the sub-groups.&lt;br /&gt;
&lt;br /&gt;
This can be used to create sub-departments and having a supervisor with access across.&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Dashboard_diagram_widget_configuration&amp;diff=7254</id>
		<title>Dashboard diagram widget configuration</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Dashboard_diagram_widget_configuration&amp;diff=7254"/>
		<updated>2025-03-21T15:30:18Z</updated>

		<summary type="html">&lt;p&gt;Tvi: post-parsing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This information is also applicable to the field [[FieldSubselectDiagram|Visual extra: SQL: Diagram query]].&lt;br /&gt;
&lt;br /&gt;
This site only describes the specifics of the diagram widgets, for general widget configuration [[Dashboard widget configuration|click here]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This article will only cover the newest version of graphs implemented.&lt;br /&gt;
&lt;br /&gt;
To enable these, toggle the [[Policy]] useGoogleChart to false and useNewChart to true.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As of writing (version 8813) these renderings are supported.&lt;br /&gt;
&lt;br /&gt;
* Circle&lt;br /&gt;
* Doughnut&lt;br /&gt;
* Bar vertical (Columns)&lt;br /&gt;
* Bar horizontal&lt;br /&gt;
* Area&lt;br /&gt;
* Line&lt;br /&gt;
* Area (stacked)&lt;br /&gt;
&lt;br /&gt;
== Data and Internationalization ==&lt;br /&gt;
An SQL Query may extract almost anything from the database.&lt;br /&gt;
&lt;br /&gt;
This process ignores the security restrictions in the system, so you will have to implement them yourself.&lt;br /&gt;
&lt;br /&gt;
=== Structure ===&lt;br /&gt;
&lt;br /&gt;
The structure is the same for all graphs.&lt;br /&gt;
&lt;br /&gt;
The first row of data will be used for headers.&lt;br /&gt;
&lt;br /&gt;
The column named &amp;quot;Title&amp;quot; will be used for titles. On circular diagrams that is the labels, next to the chart, and on xy-graphs that is the labels on the x axis.&lt;br /&gt;
&lt;br /&gt;
The rest of the headers will be used when hovering over the graph, to give information about the data. On xy-graphs it will also be displayed as labels.&lt;br /&gt;
&lt;br /&gt;
The rest of the lines in the data will be added as datapoints in the graph.&lt;br /&gt;
&lt;br /&gt;
If the datapoint is a number, the graph will auto-scale to match the data.&lt;br /&gt;
&lt;br /&gt;
Strings are also supported, but the outcome is unknown.&lt;br /&gt;
&lt;br /&gt;
If a datapoint is null, the graph will bridge the gap, if it is an xy-line-graph, [[FieldSubselectDiagram|see sample here]].&lt;br /&gt;
&lt;br /&gt;
==== Sample pie/doughnut-graph ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Title&lt;br /&gt;
!TitleEnglish&lt;br /&gt;
!This moth&lt;br /&gt;
!Last month&lt;br /&gt;
|-&lt;br /&gt;
|GOOG&lt;br /&gt;
|Alphabet&lt;br /&gt;
|100.23&lt;br /&gt;
|25.23&lt;br /&gt;
|-&lt;br /&gt;
|TSLA&lt;br /&gt;
|Tesla&lt;br /&gt;
|10.23&lt;br /&gt;
|20.23&lt;br /&gt;
|-&lt;br /&gt;
|AAPL&lt;br /&gt;
|Apple&lt;br /&gt;
|50.23&lt;br /&gt;
|50.23&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Sample line-graph ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Title&lt;br /&gt;
!TitleEnglish&lt;br /&gt;
!Alphabet&lt;br /&gt;
!Tesla&lt;br /&gt;
!Apple&lt;br /&gt;
|-&lt;br /&gt;
|THIS&lt;br /&gt;
|This Month&lt;br /&gt;
|100.23&lt;br /&gt;
|10.23&lt;br /&gt;
|50.23&lt;br /&gt;
|-&lt;br /&gt;
|LAST&lt;br /&gt;
|Last month&lt;br /&gt;
|25.23&lt;br /&gt;
|20.23&lt;br /&gt;
|50.23&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Multiply y-axis ====&lt;br /&gt;
Multiple y-axis are supported as of version 9390.&lt;br /&gt;
&lt;br /&gt;
To use this feature, prepend the name of the new axis to the data that should be on that axis, eg &amp;lt;code&amp;gt;y1|Apple&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The default y-axis is named &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;. If no axis is specified, this will be used.&lt;br /&gt;
&lt;br /&gt;
You can specify as many axis as ChartJS supports.&lt;br /&gt;
&lt;br /&gt;
==== Post-Parsing data ====&lt;br /&gt;
There is two possible post-processing methods available. They can't be combined.&lt;br /&gt;
&lt;br /&gt;
===== Transpose =====&lt;br /&gt;
Start the query with a line containing: &amp;lt;code&amp;gt;-- @TRANSPOSE&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This transposes (inverts columns and rows) the data fetched by the query, before handing it of to the chart-engine.&lt;br /&gt;
&lt;br /&gt;
===== Parse =====&lt;br /&gt;
Start the query with a line containing: &amp;lt;code&amp;gt;-- @PARSEDATASET&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This expects the query to generate data in the following format (headers are optional), and removes the support for links.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!X-axis&lt;br /&gt;
!Group by&lt;br /&gt;
!Y-axis&lt;br /&gt;
|-&lt;br /&gt;
|2024&lt;br /&gt;
|Sales&lt;br /&gt;
|2000&lt;br /&gt;
|-&lt;br /&gt;
|2024&lt;br /&gt;
|Budget&lt;br /&gt;
|2000&lt;br /&gt;
|-&lt;br /&gt;
|2025&lt;br /&gt;
|Sales&lt;br /&gt;
|2500&lt;br /&gt;
|-&lt;br /&gt;
|2025&lt;br /&gt;
|Budget&lt;br /&gt;
|4000&lt;br /&gt;
|-&lt;br /&gt;
|2026&lt;br /&gt;
|Budget&lt;br /&gt;
|5000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Internationalization ===&lt;br /&gt;
Add extra columns named &amp;quot;Title&amp;quot;, followed by the name of the language, eg ''TitleEnglish''.&lt;br /&gt;
&lt;br /&gt;
If a column with this name is found, it will be used, otherwise the grath will fallback to the &amp;quot;Title&amp;quot; column.&lt;br /&gt;
&lt;br /&gt;
If no title-column is found, the first column will be used, for compatibility reasons.&lt;br /&gt;
&lt;br /&gt;
== Adding functionality ==&lt;br /&gt;
It is possible to add some simple funktionality to charts, by adding links.&lt;br /&gt;
&lt;br /&gt;
This feature is limited to one link pr x-axis value.&lt;br /&gt;
&lt;br /&gt;
To add a link, add a column named &amp;quot;Link&amp;quot; to the query.&lt;br /&gt;
&lt;br /&gt;
Whatever this column contains will become a link, that can be navigated to, when that x-value is clicked.&lt;br /&gt;
&lt;br /&gt;
== Graph defaults ==&lt;br /&gt;
The graphs all reference the js object ''tsChartDefaultOptions'', with a couple of tweaks.&lt;br /&gt;
&lt;br /&gt;
To see the defaults, open the terminal in you browser, on a page that has a graph and type the name of the object.&lt;br /&gt;
&lt;br /&gt;
=== Specifik defaults ===&lt;br /&gt;
These can't be overwritten.&lt;br /&gt;
&lt;br /&gt;
==== Area stacked ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
options.scales = {&lt;br /&gt;
    y: {&lt;br /&gt;
        stacked: true&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Area stacked, area and line ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
options.interaction = {&lt;br /&gt;
	intersect: false,&lt;br /&gt;
	mode: 'index',&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Bars ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
options.indexAxis = 'y'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Overwriting defaults ===&lt;br /&gt;
To overwrite the default of all charts:&lt;br /&gt;
&lt;br /&gt;
Define an object in js, named tsChartOverwriteOptions.&lt;br /&gt;
&lt;br /&gt;
Set it based on the documentation fund [https://www.chartjs.org/docs/3.7.1/ here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To overwrite the options for a specific chart:&lt;br /&gt;
&lt;br /&gt;
Define an object in js, named tsChartOverwriteOptions.&lt;br /&gt;
&lt;br /&gt;
Add an object with an index matching the chartID.&lt;br /&gt;
&lt;br /&gt;
Set it based on the documentation fund [https://www.chartjs.org/docs/3.7.1/ here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To test your overwrite:&lt;br /&gt;
&lt;br /&gt;
From the console in the browser call ''tsChartOptions'' with the only parameter being the chartID.&lt;br /&gt;
&lt;br /&gt;
The return will be the final options, that will be used for that chart.&lt;br /&gt;
&lt;br /&gt;
== Colors ==&lt;br /&gt;
The colors used, can be overwritten in the Policy ''diagramChartJSColors.''&lt;br /&gt;
&lt;br /&gt;
The structure of the policy is very strict.&lt;br /&gt;
&lt;br /&gt;
The policy has to be formatted as a js array of strings that represent an rgb color.&lt;br /&gt;
&lt;br /&gt;
Thus: It has to start with &amp;lt;code&amp;gt;[&amp;lt;/code&amp;gt; and and with &amp;lt;code&amp;gt;, ]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Each color has to be formatted as an rgb color and wrapped with &amp;lt;code&amp;gt;'&amp;lt;/code&amp;gt;, and separated by &amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;  eg &amp;lt;code&amp;gt;'rgb(255, 255, 255)',&amp;lt;/code&amp;gt;  for a white color.&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Command_line_tools&amp;diff=7253</id>
		<title>Command line tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Command_line_tools&amp;diff=7253"/>
		<updated>2025-03-12T10:47:21Z</updated>

		<summary type="html">&lt;p&gt;Tvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A new version of the CLI was released on 21. december 2023.&lt;br /&gt;
&lt;br /&gt;
If you are looking for the old CLI you can find the documentation [[Legacy command line tools|here]].&lt;br /&gt;
&lt;br /&gt;
== Compatibility ==&lt;br /&gt;
The tools are compatible with the following distributions.&lt;br /&gt;
&lt;br /&gt;
* Amazon Linux, version 1, 2 and 2023&lt;br /&gt;
* Debian, version 10, 11 and 12&lt;br /&gt;
*Ubuntu, version 20.04, 22.04 and 24.04&lt;br /&gt;
* CentOS, version 8 and 9&lt;br /&gt;
&lt;br /&gt;
The script will check to see if it is running on one of these OSes and stop executing if not.&lt;br /&gt;
&lt;br /&gt;
== Usage information ==&lt;br /&gt;
The Tempus Serva Linux script tools are open source (LGPL), and you are free to use and modify them however you see fit. The tools are defined by one python3 script and a single json file that stores the config.&lt;br /&gt;
&lt;br /&gt;
As the tools themselves are subject to semiautomatic upgrades, we strongly recommend that you keep backups of files you have modified. Future versions of the scripts are not guaranteed to be compatible, with earlier versions or your own modifications.&lt;br /&gt;
&lt;br /&gt;
== Installing the tool ==&lt;br /&gt;
To install the tools, run:&lt;br /&gt;
 wget -qO - &amp;lt;nowiki&amp;gt;https://builds.tsnocode.com/helpers/install&amp;lt;/nowiki&amp;gt; | bash&lt;br /&gt;
This will check compatibility and install the required plugins.&lt;br /&gt;
&lt;br /&gt;
To use the tool, execute &amp;lt;code&amp;gt;ts&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
On first execution the tool will ask a couple of questions.&lt;br /&gt;
&lt;br /&gt;
If you choose to run java 8, &amp;lt;code&amp;gt;alpha&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;beta&amp;lt;/code&amp;gt; is the same release, previously known as &amp;lt;code&amp;gt;nightly&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Running on CentOS 9 ===&lt;br /&gt;
You should run this command first.&lt;br /&gt;
 dnf install -y wget nano&lt;br /&gt;
&lt;br /&gt;
==Tool reference==&lt;br /&gt;
To get the full list of commands, and a description, run &amp;lt;code&amp;gt;ts --help&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===quick-install===&lt;br /&gt;
Installs all the required software to run TS NoCode Platform, a default webapp named 'app' and a redirect from root to 'app'.&lt;br /&gt;
&lt;br /&gt;
It will not ask for anything, but uses default values.&lt;br /&gt;
&lt;br /&gt;
===install===&lt;br /&gt;
Installs all the required software to run TS NoCode Platform.&lt;br /&gt;
&lt;br /&gt;
It will ask questions about optional stuff.&lt;br /&gt;
&lt;br /&gt;
===install-app===&lt;br /&gt;
Will install a new TS NoCode Platform webapp. It ask what release to install from and what name the webapp should be deployed under, if that webapp exists it will ask if you would like to upgrade that installation instead.&lt;br /&gt;
&lt;br /&gt;
===upgrade-app ===&lt;br /&gt;
Will upgrade an existing TS NoCode Platform webapp. It will ask what release to upgrade from and what name the webapp should be deployed under, if that webapp doesn't exist it will do nothing.&lt;br /&gt;
&lt;br /&gt;
===set-admin-password===&lt;br /&gt;
Will set the admin password for an existing TS NoCode Platform webapp. Will ask what webapp to modify and what the password should be set to.&lt;br /&gt;
&lt;br /&gt;
===install-ssl===&lt;br /&gt;
Will install all dependencies that are needed to setup a LetsEncrypt SSL certificate. Will ask if SSL should be setup once the install completes.&lt;br /&gt;
&lt;br /&gt;
===setup-ssl===&lt;br /&gt;
Will ask about domain(s) and contact-email, request and install an SSL certificate and setup auto-renewal.&lt;br /&gt;
&lt;br /&gt;
==Quick install==&lt;br /&gt;
To quick-install the tool and a webapp run this&lt;br /&gt;
 wget -qO - &amp;lt;nowiki&amp;gt;https://builds.tsnocode.com/helpers/install&amp;lt;/nowiki&amp;gt; | bash &amp;amp;&amp;amp; ts quick-install&lt;br /&gt;
If you also want to setup SSL, run this&lt;br /&gt;
 wget -qO - &amp;lt;nowiki&amp;gt;https://builds.tsnocode.com/helpers/install&amp;lt;/nowiki&amp;gt; | bash &amp;amp;&amp;amp; ts quick-install &amp;amp;&amp;amp; ts install-ssl&lt;br /&gt;
&lt;br /&gt;
==Removing the tools==&lt;br /&gt;
Remove the two files, eg by running:&lt;br /&gt;
 sudo rm /usr/bin/{ts,tsconfig.json}&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Main_Page&amp;diff=7251</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Main_Page&amp;diff=7251"/>
		<updated>2025-02-07T13:59:17Z</updated>

		<summary type="html">&lt;p&gt;Tvi: Changed redirect target from Index.php?title=TS NoCode online documentation to TS NoCode online documentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[TS NoCode online documentation]]&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Main_Page&amp;diff=7250</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Main_Page&amp;diff=7250"/>
		<updated>2025-02-07T13:58:55Z</updated>

		<summary type="html">&lt;p&gt;Tvi: Changed redirect target from Tempus Serva online documentation to Index.php?title=TS NoCode online documentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[index.php?title=TS NoCode online documentation]]&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Tempus_Serva_online_documentation&amp;diff=7249</id>
		<title>Tempus Serva online documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Tempus_Serva_online_documentation&amp;diff=7249"/>
		<updated>2025-02-07T13:55:28Z</updated>

		<summary type="html">&lt;p&gt;Tvi: Tvi moved page Tempus Serva online documentation to TS NoCode online documentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[TS NoCode online documentation]]&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=TS_NoCode_online_documentation&amp;diff=7248</id>
		<title>TS NoCode online documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=TS_NoCode_online_documentation&amp;diff=7248"/>
		<updated>2025-02-07T13:55:28Z</updated>

		<summary type="html">&lt;p&gt;Tvi: Tvi moved page Tempus Serva online documentation to TS NoCode online documentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the TS NoCode online documentation&lt;br /&gt;
&lt;br /&gt;
On this site you will find the documentation to aid you in your development of safe and flexible solutions.&lt;br /&gt;
&lt;br /&gt;
== Insight and ressources ==&lt;br /&gt;
{|&lt;br /&gt;
&lt;br /&gt;
| '''[[Startup FAQ|Getting started]]'''&lt;br /&gt;
| Frequently asked questions during startup&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| '''[[Features|Platform features]]'''&lt;br /&gt;
|Modules and features in the platform&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|  '''[[Security_setup|Security setup]]'''&lt;br /&gt;
| Security and compliance features in the platform&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| '''[[Applications|Application overview]]'''&lt;br /&gt;
| Overview of common uses of the platform&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
| '''[[Guides and tutorials]]'''&lt;br /&gt;
| Step by step guides to developers&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
| '''[[Related materials]]'''&lt;br /&gt;
| External ressources and related materials&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Technical reference ==&lt;br /&gt;
{|&lt;br /&gt;
 &lt;br /&gt;
|  '''[[API v1.0|Java API (v1)]]'''&lt;br /&gt;
| Backend API for building new codeunits&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|  '''[[JavaScript functions v1.0|JavaScript functions]]'''&lt;br /&gt;
| Frontend API for tweaking interface behavior&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|  '''[[Integration/REST|REST interface]]'''&lt;br /&gt;
| Using built-in solution webservices&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|  '''[[Field type reference]]'''&lt;br /&gt;
| Documentation for all data model building blocks (content types)&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|  '''[[Policy reference]]'''&lt;br /&gt;
| Documentation for shared server configuration options&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|  '''[[Command reference]]'''&lt;br /&gt;
| Overview of commands and main functionality &lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|  '''[[Codeunit reference]]'''&lt;br /&gt;
| Reference for common funtionality extensions &lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|  '''[[Service|Scheduled services]]'''&lt;br /&gt;
| Scheduled services tools&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|  '''[[Integration|Integration services]]'''&lt;br /&gt;
| System integration options including REST services&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|  '''[[Command line tools]]'''&lt;br /&gt;
| Tools for maintaining your UNIX platform&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|  '''[[Server maintenence]]'''&lt;br /&gt;
| Tips for hosting TS servers&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
| '''[[Known issues]]'''&lt;br /&gt;
| Behaviour per design, issues and system warnings&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Application support ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
&lt;br /&gt;
|  '''[[Basic setup]]'''&lt;br /&gt;
| Basic customization&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|  '''[[TalentPiper]]'''&lt;br /&gt;
| Recruitment software&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|  '''[[Whistleblower]]'''&lt;br /&gt;
| Multitenant solution for whistleblowing&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|  '''[[Intect Flow]]'''&lt;br /&gt;
| Multicompany salary management&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|  '''[[COMPASS]]'''&lt;br /&gt;
| IT governance&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Training and certification ==&lt;br /&gt;
[https://www.tempusserva.dk/training/ Training overview]&lt;br /&gt;
&lt;br /&gt;
[[Course notes for today]]&lt;br /&gt;
&lt;br /&gt;
[[Coding standards]]&lt;br /&gt;
&lt;br /&gt;
[[Continous delivery]]&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=TS_NoCode_online_documentation&amp;diff=7247</id>
		<title>TS NoCode online documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=TS_NoCode_online_documentation&amp;diff=7247"/>
		<updated>2025-02-07T13:55:00Z</updated>

		<summary type="html">&lt;p&gt;Tvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the TS NoCode online documentation&lt;br /&gt;
&lt;br /&gt;
On this site you will find the documentation to aid you in your development of safe and flexible solutions.&lt;br /&gt;
&lt;br /&gt;
== Insight and ressources ==&lt;br /&gt;
{|&lt;br /&gt;
&lt;br /&gt;
| '''[[Startup FAQ|Getting started]]'''&lt;br /&gt;
| Frequently asked questions during startup&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| '''[[Features|Platform features]]'''&lt;br /&gt;
|Modules and features in the platform&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|  '''[[Security_setup|Security setup]]'''&lt;br /&gt;
| Security and compliance features in the platform&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| '''[[Applications|Application overview]]'''&lt;br /&gt;
| Overview of common uses of the platform&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
| '''[[Guides and tutorials]]'''&lt;br /&gt;
| Step by step guides to developers&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
| '''[[Related materials]]'''&lt;br /&gt;
| External ressources and related materials&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Technical reference ==&lt;br /&gt;
{|&lt;br /&gt;
 &lt;br /&gt;
|  '''[[API v1.0|Java API (v1)]]'''&lt;br /&gt;
| Backend API for building new codeunits&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|  '''[[JavaScript functions v1.0|JavaScript functions]]'''&lt;br /&gt;
| Frontend API for tweaking interface behavior&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|  '''[[Integration/REST|REST interface]]'''&lt;br /&gt;
| Using built-in solution webservices&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|  '''[[Field type reference]]'''&lt;br /&gt;
| Documentation for all data model building blocks (content types)&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|  '''[[Policy reference]]'''&lt;br /&gt;
| Documentation for shared server configuration options&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|  '''[[Command reference]]'''&lt;br /&gt;
| Overview of commands and main functionality &lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|  '''[[Codeunit reference]]'''&lt;br /&gt;
| Reference for common funtionality extensions &lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|  '''[[Service|Scheduled services]]'''&lt;br /&gt;
| Scheduled services tools&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|  '''[[Integration|Integration services]]'''&lt;br /&gt;
| System integration options including REST services&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|  '''[[Command line tools]]'''&lt;br /&gt;
| Tools for maintaining your UNIX platform&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|  '''[[Server maintenence]]'''&lt;br /&gt;
| Tips for hosting TS servers&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
| '''[[Known issues]]'''&lt;br /&gt;
| Behaviour per design, issues and system warnings&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Application support ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
&lt;br /&gt;
|  '''[[Basic setup]]'''&lt;br /&gt;
| Basic customization&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|  '''[[TalentPiper]]'''&lt;br /&gt;
| Recruitment software&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|  '''[[Whistleblower]]'''&lt;br /&gt;
| Multitenant solution for whistleblowing&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|  '''[[Intect Flow]]'''&lt;br /&gt;
| Multicompany salary management&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|  '''[[COMPASS]]'''&lt;br /&gt;
| IT governance&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Training and certification ==&lt;br /&gt;
[https://www.tempusserva.dk/training/ Training overview]&lt;br /&gt;
&lt;br /&gt;
[[Course notes for today]]&lt;br /&gt;
&lt;br /&gt;
[[Coding standards]]&lt;br /&gt;
&lt;br /&gt;
[[Continous delivery]]&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Email_templates&amp;diff=7246</id>
		<title>Email templates</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Email_templates&amp;diff=7246"/>
		<updated>2025-02-04T13:45:38Z</updated>

		<summary type="html">&lt;p&gt;Tvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Email templates ==&lt;br /&gt;
If you need to include graphics in the design we recommend  using inline base64 images.&lt;br /&gt;
&lt;br /&gt;
CSS is easily embeddable inside ''style'' tags&lt;br /&gt;
&lt;br /&gt;
== Wrapping emails ==&lt;br /&gt;
It is possible to wrap all emails sent by the system in an [https://mjml.io/try-it-live/ MJML] or HTML wrapper.&lt;br /&gt;
&lt;br /&gt;
Our implementation of the MJML engine is a bit unstable, so it is recommended to build the wrapper using MJML, then exporting the HTML version and uploading that to the platform.&lt;br /&gt;
&lt;br /&gt;
Two tags are available: &amp;lt;code&amp;gt;[SUBJECT]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[BODY]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SUBJECT will be replaced with the subject of the given email.&lt;br /&gt;
&lt;br /&gt;
BODY will be replaced with the email-content of the given email.&lt;br /&gt;
&lt;br /&gt;
To enable email-wrapping, set the Policy &amp;lt;code&amp;gt;defaultEmailTemplateID&amp;lt;/code&amp;gt; to the ID of the template.&lt;br /&gt;
&lt;br /&gt;
You can control whether the content of the email is inserted into the template before or after rendering, via the Policy &amp;lt;code&amp;gt;emailDoInsertBeforeRender&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Inserting data ==&lt;br /&gt;
To insert data from a record,,into an email, the following syntax is used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{FIELDNAME}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Custom functions ===&lt;br /&gt;
A couple of functions are implemented, allowing minor modification of data from fields, before inserting it.&lt;br /&gt;
&lt;br /&gt;
Syntax: &amp;lt;code&amp;gt;@[FUNCTION]({FIELDNAME} [PARAMETER])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Function: FALLBACK ====&lt;br /&gt;
Sample: &amp;lt;code&amp;gt;@FALLBACK({NAME} Friend)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the given field does not have a value, or is not found, the PARAMETER value will be used instead.&lt;br /&gt;
&lt;br /&gt;
==== Function: DATEADD ====&lt;br /&gt;
Sample: &amp;lt;code&amp;gt;@DATEADD({DATE} 3 weeks)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the given field is a Date, Time or DateTime field, the value is modified by the given amount (positive or negative)&lt;br /&gt;
&lt;br /&gt;
Supports wrapping inside FORMAT (see below).&lt;br /&gt;
&lt;br /&gt;
Supported periods: minute(s), hour(s), day(s), week(s), month(s), year(s)&lt;br /&gt;
&lt;br /&gt;
==== Function: DATESUB ====&lt;br /&gt;
Sample: &amp;lt;code&amp;gt;@DATESUB({DATE} 3 weeks)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the given field is a Date, Time or DateTime field, the value is modified by the given amount (positive or negative)&lt;br /&gt;
&lt;br /&gt;
Supports wrapping inside FORMAT (see below).&lt;br /&gt;
&lt;br /&gt;
Supported periods: minute(s), hour(s), day(s), week(s), month(s), year(s)&lt;br /&gt;
&lt;br /&gt;
==== Function: FORMAT ====&lt;br /&gt;
Sample: &amp;lt;code&amp;gt;@FORMAT({NUMBER} 000.000)&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;@FORMAT({DATE} MMM, d YYYY)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Formats a given number or date to the specified format.&lt;br /&gt;
&lt;br /&gt;
Number formatting uses [https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html DecimalFormat] and date formatting uses [https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html SimpleDateFormat].&lt;br /&gt;
&lt;br /&gt;
It is possible to wrap this function around DATESUB and DATEADD like this: &amp;lt;code&amp;gt;@FORMAT(@DATEADD({DATE} 3 weeks) MMM, d YYYY)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== System templates ==&lt;br /&gt;
Templates can be changed in the designer: '''Modules &amp;gt; Configuration'''&lt;br /&gt;
&lt;br /&gt;
=== Invitation template ===&lt;br /&gt;
HTML can be edited in '''Template.WelcomeUser''' and '''Template.WelcomeUserLink'''&lt;br /&gt;
&lt;br /&gt;
Supported tags&lt;br /&gt;
* {APPLICATION}&lt;br /&gt;
* {LOGINURL}&lt;br /&gt;
* {USERNAME}&lt;br /&gt;
* {PASSWORD}&lt;br /&gt;
&lt;br /&gt;
=== Password reset template ===&lt;br /&gt;
HTML can be edited in '''Template.PasswordReset''' and '''Template.PasswordResetLink'''&lt;br /&gt;
&lt;br /&gt;
Supported tags&lt;br /&gt;
* {LOGINURL}&lt;br /&gt;
* {PASSWORD}&lt;br /&gt;
&lt;br /&gt;
=== Reset via link-templates ===&lt;br /&gt;
Additional supported tags&lt;br /&gt;
&lt;br /&gt;
* {PASSWORDLINK}&lt;br /&gt;
* {LINKLIFETIME}&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Email_templates&amp;diff=7245</id>
		<title>Email templates</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Email_templates&amp;diff=7245"/>
		<updated>2025-02-04T13:45:00Z</updated>

		<summary type="html">&lt;p&gt;Tvi: Info about inserting data and calling functions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Email templates ==&lt;br /&gt;
If you need to include graphics in the design we recommend  using inline base64 images.&lt;br /&gt;
&lt;br /&gt;
CSS is easily embeddable inside ''script'' tags&lt;br /&gt;
&lt;br /&gt;
== Wrapping emails ==&lt;br /&gt;
It is possible to wrap all emails sent by the system in an [https://mjml.io/try-it-live/ MJML] or HTML wrapper.&lt;br /&gt;
&lt;br /&gt;
Our implementation of the MJML engine is a bit unstable, so it is recommended to build the wrapper using MJML, then exporting the HTML version and uploading that to the platform.&lt;br /&gt;
&lt;br /&gt;
Two tags are available: &amp;lt;code&amp;gt;[SUBJECT]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[BODY]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SUBJECT will be replaced with the subject of the given email.&lt;br /&gt;
&lt;br /&gt;
BODY will be replaced with the email-content of the given email.&lt;br /&gt;
&lt;br /&gt;
To enable email-wrapping, set the Policy &amp;lt;code&amp;gt;defaultEmailTemplateID&amp;lt;/code&amp;gt; to the ID of the template.&lt;br /&gt;
&lt;br /&gt;
You can control whether the content of the email is inserted into the template before or after rendering, via the Policy &amp;lt;code&amp;gt;emailDoInsertBeforeRender&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Inserting data ==&lt;br /&gt;
To insert data from a record,,into an email, the following syntax is used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{FIELDNAME}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Custom functions ===&lt;br /&gt;
A couple of functions are implemented, allowing minor modification of data from fields, before inserting it.&lt;br /&gt;
&lt;br /&gt;
Syntax: &amp;lt;code&amp;gt;@[FUNCTION]({FIELDNAME} [PARAMETER])&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Function: FALLBACK ====&lt;br /&gt;
Sample: &amp;lt;code&amp;gt;@FALLBACK({NAME} Friend)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the given field does not have a value, or is not found, the PARAMETER value will be used instead.&lt;br /&gt;
&lt;br /&gt;
==== Function: DATEADD ====&lt;br /&gt;
Sample: &amp;lt;code&amp;gt;@DATEADD({DATE} 3 weeks)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the given field is a Date, Time or DateTime field, the value is modified by the given amount (positive or negative)&lt;br /&gt;
&lt;br /&gt;
Supports wrapping inside FORMAT (see below).&lt;br /&gt;
&lt;br /&gt;
Supported periods: minute(s), hour(s), day(s), week(s), month(s), year(s)&lt;br /&gt;
&lt;br /&gt;
==== Function: DATESUB ====&lt;br /&gt;
Sample: &amp;lt;code&amp;gt;@DATESUB({DATE} 3 weeks)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the given field is a Date, Time or DateTime field, the value is modified by the given amount (positive or negative)&lt;br /&gt;
&lt;br /&gt;
Supports wrapping inside FORMAT (see below).&lt;br /&gt;
&lt;br /&gt;
Supported periods: minute(s), hour(s), day(s), week(s), month(s), year(s)&lt;br /&gt;
&lt;br /&gt;
==== Function: FORMAT ====&lt;br /&gt;
Sample: &amp;lt;code&amp;gt;@FORMAT({NUMBER} 000.000)&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;@FORMAT({DATE} MMM, d YYYY)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Formats a given number or date to the specified format.&lt;br /&gt;
&lt;br /&gt;
Number formatting uses [https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html DecimalFormat] and date formatting uses [https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html SimpleDateFormat].&lt;br /&gt;
&lt;br /&gt;
It is possible to wrap this function around DATESUB and DATEADD like this: &amp;lt;code&amp;gt;@FORMAT(@DATEADD({DATE} 3 weeks) MMM, d YYYY)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== System templates ==&lt;br /&gt;
Templates can be changed in the designer: '''Modules &amp;gt; Configuration'''&lt;br /&gt;
&lt;br /&gt;
=== Invitation template ===&lt;br /&gt;
HTML can be edited in '''Template.WelcomeUser''' and '''Template.WelcomeUserLink'''&lt;br /&gt;
&lt;br /&gt;
Supported tags&lt;br /&gt;
* {APPLICATION}&lt;br /&gt;
* {LOGINURL}&lt;br /&gt;
* {USERNAME}&lt;br /&gt;
* {PASSWORD}&lt;br /&gt;
&lt;br /&gt;
=== Password reset template ===&lt;br /&gt;
HTML can be edited in '''Template.PasswordReset''' and '''Template.PasswordResetLink'''&lt;br /&gt;
&lt;br /&gt;
Supported tags&lt;br /&gt;
* {LOGINURL}&lt;br /&gt;
* {PASSWORD}&lt;br /&gt;
&lt;br /&gt;
=== Reset via link-templates ===&lt;br /&gt;
Additional supported tags&lt;br /&gt;
&lt;br /&gt;
* {PASSWORDLINK}&lt;br /&gt;
* {LINKLIFETIME}&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Email_templates&amp;diff=7244</id>
		<title>Email templates</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Email_templates&amp;diff=7244"/>
		<updated>2025-02-04T13:22:48Z</updated>

		<summary type="html">&lt;p&gt;Tvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Email templates ==&lt;br /&gt;
Templates can be changed in the designer: &lt;br /&gt;
'''Modules &amp;gt; Configuration'''&lt;br /&gt;
&lt;br /&gt;
If you need to include graphics in the design we recommend  using inline base64 images.&lt;br /&gt;
&lt;br /&gt;
CSS is easily embeddable inside ''script'' tags&lt;br /&gt;
&lt;br /&gt;
=== Invitation template ===&lt;br /&gt;
HTML can be edited in '''Template.WelcomeUser''' and '''Template.WelcomeUserLink'''&lt;br /&gt;
&lt;br /&gt;
Supported tags&lt;br /&gt;
* {APPLICATION}&lt;br /&gt;
* {LOGINURL}&lt;br /&gt;
* {USERNAME}&lt;br /&gt;
* {PASSWORD}&lt;br /&gt;
&lt;br /&gt;
=== Password reset template ===&lt;br /&gt;
HTML can be edited in '''Template.PasswordReset''' and '''Template.PasswordResetLink'''&lt;br /&gt;
&lt;br /&gt;
Supported tags&lt;br /&gt;
* {LOGINURL}&lt;br /&gt;
* {PASSWORD}&lt;br /&gt;
&lt;br /&gt;
=== Reset via link-templates ===&lt;br /&gt;
Additional supported tags&lt;br /&gt;
&lt;br /&gt;
* {PASSWORDLINK}&lt;br /&gt;
* {LINKLIFETIME}&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Embed_TS_in_other_sites&amp;diff=7235</id>
		<title>Embed TS in other sites</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Embed_TS_in_other_sites&amp;diff=7235"/>
		<updated>2025-01-21T14:09:21Z</updated>

		<summary type="html">&lt;p&gt;Tvi: Created page with &amp;quot;To embed the output of a public codeunit, on another website, the following code can be used.&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt; &amp;lt;div id=&amp;quot;tsContent&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;     $.ajax({         url: 'https://[SYSTEM-DOMAIN]/[APP-NAME]/mainpublic?command=[CODEUNIT-NAME]]',         success: function(data) {             $('#tsContent').html($(data).find(&amp;quot;.mainContent&amp;quot;).html());         },     }); &amp;lt;/script&amp;gt; &amp;lt;/syntaxhighlight&amp;gt;It requires jQuery to be loaded beforehand.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To embed the output of a public codeunit, on another website, the following code can be used.&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;tsContent&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
    $.ajax({&lt;br /&gt;
        url: 'https://[SYSTEM-DOMAIN]/[APP-NAME]/mainpublic?command=[CODEUNIT-NAME]]',&lt;br /&gt;
        success: function(data) {&lt;br /&gt;
            $('#tsContent').html($(data).find(&amp;quot;.mainContent&amp;quot;).html());&lt;br /&gt;
        },&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;It requires jQuery to be loaded beforehand.&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Dashboard_diagram_widget_configuration&amp;diff=7233</id>
		<title>Dashboard diagram widget configuration</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Dashboard_diagram_widget_configuration&amp;diff=7233"/>
		<updated>2025-01-10T14:46:31Z</updated>

		<summary type="html">&lt;p&gt;Tvi: Added functionality section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This information is also applicable to the field [[FieldSubselectDiagram|Visual extra: SQL: Diagram query]].&lt;br /&gt;
&lt;br /&gt;
This site only describes the specifics of the diagram widgets, for general widget configuration [[Dashboard widget configuration|click here]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This article will only cover the newest version of graphs implemented.&lt;br /&gt;
&lt;br /&gt;
To enable these, toggle the [[Policy]] useGoogleChart to false and useNewChart to true.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As of writing (version 8813) these renderings are supported.&lt;br /&gt;
&lt;br /&gt;
* Circle&lt;br /&gt;
* Doughnut&lt;br /&gt;
* Bar vertical (Columns)&lt;br /&gt;
* Bar horizontal&lt;br /&gt;
* Area&lt;br /&gt;
* Line&lt;br /&gt;
* Area (stacked)&lt;br /&gt;
&lt;br /&gt;
== Data and Internationalization ==&lt;br /&gt;
An SQL Query may extract almost anything from the database.&lt;br /&gt;
&lt;br /&gt;
This process ignores the security restrictions in the system, so you will have to implement them yourself.&lt;br /&gt;
&lt;br /&gt;
=== Structure ===&lt;br /&gt;
&lt;br /&gt;
The structure is the same for all graphs.&lt;br /&gt;
&lt;br /&gt;
The first row of data will be used for headers.&lt;br /&gt;
&lt;br /&gt;
The column named &amp;quot;Title&amp;quot; will be used for titles. On circular diagrams that is the labels, next to the chart, and on xy-graphs that is the labels on the x axis.&lt;br /&gt;
&lt;br /&gt;
The rest of the headers will be used when hovering over the graph, to give information about the data. On xy-graphs it will also be displayed as labels.&lt;br /&gt;
&lt;br /&gt;
The rest of the lines in the data will be added as datapoints in the graph.&lt;br /&gt;
&lt;br /&gt;
If the datapoint is a number, the graph will auto-scale to match the data.&lt;br /&gt;
&lt;br /&gt;
Strings are also supported, but the outcome is unknown.&lt;br /&gt;
&lt;br /&gt;
If a datapoint is null, the graph will bridge the gap, if it is an xy-line-graph, [[FieldSubselectDiagram|see sample here]].&lt;br /&gt;
&lt;br /&gt;
==== Sample pie/doughnut-graph ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Title&lt;br /&gt;
!TitleEnglish&lt;br /&gt;
!This moth&lt;br /&gt;
!Last month&lt;br /&gt;
|-&lt;br /&gt;
|GOOG&lt;br /&gt;
|Alphabet&lt;br /&gt;
|100.23&lt;br /&gt;
|25.23&lt;br /&gt;
|-&lt;br /&gt;
|TSLA&lt;br /&gt;
|Tesla&lt;br /&gt;
|10.23&lt;br /&gt;
|20.23&lt;br /&gt;
|-&lt;br /&gt;
|AAPL&lt;br /&gt;
|Apple&lt;br /&gt;
|50.23&lt;br /&gt;
|50.23&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Sample line-graph ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Title&lt;br /&gt;
!TitleEnglish&lt;br /&gt;
!Alphabet&lt;br /&gt;
!Tesla&lt;br /&gt;
!Apple&lt;br /&gt;
|-&lt;br /&gt;
|THIS&lt;br /&gt;
|This Month&lt;br /&gt;
|100.23&lt;br /&gt;
|10.23&lt;br /&gt;
|50.23&lt;br /&gt;
|-&lt;br /&gt;
|LAST&lt;br /&gt;
|Last month&lt;br /&gt;
|25.23&lt;br /&gt;
|20.23&lt;br /&gt;
|50.23&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Multiply y-axis ====&lt;br /&gt;
Multiple y-axis are supported as of version 9390.&lt;br /&gt;
&lt;br /&gt;
To use this feature, prepend the name of the new axis to the data that should be on that axis, eg &amp;lt;code&amp;gt;y1|Apple&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The default y-axis is named &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;. If no axis is specified, this will be used.&lt;br /&gt;
&lt;br /&gt;
You can specify as many axis as ChartJS supports.&lt;br /&gt;
&lt;br /&gt;
=== Internationalization ===&lt;br /&gt;
Add extra columns named &amp;quot;Title&amp;quot;, followed by the name of the language, eg ''TitleEnglish''.&lt;br /&gt;
&lt;br /&gt;
If a column with this name is found, it will be used, otherwise the grath will fallback to the &amp;quot;Title&amp;quot; column.&lt;br /&gt;
&lt;br /&gt;
If no title-column is found, the first column will be used, for compatibility reasons.&lt;br /&gt;
&lt;br /&gt;
== Adding functionality ==&lt;br /&gt;
It is possible to add some simple funktionality to charts, by adding links.&lt;br /&gt;
&lt;br /&gt;
This feature is limited to one link pr x-axis value.&lt;br /&gt;
&lt;br /&gt;
To add a link, add a column named &amp;quot;Link&amp;quot; to the query.&lt;br /&gt;
&lt;br /&gt;
Whatever this column contains will become a link, that can be navigated to, when that x-value is clicked.&lt;br /&gt;
&lt;br /&gt;
== Graph defaults ==&lt;br /&gt;
The graphs all reference the js object ''tsChartDefaultOptions'', with a couple of tweaks.&lt;br /&gt;
&lt;br /&gt;
To see the defaults, open the terminal in you browser, on a page that has a graph and type the name of the object.&lt;br /&gt;
&lt;br /&gt;
=== Specifik defaults ===&lt;br /&gt;
These can't be overwritten.&lt;br /&gt;
&lt;br /&gt;
==== Area stacked ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
options.scales = {&lt;br /&gt;
    y: {&lt;br /&gt;
        stacked: true&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Area stacked, area and line ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
options.interaction = {&lt;br /&gt;
	intersect: false,&lt;br /&gt;
	mode: 'index',&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Bars ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
options.indexAxis = 'y'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Overwriting defaults ===&lt;br /&gt;
To overwrite the default of all charts:&lt;br /&gt;
&lt;br /&gt;
Define an object in js, named tsChartOverwriteOptions.&lt;br /&gt;
&lt;br /&gt;
Set it based on the documentation fund [https://www.chartjs.org/docs/3.7.1/ here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To overwrite the options for a specific chart:&lt;br /&gt;
&lt;br /&gt;
Define an object in js, named tsChartOverwriteOptions.&lt;br /&gt;
&lt;br /&gt;
Add an object with an index matching the chartID.&lt;br /&gt;
&lt;br /&gt;
Set it based on the documentation fund [https://www.chartjs.org/docs/3.7.1/ here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To test your overwrite:&lt;br /&gt;
&lt;br /&gt;
From the console in the browser call ''tsChartOptions'' with the only parameter being the chartID.&lt;br /&gt;
&lt;br /&gt;
The return will be the final options, that will be used for that chart.&lt;br /&gt;
&lt;br /&gt;
== Colors ==&lt;br /&gt;
The colors used, can be overwritten in the Policy ''diagramChartJSColors.''&lt;br /&gt;
&lt;br /&gt;
The structure of the policy is very strict.&lt;br /&gt;
&lt;br /&gt;
The policy has to be formatted as a js array of strings that represent an rgb color.&lt;br /&gt;
&lt;br /&gt;
Thus: It has to start with &amp;lt;code&amp;gt;[&amp;lt;/code&amp;gt; and and with &amp;lt;code&amp;gt;, ]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Each color has to be formatted as an rgb color and wrapped with &amp;lt;code&amp;gt;'&amp;lt;/code&amp;gt;, and separated by &amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;  eg &amp;lt;code&amp;gt;'rgb(255, 255, 255)',&amp;lt;/code&amp;gt;  for a white color.&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=FieldNumberBoolean&amp;diff=7202</id>
		<title>FieldNumberBoolean</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=FieldNumberBoolean&amp;diff=7202"/>
		<updated>2024-12-11T13:06:45Z</updated>

		<summary type="html">&lt;p&gt;Tvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Yes/No =&lt;br /&gt;
Check box. Yes/No. The values can be shown with other words or icons&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
* Type: [[Field type reference#Basic|Basic]]&lt;br /&gt;
* Groupable: Yes&lt;br /&gt;
* Show in lists: No&lt;br /&gt;
* Searchable: Yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== User interface ==&lt;br /&gt;
Field in show mode&lt;br /&gt;
&lt;br /&gt;
[[File:FieldNumberBoolean_show.png]]&lt;br /&gt;
&lt;br /&gt;
Field in edit mode&lt;br /&gt;
&lt;br /&gt;
[[File:FieldNumberBoolean_edit.png]]&lt;br /&gt;
&lt;br /&gt;
User interface as displayed in picture&lt;br /&gt;
&lt;br /&gt;
As of version 9943 adding a &amp;lt;code&amp;gt;TRUE value text&amp;lt;/code&amp;gt;, when displaying the field as a checkbox, the value will be used as a label for the checkbox.&lt;br /&gt;
== Configuration ==&lt;br /&gt;
[[File:FieldNumberBoolean_BE.png]]&lt;br /&gt;
&lt;br /&gt;
Required:&lt;br /&gt;
* ''As shown above''&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
* ''As shown above''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Developer info ==&lt;br /&gt;
* FeltTypeID: 13&lt;br /&gt;
* SQL datatype: tinyint(1)&lt;br /&gt;
* Class name: FieldNumberBoolean&lt;br /&gt;
* Field is allowed in inline tables&lt;br /&gt;
* Pattern:  ^(X|JA|NEJ|YES|NO|TRUE|FALSE)$&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Developing_codeunits&amp;diff=7201</id>
		<title>Developing codeunits</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Developing_codeunits&amp;diff=7201"/>
		<updated>2024-12-10T15:53:21Z</updated>

		<summary type="html">&lt;p&gt;Tvi: Added section about dev-vm&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Steps for creating a new codeunit ==&lt;br /&gt;
&lt;br /&gt;
# Create a new Java project in your favorite IDE&lt;br /&gt;
# Import the p2eShared.jar in the project&lt;br /&gt;
# Create a new class:&lt;br /&gt;
## The abstract parts are found in: dk.p2e.blanket.codeunit&lt;br /&gt;
## Implement all abstract methods&lt;br /&gt;
## Code the method bodies (normally &amp;quot;execute&amp;quot;)&lt;br /&gt;
# Compile and build&lt;br /&gt;
# Deploy to webservser: [Application]\WEB-INF\lib&lt;br /&gt;
&lt;br /&gt;
After first test of the codeunit a server reboot is needed for each redeployment, as there is no way of removing the loaded classes from memory.&lt;br /&gt;
&lt;br /&gt;
== Error handling ==&lt;br /&gt;
&lt;br /&gt;
Exceptions are handled by themselves using the errorRegistration(Exception e) method.&lt;br /&gt;
&lt;br /&gt;
In case the errors are not caught by the codeunit itself, the generic error handler takes over&lt;br /&gt;
# Logs the error in the eventlog&lt;br /&gt;
# Returns a standard error page to the user&lt;br /&gt;
&lt;br /&gt;
Other debugging options include log4j and specialized TempusServa '''Systemout.print''' functions (yes, the class name is &amp;quot;Systemout&amp;quot;).&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Systemout.println(&amp;quot;hello world&amp;quot;);&lt;br /&gt;
Systemout.printSql(myStatment);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration / parameters ==&lt;br /&gt;
&lt;br /&gt;
Parameters are delivered through the method call, packed in a nice &amp;lt;String&amp;gt; Hashtable for easy access.&lt;br /&gt;
&lt;br /&gt;
Please note that values are sent as-is, so make sure to escape values before DB operations using &amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
DbConnection.escapeSql(String s);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Configurations can be stored using the getConfiguration methods of the command object. These values can be editedthrough the designer, depending on the Codeunit type&lt;br /&gt;
&lt;br /&gt;
* System configurations: Designer &amp;gt; Modules &amp;gt; Static content&lt;br /&gt;
* Solution configurations: Designer &amp;gt; [Solution] &amp;gt; Advanced &amp;gt; Configurations &lt;br /&gt;
&lt;br /&gt;
Value names will be prefixed with Class simple name - example + &amp;quot;.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  com'''.tsnocode.MyExampleCodeunit.'''myParameter&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
Variables can have a scope of either &lt;br /&gt;
* Request&lt;br /&gt;
* User session&lt;br /&gt;
* Application&lt;br /&gt;
&lt;br /&gt;
For permanent variables user server configurations.&lt;br /&gt;
&lt;br /&gt;
=== Request variables ===&lt;br /&gt;
Request scope variables should be stored in the Hashtable '''sharedObjects''' in the '''Command''' object.&lt;br /&gt;
&lt;br /&gt;
Note that the HTTP request parameters are stored in '''requestParameters'''.&lt;br /&gt;
&lt;br /&gt;
=== User session variables ===&lt;br /&gt;
Acces the '''sessionValues''' attribute in  the '''Security''' object&lt;br /&gt;
* boolean hasSessionValue(String name)&lt;br /&gt;
* void setSessionValue(String name, boolean value)&lt;br /&gt;
* int getSessionInteger(String name, int defaultValue)&lt;br /&gt;
* int getSessionInteger(String name)&lt;br /&gt;
* void setSessionInteger(String name, int value)&lt;br /&gt;
* String getSessionString(String name, String defaultValue)&lt;br /&gt;
* String getSessionString(String name)&lt;br /&gt;
* void setSessionString(String name, String value)&lt;br /&gt;
&lt;br /&gt;
All variables her are serilizable and will survive server restarts.&lt;br /&gt;
&lt;br /&gt;
Certain special user properties can also be accessed from the '''Security''' object&lt;br /&gt;
* boolean hasProperty(String name)    &lt;br /&gt;
* String getProperty(String name)&lt;br /&gt;
&lt;br /&gt;
Finally it is possible to store objects in the Hashtable '''sessionObjects'''  in  the '''Security''' object, but be aware that data are transient and '''will not survive server restarts'''.&lt;br /&gt;
&lt;br /&gt;
=== Application variables ===&lt;br /&gt;
Application variables are persistent and accessed through the '''Command''' object&lt;br /&gt;
&lt;br /&gt;
Their storage position depends on wether theres is a solution context or not:&lt;br /&gt;
* Solution present: Variables are saved to the solution '''Configurations'''&lt;br /&gt;
* None (SagID = 0): Variables are saved to the '''Static content'''&lt;br /&gt;
&lt;br /&gt;
Access the the variables goes through get methods with default values.&lt;br /&gt;
* String getConfigurationValue(String name)&lt;br /&gt;
* String getConfigurationValue(String name, String defaultValue)&lt;br /&gt;
&lt;br /&gt;
If the variable does not exist it will be created, and set to the default value (if present).&lt;br /&gt;
&lt;br /&gt;
Note that it is possible to force the use of Statis content by explicitly calling &lt;br /&gt;
* String getSystemConfigurationValue(String name)&lt;br /&gt;
* String getSystemConfigurationValue(String name, String defaultValue)&lt;br /&gt;
&lt;br /&gt;
== Different codeunit types ==&lt;br /&gt;
&lt;br /&gt;
Please read the: [[Codeunit reference]]&lt;br /&gt;
&lt;br /&gt;
Most likely you will need to create a [[Codeunit/Formevents]] that will allow specific changes for a solution, during views, updates or exports.&lt;br /&gt;
&lt;br /&gt;
Most interactions wil require interaction with the following objects&lt;br /&gt;
* Security&lt;br /&gt;
* Command&lt;br /&gt;
* DbConnection&lt;br /&gt;
* EventHandler&lt;br /&gt;
&lt;br /&gt;
== Using the provided Dev-image ==&lt;br /&gt;
We provide a ready-to-go image of a virtual machine, running Debian 12.&lt;br /&gt;
&lt;br /&gt;
The machine is setup with all the required software and helper scripts, to enable development of custom codeunits.&lt;br /&gt;
&lt;br /&gt;
=== Getting the image running ===&lt;br /&gt;
The image is build for VirtualBox, so install that.&lt;br /&gt;
&lt;br /&gt;
Once you have the image downloaded, start the import wizard in VirtualBox (ctrl + i) and follow it.&lt;br /&gt;
&lt;br /&gt;
Now you should be able to boot the VM. The username and password for the user is noted in the comment on the VM.&lt;br /&gt;
&lt;br /&gt;
The machine includes the following programs:&lt;br /&gt;
&lt;br /&gt;
* Firefox, to access the local Tomcat server&lt;br /&gt;
* NetBeans 11.3, to develop codeunits&lt;br /&gt;
* DBeaver CE 24, to access the local DB&lt;br /&gt;
&lt;br /&gt;
=== Deploying codeunits ===&lt;br /&gt;
To deploy you code to the local Tomcat instance do the following:&lt;br /&gt;
&lt;br /&gt;
# build the project (right-click it in the project-browser on the left and select build)&lt;br /&gt;
# copy the generated .jar file from &amp;lt;code&amp;gt;/home/developer/NetBeansProjects/[ApplicationName]/dist&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;/mnt/sda/deploy&amp;lt;/code&amp;gt;&lt;br /&gt;
# Clear the cache (open http://localhost:8080/app/service?CacheClear)&lt;br /&gt;
&lt;br /&gt;
=== Debugging codeunits ===&lt;br /&gt;
Attach the NetBeans debugger to the local Tomat server:&lt;br /&gt;
&lt;br /&gt;
Click &amp;quot;debug&amp;quot; in the top-left menu -&amp;gt; click &amp;quot;attach debugger&amp;quot; -&amp;gt; click &amp;quot;OK&amp;quot;, the default settings should work&lt;br /&gt;
&lt;br /&gt;
Add a breakpoint to you code and try to invoke it from the browser.&lt;br /&gt;
&lt;br /&gt;
=== Updating the API and platform ===&lt;br /&gt;
To update the local environment to the latest version of the TS-API and TS Platform, open a terminal and execute the following commands.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
updateAPI&lt;br /&gt;
ts -w app upgrade-alphaapp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You will be prompted to input the password for the user.&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=FieldFilesVideos&amp;diff=7193</id>
		<title>FieldFilesVideos</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=FieldFilesVideos&amp;diff=7193"/>
		<updated>2024-12-02T13:15:28Z</updated>

		<summary type="html">&lt;p&gt;Tvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Videos ==&lt;br /&gt;
Video gallery with thumbnails and player.&lt;br /&gt;
&lt;br /&gt;
The video-player only works when Policy [[Policy|filesystemStorageActive]].&lt;br /&gt;
&lt;br /&gt;
To enable down-scaling to 720p and 1080p, the storage has to be on S3, and the Encoding Lambda-function has to be enabled.&lt;br /&gt;
&lt;br /&gt;
== User interface ==&lt;br /&gt;
Field in show mode&lt;br /&gt;
&lt;br /&gt;
[[File:FieldFilesVideos show.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Field in edit mode&lt;br /&gt;
&lt;br /&gt;
[[File:FieldFilesVideos edit.png]]&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
[[File:FieldFilesPictures_BE.png]]&lt;br /&gt;
&lt;br /&gt;
Required:&lt;br /&gt;
*''Nothing''&lt;br /&gt;
Options:&lt;br /&gt;
*Config1: Number of columns, default is 3&lt;br /&gt;
*Config2: Not used&lt;br /&gt;
*Config3: Not used&lt;br /&gt;
==Developer info==&lt;br /&gt;
*FeltTypeID: 52&lt;br /&gt;
*SQL datatype: int(11)&lt;br /&gt;
*Class name: FieldFilesVideos&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=FieldFilesVideos&amp;diff=7192</id>
		<title>FieldFilesVideos</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=FieldFilesVideos&amp;diff=7192"/>
		<updated>2024-12-02T13:14:57Z</updated>

		<summary type="html">&lt;p&gt;Tvi: Created page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Videos ==&lt;br /&gt;
Video gallery with thumbnails and player.&lt;br /&gt;
&lt;br /&gt;
The video-player only works when Policy [[Policy|filesystemStorageActive]].&lt;br /&gt;
&lt;br /&gt;
To enable down-scaling to 720p and 1080p, the storage has to be on S3, and the Encoding Lambda-function has to be enabled.&lt;br /&gt;
&lt;br /&gt;
== User interface ==&lt;br /&gt;
Field in show mode&lt;br /&gt;
[[File:FieldFilesVideos show.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Field in edit mode&lt;br /&gt;
&lt;br /&gt;
[[File:FieldFilesVideos edit.png]]&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
[[File:FieldFilesPictures_BE.png]]&lt;br /&gt;
&lt;br /&gt;
Required:&lt;br /&gt;
*''Nothing''&lt;br /&gt;
Options:&lt;br /&gt;
*Config1: Number of columns, default is 3&lt;br /&gt;
*Config2: Not used&lt;br /&gt;
*Config3: Not used&lt;br /&gt;
==Developer info==&lt;br /&gt;
*FeltTypeID: 52&lt;br /&gt;
*SQL datatype: int(11)&lt;br /&gt;
*Class name: FieldFilesVideos&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=File:FieldFilesVideos_edit.png&amp;diff=7191</id>
		<title>File:FieldFilesVideos edit.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=File:FieldFilesVideos_edit.png&amp;diff=7191"/>
		<updated>2024-12-02T13:13:53Z</updated>

		<summary type="html">&lt;p&gt;Tvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Field in edit mode&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=File:FieldFilesVideos_show.png&amp;diff=7190</id>
		<title>File:FieldFilesVideos show.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=File:FieldFilesVideos_show.png&amp;diff=7190"/>
		<updated>2024-12-02T13:13:19Z</updated>

		<summary type="html">&lt;p&gt;Tvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Field in show-mode&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=File:FieldFilesPictures_edit.png&amp;diff=7189</id>
		<title>File:FieldFilesPictures edit.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=File:FieldFilesPictures_edit.png&amp;diff=7189"/>
		<updated>2024-12-02T13:04:53Z</updated>

		<summary type="html">&lt;p&gt;Tvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=File:FieldFilesPictures_show.png&amp;diff=7188</id>
		<title>File:FieldFilesPictures show.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=File:FieldFilesPictures_show.png&amp;diff=7188"/>
		<updated>2024-12-02T13:04:19Z</updated>

		<summary type="html">&lt;p&gt;Tvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=FieldFilesPictures&amp;diff=7187</id>
		<title>FieldFilesPictures</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=FieldFilesPictures&amp;diff=7187"/>
		<updated>2024-12-02T13:03:40Z</updated>

		<summary type="html">&lt;p&gt;Tvi: /* Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pictures =&lt;br /&gt;
Photo gallery with thumbnail index&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
* Type: [[Field type reference#Files|Files]]&lt;br /&gt;
* Groupable: No&lt;br /&gt;
* Show in lists: Yes&lt;br /&gt;
* Searchable: Yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== User interface ==&lt;br /&gt;
Field in show mode&lt;br /&gt;
&lt;br /&gt;
[[File:FieldFilesPictures_show.png]]&lt;br /&gt;
&lt;br /&gt;
Field in edit mode&lt;br /&gt;
&lt;br /&gt;
[[File:FieldFilesPictures_edit.png]]&lt;br /&gt;
&lt;br /&gt;
User interface as displayed in picture&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
[[File:FieldFilesPictures_BE.png]]&lt;br /&gt;
&lt;br /&gt;
Required:&lt;br /&gt;
* ''Nothing''&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
* Config1: Number of columns, default is 4&lt;br /&gt;
*Config2: Export width, default is 40%&lt;br /&gt;
*Config3: Enable lightbox, default is 0 (off)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Developer info ==&lt;br /&gt;
* FeltTypeID: 51&lt;br /&gt;
* SQL datatype: int(11)&lt;br /&gt;
* Class name: FieldFilesPictures&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=File:FieldFilesPictures_BE.png&amp;diff=7186</id>
		<title>File:FieldFilesPictures BE.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=File:FieldFilesPictures_BE.png&amp;diff=7186"/>
		<updated>2024-12-02T13:00:13Z</updated>

		<summary type="html">&lt;p&gt;Tvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Field_type_reference&amp;diff=7185</id>
		<title>Field type reference</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Field_type_reference&amp;diff=7185"/>
		<updated>2024-12-02T12:58:38Z</updated>

		<summary type="html">&lt;p&gt;Tvi: Added videos-field&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TS has more than a 150 different content types. Some are based on primitive types (eg. integers) while others deliver complex functionality (eg. document librarys).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Basic==&lt;br /&gt;
{|&lt;br /&gt;
|[[FieldNumberInteger|Integer]]&lt;br /&gt;
|Integer value&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldNumberDecimal|Decimal]]&lt;br /&gt;
|Numbers with decimal comma&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldNumberDecimalPercent|Percentage]]&lt;br /&gt;
|Percentage value (decimal)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldNumberBoolean|Yes/No]]&lt;br /&gt;
|Check box. Yes/No. The values can be shown with other words or icons&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldSerial|Serial]]&lt;br /&gt;
|Unique serial number&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldNumberIntegerResponse|Response]]&lt;br /&gt;
|Interval in questionnaire&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldNumberIntegerEnumeration|Enumeration]]&lt;br /&gt;
|Named numbers ex. Grades&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldNumberIntegerGlyph|Symbol]]&lt;br /&gt;
|Use icons as status flow and categories&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldTimeDate|Date]]&lt;br /&gt;
|Date with calendar look-up&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldTimeTime|Time]]&lt;br /&gt;
|Selector for point in time&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldTimeDatetime|Datetime]]&lt;br /&gt;
|Date with calendar/time look-up&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldTimePartMonth|Month]]&lt;br /&gt;
|Choice of month, including translation&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldTimePartYear|Year]]&lt;br /&gt;
|Choice of year&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldText|Text]]&lt;br /&gt;
|A single line of a text (ex. Name)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldTextMemo|Text mulitline]]&lt;br /&gt;
|Mulible line of text (ex. Adresses)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldTextMemoEditor|Notepad]]&lt;br /&gt;
|Editor shown in the interface&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldTextHieraki|Hierachy/tree]]&lt;br /&gt;
|Hierarchy of values&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldTextEmail|Email]]&lt;br /&gt;
|User email-adress&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldTextURL|Website (URL)]]&lt;br /&gt;
|Internet adress&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldUniqueIdentity|Unique key (GUID)]]&lt;br /&gt;
|Global Unique ID (GUID) for records, inserted automatically on record creation.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldTextSuggest|Text with lookup]]&lt;br /&gt;
|A single line text with look-up in exciting values&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldTextPhone|Phone]]&lt;br /&gt;
|phone number with the possibility for look-up&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldTextCPR|CPR nummer]]&lt;br /&gt;
|validation of control digits with the personal identification number&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldTextCVR|CVR nummer]]&lt;br /&gt;
|CVR number with look-up in the CVR register&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldContentStatic|Static content]]&lt;br /&gt;
|Read-out of various content&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldContentButton|Static button]]&lt;br /&gt;
|Buttom with functionality&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldContentMessage|Static message]]&lt;br /&gt;
|Notification on top of the page&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldContentScript|Static script]]&lt;br /&gt;
|Execution of the code when changing other boxes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldContentFunction|Script function]]&lt;br /&gt;
|Execution of the code with value insertion into other fields&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldTextSuggest|A line of text with lookup on existing values]]&lt;br /&gt;
|A line of text with lookup on existing values&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldNumberIntegerPriority|Prioritize cases among themselves directly from lists]]&lt;br /&gt;
|Prioritize cases among themselves directly from lists&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Lookup==&lt;br /&gt;
{|&lt;br /&gt;
|[[FieldLookupListShare|Lookup (shared)]]&lt;br /&gt;
|Look-up in common list of values&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldLookupListLocal|Lookup]]&lt;br /&gt;
|Look-up in local list of values&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldLookupUser|User]]&lt;br /&gt;
|Users of the system. Those who are being added, can as an option be notified&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldLookupGroup|Group]]&lt;br /&gt;
|Groups in the system. Those who are being added, can as an option be notified&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldLookupListLocalNested|Dependent list (lokal)]]&lt;br /&gt;
|Choise based on another local list&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldCategory|Dependent category]]&lt;br /&gt;
|Categories based on value&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldLookupListLocalReplika|List replica]]&lt;br /&gt;
|Copy of another list (same option)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldLookupStaticCurrency|Lookup: Currency code]]&lt;br /&gt;
|List of currency code&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldLookupUserExclusive|User Exclusive]]&lt;br /&gt;
|User from af certain Exclusive group&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldVariant|Variant selector]]&lt;br /&gt;
|List of types, which are controlling which other boxes are being showed&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldRemoteKey|Database: Opslag indtastning]]&lt;br /&gt;
|Look-up of values in foreign database&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldRemoteKeyLookup|Database: Opslag liste valg]]&lt;br /&gt;
|Table of values from foreign&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldSubselect|SQL: Subselect]]&lt;br /&gt;
|Enquiry in own or foreign database&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldLookupListRecordKey|Lookup: Data item]]&lt;br /&gt;
|Create reference to item in another solution&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldLookupListRecordKeyNested|Lookup: Data item nested]]&lt;br /&gt;
|For use with Lookup: Data item&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldReplicate|Value copy]]&lt;br /&gt;
|Showing other values based on a key&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldReplicateText|Value copy (text)]]&lt;br /&gt;
|Coping TEXT value based on key (searchable)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldReplicateInteger|Value copy (heltal)]]&lt;br /&gt;
|Coping INTEGER value based on key (searchable)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldReplicateDecimal|Value copy (decimal)]]&lt;br /&gt;
|Coping DECIMAL value based on key (searchable)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldReplicateBoolean|Value copy (yes/no)]]&lt;br /&gt;
|Coping Yes/No values based on key (searchable)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldReplicateDate|Value copy (date)]]&lt;br /&gt;
|Coping DATE values based on key (searchable)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldReplicateCPR|Value copy (cpr)]]&lt;br /&gt;
|Coping CPR number based on key (searchable)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldLookupListLocalNestedReplika|Copy field lookup options for another field in this solution]]&lt;br /&gt;
|Copy field lookup options for another field in this solution&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldLookupUserExclusive|User from the case owner group or related to active user]]&lt;br /&gt;
|User from the case owner group or related to active user&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Lookup AJAX==&lt;br /&gt;
{|&lt;br /&gt;
|[[FieldAjaxPostalcode|Lookup: Postnr / by]]&lt;br /&gt;
|Autofilling of postal number and city&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldAjaxUNSPSC|Lookup: UNSPSC]]&lt;br /&gt;
|Autofilling of the product category system of UN&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldAjaxNACE|Lookup: NACE code]]&lt;br /&gt;
|Autofilling of NACE business codes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldAjaxCountry|Lookup: Country]]&lt;br /&gt;
|Autofilling of land&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldAjaxDiagnose|Lookup: ICD diagnose]]&lt;br /&gt;
|Autofilling of ICD diagnosis code&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldAjaxSksUndersoegelse|SKS Undersøgelse]]&lt;br /&gt;
|Dynamic lookup of values from SKS Undersøgelse&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldAjaxSksDiagnose|SKS Diagnose]]&lt;br /&gt;
|Dynamic lookup of values from SKS Diagnose&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldAjaxSksOperation|SKS Operation]]&lt;br /&gt;
|Dynamic lookup of values from SKS Operation&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldAjaxSksBehandling|SKS Behandling]]&lt;br /&gt;
|Dynamic lookup of values from SKS Behandling&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldAjaxSksATC|SKS ATC]]&lt;br /&gt;
|Dynamic lookup of values from SKS ATC&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldAjaxSksUlykke|SKS Ulykke]]&lt;br /&gt;
|Dynamic lookup of values from SKS Ulykke&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldAjaxSksSygehusafdeling|SKS Afdeling]]&lt;br /&gt;
|Dynamic lookup of values from SKS Afdeling&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Files==&lt;br /&gt;
{|&lt;br /&gt;
|[[FieldFiles|Documents]]&lt;br /&gt;
|Upload / download of files including versioning&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldFilesPictures|Pictures]]&lt;br /&gt;
|Photo gallery with thumbnail index&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldFilesGenerate|Document builder]]&lt;br /&gt;
|Build document base on solution file template&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldFilesShared|Filesystem files]]&lt;br /&gt;
|Download of local files on the intranet&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldFilesSigning|Documents with signing]]&lt;br /&gt;
|Documents with integration to DocuSign&lt;br /&gt;
|-&lt;br /&gt;
|[[FieldFilesVideos|Videos]]&lt;br /&gt;
|Video gallery with thumbnails and player&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldReplicateFiles|Copy list of files based on key]]&lt;br /&gt;
|Copy list of files based on key&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldFilesSharedFtp|FTP / download helper for structures and large files]]&lt;br /&gt;
|FTP / download helper for structures and large files&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Tabular data==&lt;br /&gt;
{|&lt;br /&gt;
|[[FieldTable|Table]]&lt;br /&gt;
|Table with a range of subfield&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldTask|Tasklist]]&lt;br /&gt;
|Tasklist with export to vTodo&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldContact|Contact list]]&lt;br /&gt;
|Contact list with export to vCard&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldMail|Mailbox]]&lt;br /&gt;
|Inbox for each data item with many security options. Please refer to advanced configuration.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Parent/child==&lt;br /&gt;
{|&lt;br /&gt;
&lt;br /&gt;
|[[FieldSubformMaster|Parent reference]]&lt;br /&gt;
|Link/resume to above placed data&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldSubformList|List of children]]&lt;br /&gt;
|List of all underplaced data&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|[[FieldSubformListStatus|List of children (status filter)]]&lt;br /&gt;
|Filtered selection of subitems&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldSubformListFieldSelection|List of children (select fields)]]&lt;br /&gt;
|Filtered selection of fields including sortorder&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|[[FieldSubformListVariant|List of children (type filter)]]&lt;br /&gt;
|For use with 'Children type selector'&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|[[FieldSubformVariant|Children type selector (type filer)]]&lt;br /&gt;
|For use with 'List of children (type)'&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|[[FieldSubformLinesSum|Calc children: Sum]]&lt;br /&gt;
|Sum of values in underplaced data&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldSubformLinesCount|Calc children: Count]]&lt;br /&gt;
|Sum of elements in underplaced data&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldSubformLinesDistinct|Calc children: Unique]]&lt;br /&gt;
|Sum of unique values in underplaced data&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldSubformLinesMin|Calc children: Minimum]]&lt;br /&gt;
|Minimum value in underplaced data&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldSubformLinesMax|Calc children: Maximum]]&lt;br /&gt;
|Maximum value in underplaced data&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldManyToMany|Many records pointing to many other records]]&lt;br /&gt;
|Many records pointing to many other records&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldSharedParentRecord|Not written]]&lt;br /&gt;
|Parent reference(shared)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Complex==&lt;br /&gt;
{|&lt;br /&gt;
|[[FieldMultiSelect|Checklist lookup]]&lt;br /&gt;
|Number of categories&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldSignature|Signature]]&lt;br /&gt;
|Digital signature or approval&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldCalcFormula|Calc: Formula]]&lt;br /&gt;
|Formula based on other fields&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|[[FieldCalcTest|Calc: Test value]]&lt;br /&gt;
|Test of the value of another field&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|[[FieldCalcConcatenate|Calc: Concatenate]]&lt;br /&gt;
|Making a test based on values from other fields&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|[[FieldJavaScripting|Calc: JavaScript]]&lt;br /&gt;
|Executing Javascripts client AND serverside&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|[[FieldCalcAge|Calc: Time lifecycle]]&lt;br /&gt;
|Time spent since the beginning of the case or since last correction&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldCalcMeasure|Calc: Time measured]]&lt;br /&gt;
|Total waiting time&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldCalcScore|Calc: Score interval]]&lt;br /&gt;
|Translation of values in intervals&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldCalcTestMany|Calc: Check fields]]&lt;br /&gt;
|Check if a list of fields has been filled out&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldComplexComment|Comments]]&lt;br /&gt;
|Entry of a list of comments from the users of the case&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldMultiSelectSubform|Related form multiselect]]&lt;br /&gt;
|Filter with single parameters including standard security.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldMultiSelectSubformSQL|Related form multiselect SQL]]&lt;br /&gt;
|Freeform definition with multiple parameters with optional security.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldXmlData|XML data]]&lt;br /&gt;
|XML data in lists, table or own output format&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldBarcodeAutomation|Barcode (status change)]]&lt;br /&gt;
|Barcode to change status automatically&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|[[FieldSqlData|Display grid of values from local database table]]&lt;br /&gt;
|Display grid of values from local database table&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldCalcTestFlag|Not written]]&lt;br /&gt;
|Calc: Flag&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|[[FieldPageRequest|Output in subforms from other searches and statistics]]&lt;br /&gt;
|Output in subforms from other searches and statistics&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldCalcMessage|Selective text composition (EXPERIMENTAL)]]&lt;br /&gt;
|Selective text composition (EXPERIMENTAL)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldMultiInputSubformListSQL|Fill multiple lines with numbers (decimals)]]&lt;br /&gt;
|Fill multiple lines with numbers (decimals)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldTokenShow|Show token to a specific interface]]&lt;br /&gt;
|Show token to a specific interface&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldDatabaseScript|Run script]]&lt;br /&gt;
|Run script&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==System==&lt;br /&gt;
{|&lt;br /&gt;
|[[FieldSystemStatus|Status]]&lt;br /&gt;
|The present status of the case&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldSystemDatetimeCreated|Created]]&lt;br /&gt;
|The creation date of the case&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldSystemDatetimeModified|Modified]]&lt;br /&gt;
|The change date of the case&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldSystemDatetimeCompleted|Completed]]&lt;br /&gt;
|The termination date of the case&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldSystemDatetimeStatusSet|Status set]]&lt;br /&gt;
|The last status update of the case&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldSystemUserCreated|Created by]]&lt;br /&gt;
|User who created the case&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldSystemUserModified|Modified by]]&lt;br /&gt;
|User who modified the case&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldSystemUserCompleted|Completed by]]&lt;br /&gt;
|User who completed the case&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldSystemUserStatusSet|Status set by]]&lt;br /&gt;
|User who updated the case&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldSystemStatusMaster|Master status]]&lt;br /&gt;
|Masterstatus based on the status of the case&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldSystemFormType|Solution type]]&lt;br /&gt;
|Selection of a solution type&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldSystemExclusiveGroup|Exclusive group]]&lt;br /&gt;
|Selection of an Exclusive group&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldSystemMemberList|Member list]]&lt;br /&gt;
|Users with access to the element&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldSystemRevision|Not written]]&lt;br /&gt;
|FieldSystemRevision&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldUserPermission|Not written]]&lt;br /&gt;
|FieldUserPermission&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldSystemMemberGroupList|Groups with access to element]]&lt;br /&gt;
|Groups with access to element&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Medico==&lt;br /&gt;
{|&lt;br /&gt;
|[[FieldCalcAgeOnCPR|Age calc (date/CPR)]]&lt;br /&gt;
|Estimating the age of the user based on date and CPR number&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldCalcBMI|Body Mass Index]]&lt;br /&gt;
|Estimating BMI based on height and weight&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldTrainingSurvey|Activity measure]]&lt;br /&gt;
|Measurement of weekly activity&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldGenderOnCPR|Gender (CPR)]]&lt;br /&gt;
|Deduction of gender based on CPR number&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldCheckboxCollection|Checkbox counter]]&lt;br /&gt;
|Check mark of month, days or other&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldCompoundMET|MET scoreboard]]&lt;br /&gt;
|Measurement of month, amount and size&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Action button==&lt;br /&gt;
{|&lt;br /&gt;
|[[FieldTokenMailto|Button: Token URL builder]]&lt;br /&gt;
|Building link to external users&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldExportTemplate|Button: Export template]]&lt;br /&gt;
|Export of data to a certain template&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldExecuteJavaScript|Button: Script execution]]&lt;br /&gt;
|Execute script on page and/or saving data&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldParameterLookup|Button: Parameterized URL]]&lt;br /&gt;
|Look-up in foreign webbased system&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldParameterListSearch|Button: Related list search]]&lt;br /&gt;
|Look-up in related list with parameter&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldGrandChildSearch|Button: Grand child search]]&lt;br /&gt;
|Look-up in related data (Grand children)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldCodeunitPage|Button: Codeunit execution]]&lt;br /&gt;
|Execute proprietary code&lt;br /&gt;
|-&lt;br /&gt;
|[[FieldStateChanger|Button: Status changer]]&lt;br /&gt;
|Change state via button-click&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldSessionFilterSelector|Filter selector static]]&lt;br /&gt;
|Set value in user session. For example for data filters.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Visual extra==&lt;br /&gt;
{|&lt;br /&gt;
|[[FieldGaugePerformance|Visual: Target gauge Total]]&lt;br /&gt;
|Show lifetime performance speedometer&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldGaugePerformanceStep|Visual: Target gauge Step]]&lt;br /&gt;
|Show performance speedometer for this step&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|[[FieldCanvasDrawing|Canvas: Freehand]]&lt;br /&gt;
|Draw anything in a box&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|[[FieldCanvasMarking|Canvas: Marking]]&lt;br /&gt;
|Mark a spot on an image&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|[[FieldSliderBarDecimal|Visual: Sliderbar]]&lt;br /&gt;
|Sliderbar for integer or decimal input&lt;br /&gt;
|-&lt;br /&gt;
|[[FieldSubselectDiagram|SQL: Diagram query]]&lt;br /&gt;
|Show the result of an SQL-query as a graph&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Extension==&lt;br /&gt;
{|&lt;br /&gt;
|[[FieldComplexQuestionIndex|Word heatmap index]]&lt;br /&gt;
|Specialised index field only showned in reports&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldComplexQuestion|Question and answer]]&lt;br /&gt;
|Complex question with recommendation, numerical score and coloring&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldComplexQuestionWillis|Complex question]]&lt;br /&gt;
|Complex question with recommendation, numerical score and coloring&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldComplexQuestionMultiLocation|Multiline: Complex question]]&lt;br /&gt;
|MULTIPLE LOCATION: Complex question&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldMultiLocation|Multiline: Location editor]]&lt;br /&gt;
|MULTIPLE LOCATION: Name of location&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldYearRepeatCompare|Year comparator]]&lt;br /&gt;
|Comparing fields from previous years&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldCalcFormulaWillis|Calc: Complex question (sum)]]&lt;br /&gt;
|Formula based on other fields&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldMissingValues|Calc: Count missing fields]]&lt;br /&gt;
|Number of missing fields in a form or questionaire&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|[[FieldTestingAgeItem|Testing: Age record]]&lt;br /&gt;
|Change the age of a record for testing puposes&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldJobnetOccupationConceptUri|Required for jobnet integration]]&lt;br /&gt;
|Required for jobnet integration&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldDocumentSnippetLookup|Export document content based on selected value]]&lt;br /&gt;
|Export document content based on selected value&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FormComplexQuestionMultiLocationIndex|Word rapport index for multilocations]]&lt;br /&gt;
|Word rapport index for multilocations&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|[[FieldYearRepeatCompare|Comparison of fields from previous years]]&lt;br /&gt;
|Comparison of fields from previous years&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=WebDAV&amp;diff=6910</id>
		<title>WebDAV</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=WebDAV&amp;diff=6910"/>
		<updated>2024-10-10T11:14:41Z</updated>

		<summary type="html">&lt;p&gt;Tvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About our WebDAV implementation ==&lt;br /&gt;
&lt;br /&gt;
Supported document types: Word, Excel, Powerpoint.&lt;br /&gt;
&lt;br /&gt;
The implementation does not require SSL to be enabled on the server, but it is recommended.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sometimes the action of saving a file, that was opened using WebDAV will fail, but only the fist time, if it happens at all.&lt;br /&gt;
&lt;br /&gt;
To fix this, you just have to save the document again, and the issue will be gone for you, until you re-signin.&lt;br /&gt;
&lt;br /&gt;
== How to enable ==&lt;br /&gt;
Toggle the policy &amp;lt;code&amp;gt;webdavSupport&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;webdavSessionTokens&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;.&lt;br /&gt;
[[File:WebDav files.png|thumb|WebDAV enabled on a files-field]]&lt;br /&gt;
&lt;br /&gt;
When WebDAV is enabled, the files-field, will add tiny pencils next to the supported file-types.&lt;br /&gt;
&lt;br /&gt;
Clicking on the file icon will prompt the file to be opened in the associated application. Clicking on the filename, will prompt a download of the file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can control how long the auth-tokens are valid for, using policy &amp;lt;code&amp;gt;webdavSessionLifetime&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You can control whether a token should automatically be re-validated if it times out using policy &amp;lt;code&amp;gt;webdavSessionTokensRevalidate&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Enabling basic auth to your server ==&lt;br /&gt;
Office has stopped officially supporting Basic-auth, which is the backup authentication for our implementation.&lt;br /&gt;
To allow Office to connect to your server, and authenticate using Basic-auth, execute the following command, as admin, from the commandline.&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;&amp;gt;&lt;br /&gt;
REG ADD HKEY_CURRENT_USER\Software\Policies\Microsoft\Office\16.0\Common\Identity /t REG_EXPAND_SZ /v basichostallowlist /d &amp;quot;HOSTNAME&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Where HOSTNAME is the domain of your server, eg. &amp;lt;code&amp;gt;wiki.tsnocode.com&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=WebDAV&amp;diff=6909</id>
		<title>WebDAV</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=WebDAV&amp;diff=6909"/>
		<updated>2024-10-10T10:44:33Z</updated>

		<summary type="html">&lt;p&gt;Tvi: Created page with &amp;quot;== About our WebDAV implementation ==    Supported document types: Word, Excel, Powerpoint.   Sometimes the action of saving a file, that was opened using WebDAV will fail, but only the first time, if it happens at all.  To fix this, you just have to save the document again, and the issue will be gone for you, until you re-signin.  == How to enable == Toggle the policy &amp;lt;code&amp;gt;webdavSupport&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;webdavSessionTokens&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;. File:WebDav fil...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About our WebDAV implementation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Supported document types: Word, Excel, Powerpoint.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sometimes the action of saving a file, that was opened using WebDAV will fail, but only the first time, if it happens at all.&lt;br /&gt;
&lt;br /&gt;
To fix this, you just have to save the document again, and the issue will be gone for you, until you re-signin.&lt;br /&gt;
&lt;br /&gt;
== How to enable ==&lt;br /&gt;
Toggle the policy &amp;lt;code&amp;gt;webdavSupport&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;webdavSessionTokens&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;.&lt;br /&gt;
[[File:WebDav files.png|thumb|WebDAV enabled on a files-field]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can control how long the auth-tokens are valid for, using policy &amp;lt;code&amp;gt;webdavSessionLifetime&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You can control whether a token should automatically be re-validated if it times out using policy &amp;lt;code&amp;gt;webdavSessionTokensRevalidate&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Enabling basic auth to your server ==&lt;br /&gt;
Windows has stopped officially supporting Basic-auth, which is the backup authentication for our implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To allow Office to connect to your server, and authenticate using Basic-auth, execute the following command, as admin, from the commandline.&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;&amp;gt;&lt;br /&gt;
REG ADD HKEY_CURRENT_USER\Software\Policies\Microsoft\Office\16.0\Common\Identity /t REG_EXPAND_SZ /v basichostallowlist /d &amp;quot;HOSTNAME&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Where HOSTNAME is the domain of your server, eg. &amp;lt;code&amp;gt;wiki.tsnocode.com&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=File:WebDav_files.png&amp;diff=6908</id>
		<title>File:WebDav files.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=File:WebDav_files.png&amp;diff=6908"/>
		<updated>2024-10-10T10:39:57Z</updated>

		<summary type="html">&lt;p&gt;Tvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Shows the interface, when WebDAV is enabled&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Full_UTF8_support&amp;diff=6896</id>
		<title>Full UTF8 support</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Full_UTF8_support&amp;diff=6896"/>
		<updated>2024-10-04T11:53:44Z</updated>

		<summary type="html">&lt;p&gt;Tvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Special characters causing errors ==&lt;br /&gt;
&lt;br /&gt;
=== Problem ===&lt;br /&gt;
The default support for UTF8 is 3 byte.&lt;br /&gt;
&lt;br /&gt;
Using 4 byte UTF content in text areas, can cause errors, that looks like &lt;br /&gt;
&lt;br /&gt;
   java.sql.SQLException: Incorrect string value: '\xC2\x96 Z. ...' for column 'NOTES' at row 1&lt;br /&gt;
&lt;br /&gt;
=== Solution ===&lt;br /&gt;
Update the database to full UTF8 support using the following command &lt;br /&gt;
&lt;br /&gt;
   main?command=dk.p2e.blanket.codeunit.common.PageConvertDatabaseToUTF8&lt;br /&gt;
&lt;br /&gt;
Note an administration profile is needed to complete the operation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You might also have to update the tomcat server.xml file.&lt;br /&gt;
&lt;br /&gt;
You have to add &amp;lt;code&amp;gt;useBodyEncodingForURI=&amp;quot;true&amp;quot;&amp;lt;/code&amp;gt; to the connectors.&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Command_line_tools&amp;diff=6855</id>
		<title>Command line tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Command_line_tools&amp;diff=6855"/>
		<updated>2024-09-16T14:40:56Z</updated>

		<summary type="html">&lt;p&gt;Tvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A new version of the CLI was released on 21. december 2023.&lt;br /&gt;
&lt;br /&gt;
If you are looking for the old CLI you can find the documentation [[Legacy command line tools|here]].&lt;br /&gt;
&lt;br /&gt;
== Compatibility ==&lt;br /&gt;
The tools are compatible with the following distributions.&lt;br /&gt;
&lt;br /&gt;
* Amazon Linux, version 1, 2 and 2023&lt;br /&gt;
* Debian, version 10, 11 and 12&lt;br /&gt;
*Ubuntu, version 20.04, 22.04 and 24.04&lt;br /&gt;
* CentOS, version 8 and 9&lt;br /&gt;
&lt;br /&gt;
The script will check to see if it is running on one of these OSes and stop executing if not.&lt;br /&gt;
&lt;br /&gt;
== Usage information ==&lt;br /&gt;
The Tempus Serva Linux script tools are open source (LGPL), and you are free to use and modify them however you see fit. The tools are defined by one python3 script and a single json file that stores the config.&lt;br /&gt;
&lt;br /&gt;
As the tools themselves are subject to semiautomatic upgrades, we strongly recommend that you keep backups of files you have modified. Future versions of the scripts are not guaranteed to be compatible, with earlier versions or your own modifications.&lt;br /&gt;
&lt;br /&gt;
== Installing the tool ==&lt;br /&gt;
To install the tools, run:&lt;br /&gt;
 wget -qO - &amp;lt;nowiki&amp;gt;https://builds.tsnocode.com/helpers/install&amp;lt;/nowiki&amp;gt; | bash&lt;br /&gt;
This will check compatibility and install the required plugins.&lt;br /&gt;
&lt;br /&gt;
To use the tool, execute &amp;lt;code&amp;gt;ts&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
On first execution the tool will ask a couple of questions.&lt;br /&gt;
&lt;br /&gt;
If you choose to run java 8, &amp;lt;code&amp;gt;alpha&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;beta&amp;lt;/code&amp;gt; is the same release, previously known as &amp;lt;code&amp;gt;nightly&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Tool reference ==&lt;br /&gt;
To get the full list of commands, and a description, run &amp;lt;code&amp;gt;ts --help&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== quick-install ===&lt;br /&gt;
Installs all the required software to run TS NoCode Platform, a default webapp named 'app' and a redirect from root to 'app'.&lt;br /&gt;
&lt;br /&gt;
It will not ask for anything, but uses default values.&lt;br /&gt;
&lt;br /&gt;
=== install ===&lt;br /&gt;
Installs all the required software to run TS NoCode Platform.&lt;br /&gt;
&lt;br /&gt;
It will ask questions about optional stuff.&lt;br /&gt;
&lt;br /&gt;
=== install-app ===&lt;br /&gt;
Will install a new TS NoCode Platform webapp. It ask what release to install from and what name the webapp should be deployed under, if that webapp exists it will ask if you would like to upgrade that installation instead.&lt;br /&gt;
&lt;br /&gt;
=== upgrade-app ===&lt;br /&gt;
Will upgrade an existing TS NoCode Platform webapp. It will ask what release to upgrade from and what name the webapp should be deployed under, if that webapp doesn't exist it will do nothing.&lt;br /&gt;
&lt;br /&gt;
=== set-admin-password ===&lt;br /&gt;
Will set the admin password for an existing TS NoCode Platform webapp. Will ask what webapp to modify and what the password should be set to.&lt;br /&gt;
&lt;br /&gt;
=== install-ssl ===&lt;br /&gt;
Will install all dependencies that are needed to setup a LetsEncrypt SSL certificate. Will ask if SSL should be setup once the install completes.&lt;br /&gt;
&lt;br /&gt;
=== setup-ssl ===&lt;br /&gt;
Will ask about domain(s) and contact-email, request and install an SSL certificate and setup auto-renewal.&lt;br /&gt;
&lt;br /&gt;
== Quick install ==&lt;br /&gt;
To quick-install the tool and a webapp run this&lt;br /&gt;
 wget -qO - &amp;lt;nowiki&amp;gt;https://builds.tsnocode.com/helpers/install&amp;lt;/nowiki&amp;gt; | bash &amp;amp;&amp;amp; ts quick-install&lt;br /&gt;
If you also want to setup SSL, run this&lt;br /&gt;
 wget -qO - &amp;lt;nowiki&amp;gt;https://builds.tsnocode.com/helpers/install&amp;lt;/nowiki&amp;gt; | bash &amp;amp;&amp;amp; ts quick-install &amp;amp;&amp;amp; ts install-ssl&lt;br /&gt;
&lt;br /&gt;
== Removing the tools ==&lt;br /&gt;
Remove the two files, eg by running:&lt;br /&gt;
 sudo rm /usr/bin/{ts,tsconfig.json}&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Command_line_tools&amp;diff=6854</id>
		<title>Command line tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Command_line_tools&amp;diff=6854"/>
		<updated>2024-09-11T10:27:07Z</updated>

		<summary type="html">&lt;p&gt;Tvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A new version of the CLI was released on 21. december 2023.&lt;br /&gt;
&lt;br /&gt;
If you are looking for the old CLI you can find the documentation [[Legacy command line tools|here]].&lt;br /&gt;
&lt;br /&gt;
== Compatibility ==&lt;br /&gt;
The tools are compatible with the following distributions.&lt;br /&gt;
&lt;br /&gt;
* Amazon Linux, version 1, 2 and 2023&lt;br /&gt;
* Debian, version 10, 11 and 12&lt;br /&gt;
* CentOS, version 8 and 9&lt;br /&gt;
&lt;br /&gt;
The script will check to see if it is running on one of these OSes and stop executing if not.&lt;br /&gt;
&lt;br /&gt;
== Usage information ==&lt;br /&gt;
The Tempus Serva Linux script tools are open source (LGPL), and you are free to use and modify them however you see fit. The tools are defined by one python3 script and a single json file that stores the config.&lt;br /&gt;
&lt;br /&gt;
As the tools themselves are subject to semiautomatic upgrades, we strongly recommend that you keep backups of files you have modified. Future versions of the scripts are not guaranteed to be compatible, with earlier versions or your own modifications.&lt;br /&gt;
&lt;br /&gt;
== Installing the tool ==&lt;br /&gt;
To install the tools, run:&lt;br /&gt;
 wget -qO - &amp;lt;nowiki&amp;gt;https://builds.tsnocode.com/helpers/install&amp;lt;/nowiki&amp;gt; | bash&lt;br /&gt;
This will check compatibility and install the required plugins.&lt;br /&gt;
&lt;br /&gt;
To use the tool, execute &amp;lt;code&amp;gt;ts&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
On first execution the tool will ask a couple of questions.&lt;br /&gt;
&lt;br /&gt;
If you choose to run java 8, &amp;lt;code&amp;gt;alpha&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;beta&amp;lt;/code&amp;gt; is the same release, previously known as &amp;lt;code&amp;gt;nightly&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Tool reference ==&lt;br /&gt;
To get the full list of commands, and a description, run &amp;lt;code&amp;gt;ts --help&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== quick-install ===&lt;br /&gt;
Installs all the required software to run TS NoCode Platform, a default webapp named 'app' and a redirect from root to 'app'.&lt;br /&gt;
&lt;br /&gt;
It will not ask for anything, but uses default values.&lt;br /&gt;
&lt;br /&gt;
=== install ===&lt;br /&gt;
Installs all the required software to run TS NoCode Platform.&lt;br /&gt;
&lt;br /&gt;
It will ask questions about optional stuff.&lt;br /&gt;
&lt;br /&gt;
=== install-app ===&lt;br /&gt;
Will install a new TS NoCode Platform webapp. It ask what release to install from and what name the webapp should be deployed under, if that webapp exists it will ask if you would like to upgrade that installation instead.&lt;br /&gt;
&lt;br /&gt;
=== upgrade-app ===&lt;br /&gt;
Will upgrade an existing TS NoCode Platform webapp. It will ask what release to upgrade from and what name the webapp should be deployed under, if that webapp doesn't exist it will do nothing.&lt;br /&gt;
&lt;br /&gt;
=== set-admin-password ===&lt;br /&gt;
Will set the admin password for an existing TS NoCode Platform webapp. Will ask what webapp to modify and what the password should be set to.&lt;br /&gt;
&lt;br /&gt;
=== install-ssl ===&lt;br /&gt;
Will install all dependencies that are needed to setup a LetsEncrypt SSL certificate. Will ask if SSL should be setup once the install completes.&lt;br /&gt;
&lt;br /&gt;
=== setup-ssl ===&lt;br /&gt;
Will ask about domain(s) and contact-email, request and install an SSL certificate and setup auto-renewal.&lt;br /&gt;
&lt;br /&gt;
== Quick install ==&lt;br /&gt;
To quick-install the tool and a webapp run this&lt;br /&gt;
 wget -qO - &amp;lt;nowiki&amp;gt;https://builds.tsnocode.com/helpers/install&amp;lt;/nowiki&amp;gt; | bash &amp;amp;&amp;amp; ts quick-install&lt;br /&gt;
If you also want to setup SSL, run this&lt;br /&gt;
 wget -qO - &amp;lt;nowiki&amp;gt;https://builds.tsnocode.com/helpers/install&amp;lt;/nowiki&amp;gt; | bash &amp;amp;&amp;amp; ts quick-install &amp;amp;&amp;amp; ts install-ssl&lt;br /&gt;
&lt;br /&gt;
== Removing the tools ==&lt;br /&gt;
Remove the two files, eg by running:&lt;br /&gt;
 sudo rm /usr/bin/{ts,tsconfig.json}&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=MitID_Integration&amp;diff=6852</id>
		<title>MitID Integration</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=MitID_Integration&amp;diff=6852"/>
		<updated>2024-09-05T13:40:31Z</updated>

		<summary type="html">&lt;p&gt;Tvi: Added Signer.StatusUploaded&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What it does ==&lt;br /&gt;
We have a generic integration to Criipto (a MitID, and other eID, broker) and an account, allowing for sign in and document signing with MitID/nemID.&lt;br /&gt;
&lt;br /&gt;
=== Sign in ===&lt;br /&gt;
Sign in can be setup as a webinterface or as SSO from the login-page (not fully supported yet), the authentication method isn't available in the dropdown for the webinterface, as of writing, it has to be set through the database (the live database).&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
UPDATE forminterface SET AuthenticationType = 5 WHERE InterfaceID = [ID];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Document signing ===&lt;br /&gt;
One or multiple documents can be send for signature, one or more people can sign the batch and it is possible to enforce CVR or CPR. This process can be initiated from a StatusAction or be accessing a url.&lt;br /&gt;
&lt;br /&gt;
A page is appended to the signed documents showing who signed it and when, in the order they signed it.&lt;br /&gt;
&lt;br /&gt;
== Prereq ==&lt;br /&gt;
To setup this an &amp;quot;Application&amp;quot; has to be set up in Criipto, one for sign in and one for signatures, and a CNAME dns-record has to be created.&lt;br /&gt;
&lt;br /&gt;
The ID's and secrets created here will be needed later.&lt;br /&gt;
&lt;br /&gt;
== Setup in Criipto ==&lt;br /&gt;
First, a domain has to be added.&lt;br /&gt;
&lt;br /&gt;
Haed to the Criipto Dashboard, select &amp;quot;Domains&amp;quot; in the menu, make sure that you are in &amp;quot;Production&amp;quot;, click &amp;quot;Add production domain&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Name it &amp;lt;code&amp;gt;[customer]-eid.tsnocode.com&amp;lt;/code&amp;gt; and head to CloudFlare and add a CNAME record that points to &amp;lt;code&amp;gt;idp.criipto.id&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Once the domain is active you can progress.&lt;br /&gt;
&lt;br /&gt;
=== Sign in ===&lt;br /&gt;
Coming&lt;br /&gt;
&lt;br /&gt;
=== Document signing ===&lt;br /&gt;
Requires version 7336 or newer.&lt;br /&gt;
&lt;br /&gt;
Head to &amp;quot;Application&amp;quot; in the Criipto menu, click &amp;quot;Add signatures application&amp;quot; (if it excists), otherwise click &amp;quot;Add login application&amp;quot; and add &amp;lt;code&amp;gt;?tags=signatures&amp;lt;/code&amp;gt; to the end of the url.&lt;br /&gt;
&lt;br /&gt;
Name the application &amp;lt;code&amp;gt;[customer] eSign&amp;lt;/code&amp;gt;, select their domain and check the eID's that should be available, select &amp;lt;code&amp;gt;java&amp;lt;/code&amp;gt; as technology.&lt;br /&gt;
&lt;br /&gt;
A secret might pop up or be shown, take note. It is possible to add more after the fact and re-issue them.&lt;br /&gt;
&lt;br /&gt;
== Setup in TS ==&lt;br /&gt;
There are a lot of parameters available. Some of these must be set for the integration to work, depending on the integration.&lt;br /&gt;
&lt;br /&gt;
=== Sign in ===&lt;br /&gt;
Coming&lt;br /&gt;
&lt;br /&gt;
===== Policies =====&lt;br /&gt;
&lt;br /&gt;
* oauthCriiptoAllow&lt;br /&gt;
* oauthCriiptoHost&lt;br /&gt;
* oauthCriiptoClient&lt;br /&gt;
* oauthCriiptoSecret&lt;br /&gt;
&lt;br /&gt;
=== Document signing ===&lt;br /&gt;
To start the signing process, setup the configuration and execute a Status Action that executes the codeunit &amp;lt;code&amp;gt;dk.tempusserva.signing.criipto.CriiptoStatusAction&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;dk.tempusserva.signing.criipto.CriiptoStatusActionGenerator&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;dk.tempusserva.signing.criipto.CriiptoStatusActionGeneratorAlt&amp;lt;/code&amp;gt; or access a url with &amp;lt;code&amp;gt;command=dk.tempusserva.signing.criipto.CriiptoPage&amp;amp;SagID=[SagID]&amp;amp;DataID=[DataID]&amp;lt;/code&amp;gt; (not ready).&lt;br /&gt;
&lt;br /&gt;
This will try to lookup and send the document(s) out for signing.&lt;br /&gt;
&lt;br /&gt;
==== Configurations ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Configuration&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Signer.MultipleSigners&lt;br /&gt;
|Whether multiple signers is allowed (true/false)&lt;br /&gt;
|-&lt;br /&gt;
|Signer.MaximumSigners&lt;br /&gt;
|How many signatures are needed. Defaults to &amp;quot;COUNT&amp;quot;, which counts the number of signers, when using MultipleSigners, otherwise 1. Can otherwise be set to a number.&lt;br /&gt;
|-&lt;br /&gt;
|Signer.ExpiresInDays&lt;br /&gt;
|Number of days the recipient has to sign the document. Default is 30.&lt;br /&gt;
|-&lt;br /&gt;
|Signer.FieldMaximum&lt;br /&gt;
|Not implemented&lt;br /&gt;
|-&lt;br /&gt;
|Signer.FieldFil *&lt;br /&gt;
|System name for the field with documents that should be send, all documents found here will be send. Defaults to &amp;quot;FILES&amp;quot;. Also used to store generated files.&lt;br /&gt;
|-&lt;br /&gt;
|Signer.FieldCPR&lt;br /&gt;
|System name for the field with a CPR, that the signer has to have to sign the document. Also used with MultipleSigners.&lt;br /&gt;
|-&lt;br /&gt;
|Signer.FieldCVR&lt;br /&gt;
|System name for the field with a CVR, that the signer has to have to sign the document. Also used with MultipleSigners.&lt;br /&gt;
|-&lt;br /&gt;
|Signer.FieldEmail *&lt;br /&gt;
|System name for the field with an email, that will be notified about the signature request. Also used with MultipleSigners. Defaults to &amp;quot;EMAIL&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|Signer.FieldSigners&lt;br /&gt;
|System name for a list-of-children-field. All records found here will be required to sign the document. Required when using MultipleSigners.&lt;br /&gt;
|-&lt;br /&gt;
|Signer.StatusError&lt;br /&gt;
|Status that the record should enter if the signature request failed (was rejected or timed out). Defaults to 0.&lt;br /&gt;
|-&lt;br /&gt;
|Signer.StatusSigned&lt;br /&gt;
|Status that the record should enter when all signatures are collected. Defaults to 0.&lt;br /&gt;
|-&lt;br /&gt;
|Signer.StatusUploaded&lt;br /&gt;
|Status that the record should enter when it has been uploaded to signing service. Defaults to 0.&lt;br /&gt;
|-&lt;br /&gt;
|Signer.StatusDisableCodeunits&lt;br /&gt;
|Whether codeunits should be executed or not, when the signing completes or fails. Defaults to false (do execute).&lt;br /&gt;
|-&lt;br /&gt;
|Signer.EmailSubject&lt;br /&gt;
|The subject of the email send to the signer. Defaults to &amp;quot;Dokument til signering&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|Signer.EmailBody&lt;br /&gt;
|The email-body of the email send to the signer. Defaults to &amp;quot;Du kan underskrive her: {LINK}&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|Signer.NotificationSubject&lt;br /&gt;
|The subject of the email send to EmailWarner, when all signatures have been collected. Defaults to &amp;quot;Dokument til signering er blevet underskrevet&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Signer.NotificationBody&lt;br /&gt;
|The body of the email send to EmailWarner, when all signatures have been collected.&lt;br /&gt;
Defaults to &amp;quot;Alle parter har nu underskrevet dokumentet. {LINK}&amp;quot;. Links to the record.&lt;br /&gt;
|-&lt;br /&gt;
|Signer.NotificationBodyExt&lt;br /&gt;
|The body of the email send to all signers of a document, when all have signed.&lt;br /&gt;
Defaults to &amp;quot;Alle parter har nu underskrevet dokumentet. Du kan downloade det underskrevne dokument her: {LINK}&amp;quot;. Links to the signed document at Criipto.&lt;br /&gt;
|-&lt;br /&gt;
|Signer.EmailWarner&lt;br /&gt;
|Can be an email or the system name of a field containing an email.&lt;br /&gt;
The email found here will be notified when a signature fails and completes. If an email is not found, the email of the current user will be used, if not a status action. Required for status action.&lt;br /&gt;
|-&lt;br /&gt;
|Signer.WarningSubject&lt;br /&gt;
|The subject of the email send to EmailWarner, when a signature request fails. Defaults to &amp;quot;Dokument til signering blev afvist&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|Signer.WarningBody&lt;br /&gt;
|The body of the email send to EmailWarner, when a signature request fails. Defaults to &amp;quot;En underskrift blev afvist. {LINK}&amp;quot;. Links to the record.&lt;br /&gt;
|-&lt;br /&gt;
|Signer.CriiptoClientID *&lt;br /&gt;
|The client ID from Criipto application.&lt;br /&gt;
|-&lt;br /&gt;
|Signer.CriiptoClientSecret *&lt;br /&gt;
|The client secret from Criipto application.&lt;br /&gt;
|-&lt;br /&gt;
|Signer.OverwriteOnReupload&lt;br /&gt;
|true/false, default false. If enabled the system allows re-sending a record for signing, overwriting the old one.&lt;br /&gt;
|-&lt;br /&gt;
|Signer.FileName&lt;br /&gt;
|Name of generated file, defaults to kontrakt.docx, used by CriiptoStatusActionGenerator&lt;br /&gt;
|-&lt;br /&gt;
|Signer.TemplateID&lt;br /&gt;
|ID of template to be rendered and saved before sending it of to be signed, used by CriiptoStatusActionGenerator&lt;br /&gt;
|-&lt;br /&gt;
|Signer.FileNameAlt&lt;br /&gt;
|Name of generated file, defaults to kontrakt.docx, used by CriiptoStatusActionGeneratorAlt&lt;br /&gt;
|-&lt;br /&gt;
|Signer.TemplateIDAlt&lt;br /&gt;
|ID of template to be rendered and saved before sending it of to be signed, used by CriiptoStatusActionGeneratorAlt&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Dashboard_diagram_widget_configuration&amp;diff=6851</id>
		<title>Dashboard diagram widget configuration</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Dashboard_diagram_widget_configuration&amp;diff=6851"/>
		<updated>2024-08-19T09:49:22Z</updated>

		<summary type="html">&lt;p&gt;Tvi: multiple y-axis&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This information is also applicable to the field [[FieldSubselectDiagram|Visual extra: SQL: Diagram query]].&lt;br /&gt;
&lt;br /&gt;
This site only describes the specifics of the diagram widgets, for general widget configuration [[Dashboard widget configuration|click here]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This article will only cover the newest version of graphs implemented.&lt;br /&gt;
&lt;br /&gt;
To enable these, toggle the [[Policy]] useGoogleChart to false and useNewChart to true.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As of writing (version 8813) these renderings are supported.&lt;br /&gt;
&lt;br /&gt;
* Circle&lt;br /&gt;
* Doughnut&lt;br /&gt;
* Bar vertical (Columns)&lt;br /&gt;
* Bar horizontal&lt;br /&gt;
* Area&lt;br /&gt;
* Line&lt;br /&gt;
* Area (stacked)&lt;br /&gt;
&lt;br /&gt;
== Data and Internationalization ==&lt;br /&gt;
An SQL Query may extract almost anything from the database.&lt;br /&gt;
&lt;br /&gt;
This process ignores the security restrictions in the system, so you will have to implement them yourself.&lt;br /&gt;
&lt;br /&gt;
=== Structure ===&lt;br /&gt;
&lt;br /&gt;
The structure is the same for all graphs.&lt;br /&gt;
&lt;br /&gt;
The first row of data will be used for headers.&lt;br /&gt;
&lt;br /&gt;
The column named &amp;quot;Title&amp;quot; will be used for titles. On circular diagrams that is the labels, next to the chart, and on xy-graphs that is the labels on the x axis.&lt;br /&gt;
&lt;br /&gt;
The rest of the headers will be used when hovering over the graph, to give information about the data. On xy-graphs it will also be displayed as labels.&lt;br /&gt;
&lt;br /&gt;
The rest of the lines in the data will be added as datapoints in the graph.&lt;br /&gt;
&lt;br /&gt;
If the datapoint is a number, the graph will auto-scale to match the data.&lt;br /&gt;
&lt;br /&gt;
Strings are also supported, but the outcome is unknown.&lt;br /&gt;
&lt;br /&gt;
If a datapoint is null, the graph will bridge the gap, if it is an xy-line-graph, [[FieldSubselectDiagram|see sample here]].&lt;br /&gt;
&lt;br /&gt;
==== Sample pie/doughnut-graph ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Title&lt;br /&gt;
!TitleEnglish&lt;br /&gt;
!This moth&lt;br /&gt;
!Last month&lt;br /&gt;
|-&lt;br /&gt;
|GOOG&lt;br /&gt;
|Alphabet&lt;br /&gt;
|100.23&lt;br /&gt;
|25.23&lt;br /&gt;
|-&lt;br /&gt;
|TSLA&lt;br /&gt;
|Tesla&lt;br /&gt;
|10.23&lt;br /&gt;
|20.23&lt;br /&gt;
|-&lt;br /&gt;
|AAPL&lt;br /&gt;
|Apple&lt;br /&gt;
|50.23&lt;br /&gt;
|50.23&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Sample line-graph ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Title&lt;br /&gt;
!TitleEnglish&lt;br /&gt;
!Alphabet&lt;br /&gt;
!Tesla&lt;br /&gt;
!Apple&lt;br /&gt;
|-&lt;br /&gt;
|THIS&lt;br /&gt;
|This Month&lt;br /&gt;
|100.23&lt;br /&gt;
|10.23&lt;br /&gt;
|50.23&lt;br /&gt;
|-&lt;br /&gt;
|LAST&lt;br /&gt;
|Last month&lt;br /&gt;
|25.23&lt;br /&gt;
|20.23&lt;br /&gt;
|50.23&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Multiply y-axis ====&lt;br /&gt;
Multiple y-axis are supported as of version 9390.&lt;br /&gt;
&lt;br /&gt;
To use this feature, prepend the name of the new axis to the data that should be on that axis, eg &amp;lt;code&amp;gt;y1|Apple&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The default y-axis is named &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;. If no axis is specified, this will be used.&lt;br /&gt;
&lt;br /&gt;
You can specify as many axis as ChartJS supports.&lt;br /&gt;
&lt;br /&gt;
=== Internationalization ===&lt;br /&gt;
Add extra columns named &amp;quot;Title&amp;quot;, followed by the name of the language, eg ''TitleEnglish''.&lt;br /&gt;
&lt;br /&gt;
If a column with this name is found, it will be used, otherwise the grath will fallback to the &amp;quot;Title&amp;quot; column.&lt;br /&gt;
&lt;br /&gt;
If no title-column is found, the first column will be used, for compatibility reasons.&lt;br /&gt;
&lt;br /&gt;
== Graph defaults ==&lt;br /&gt;
The graphs all reference the js object ''tsChartDefaultOptions'', with a couple of tweaks.&lt;br /&gt;
&lt;br /&gt;
To see the defaults, open the terminal in you browser, on a page that has a graph and type the name of the object.&lt;br /&gt;
&lt;br /&gt;
=== Specifik defaults ===&lt;br /&gt;
These can't be overwritten.&lt;br /&gt;
&lt;br /&gt;
==== Area stacked ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
options.scales = {&lt;br /&gt;
    y: {&lt;br /&gt;
        stacked: true&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Area stacked, area and line ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
options.interaction = {&lt;br /&gt;
	intersect: false,&lt;br /&gt;
	mode: 'index',&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Bars ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
options.indexAxis = 'y'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Overwriting defaults ===&lt;br /&gt;
To overwrite the default of all charts:&lt;br /&gt;
&lt;br /&gt;
Define an object in js, named tsChartOverwriteOptions.&lt;br /&gt;
&lt;br /&gt;
Set it based on the documentation fund [https://www.chartjs.org/docs/3.7.1/ here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To overwrite the options for a specific chart:&lt;br /&gt;
&lt;br /&gt;
Define an object in js, named tsChartOverwriteOptions.&lt;br /&gt;
&lt;br /&gt;
Add an object with an index matching the chartID.&lt;br /&gt;
&lt;br /&gt;
Set it based on the documentation fund [https://www.chartjs.org/docs/3.7.1/ here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To test your overwrite:&lt;br /&gt;
&lt;br /&gt;
From the console in the browser call ''tsChartOptions'' with the only parameter being the chartID.&lt;br /&gt;
&lt;br /&gt;
The return will be the final options, that will be used for that chart.&lt;br /&gt;
&lt;br /&gt;
== Colors ==&lt;br /&gt;
The colors used, can be overwritten in the Policy ''diagramChartJSColors.''&lt;br /&gt;
&lt;br /&gt;
The structure of the policy is very strict.&lt;br /&gt;
&lt;br /&gt;
The policy has to be formatted as a js array of strings that represent an rgb color.&lt;br /&gt;
&lt;br /&gt;
Thus: It has to start with &amp;lt;code&amp;gt;[&amp;lt;/code&amp;gt; and and with &amp;lt;code&amp;gt;, ]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Each color has to be formatted as an rgb color and wrapped with &amp;lt;code&amp;gt;'&amp;lt;/code&amp;gt;, and separated by &amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;  eg &amp;lt;code&amp;gt;'rgb(255, 255, 255)',&amp;lt;/code&amp;gt;  for a white color.&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Integration/REST&amp;diff=6837</id>
		<title>Integration/REST</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Integration/REST&amp;diff=6837"/>
		<updated>2024-05-30T12:04:57Z</updated>

		<summary type="html">&lt;p&gt;Tvi: /* Version 2 (Json) */  Swagger UI&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction to the REST interface ==&lt;br /&gt;
&lt;br /&gt;
The rest interface has two versions.&lt;br /&gt;
* v1, XML-version (default)&lt;br /&gt;
* v2, JSON-version&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 1 (XML) ==&lt;br /&gt;
&lt;br /&gt;
This article has not yet been fully converted to Wiki format.&lt;br /&gt;
&lt;br /&gt;
Please download the original article: [http://www.tempusserva.dk/articlebase/Tempus%20Serva%20REST%20interface.pdf Tempus Serva REST interface.pdf]&lt;br /&gt;
&lt;br /&gt;
=== Netbeans quick start guide ===&lt;br /&gt;
&lt;br /&gt;
Steps to create a simple interaction&lt;br /&gt;
# Add Webservice to ide (wadl import)&lt;br /&gt;
#* URL: [ServerName]/[ApplicationName]/rest/[SolutionSystemName].wadl&lt;br /&gt;
#* If import causes trouble: Download the wadl file&lt;br /&gt;
# Create a new project&lt;br /&gt;
## Add REST Client to project&lt;br /&gt;
##* Point to newly created webservice: [SolutionSystemName]&lt;br /&gt;
## Add JAXB bindings to project (use XSD schema)&lt;br /&gt;
##* URL: [ServerName]/[ApplicationName]/rest/[SolutionSystemName].xsd&lt;br /&gt;
##* If import causes trouble: Download the xsd file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Sample code for list view (BASIC athentication) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//Create session&lt;br /&gt;
FirmabilerClient session = new FirmabilerClient();&lt;br /&gt;
session.setUsernamePassword(&amp;quot;admin&amp;quot;, &amp;quot;password1223&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//Set search parameters (first parameter is a dummy)&lt;br /&gt;
FirmabilerList result = session.getList(FirmabilerList.class, &amp;quot;&amp;quot;, &amp;quot;TITEL=Kasper&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
//Retrieve data and print&lt;br /&gt;
List &amp;lt;FirmabilerListItem&amp;gt; list = result.getFirmabilerListItem();&lt;br /&gt;
for(int i=0; i&amp;lt;list.size(); i++) {&lt;br /&gt;
    //Handle single item&lt;br /&gt;
    FirmabilerListItem item = list.get(i);&lt;br /&gt;
    System.out.println( item.getDataID() + &amp;quot;\t&amp;quot; + item.getNUMMERPLADE() );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Close connection&lt;br /&gt;
session.close();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample code for list view (parameter credentials) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//Create session&lt;br /&gt;
FirmabilerClient session = new FirmabilerClient();&lt;br /&gt;
&lt;br /&gt;
//Login and set search parameters &lt;br /&gt;
FirmabilerList result = session.getList(FirmabilerList.class, &amp;quot;admin&amp;quot;, &amp;quot;password1223&amp;quot;, &amp;quot;TITEL=Kasper&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
//Retrieve data and print&lt;br /&gt;
List &amp;lt;FirmabilerListItem&amp;gt; list = result.getFirmabilerListItem();&lt;br /&gt;
for(int i=0; i&amp;lt;list.size(); i++) {&lt;br /&gt;
    //Handle single item&lt;br /&gt;
    FirmabilerListItem item = list.get(i);&lt;br /&gt;
    System.out.println( item.getDataID() + &amp;quot;\t&amp;quot; + item.getNUMMERPLADE() );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Close connection&lt;br /&gt;
session.close();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 2 (Json) ==&lt;br /&gt;
&lt;br /&gt;
Download the swagger file from:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
https://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/v2/swagger.json&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can browse and try the api, using the built in SwaggerUI (from version 9147):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
https://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/v2/swagger&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== URL structure ==&lt;br /&gt;
&lt;br /&gt;
When logged in the following URLs are available without further authentication&lt;br /&gt;
&lt;br /&gt;
Data list operations: GET, PUT, POST &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
http(s)://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;version&amp;gt;/&amp;lt;entity&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Data item operations: GET, PUT, POST, DELETE &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
http(s)://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;version&amp;gt;/&amp;lt;entity&amp;gt;/&amp;lt;DataID&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File list operations: PUT, POST &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
http(s)://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;version&amp;gt;/&amp;lt;entity&amp;gt;/&amp;lt;DataID&amp;gt;/&amp;lt;FieldName&amp;gt;/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File item operations: GET, PUT, POST, DELETE &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
http(s)://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;version&amp;gt;/&amp;lt;entity&amp;gt;/&amp;lt;DataID&amp;gt;/&amp;lt;FieldName&amp;gt;/&amp;lt;FileName&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Executing codeunit ===&lt;br /&gt;
&lt;br /&gt;
Operations: GET, PUT, POST, DELETE &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
http(s)://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;version&amp;gt;/codeunit/&amp;lt;codeunitName&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Query parameters ===&lt;br /&gt;
&lt;br /&gt;
The REST API supports the same filtering and search parameters, as the list-command [[Integration/Content_source]].&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=CloneSystem&amp;diff=6836</id>
		<title>CloneSystem</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=CloneSystem&amp;diff=6836"/>
		<updated>2024-05-27T09:12:19Z</updated>

		<summary type="html">&lt;p&gt;Tvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What it does ==&lt;br /&gt;
Clones the entire webapp to another server.&lt;br /&gt;
&lt;br /&gt;
Only works on linux.&lt;br /&gt;
&lt;br /&gt;
== First setup ==&lt;br /&gt;
&lt;br /&gt;
# Generate an SSH key for the tomcat-user on the source server &amp;lt;code&amp;gt;sudo -u tomcat ssh-keygen&amp;lt;/code&amp;gt;&lt;br /&gt;
# Add the public key to a user on the target server that has sudo-access&lt;br /&gt;
# Connect from the source server, as tomcat, to the target server and accept the certificate&lt;br /&gt;
# Add configurations&lt;br /&gt;
&lt;br /&gt;
== How to invoke ==&lt;br /&gt;
Invoke the codeunit, as an admin. eg.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[SERVER]/main?command=common.CloneSystem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Options ===&lt;br /&gt;
Control the behavior with the following url-parameters.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Parameter&lt;br /&gt;
!Desctiption&lt;br /&gt;
|-&lt;br /&gt;
|with-users&lt;br /&gt;
|Also clones the users and their groups&lt;br /&gt;
|-&lt;br /&gt;
|with-files&lt;br /&gt;
|Also clones the files uploaded&lt;br /&gt;
|-&lt;br /&gt;
|dont-backup-target&lt;br /&gt;
|Does not create a copy of the database on the target server with the name &amp;lt;code&amp;gt;_backupyyyyMMddHHmm&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|dont-clean&lt;br /&gt;
|Does not remove the sql files on both systems&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Config&lt;br /&gt;
!Default&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|CloneSystem.targetServer&lt;br /&gt;
|&lt;br /&gt;
|IP or domain of target server&lt;br /&gt;
|-&lt;br /&gt;
|CloneSystem.targetUser&lt;br /&gt;
|ec2-user&lt;br /&gt;
|Name of the user that is being used on the target server&lt;br /&gt;
|-&lt;br /&gt;
|CloneSystem.targetBasePath&lt;br /&gt;
|Policy:applicationBasePath&lt;br /&gt;
|Webapps, folder on target server&lt;br /&gt;
|-&lt;br /&gt;
|CloneSystem.targetApp&lt;br /&gt;
|Policy:applicationName&lt;br /&gt;
|Application name on target server&lt;br /&gt;
|-&lt;br /&gt;
|CloneSystem.targetDb&lt;br /&gt;
|DbLive-name&lt;br /&gt;
|Name of live server on target server&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Developer info ==&lt;br /&gt;
&lt;br /&gt;
* Type: CodeunitPagecontent&lt;br /&gt;
* Security: Requires session&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=CloneSystem&amp;diff=6835</id>
		<title>CloneSystem</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=CloneSystem&amp;diff=6835"/>
		<updated>2024-05-27T09:09:42Z</updated>

		<summary type="html">&lt;p&gt;Tvi: Created page with &amp;quot;== What it does == Clones the entire webapp to another server.  Only works on linux.  == First setup ==  # Generate an SSH key for the tomcat-user on the source server &amp;lt;code&amp;gt;sudo -u tomcat ssh-keygen&amp;lt;/code&amp;gt; # Add the public key to a user on the target server that has sudo-access # Connect from the source server, as tomcat, to the target server and accept the certificate # Add configurations  == How to invoke == Invoke the codeunit, as an admin. eg.  &amp;lt;code&amp;gt;[SERVER]/main?c...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What it does ==&lt;br /&gt;
Clones the entire webapp to another server.&lt;br /&gt;
&lt;br /&gt;
Only works on linux.&lt;br /&gt;
&lt;br /&gt;
== First setup ==&lt;br /&gt;
&lt;br /&gt;
# Generate an SSH key for the tomcat-user on the source server &amp;lt;code&amp;gt;sudo -u tomcat ssh-keygen&amp;lt;/code&amp;gt;&lt;br /&gt;
# Add the public key to a user on the target server that has sudo-access&lt;br /&gt;
# Connect from the source server, as tomcat, to the target server and accept the certificate&lt;br /&gt;
# Add configurations&lt;br /&gt;
&lt;br /&gt;
== How to invoke ==&lt;br /&gt;
Invoke the codeunit, as an admin. eg.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[SERVER]/main?command=common.CloneSystem&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Options ===&lt;br /&gt;
Control the behavior with the following url-parameters.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Parameter&lt;br /&gt;
!Desctiption&lt;br /&gt;
|-&lt;br /&gt;
|with-users&lt;br /&gt;
|Also clones the users and their groups&lt;br /&gt;
|-&lt;br /&gt;
|with-files&lt;br /&gt;
|Also clones the files uploaded&lt;br /&gt;
|-&lt;br /&gt;
|dont-backup-target&lt;br /&gt;
|Does not create a copy of the database on the target server with the name &amp;lt;code&amp;gt;_backupyyyyMMddHHmm&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|dont-clean&lt;br /&gt;
|Does not remove the sql files on both systems&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Config&lt;br /&gt;
!Default&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|targetServer&lt;br /&gt;
|&lt;br /&gt;
|IP or domain of target server&lt;br /&gt;
|-&lt;br /&gt;
|targetUser&lt;br /&gt;
|ec2-user&lt;br /&gt;
|Name of the user that is being used on the target server&lt;br /&gt;
|-&lt;br /&gt;
|targetBasePath&lt;br /&gt;
|Policy:applicationBasePath&lt;br /&gt;
|Webapps, folder on target server&lt;br /&gt;
|-&lt;br /&gt;
|targetApp&lt;br /&gt;
|Policy:applicationName&lt;br /&gt;
|Application name on target server&lt;br /&gt;
|-&lt;br /&gt;
|targetDb&lt;br /&gt;
|DbLive-name&lt;br /&gt;
|Name of live server on target server&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Developer info ==&lt;br /&gt;
&lt;br /&gt;
* Type: CodeunitPagecontent&lt;br /&gt;
* Security: Requires session&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Integration/REST&amp;diff=6825</id>
		<title>Integration/REST</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Integration/REST&amp;diff=6825"/>
		<updated>2024-05-13T12:40:37Z</updated>

		<summary type="html">&lt;p&gt;Tvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction to the REST interface ==&lt;br /&gt;
&lt;br /&gt;
The rest interface has two versions.&lt;br /&gt;
* v1, XML-version (default)&lt;br /&gt;
* v2, JSON-version&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 1 (XML) ==&lt;br /&gt;
&lt;br /&gt;
This article has not yet been fully converted to Wiki format.&lt;br /&gt;
&lt;br /&gt;
Please download the original article: [http://www.tempusserva.dk/articlebase/Tempus%20Serva%20REST%20interface.pdf Tempus Serva REST interface.pdf]&lt;br /&gt;
&lt;br /&gt;
=== Netbeans quick start guide ===&lt;br /&gt;
&lt;br /&gt;
Steps to create a simple interaction&lt;br /&gt;
# Add Webservice to ide (wadl import)&lt;br /&gt;
#* URL: [ServerName]/[ApplicationName]/rest/[SolutionSystemName].wadl&lt;br /&gt;
#* If import causes trouble: Download the wadl file&lt;br /&gt;
# Create a new project&lt;br /&gt;
## Add REST Client to project&lt;br /&gt;
##* Point to newly created webservice: [SolutionSystemName]&lt;br /&gt;
## Add JAXB bindings to project (use XSD schema)&lt;br /&gt;
##* URL: [ServerName]/[ApplicationName]/rest/[SolutionSystemName].xsd&lt;br /&gt;
##* If import causes trouble: Download the xsd file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Sample code for list view (BASIC athentication) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//Create session&lt;br /&gt;
FirmabilerClient session = new FirmabilerClient();&lt;br /&gt;
session.setUsernamePassword(&amp;quot;admin&amp;quot;, &amp;quot;password1223&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//Set search parameters (first parameter is a dummy)&lt;br /&gt;
FirmabilerList result = session.getList(FirmabilerList.class, &amp;quot;&amp;quot;, &amp;quot;TITEL=Kasper&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
//Retrieve data and print&lt;br /&gt;
List &amp;lt;FirmabilerListItem&amp;gt; list = result.getFirmabilerListItem();&lt;br /&gt;
for(int i=0; i&amp;lt;list.size(); i++) {&lt;br /&gt;
    //Handle single item&lt;br /&gt;
    FirmabilerListItem item = list.get(i);&lt;br /&gt;
    System.out.println( item.getDataID() + &amp;quot;\t&amp;quot; + item.getNUMMERPLADE() );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Close connection&lt;br /&gt;
session.close();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample code for list view (parameter credentials) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//Create session&lt;br /&gt;
FirmabilerClient session = new FirmabilerClient();&lt;br /&gt;
&lt;br /&gt;
//Login and set search parameters &lt;br /&gt;
FirmabilerList result = session.getList(FirmabilerList.class, &amp;quot;admin&amp;quot;, &amp;quot;password1223&amp;quot;, &amp;quot;TITEL=Kasper&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
//Retrieve data and print&lt;br /&gt;
List &amp;lt;FirmabilerListItem&amp;gt; list = result.getFirmabilerListItem();&lt;br /&gt;
for(int i=0; i&amp;lt;list.size(); i++) {&lt;br /&gt;
    //Handle single item&lt;br /&gt;
    FirmabilerListItem item = list.get(i);&lt;br /&gt;
    System.out.println( item.getDataID() + &amp;quot;\t&amp;quot; + item.getNUMMERPLADE() );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Close connection&lt;br /&gt;
session.close();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 2 (Json) ==&lt;br /&gt;
&lt;br /&gt;
Download the swagger file from:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
https://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/v2/swagger.json&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can upload the content to this site to browse it: [https://editor.swagger.io/ SwaggerIO Editor]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== URL structure ==&lt;br /&gt;
&lt;br /&gt;
When logged in the following URLs are available without further authentication&lt;br /&gt;
&lt;br /&gt;
Data list operations: GET, PUT, POST &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
http(s)://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;version&amp;gt;/&amp;lt;entity&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Data item operations: GET, PUT, POST, DELETE &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
http(s)://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;version&amp;gt;/&amp;lt;entity&amp;gt;/&amp;lt;DataID&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File list operations: PUT, POST &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
http(s)://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;version&amp;gt;/&amp;lt;entity&amp;gt;/&amp;lt;DataID&amp;gt;/&amp;lt;FieldName&amp;gt;/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File item operations: GET, PUT, POST, DELETE &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
http(s)://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;version&amp;gt;/&amp;lt;entity&amp;gt;/&amp;lt;DataID&amp;gt;/&amp;lt;FieldName&amp;gt;/&amp;lt;FileName&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Executing codeunit ===&lt;br /&gt;
&lt;br /&gt;
Operations: GET, PUT, POST, DELETE &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
http(s)://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;version&amp;gt;/codeunit/&amp;lt;codeunitName&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Query parameters ===&lt;br /&gt;
&lt;br /&gt;
The REST API supports the same filtering and search parameters, as the list-command [[Integration/Content_source]].&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Integration/REST&amp;diff=6824</id>
		<title>Integration/REST</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Integration/REST&amp;diff=6824"/>
		<updated>2024-05-13T12:38:03Z</updated>

		<summary type="html">&lt;p&gt;Tvi: Info about v2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction to the REST interface ==&lt;br /&gt;
&lt;br /&gt;
This article has not yet been fully converted to Wiki format.&lt;br /&gt;
&lt;br /&gt;
Please download the original article: [http://www.tempusserva.dk/articlebase/Tempus%20Serva%20REST%20interface.pdf Tempus Serva REST interface.pdf]&lt;br /&gt;
&lt;br /&gt;
The rest interface has two versions.&lt;br /&gt;
* v1, XML-version (default)&lt;br /&gt;
* v2, JSON-version&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 1 (XML) ==&lt;br /&gt;
&lt;br /&gt;
=== Netbeans quick start guide ===&lt;br /&gt;
&lt;br /&gt;
Steps to create a simple interaction&lt;br /&gt;
# Add Webservice to ide (wadl import)&lt;br /&gt;
#* URL: [ServerName]/[ApplicationName]/rest/[SolutionSystemName].wadl&lt;br /&gt;
#* If import causes trouble: Download the wadl file&lt;br /&gt;
# Create a new project&lt;br /&gt;
## Add REST Client to project&lt;br /&gt;
##* Point to newly created webservice: [SolutionSystemName]&lt;br /&gt;
## Add JAXB bindings to project (use XSD schema)&lt;br /&gt;
##* URL: [ServerName]/[ApplicationName]/rest/[SolutionSystemName].xsd&lt;br /&gt;
##* If import causes trouble: Download the xsd file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Sample code for list view (BASIC athentication) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//Create session&lt;br /&gt;
FirmabilerClient session = new FirmabilerClient();&lt;br /&gt;
session.setUsernamePassword(&amp;quot;admin&amp;quot;, &amp;quot;password1223&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//Set search parameters (first parameter is a dummy)&lt;br /&gt;
FirmabilerList result = session.getList(FirmabilerList.class, &amp;quot;&amp;quot;, &amp;quot;TITEL=Kasper&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
//Retrieve data and print&lt;br /&gt;
List &amp;lt;FirmabilerListItem&amp;gt; list = result.getFirmabilerListItem();&lt;br /&gt;
for(int i=0; i&amp;lt;list.size(); i++) {&lt;br /&gt;
    //Handle single item&lt;br /&gt;
    FirmabilerListItem item = list.get(i);&lt;br /&gt;
    System.out.println( item.getDataID() + &amp;quot;\t&amp;quot; + item.getNUMMERPLADE() );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Close connection&lt;br /&gt;
session.close();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample code for list view (parameter credentials) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//Create session&lt;br /&gt;
FirmabilerClient session = new FirmabilerClient();&lt;br /&gt;
&lt;br /&gt;
//Login and set search parameters &lt;br /&gt;
FirmabilerList result = session.getList(FirmabilerList.class, &amp;quot;admin&amp;quot;, &amp;quot;password1223&amp;quot;, &amp;quot;TITEL=Kasper&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
//Retrieve data and print&lt;br /&gt;
List &amp;lt;FirmabilerListItem&amp;gt; list = result.getFirmabilerListItem();&lt;br /&gt;
for(int i=0; i&amp;lt;list.size(); i++) {&lt;br /&gt;
    //Handle single item&lt;br /&gt;
    FirmabilerListItem item = list.get(i);&lt;br /&gt;
    System.out.println( item.getDataID() + &amp;quot;\t&amp;quot; + item.getNUMMERPLADE() );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Close connection&lt;br /&gt;
session.close();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 2 (Json) ==&lt;br /&gt;
&lt;br /&gt;
Download the swagger file from:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
https://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/v2/swagger.json&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can upload the content to this site to browse it: [https://editor.swagger.io/ SwaggerIO Editor]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== URL structure ==&lt;br /&gt;
&lt;br /&gt;
When logged in the following URLs are available without further authentication&lt;br /&gt;
&lt;br /&gt;
Data list operations: GET, PUT, POST &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
http(s)://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;version&amp;gt;/&amp;lt;entity&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Data item operations: GET, PUT, POST, DELETE &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
http(s)://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;version&amp;gt;/&amp;lt;entity&amp;gt;/&amp;lt;DataID&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File list operations: PUT, POST &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
http(s)://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;version&amp;gt;/&amp;lt;entity&amp;gt;/&amp;lt;DataID&amp;gt;/&amp;lt;FieldName&amp;gt;/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File item operations: GET, PUT, POST, DELETE &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
http(s)://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;version&amp;gt;/&amp;lt;entity&amp;gt;/&amp;lt;DataID&amp;gt;/&amp;lt;FieldName&amp;gt;/&amp;lt;FileName&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Executing codeunit ===&lt;br /&gt;
&lt;br /&gt;
Operations: GET, PUT, POST, DELETE &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
http(s)://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;version&amp;gt;/codeunit/&amp;lt;codeunitName&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Query parameters ===&lt;br /&gt;
&lt;br /&gt;
The REST API supports the same filtering and search parameters, as the list-command [[Integration/Content_source]].&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Integration/REST&amp;diff=6823</id>
		<title>Integration/REST</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Integration/REST&amp;diff=6823"/>
		<updated>2024-05-13T09:56:30Z</updated>

		<summary type="html">&lt;p&gt;Tvi: Notet version changes and new endpoints&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction to the REST interface ==&lt;br /&gt;
This article has not yet been fully converted to Wiki format.&lt;br /&gt;
&lt;br /&gt;
Please download the original article: [http://www.tempusserva.dk/articlebase/Tempus%20Serva%20REST%20interface.pdf Tempus Serva REST interface.pdf]&lt;br /&gt;
&lt;br /&gt;
The rest interface has two versions.&lt;br /&gt;
* v1, XML-version (default)&lt;br /&gt;
* v2, JSON-version&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Netbeans quick start guide ===&lt;br /&gt;
&lt;br /&gt;
Steps to create a simple interaction&lt;br /&gt;
# Add Webservice to ide (wadl import)&lt;br /&gt;
#* URL: [ServerName]/[ApplicationName]/rest/[SolutionSystemName].wadl&lt;br /&gt;
#* If import causes trouble: Download the wadl file&lt;br /&gt;
# Create a new project&lt;br /&gt;
## Add REST Client to project&lt;br /&gt;
##* Point to newly created webservice: [SolutionSystemName]&lt;br /&gt;
## Add JAXB bindings to project (use XSD schema)&lt;br /&gt;
##* URL: [ServerName]/[ApplicationName]/rest/[SolutionSystemName].xsd&lt;br /&gt;
##* If import causes trouble: Download the xsd file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Sample code for list view (BASIC athentication) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//Create session&lt;br /&gt;
FirmabilerClient session = new FirmabilerClient();&lt;br /&gt;
session.setUsernamePassword(&amp;quot;admin&amp;quot;, &amp;quot;password1223&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//Set search parameters (first parameter is a dummy)&lt;br /&gt;
FirmabilerList result = session.getList(FirmabilerList.class, &amp;quot;&amp;quot;, &amp;quot;TITEL=Kasper&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
//Retrieve data and print&lt;br /&gt;
List &amp;lt;FirmabilerListItem&amp;gt; list = result.getFirmabilerListItem();&lt;br /&gt;
for(int i=0; i&amp;lt;list.size(); i++) {&lt;br /&gt;
    //Handle single item&lt;br /&gt;
    FirmabilerListItem item = list.get(i);&lt;br /&gt;
    System.out.println( item.getDataID() + &amp;quot;\t&amp;quot; + item.getNUMMERPLADE() );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Close connection&lt;br /&gt;
session.close();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample code for list view (parameter credentials) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//Create session&lt;br /&gt;
FirmabilerClient session = new FirmabilerClient();&lt;br /&gt;
&lt;br /&gt;
//Login and set search parameters &lt;br /&gt;
FirmabilerList result = session.getList(FirmabilerList.class, &amp;quot;admin&amp;quot;, &amp;quot;password1223&amp;quot;, &amp;quot;TITEL=Kasper&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
//Retrieve data and print&lt;br /&gt;
List &amp;lt;FirmabilerListItem&amp;gt; list = result.getFirmabilerListItem();&lt;br /&gt;
for(int i=0; i&amp;lt;list.size(); i++) {&lt;br /&gt;
    //Handle single item&lt;br /&gt;
    FirmabilerListItem item = list.get(i);&lt;br /&gt;
    System.out.println( item.getDataID() + &amp;quot;\t&amp;quot; + item.getNUMMERPLADE() );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Close connection&lt;br /&gt;
session.close();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== URL structure ==&lt;br /&gt;
When logged in the following URLs are available without further authentication&lt;br /&gt;
&lt;br /&gt;
Data list operations: GET, PUT, POST &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
https://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;version&amp;gt;/&amp;lt;solution&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Data item operations: GET, PUT, POST, DELETE &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
https://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;version&amp;gt;/&amp;lt;solution&amp;gt;/&amp;lt;DataID&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note: The fowllowing file handling endpoints are scheduled for Q2 2020'''&lt;br /&gt;
&lt;br /&gt;
File list operations: PUT, POST &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
https://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;version&amp;gt;/&amp;lt;solution&amp;gt;/&amp;lt;DataID&amp;gt;/&amp;lt;FieldName&amp;gt;/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File item operations: GET, PUT, POST, DELETE &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
https://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;version&amp;gt;/&amp;lt;solution&amp;gt;/&amp;lt;DataID&amp;gt;/&amp;lt;FieldName&amp;gt;/&amp;lt;FileName&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Query parameters ===&lt;br /&gt;
&lt;br /&gt;
The REST API supports the same filtering and search parameters, as the list-command [[Integration/Content_source]].&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Policy&amp;diff=6820</id>
		<title>Policy</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Policy&amp;diff=6820"/>
		<updated>2024-04-24T09:57:12Z</updated>

		<summary type="html">&lt;p&gt;Tvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Policies are shared between all solutions in each Tempus Serva installation. Note that each property can be [[Overloading policies|overloaded in the Servlet context]] (same file as the connection pool configuration).&lt;br /&gt;
&lt;br /&gt;
Note: In the following sections only links in the color blue will contain additional information.&lt;br /&gt;
&lt;br /&gt;
=== Server configuration ===&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
|'''applicationBasePath'''&lt;br /&gt;
|Application folder&lt;br /&gt;
|Location of WAR / deployed web application&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''applicationDisplayName'''&lt;br /&gt;
|Application display name&lt;br /&gt;
|Name of application displayed to users&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''applicationlPort'''&lt;br /&gt;
|Server port for HTTP&lt;br /&gt;
|Port used running regular requests. Needs to match the setting in webcontainer definition (server.xm in Tomcat)l&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''applicationlPortSSL'''&lt;br /&gt;
|Server port for HTTPS&lt;br /&gt;
|Port used running SSL encrypted requests. Needs to match the setting in webcontainer definition (server.xm in Tomcat)l&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''applicationName'''&lt;br /&gt;
|Application name&lt;br /&gt;
|Name of application / folder - example &amp;lt;nowiki&amp;gt;http://myserver.com/APPLICATIONNAME/login&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''applicationServer'''&lt;br /&gt;
|Application server hostname or IP&lt;br /&gt;
|Base refernce for the server. IP example: 89.56.12.14. Network name: localhost. Domain: bpms.acme.com&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''applicationURL'''&lt;br /&gt;
|Application machine / URL&lt;br /&gt;
|Base URL of the server as seen by the end user. Overlaps with value in applicationServer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''cacheActive'''&lt;br /&gt;
|Caching enabled (recommended)&lt;br /&gt;
|Enable caching of system ressources. Alternative: Collect all ressources every time (very slow)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''cacheBrowserExpireSeconds'''&lt;br /&gt;
|Static content cache time (seconds)&lt;br /&gt;
|Amount of time that images and scripts are cached i client browser.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''cacheMaxObjectSize'''&lt;br /&gt;
|Cache maximum size (bytes)&lt;br /&gt;
|Maximum amount of memory consumed by the cache. Set as high as possible.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''connectionPoolActive'''&lt;br /&gt;
|Use connection pools (recommended)&lt;br /&gt;
|Strongly recommended. Use webcontainer connection pools. Alternative: Application builds own connections (very slow) &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''defaultCharEncoding'''&lt;br /&gt;
|Default Character Encoding&lt;br /&gt;
|Recommended: ISO-8859&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''doExtraUrlDecoding'''&lt;br /&gt;
|Decode autocompletion / quicksearch&lt;br /&gt;
|Use if experiencing problems with autocompletion / quicksearch &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''doRedirectAfterUpdate'''&lt;br /&gt;
|Redirect user after updates&lt;br /&gt;
|Strongly recommended. Slight performance hit, but enables browser BACK button&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''multiServerCoordination'''&lt;br /&gt;
|Server cluster coordination&lt;br /&gt;
|Coordinate cache flushing, user list etc. through database communication (polling).&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''serverTypeAutodetect'''&lt;br /&gt;
|Server type detection&lt;br /&gt;
|Autodetect compliance type&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''serverTypeJ2EE'''&lt;br /&gt;
|Server type J2EE&lt;br /&gt;
|Compliance type if autodetect is disabled&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''sessionCheckInterval'''&lt;br /&gt;
|Session cleanup interval (minutes)&lt;br /&gt;
|Time between online list sweeping, removing user with no recent activity.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''sessionLifetimeMaximum'''&lt;br /&gt;
|Session lifetime (minutes)&lt;br /&gt;
|Maximum time before last activity before users must log in again&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''sessionLifetimeMinutes'''&lt;br /&gt;
|Session lifetime minutes&lt;br /&gt;
|Length of user sessions (changeable at runtime)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''systemOptimizeMemory'''&lt;br /&gt;
|Minimize HEAP size&lt;br /&gt;
|Always recommended &amp;lt; 1Gb RAM. Tradeoff between RAM and CPU time&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Interface behaviour ===&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
|'''allowAliasQueryParameters'''&lt;br /&gt;
|Allow Query alias parameters&lt;br /&gt;
|Allow alternate names for parameters used in LIST searches. Alternate names can be set programmtically.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''allowFieldSelectionInLists'''&lt;br /&gt;
|Allow field selection in lists&lt;br /&gt;
|Allow user to select which fields are displayed in LIST views&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''allowListQuickFilter'''&lt;br /&gt;
|Allow for Quick filters i list views&lt;br /&gt;
|Enable serach in lists by writing part of the name (a search box will appear)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''allowListSubtableRendering'''&lt;br /&gt;
|Data subtables in lists&lt;br /&gt;
|Subtables can negatively affect performance&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''allowSubtableLists'''&lt;br /&gt;
|Allow subtables in items (recommended)&lt;br /&gt;
|Allow related child records to be displayed in ITEM level views&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''concurrencyWarnings'''&lt;br /&gt;
|Warn on simultanous item editing&lt;br /&gt;
|Users poll server for changes using AJAX in browser client (some performance impact). Note that only different users editing the same item will trigger a warning.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''defaultLanguageID'''&lt;br /&gt;
|Default Language (ID)&lt;br /&gt;
|Language to use if nothing else is specified and autodetection is disabled. Test by adding &amp;amp;Language=[number] to URL&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''defaultStyleID'''&lt;br /&gt;
|Default Style (ID)&lt;br /&gt;
|Style (buttons) to use if nothing else is specified. Test by adding &amp;amp;Style=[number] to URL&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''defaultStylesheetID'''&lt;br /&gt;
|Default Stylesheet (ID)&lt;br /&gt;
|Stylesheet to use if nothing else is specified. Test by adding &amp;amp;Stylesheet=[number] to URL&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''defaultTemplateID'''&lt;br /&gt;
|Default Template (ID)&lt;br /&gt;
|Form template to use in ITEM mode if nothing else is specified. Test by adding &amp;amp;Template=[number] to URL&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''defaultWrapperID'''&lt;br /&gt;
|Default Wrapper (ID)&lt;br /&gt;
|WrapperID to use if nothing else is specified. Test by adding &amp;amp;Wrapper=[number] to URL&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''doFormAutosave'''&lt;br /&gt;
|Autosave changed forms&lt;br /&gt;
|Allow editor to autocommit data before session times out&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''doItemBrowserTitle'''&lt;br /&gt;
|Display item resume in browser title&lt;br /&gt;
|Change browser title/tab title to current records Resume value in ITEM mode&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''doItemCreateAddMore'''&lt;br /&gt;
|Button to add more records&lt;br /&gt;
|Add multiple records during new record creation (button)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''doItemMenuCopyPaste'''&lt;br /&gt;
|Show copy/paste in during record edits&lt;br /&gt;
|Extra buttons for copy/paste operations in ITEM mode&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''DoLinkedCSS'''&lt;br /&gt;
|CSS style links&lt;br /&gt;
|Link CSS content so that browsers can cache the content. Recommended.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''doListShowAllFields'''&lt;br /&gt;
|Allow show all fields button&lt;br /&gt;
|Optional button i menu for selecting all columns / fields in LIST mode&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''doListShowAllRecords'''&lt;br /&gt;
|Allow show all records in list view&lt;br /&gt;
|Optional button i menu for selecting all records in LIST mode&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''doListShowLinkHeader'''&lt;br /&gt;
|Display link in headers&lt;br /&gt;
|Display link to list as part of header name&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''doListShowNameHeader'''&lt;br /&gt;
|Display header in lists&lt;br /&gt;
|Display the name of the solution above the list&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''doListShowSearchHeader'''&lt;br /&gt;
|Show search headers&lt;br /&gt;
|Display descriptive header in search form&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''doPageNavigatorAllways'''&lt;br /&gt;
|Allways show navigator in lists&lt;br /&gt;
|Page navigator can be disabled if all records can displayed in one page&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''doPersonalFlagsOnItems'''&lt;br /&gt;
|Display user flags on items&lt;br /&gt;
|Allow users to make bookmark / personal comments on single items&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''doPersonalLinksOnItems'''&lt;br /&gt;
|Display personal links on single items&lt;br /&gt;
|Display submenu of personal options in ITEM mode. By default only displayed i list / main mode&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''doPersonalLinksOnLists'''&lt;br /&gt;
|Display personal links on lists&lt;br /&gt;
|Display submenu of personal options in LIST mode. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''doRecentItemsBookmarks'''&lt;br /&gt;
|Show recent items list&lt;br /&gt;
|Trach and diaply recently accessed items. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''doStatusFinalDisableEditing'''&lt;br /&gt;
|Disable editing if status is final&lt;br /&gt;
|Allow records to be edited even after the item has reached a status that is final&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''DoTimeDecimal'''&lt;br /&gt;
|Display date sums with decimals&lt;br /&gt;
|Is time measured on items displayed using decimal og integer values&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''errorAdvancedView'''&lt;br /&gt;
|Advanced error handling&lt;br /&gt;
|Display explanation and contact details if exceptions occur&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''errorUnkownImage'''&lt;br /&gt;
|Advanced error logo&lt;br /&gt;
|Logo to display i advanced error handling&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''guiClickableList'''&lt;br /&gt;
|Click/doubleclick lists&lt;br /&gt;
|List views can be clicked to edit (double) or show (single)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''guiDialogAdvanced'''&lt;br /&gt;
|Use advanced popups&lt;br /&gt;
|Uses JQuery style dialog for poup windows with inline scrolling&lt;br /&gt;
|http://jqueryui.com/dialog/&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|'''guiFieldHelpOffsetLeft'''&lt;br /&gt;
|Field help popup offset LEFT&lt;br /&gt;
|Window relative position to link on X axis&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''guiFieldHelpOffsetTop'''&lt;br /&gt;
|Field help popup offset TOP&lt;br /&gt;
|Window relative position to link on Y axis&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''guiPreventDoubleClick'''&lt;br /&gt;
|Prevent doubleclick&lt;br /&gt;
|Deactivate multi click on codeunit buttons&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''guiSetFormFocus'''&lt;br /&gt;
|Set form focus&lt;br /&gt;
|Set focus to first element in edit mode&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''guiSmartKeystrokes'''&lt;br /&gt;
|Use keyboard navigation&lt;br /&gt;
|Navigate with arrow keys, escape and tabulation&lt;br /&gt;
|[[Features/Key navigation]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''guiTouchEnhancement'''&lt;br /&gt;
|Enhance touch experience&lt;br /&gt;
|Make larger buttons and enable quicksearch by default&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''headerSeperator'''&lt;br /&gt;
|Seperator sign for headers&lt;br /&gt;
|Dot between header parts - ex. MySolution - Dashboard&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''mainRedirect'''&lt;br /&gt;
|Main menu redirect active&lt;br /&gt;
|Redirect to alternative main menu active&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''mainRedirectUrl'''&lt;br /&gt;
|Main menu redirect URL&lt;br /&gt;
|Local path ex. main?command=list&amp;amp;SagID=0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''renderMenuItemClass'''&lt;br /&gt;
|Use CSS class for menu items&lt;br /&gt;
|Give unique class property to each menu item.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''subformLinesDefault'''&lt;br /&gt;
|Number of lines in subforms&lt;br /&gt;
|Default number of records displayed in subforms&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''toolBarcodeParameters'''&lt;br /&gt;
|Barcode additional parameters&lt;br /&gt;
|Extra parameter for barcode, for tweaking size, type etc.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''userOnlineList'''&lt;br /&gt;
|Maintain list of online users&lt;br /&gt;
|Monitor users online - ie. users with an active session on the server. Recommended in single front server environments.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''userRequireAcceptTerms'''&lt;br /&gt;
|Require new user to accept usage terms&lt;br /&gt;
|Configure text in System configurations&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Active directory ===&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
|'''ldapAuthentication'''&lt;br /&gt;
|Use LDAP authentication&lt;br /&gt;
|Is LDAP logon active ?&lt;br /&gt;
|[[Integration/LDAP]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''ldapAuthenticationFallback'''&lt;br /&gt;
|Use fallback authentication if LDAP fails&lt;br /&gt;
|Allow internal database verfication using stored passwords, in the event that the LDAP server fails to respond properly.&lt;br /&gt;
|[[Integration/LDAP]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''ldapCreateUsers'''&lt;br /&gt;
|Allow creation of new users&lt;br /&gt;
|Create users logging in, that cannot be found inside the LDAP. User must belong to ldapDomainDefault&lt;br /&gt;
|[[Integration/LDAP]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''ldapDomainDefault'''&lt;br /&gt;
|Default domain&lt;br /&gt;
|&lt;br /&gt;
|[[Integration/LDAP]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''ldapMaintainGroupsOnLogon'''&lt;br /&gt;
|Maintain groups on logon&lt;br /&gt;
|LDAP validation also synchronizes groups found for logged in user.&lt;br /&gt;
|[[Integration/LDAP]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''ldapServer'''&lt;br /&gt;
|LDAP setup: LDAP server&lt;br /&gt;
|Use IP or network name&lt;br /&gt;
|[[Integration/LDAP]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''ldapUsername'''&lt;br /&gt;
|LDAP setup: USERNAME&lt;br /&gt;
|Service account username. User needs only read access.&lt;br /&gt;
|[[Integration/LDAP]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''ldapPassword'''&lt;br /&gt;
|LDAP setup: PASSWORD&lt;br /&gt;
|Service account username. Note this password is stored cleartext.&lt;br /&gt;
|[[Integration/LDAP]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Security ===&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
|'''doAdvancedGroupSecurity'''&lt;br /&gt;
|Advanced group security&lt;br /&gt;
|Enables: A) Groups inside groups B) Multiple exclusive groups&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''policyHideValues'''&lt;br /&gt;
|Hide overloaded policies&lt;br /&gt;
|Hide values for policies that have been overloaded in the application deployment file&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|'''securityAllowPublicCodeunits'''&lt;br /&gt;
|Allow anonoumus codeunit execution&lt;br /&gt;
|It is considered safe to use special codeunits&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''securityEnforceExclusiveGroup'''&lt;br /&gt;
|Require normal users to have Exclusive groups&lt;br /&gt;
|All users except Admins must have at least 1 exclusive group&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''securityLoginFailedAttempts'''&lt;br /&gt;
|Login max failed logins&lt;br /&gt;
|Number of failed logins before accounts will be disabled&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''securityLoginFailedAutoReset'''&lt;br /&gt;
|AutoReset users&lt;br /&gt;
|Automatically reset users that have failed maximum number of logins (sends new password)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''securityPasswordAcceptMD5digest'''&lt;br /&gt;
|Allow MD5 hashed passwords&lt;br /&gt;
|Recommended in transition between MD5 (minor flaws) and SHA256 (very secure) &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''securityPasswordCleartext'''&lt;br /&gt;
|Store passwords cleartext&lt;br /&gt;
|Allow passwords to be stored without one-way encryption&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''securityPasswordCleartextAllowed'''&lt;br /&gt;
|Allow cleartext passwords&lt;br /&gt;
|Optionally encode all password using admin services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''securityResetPasswordWithoutLogin'''&lt;br /&gt;
|Reset password without login&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''securitySslLogin'''&lt;br /&gt;
|SSL encryption for login page&lt;br /&gt;
|Enforce usage of SSL connections on login page using internal redirect. Recommended.&lt;br /&gt;
|[[Setting up SSL/HTTPS]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''securitySslPages'''&lt;br /&gt;
|SSL encryption for ALL pages&lt;br /&gt;
|Enforce usage of SSL connections on all page using internal redirect. Not recommended.&lt;br /&gt;
|[[Setting up SSL/HTTPS]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''securityTokenExpiryEnforce'''&lt;br /&gt;
|Deny old style access tokens&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''ssoSpnegoAuthenticate'''&lt;br /&gt;
|SSO via domain controller&lt;br /&gt;
|Allow SPNEGO filter to automatically log in authenticated Windows users &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''ssoCryptoTokenActive'''&lt;br /&gt;
|SSO token authentication&lt;br /&gt;
|Allow single sigon from externatal components (ex. TS SSO webpart)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''ssoCryptoTokenSecret'''&lt;br /&gt;
|SSO token shared secret&lt;br /&gt;
|Shared secret password between TS and external services. Value must match exactly.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Scheduled services ===&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
|'''accountAnonoumousMeasure'''&lt;br /&gt;
|Anonoumous account (UserID)&lt;br /&gt;
|UserID used for normal system iteractions using the solution interfaces&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''adminWarningSmsList'''&lt;br /&gt;
|Warning SMS number list&lt;br /&gt;
|List of administrator mobile phone lists (for notifications)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''healthMonitorPassword'''&lt;br /&gt;
|Health monitor password&lt;br /&gt;
|Parameter/password to access basic monitor service without a login (usage: service?healtMonitorPassword)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''integrationInvokeCodeunit'''&lt;br /&gt;
|Integration execute codeunit&lt;br /&gt;
|Execute codeunits during dataintegration / webservices&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''maintenenceEmergencyDelay'''&lt;br /&gt;
|Emergency shutdown delay&lt;br /&gt;
|Number of minutes to warn users when af EMERGENCY signal is sent to the server from the admin services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''maintenenceLockdoorDelay'''&lt;br /&gt;
|Maintenence disable login delay&lt;br /&gt;
|Number of minutes before af shutdown where users are no longer allowed to log in&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''maintenenceShutdownDelay'''&lt;br /&gt;
|Maintenence shutdown delay&lt;br /&gt;
|Number of minutes to warn users when af MAINTENENCE signal is sent to the server from the admin services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''measureAnonoumous'''&lt;br /&gt;
|Measure anonoumous users&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''measureInsertDelayCount'''&lt;br /&gt;
|Measure insert delay (items)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''measureInsertDelayMinutes'''&lt;br /&gt;
|Measure insert delay (minutes)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''measureInsertUsingBatch'''&lt;br /&gt;
|Measure insert in batches&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''serviceAdminStatusEmail'''&lt;br /&gt;
|Administrator email&lt;br /&gt;
|Administrator email for sending status updates&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''serviceStatusActionSendDirectly'''&lt;br /&gt;
|Send status actions directly by mail&lt;br /&gt;
|False: Insert into user notifications. True: Send per email&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''serviceWebsiteMonitorGW'''&lt;br /&gt;
|Website monitor goodword&lt;br /&gt;
|Information that needs to be found in a page located at serviceWebsiteMonitorURL&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''serviceWebsiteMonitorURL'''&lt;br /&gt;
|Website monitor URL&lt;br /&gt;
|Address to monitor where the serviceWebsiteMonitorGW should be found&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''userOnlineAlertOnNewNotification'''&lt;br /&gt;
|Notify online users directly&lt;br /&gt;
|Display new button when users are allready logged in&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''userOnlineListDisplayCount'''&lt;br /&gt;
|Display number of online users&lt;br /&gt;
|Display number of online users at bottom of all pages&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Debug ===&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
|'''debugCacheResponse'''&lt;br /&gt;
|Caching succes / failure&lt;br /&gt;
|Log effects of caching. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''debugDaemonActivity'''&lt;br /&gt;
|Debug daemon runs&lt;br /&gt;
|Log all runs for Service and Server daemon&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''debugDataLoads'''&lt;br /&gt;
|Debug while loading data (CSV/XML)&lt;br /&gt;
|Debugging option for designers and developers&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''debugExceptions'''&lt;br /&gt;
|Debug all Exceptions&lt;br /&gt;
|Writes stacktrace to logfiles. Alternative: Only write to eventlog.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''debugIntegration'''&lt;br /&gt;
|Debug integration messages&lt;br /&gt;
|Debugging option for designers and developers&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''debugLdapCommunication'''&lt;br /&gt;
|Debug LDAP communication&lt;br /&gt;
|Debugging option for designers and developers&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''debugLdapStacktrace'''&lt;br /&gt;
|Debug LDAP error details&lt;br /&gt;
|Debugging option for designers and developers&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''debugLdapValidation'''&lt;br /&gt;
|Debug LDAP validation&lt;br /&gt;
|Debugging option for designers and developers&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''debugLoginResults'''&lt;br /&gt;
|Debug all user logins&lt;br /&gt;
|Debugging option for designers and developers&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''debugOlapDefinitions'''&lt;br /&gt;
|Debug OLAP definitions&lt;br /&gt;
|Write all schemas and querys to logfiles on boot&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''debugQuerySQL'''&lt;br /&gt;
|Debug all SQL queries&lt;br /&gt;
|All queries are written to System.out / logfile&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''debugQuestionaire'''&lt;br /&gt;
|Debug questionaire steps&lt;br /&gt;
|Display extra information in questionaire mode&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''debugRequestPerSecond'''&lt;br /&gt;
|Debug requests/second&lt;br /&gt;
|Calculate server load on run. Results are sent to System.out / logfile&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''debugRequestTime'''&lt;br /&gt;
|Debug response time&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''debugRequestTimeToPage'''&lt;br /&gt;
|Debug response time on page&lt;br /&gt;
|Display response time in bottom of all pages (no performance impact).&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''debugScriptFunctions'''&lt;br /&gt;
|Debug JavaScript&lt;br /&gt;
|Allow JS errors to be displayed&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''debugServiceDaemon'''&lt;br /&gt;
|Debug the Service runner Daemon&lt;br /&gt;
|Write extra information from service clients to log files&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''debugTemplateHandling'''&lt;br /&gt;
|Debug template parsing&lt;br /&gt;
|Debugging option for designers and developers&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''debugTokenEvaluation'''&lt;br /&gt;
|Debug token evaluation&lt;br /&gt;
|Debugging option for designers and developers&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''debugWebservices'''&lt;br /&gt;
|Debug the Webservice interface&lt;br /&gt;
|Debugging option for designers and developers&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Filesystem ===&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
|'''folderImportFile'''&lt;br /&gt;
|Folder: Import files&lt;br /&gt;
|Processing folder. Will be set to default value if left empty.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''folderIntegrationCSV'''&lt;br /&gt;
|Folder: CSV data files&lt;br /&gt;
|Processing folder. Will be set to default value if left empty.&lt;br /&gt;
|[[Policy/folderIntegrationCSV]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''folderIntegrationMail'''&lt;br /&gt;
|Folder: Mail integration (temporary)&lt;br /&gt;
|Processing folder. Will be set to default value if left empty.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''folderIntegrationXML'''&lt;br /&gt;
|Folder: XML integration processing&lt;br /&gt;
|Processing folder. Will be set to default value if left empty.&lt;br /&gt;
|[[Policy/folderIntegrationXML]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''folderTemplateLoad'''&lt;br /&gt;
|Folder: Template cache&lt;br /&gt;
|Processing folder. Will be set to default value if left empty.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''folderTemplateSave'''&lt;br /&gt;
|Folder: Template processing&lt;br /&gt;
|Processing folder. Will be set to default value if left empty.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''folderUpload'''&lt;br /&gt;
|Folder: Upload&lt;br /&gt;
|Will be set to default value if left empty.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''folderUploadTemp'''&lt;br /&gt;
|Folder: Upload processing&lt;br /&gt;
|Processing folder. Will be set to default value if left empty.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''mediaFilterDelayMS'''&lt;br /&gt;
|Media files download latency&lt;br /&gt;
|Use if filesystem is slow to pick up changes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''overloadApplicationFolder'''&lt;br /&gt;
|Application folder&lt;br /&gt;
|Option to override. Empty value = autodetect&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''uploadPictureResize'''&lt;br /&gt;
|Reduce uploaded pictures&lt;br /&gt;
|Resize all pictures sent to server to size defined in uploadPictureSizeMaximum&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''uploadPictureSizeMaximum'''&lt;br /&gt;
|Picture maximum size&lt;br /&gt;
|Scale pictures to this maximum of pixels. Maximum height/width determines size. Only works if uploadPictureResize is set&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''uploadPictureSizeThumbnail'''&lt;br /&gt;
|Thumbnail maximum size&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|'''uploadClientScaling'''&lt;br /&gt;
|Use clientside graphic scaling&lt;br /&gt;
|Let browser resize pictures before upload&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|'''uploadClientScalingExclude'''&lt;br /&gt;
|Clientside exlusion test for scaling&lt;br /&gt;
|Set to &amp;quot;false&amp;quot; or exclusion pattern:&lt;br /&gt;
    /Android(?!.*Chrome)|Opera/ .test(window.navigator &amp;amp;&amp;amp; navigator.userAgent)&lt;br /&gt;
|[https://github.com/blueimp/jQuery-File-Upload/wiki/Client-side-Image-Resizing]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|'''uploadThreadProcessing'''&lt;br /&gt;
|Upload processing threads&lt;br /&gt;
|Beta function. Handle file processing with threads to improve Ui responsiveness.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''uploadThreadOnlyPictures'''&lt;br /&gt;
|Upload processing threads: Graphics only&lt;br /&gt;
|Restrict upload threads to resizeable graphics. Requires Upload processing threads&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Service daemon ===&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
|'''serviceAutostart'''&lt;br /&gt;
|Autostart service daemon&lt;br /&gt;
|Start the service daemon after boot.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''serviceDaemonHeartbeatSeconds'''&lt;br /&gt;
|Run daemon every seconds&lt;br /&gt;
|Frequency of daemon runs. Value should match the frequency of the most demanding service.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''serviceLogentriesConsolidate'''&lt;br /&gt;
|Compress logs&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''serviceLogentriesMaximumAge'''&lt;br /&gt;
|Maximum age logs&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''serviceNotificationDeleteAfterDays'''&lt;br /&gt;
|Maximum age notifications&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Eventlog ===&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
|'''eventDelayWrite'''&lt;br /&gt;
|Burst-write events&lt;br /&gt;
|Collect Events together in bundles in order to optimize dataload. Events can be written forcefully using the service servlet.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''eventDelayWriteItemMaximum'''&lt;br /&gt;
|Burst-write event count&lt;br /&gt;
|Number of events before burstwrite executes. Events can be written forcefully using the service servlet.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''eventPrintToStandardOut'''&lt;br /&gt;
|Copy errors to server log&lt;br /&gt;
|Write errors to logfiles when logging to builtin eventlog in the database&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''eventWriteSuccesfullLogins'''&lt;br /&gt;
|Write succesfull logins&lt;br /&gt;
|Log all user logins to the event log. Note that all logins regardless are logged on the user profile.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mail server ===&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
|'''mailDomain'''&lt;br /&gt;
|POP3: Domain&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''mailPassword'''&lt;br /&gt;
|POP3: Password&lt;br /&gt;
|Mail account password. Note this password is stored cleartext.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''mailServer'''&lt;br /&gt;
|POP3: Server&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''mailUsername'''&lt;br /&gt;
|POP3: Username&lt;br /&gt;
|Mail account username. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''smtpMailDelaySec'''&lt;br /&gt;
|SMPT: Message delay&lt;br /&gt;
|Delay in SECONDS between sending emails&lt;br /&gt;
|[[Email server setup]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''smtpPassword'''&lt;br /&gt;
|SMTP: Account password&lt;br /&gt;
|Password for SMTP account set in smtpUsername. Note this password is stored cleartext.&lt;br /&gt;
|[[Email server setup]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''smtpSendRetries'''&lt;br /&gt;
|SMTP: Number of retries&lt;br /&gt;
|Number of attempts to send email from queue before giving up&lt;br /&gt;
|[[Email server setup]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''smtpServer'''&lt;br /&gt;
|SMTP: Server address&lt;br /&gt;
|Network location of the SMTP server&lt;br /&gt;
|[[Email server setup]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''smtpSystemEmail'''&lt;br /&gt;
|SMTP: System mail address&lt;br /&gt;
|Sender address (from) set on all automatically generated emails.&lt;br /&gt;
|[[Email server setup]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''smtpTestEmail'''&lt;br /&gt;
|SMTP: Test email address&lt;br /&gt;
|Recipient of all mails when test mode is activated. Activate by enabling smtpTestMode&lt;br /&gt;
|[[Email server setup]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''smtpTestMode'''&lt;br /&gt;
|SMTP: Test mode (send to test email)&lt;br /&gt;
|Enable test mode where ALL emails are sent to address specified in smtpTestEmail&lt;br /&gt;
|[[Email server setup]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''smtpUsername'''&lt;br /&gt;
|SMTP: Account name&lt;br /&gt;
|Example: k.pedersen@lsvgroup.com&lt;br /&gt;
|[[Email server setup]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Remote services ===&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
|'''doLookupEnabledLinks'''&lt;br /&gt;
|Allow lookup links for fields&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''lookupServiceCvrRegisterUrl'''&lt;br /&gt;
|URL to lookup CVR&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''lookupServiceGeneral'''&lt;br /&gt;
|URL to lookup text&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''lookupServicePhonePersonUrl'''&lt;br /&gt;
|URL to lookup contacts&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Protection ===&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
|'''bruteforceCooldownMinutes'''&lt;br /&gt;
|Bruteforce reject logins (minutes)&lt;br /&gt;
|Time that logins are rejected after the bruteforce protection i activated.&lt;br /&gt;
|[[Security/Bruteforce]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''bruteforceMaxBadLogins'''&lt;br /&gt;
|Bruteforce maximum failed logins&lt;br /&gt;
|Amout of logins failed before new logins are rejected. Relative to bruteforceMeasurePeriod.&lt;br /&gt;
|[[Security/Bruteforce]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''bruteforceMeasurePeriod'''&lt;br /&gt;
|Bruteforce measure period (minutes)&lt;br /&gt;
|Timeframe for measuring amount of bad logins. Relative to bruteforceMaxBadLogins.&lt;br /&gt;
|[[Security/Bruteforce]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''bruteforceProtection'''&lt;br /&gt;
|Bruteforce detection active&lt;br /&gt;
|Enable brute force detection mechanisms&lt;br /&gt;
|[[Security/Bruteforce]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''securitySantizeAllUserInput'''&lt;br /&gt;
|Check all user input for JScripts&lt;br /&gt;
|Allow only if session variable protection is enabled&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== License ===&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
|'''licenseHolder'''&lt;br /&gt;
|License: Owner&lt;br /&gt;
|Company/intitution name on the license&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''licenseNumber'''&lt;br /&gt;
|License: Number&lt;br /&gt;
|ID received from your Tempus Serva distrbutor&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''licenseReportAdministrator'''&lt;br /&gt;
|2nd recipient of license reports&lt;br /&gt;
|Secondary recepiant of license reporting. Normally the license seller.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''licenseReportingEmail'''&lt;br /&gt;
|1st recipient of license reports&lt;br /&gt;
|Primary recepiant of license reporting. Normally the responsible CIO.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''licenseReportLicenseServer'''&lt;br /&gt;
|License reporting active&lt;br /&gt;
|License reporting active&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''licenseSerial'''&lt;br /&gt;
|License: Serial code&lt;br /&gt;
|Code received from your Tempus Serva distrbutor&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
|'''dbAutoUpdate'''&lt;br /&gt;
|Update database on boot (recommended)&lt;br /&gt;
|Strongly recommended. Allows system to update the database when new builds are deployed.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''dbNameBase'''&lt;br /&gt;
|SHARED database name&lt;br /&gt;
|Schema name of database with common settings. Database can be shared between multiple installations.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SMS service ===&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
|'''smsConnectUrl'''&lt;br /&gt;
|SMS Service gateway URL&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''smsErrorMessage'''&lt;br /&gt;
|SMS error message&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''smsMaxLength'''&lt;br /&gt;
|SMS maximum message length&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''smsParamMessage'''&lt;br /&gt;
|SMS parameter name: Message&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''smsParamNumber'''&lt;br /&gt;
|SMS parameter name: Number&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''smsPhoneCountryCode'''&lt;br /&gt;
|SMS phonenumber prefix&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''smsPhoneMinLength'''&lt;br /&gt;
|SMS phonenumber min length&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''smsTestMode'''&lt;br /&gt;
|SMS testmode active&lt;br /&gt;
|&lt;br /&gt;
|[[Email server setup]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''smsTestNumber'''&lt;br /&gt;
|SMS testmode number&lt;br /&gt;
|&lt;br /&gt;
|[[Email server setup]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Main menu ===&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''doInformationInMasterMenu'''&lt;br /&gt;
|Allow news articles&lt;br /&gt;
|Display relevant news articles and messages on main page&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''doMainMenuAccordion'''&lt;br /&gt;
|Use animated main menu&lt;br /&gt;
|Use slick JQuery dropdown accordion based on sections&lt;br /&gt;
|http://jqueryui.com/accordion/&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''doMainMenuCreateItems'''&lt;br /&gt;
|Display create link in main menu&lt;br /&gt;
|Display button to create records directly from the mail menu&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''doMainMenuDescription'''&lt;br /&gt;
|Display descriptions in main menu&lt;br /&gt;
|Display solution description in the main menu. Alternatively you can just leave the desciption empty.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''doMainMenuRecentItems'''&lt;br /&gt;
|Display recent items in main menu&lt;br /&gt;
|Display list of recent items accessed for each solution in the list. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''doMainMenuSections'''&lt;br /&gt;
|Divide menu into solution groups&lt;br /&gt;
|Split the main menu into sections.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''doViewListInMasterMenu'''&lt;br /&gt;
|Show user views in master menu&lt;br /&gt;
|Display list of shared and personal views in the main menu&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Special fields ===&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
|'''allowMultilookupInLists'''&lt;br /&gt;
|Allow multilookup in list views&lt;br /&gt;
|Minor performance impact&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''allowRecursiveDelete'''&lt;br /&gt;
|Allow recursive record deletion&lt;br /&gt;
|Allow deletion of parent items to propagate (configure each solution)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''allowRelationDuringCreation'''&lt;br /&gt;
|Create related records before save&lt;br /&gt;
|Allow users to create new child records before the parent is submitted / created.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''doSmartDateInput'''&lt;br /&gt;
|Smart sate input&lt;br /&gt;
|Use relative date inputs (example: -1 = yesterday)&lt;br /&gt;
|[[Policy/doSmartDateInput]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''lookupCheckKeysAllways'''&lt;br /&gt;
|Lookup allways check key values&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''lookupIgnoreErrors'''&lt;br /&gt;
|Lookup ignore errors&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''lookupIgnoreErrorsAjax'''&lt;br /&gt;
|Lookup ignore AJAX errors&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''lookupRecordSingleItemChange'''&lt;br /&gt;
|Display 1 record in lookup list changes&lt;br /&gt;
|Lookup list elements will only display 1 reference after being set the first time&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''medicoCloakPersonUniqueID'''&lt;br /&gt;
|Cloak person identification data (ex. CPR)&lt;br /&gt;
|Partially hide sensitive information when not in ITEM edit mode. Example 112233-4455 becomes 112233-XXXX.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''questionaireAutostart'''&lt;br /&gt;
|Questionaire autostart&lt;br /&gt;
|Make sure the user cannot navigate to anything else that the first question&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''questionaireLastButton'''&lt;br /&gt;
|Last button in questionaires&lt;br /&gt;
|Display a button to navigate to questionaires final page&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''questionaireLastResume'''&lt;br /&gt;
|Questionaire missing field summary&lt;br /&gt;
|Display missing fields on final page&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''questionaireProgress'''&lt;br /&gt;
|Questionaire progress&lt;br /&gt;
|Turns progress indication (bar/percentage/steps) on and off&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''questionaireProgressIcons'''&lt;br /&gt;
|Questionaire progress: Bar&lt;br /&gt;
|Display blue/grey arrows based on progress&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''questionaireProgressPercent'''&lt;br /&gt;
|Questionaire progress: Percentage&lt;br /&gt;
|Calculate the completion rate based on progress&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''questionaireProgressSteps'''&lt;br /&gt;
|Questionaire progress: Steps&lt;br /&gt;
|Display number of completed and leftover questions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Designer ===&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
|'''deletionBackup'''&lt;br /&gt;
|Deletion backups&lt;br /&gt;
|Perform backups before deleting solutions / fields&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''deletionBackupDefinition'''&lt;br /&gt;
|Deletion copy definition&lt;br /&gt;
|Copy metadata of solution before deletion&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''deletionBackupRecordLimit'''&lt;br /&gt;
|Deletion backup record limit&lt;br /&gt;
|Maximum number of records before tables are backup up before deletion&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''designerDisplayHelp'''&lt;br /&gt;
|Display help section in designer (this menu)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Layout ===&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|'''cssStylesheetBasic'''&lt;br /&gt;
|Include Basic stylesheet&lt;br /&gt;
|Disable if you want 100% style control&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''cssStylesheetJQuery'''&lt;br /&gt;
|Include JQuery stylesheet&lt;br /&gt;
|Disable if you want 100% style control&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|'''diagramLargeHeight'''&lt;br /&gt;
|Diagram height large&lt;br /&gt;
|Ex. Runchart details&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''diagramLargeWidth'''&lt;br /&gt;
|Diagram width large&lt;br /&gt;
|Ex. Runchart details&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''diagramSmallHeight'''&lt;br /&gt;
|Diagram height small&lt;br /&gt;
|Ex. Runchart overview&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''diagramSmallWidth'''&lt;br /&gt;
|Diagram width small&lt;br /&gt;
|Ex. Runchart overview&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''renderListGroupColumns'''&lt;br /&gt;
|Use grouping columns&lt;br /&gt;
|Group column i moved to the first in the list&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''renderListGroupHeaders'''&lt;br /&gt;
|Use grouping headers&lt;br /&gt;
|Alternative: Group values displayed as column&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''renderListSortColumns'''&lt;br /&gt;
|Use sorting columns&lt;br /&gt;
|Sort column i moved to the first in the list&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''standardHeightMemo'''&lt;br /&gt;
|Standard textarea Height&lt;br /&gt;
|Default height of TEXTAREA. Value can be overloaded in each field configuration.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''standardTextCropLength'''&lt;br /&gt;
|Text default crop length&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''standardWidthHeader'''&lt;br /&gt;
|Header standard width&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''standardWidthMemo'''&lt;br /&gt;
|Standard textarea Width&lt;br /&gt;
|Default width of TEXTAREA. Value can be overloaded in each field configuration.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''standardWidthText'''&lt;br /&gt;
|Standard inputbox size&lt;br /&gt;
|Standard INPUT field size. Value can be overloaded in each field configuration.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''windowDefaultHeight'''&lt;br /&gt;
|New window height (pixels)&lt;br /&gt;
|Standard height for IFRAME and popup windows&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''windowDefaultWidth'''&lt;br /&gt;
|New window width (pixels)&lt;br /&gt;
|Standard width for IFRAME and popup windows&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Rendering ===&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
|'''defaultHtmlDoctype'''&lt;br /&gt;
|HTML DOCTYPE&lt;br /&gt;
|First line of HTML response. Change if you need specific HTML compliance. System is natively xhtml 1.0 compliant.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''defaultHtmlEncoding'''&lt;br /&gt;
|General encoding for server&lt;br /&gt;
|Codepage displayed inside the html tag&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''defaultHtmlVersion'''&lt;br /&gt;
|HTML version number&lt;br /&gt;
|Version information displayed inside the html tag&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''doIncludeJQuery'''&lt;br /&gt;
|Include JQuery library&lt;br /&gt;
|Include JQuery in compability mode&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''doPageSelectViaJquery'''&lt;br /&gt;
|Page selectors via JQuery&lt;br /&gt;
|Use JS components for page selectors (default: static html)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''doIncludeScriptUserInfo'''&lt;br /&gt;
|Insert user info JS variables&lt;br /&gt;
|Inject user information in pages for use with custom JavaScripts&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''heatmapCellColorIcon'''&lt;br /&gt;
|Heatmap cell icon&lt;br /&gt;
|Special content inserted into all heatmap cells&lt;br /&gt;
|Moved to buttons/style in version 8945&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''heatmapInvertAxis'''&lt;br /&gt;
|Heatmap invert axis&lt;br /&gt;
|Display variables on Y axis and records on X axis&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''heatmapItemLinks'''&lt;br /&gt;
|Heatmap links to items&lt;br /&gt;
|Allow direct links from heatmap records&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''heatmapLegendMap'''&lt;br /&gt;
|Heatmap legend&lt;br /&gt;
|Display legend map of full variable names &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''pageselectorTableLayout'''&lt;br /&gt;
|Pageselector in tables&lt;br /&gt;
|Render pagesselectors as tables (normal = div)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''renderLinksCompliant'''&lt;br /&gt;
|Render links HTML 4.0 compliant&lt;br /&gt;
|Encode links to satisfy HTML4 specification&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''useGoogleChart'''&lt;br /&gt;
|Technology diagram: Google&lt;br /&gt;
|Alternative use ChartJS (not recommended any more)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''useNewChart'''&lt;br /&gt;
|Beta: Use new chart implementation&lt;br /&gt;
|&lt;br /&gt;
|[[Dashboard diagram widget configuration]]&lt;br /&gt;
|-&lt;br /&gt;
|'''diagramChartJSColors'''&lt;br /&gt;
|Colors for charts &lt;br /&gt;
|Set the colors used by ChartJS&lt;br /&gt;
|[[Dashboard diagram widget configuration]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''useScriptulous'''&lt;br /&gt;
|Technology script: Scriptulous&lt;br /&gt;
|Alternative use JQuery (recommended)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Staging ===&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
|'''buildTestLinesDefault'''&lt;br /&gt;
|Build test data default size&lt;br /&gt;
|Amount of lines copied from live system when building sets of test data&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''testSessionBackground'''&lt;br /&gt;
|Testsession use background&lt;br /&gt;
|Markup when in test mode:. Set background image with this URL.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''testSessionInlineText'''&lt;br /&gt;
|Testsession page information&lt;br /&gt;
|Markup when in test mode:. Put extra HTML specified in page.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''testSessionTitleChange'''&lt;br /&gt;
|Testsession use title&lt;br /&gt;
|Markup when in test mode:. Set browser title to this text.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Codeunit ===&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
|'''codeunitLoadExternal'''&lt;br /&gt;
|Load external codeunits&lt;br /&gt;
|Allow server to load JAR files outside webapplication WEB-INF folder&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''codeunitPathJarFile'''&lt;br /&gt;
|Filesystem folder for codeunits&lt;br /&gt;
|Folder that is considered safe to use for built-in class loader&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''codeunitPathJarLink'''&lt;br /&gt;
|Http URL folder for coedunits&lt;br /&gt;
|URL that is considered safe to use for built-in class loader&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''safeCreateAddGroup1'''&lt;br /&gt;
|Fullauto: Add group A&lt;br /&gt;
|Option for full auto user/exclusivegroup creation&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''safeCreateAddGroup2'''&lt;br /&gt;
|Fullauto: Add group B&lt;br /&gt;
|Option for full auto user/exclusivegroup creation&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''safeCreateIsDatahandler'''&lt;br /&gt;
|Fullauto: Assign DataHandler role&lt;br /&gt;
|Option for full auto user/exclusivegroup creation&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''safeCreateIsUserCreator'''&lt;br /&gt;
|Fullauto: Assign UserCreator role&lt;br /&gt;
|Option for full auto user/exclusivegroup creation&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Language / I18N ===&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
|'''languageGetFromBrowser'''&lt;br /&gt;
|Determine langauge from browser&lt;br /&gt;
|Pick up language settings from the browsers settings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''languageUseI18N'''&lt;br /&gt;
|Use Internationalization&lt;br /&gt;
|Allow solutions to take advantage of I18N. Configure each solution seperately.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== OLAP cubes ===&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
|'''olapDateDimensionYearEnd'''&lt;br /&gt;
|OLAP Time dimension last year&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''olapDateDimensionYearStart'''&lt;br /&gt;
|OLAP Time dimension first year&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''olapEngineFolderURL'''&lt;br /&gt;
|OLAP engine URL (optional)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''olapRebuildOnBoot'''&lt;br /&gt;
|Rebuild OLAP on boot&lt;br /&gt;
|Rewrite cube defintions and queries&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''olapUseSingleSignon'''&lt;br /&gt;
|OLAP Single Sign On&lt;br /&gt;
|Allow external users with security tokens (set OLAP folder to use dedicated server)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''allowRemoteOlapSchema'''&lt;br /&gt;
|OLAP schema service&lt;br /&gt;
|Activate schema delivery service (remote OLAP servers)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''olapSchemaPassword'''&lt;br /&gt;
|OLAP schema service password&lt;br /&gt;
|Experimental: Password for use with the schema delivery service (remote OLAP servers)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|'''olapJPivotEnabled'''&lt;br /&gt;
|JPivot OLAP enabled&lt;br /&gt;
|Is the internal OLAP engine enabled (JPivot)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''olapJpivotIncludeDefaultCubes'''&lt;br /&gt;
|Jpivot schema include default cubes&lt;br /&gt;
|Include autogenerated cubes with generated permissions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''olapSaikuEnabled'''&lt;br /&gt;
|Saiku OLAP enabled&lt;br /&gt;
|Experimental: Is the external OLAP engine enabled (saiku)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''olapSaikuIncludeCustomCubes'''&lt;br /&gt;
|Saiku schema include custom cubes&lt;br /&gt;
|Include custom cubes with default permissions&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|'''olapSaikuSettingWebapp'''&lt;br /&gt;
|Optional saiku web application name&lt;br /&gt;
|Default if value is left empty: &amp;lt;current webapp name&amp;gt; + &amp;quot;Saiku&amp;quot;&lt;br /&gt;
|Example: /SaikuWebapp&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''olapSaikuSettingServerUrl'''&lt;br /&gt;
|Optional saiku server URL&lt;br /&gt;
|Default if value is left empty: &amp;lt;same server&amp;gt;&lt;br /&gt;
|Example: &amp;lt;nowiki&amp;gt;http://myserver.com&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== REST webservice ===&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
|'''restActive'''&lt;br /&gt;
|REST is activated&lt;br /&gt;
|Option: Disable in web.xml&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''restAllowAnonoumous'''&lt;br /&gt;
|Annonumous REST sessions&lt;br /&gt;
|Webuser can interact if given permission&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''restAllowAnonoumousSchema'''&lt;br /&gt;
|Annonumous REST metadata&lt;br /&gt;
|Webuser can interact if given permission&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''restListPageSize'''&lt;br /&gt;
|REST list service page length&lt;br /&gt;
|Maximum mnuber of items displayed in a search&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''restStrongTypeRequest'''&lt;br /&gt;
|Strong types REST requests&lt;br /&gt;
|Use strong types in WADL&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''restStrongTypeResponse'''&lt;br /&gt;
|Strong types REST response&lt;br /&gt;
|Use strong types in XSD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Password policy ===&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
|'''passwordExpiry'''&lt;br /&gt;
|Password Expiry&lt;br /&gt;
|Allow passwords to expire according to value set in passwordExpiryAge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''passwordExpiryAge'''&lt;br /&gt;
|Password Expiry age&lt;br /&gt;
|Maximum age of passwords&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''passwordExpiryWarning''' &lt;br /&gt;
|Days to warn for password exipry&lt;br /&gt;
|Dars to start warning the user about their password expirng, as defined by passwordExpiryAge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''passwordReqCheckOnLogon'''&lt;br /&gt;
|Password check rules OnLogon&lt;br /&gt;
|Enforce password rules on all logons&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''passwordRequireLength'''&lt;br /&gt;
|Password require length&lt;br /&gt;
|Minimum total length of password&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''passwordRequireLowercase'''&lt;br /&gt;
|Password require Lowercase&lt;br /&gt;
|Content rule lowercase letters (ex. abc)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''passwordRequirements'''&lt;br /&gt;
|Password requirements&lt;br /&gt;
|Enforce password rules&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''passwordRequireNumbers'''&lt;br /&gt;
|Password require Numbers&lt;br /&gt;
|Content rule numbers (ex. 123)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''passwordRequireSpecial'''&lt;br /&gt;
|Password require Special&lt;br /&gt;
|Content rule special characters (ex. !#%&amp;amp;)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''passwordRequireUppercase'''&lt;br /&gt;
|Password require Uppercase&lt;br /&gt;
|Content rule uppercase letters (ex. ABC)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Statistics ===&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
|'''statisticsRegressionInfo'''&lt;br /&gt;
|Extra regression info&lt;br /&gt;
|Display advanvced regression correllation information&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''statisticsTargetPValue'''&lt;br /&gt;
|Target p-value for tests&lt;br /&gt;
|At what p-values are tests considered significant&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Satelite server handling ===&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''serverSateliteMaster'''&lt;br /&gt;
|Master: Server is MASTER&lt;br /&gt;
|The master server controls the satelite, and contains ALL data&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''sateliteDatabaseHost'''&lt;br /&gt;
|Master: Satelite DB hostname&lt;br /&gt;
|Connection information for satelite database (requires R/W access)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''sateliteDatabaseJDBC'''&lt;br /&gt;
|Master: Satelite DB database&lt;br /&gt;
|Connection information for satelite database (requires R/W access)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''sateliteDatabaseUser'''&lt;br /&gt;
|Master: Satelite DB username&lt;br /&gt;
|Connection information for satelite database (requires R/W access)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''sateliteDatabasePass'''&lt;br /&gt;
|Master: Satelite DB password&lt;br /&gt;
|Connection information for satelite database (requires R/W access)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''serverSateliteSlave'''&lt;br /&gt;
|Satelite: Server is SATELITE&lt;br /&gt;
|Warning: The satelite is controlled by the master server, and contains a SUBSET of data&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''allowRemoteCacheReset'''&lt;br /&gt;
|Satelite: Cache reset allowed via URL&lt;br /&gt;
|Allow anonoumous cache reset using only password&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''cacheResetNowPassword'''&lt;br /&gt;
|Satelite: Cache reset password&lt;br /&gt;
|Password to include in the URL for the cache reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FTP server ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
!Extra info&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''ftpDbConnection'''&lt;br /&gt;
|CrushFTP database Connection&lt;br /&gt;
|Connection string for CrushFTP authorization database. Example: ''jdbc:mysql://127.0.0.1/crushftp''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''ftpDbUsername'''&lt;br /&gt;
|CrushFTP database Username&lt;br /&gt;
|Username CrushFTP database&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''ftpDbPassword'''&lt;br /&gt;
|CrushFTP database Password&lt;br /&gt;
|Password CrushFTP database&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''ftpServerPortFtp'''&lt;br /&gt;
|CrushFTP port for FTP&lt;br /&gt;
|Default 21&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''ftpServerPortHttp'''&lt;br /&gt;
|CrushFTP port for HTTP&lt;br /&gt;
|Default 8081 for side by side installation&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Menu customization ===&lt;br /&gt;
&lt;br /&gt;
{|						&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
		!Extra info&lt;br /&gt;
		&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|	'''menuLayoutDefault'''&lt;br /&gt;
|Menu default layout name&lt;br /&gt;
|	Choose between: layoutClassic layoutRibbon layoutBlockLeft layoutBlockRight	&lt;br /&gt;
|		&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|	'''menuLayoutSelector'''&lt;br /&gt;
|Allow user to select menu layout&lt;br /&gt;
|	Layout position selectors will displayed in the main menu	&lt;br /&gt;
|		&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|	'''menuLevelAdvancedDefault'''&lt;br /&gt;
|Menu default advanced&lt;br /&gt;
|	Display all menu items by default	&lt;br /&gt;
|		&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|	'''menuLevelSelector'''&lt;br /&gt;
|Allow user to select menu level&lt;br /&gt;
|	Simple / advanced selectors will displayed in the main menu	&lt;br /&gt;
|		&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== WebDAV ===&lt;br /&gt;
&lt;br /&gt;
{|						&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
		!Extra info&lt;br /&gt;
		&lt;br /&gt;
|-&lt;br /&gt;
|	'''webdavMapDriveInMenu'''&lt;br /&gt;
|Map drive button&lt;br /&gt;
|	Add map network drive button in main menu	&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|	'''webdavSessionLifetime'''&lt;br /&gt;
|Session token lifetime&lt;br /&gt;
|	Age before session tokens expire	&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|	'''webdavSessionTokens'''&lt;br /&gt;
|Session token&lt;br /&gt;
|	Session tokens allows direct editing from UI with doing authentication again	&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|	'''webdavSessionTokensRevalidate'''&lt;br /&gt;
|Session token revalidate&lt;br /&gt;
|	Allow user to do basic authentication if a token expires or gets deregistered	&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|	'''webdavSupport'''&lt;br /&gt;
|Allow WebDAV&lt;br /&gt;
|	Activate WebDAV for files stored i solution records	&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Single Sign On ===&lt;br /&gt;
&lt;br /&gt;
{|						&lt;br /&gt;
!System name&lt;br /&gt;
!Display name&lt;br /&gt;
!Explantion&lt;br /&gt;
		!Extra info&lt;br /&gt;
		&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|	'''oauthLoginDisplay'''&lt;br /&gt;
|SSO from login page&lt;br /&gt;
|	Display SSO links on login page	&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|	'''oauthFacebookAllow'''&lt;br /&gt;
|Facebook SSO active&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|	'''oauthFacebookClient'''&lt;br /&gt;
|Facebook API username&lt;br /&gt;
|	https://developers.facebook.com/apps/	&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|	'''oauthFacebookSecret'''&lt;br /&gt;
|Facebook API password&lt;br /&gt;
|	https://developers.facebook.com/apps/	&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|	'''oauthGoogleAllow'''&lt;br /&gt;
|Google SSO active&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|	'''oauthGoogleClient'''&lt;br /&gt;
|Google API username&lt;br /&gt;
|	https://developer.linkedin.com/documents/authentication	&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|	'''oauthGoogleSecret'''&lt;br /&gt;
|Google API password&lt;br /&gt;
|	https://developer.linkedin.com/documents/authentication	&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|	'''oauthLinkedinAllow'''&lt;br /&gt;
|LinkedIn SSO active&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|	'''oauthLinkedinClient'''&lt;br /&gt;
|LinkedIn API username&lt;br /&gt;
|	https://console.developers.google.com/project/ts-oauth2-v1000/apiui/credential?clientType	&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|	'''oauthLinkedinSecret'''&lt;br /&gt;
|LinkedIn API password&lt;br /&gt;
|	https://console.developers.google.com/project/ts-oauth2-v1000/apiui/credential?clientType	&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Integration/Content_source&amp;diff=6819</id>
		<title>Integration/Content source</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Integration/Content_source&amp;diff=6819"/>
		<updated>2024-04-22T09:35:01Z</updated>

		<summary type="html">&lt;p&gt;Tvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;THIS ARTICLE IS UNDER DEVELOPMENT&lt;br /&gt;
&lt;br /&gt;
== Setting up a content source ==&lt;br /&gt;
Many parameters are straight forward &lt;br /&gt;
* Related solution&lt;br /&gt;
* Max cache age&lt;br /&gt;
* Is active&lt;br /&gt;
&lt;br /&gt;
=== Unique NAME ===&lt;br /&gt;
This is the calling name of the interface, that must be provided accessing the content service.&lt;br /&gt;
&lt;br /&gt;
Example for calling the view '''myview'''&lt;br /&gt;
   ... /cmsservice?q=myview&amp;amp; ...&lt;br /&gt;
&lt;br /&gt;
=== Query command  ===&lt;br /&gt;
Relevant commands include&lt;br /&gt;
*General records&lt;br /&gt;
** list: List of records&lt;br /&gt;
** show: Single record&lt;br /&gt;
* HTML formatted views&lt;br /&gt;
** heat: Heatmaps&lt;br /&gt;
** gant: Gant charts&lt;br /&gt;
** xtab: Pivot tables&lt;br /&gt;
** calm: Calendar&lt;br /&gt;
&lt;br /&gt;
=== Query parameters  ===&lt;br /&gt;
Parameters are provided without URL encoding&lt;br /&gt;
&lt;br /&gt;
  QUERY_FIELD_1=TITEL&amp;amp;QUERY_OPERATOR_1=8&amp;amp;QUERY_VALUE_1=Hello&amp;amp;QUERY_SHOWFIELD=TITEL StatusID DEADLINE&lt;br /&gt;
&lt;br /&gt;
Procedure for easy parameter setup&lt;br /&gt;
# Build views in frontend. &lt;br /&gt;
# Activate the link and copy the URL &lt;br /&gt;
# ´Remove unneeded parameters&lt;br /&gt;
#* command&lt;br /&gt;
#* SagID&lt;br /&gt;
#* QUERY_NEW&lt;br /&gt;
&lt;br /&gt;
=== Possible parameters ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
&lt;br /&gt;
| QUERY_FIELD_n&lt;br /&gt;
| Part of the search/filter. The field to filter by.&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
| QUERY_OPERATOR_n&lt;br /&gt;
| Part of the search/filter. The way to filter. Full list [[Dashboard widget configuration]]&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
| QUERY_VALUE_n&lt;br /&gt;
| Part of the search/filter. The value to filter by.&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
| QUERY_SHOWFIELD&lt;br /&gt;
| The fields to show in the list, separated by space.&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
| QUERY_PageSize&lt;br /&gt;
| Number of records to show pr page.&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
| QUERY_PageOffset&lt;br /&gt;
| The page number to show.&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
| QUERY_SortOrder&lt;br /&gt;
| The field to sort ascending by. Use either this or SortOrderDesc.&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
| QUERY_SortOrderDesc&lt;br /&gt;
| The field to sort descending by. Use either this or SortOrder.&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
| QUERY_Grouping&lt;br /&gt;
| The field to group records by.&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
| QUERY_GroupingDesc&lt;br /&gt;
| &lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Dynamic parameter  ===&lt;br /&gt;
This specifies a parameter that will be set by the value provided in the '''v''' parameter.&lt;br /&gt;
&lt;br /&gt;
Example: Using this interface&lt;br /&gt;
&lt;br /&gt;
  Unique NAME: mylist&lt;br /&gt;
  Query command: list&lt;br /&gt;
  Dynamic parameter: QUERY_PageOffset&lt;br /&gt;
&lt;br /&gt;
Making a call to &lt;br /&gt;
&lt;br /&gt;
  .../cmsinterface?q=mylist&amp;amp;v=2&lt;br /&gt;
&lt;br /&gt;
Will fetch a list of data and display page 2, because '''2''' is injected into '''QUERY_PageOffset'''. &lt;br /&gt;
&lt;br /&gt;
Parameters and values are injected directly into the http request.&lt;br /&gt;
&lt;br /&gt;
'''Note: Using the &amp;quot;show&amp;quot; command the variable will ALLWAYS get mapped to &amp;quot;DataID&amp;quot;'''&lt;br /&gt;
&lt;br /&gt;
== Using a content source ==&lt;br /&gt;
Calling the '''cmsinterface''' servlet will provide you with an overview on how to use it.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
   https://www.acme.com/TempusServa/cmsinterface&lt;br /&gt;
&lt;br /&gt;
The interface requires just the name of the source, but additional parameters can be provided.&lt;br /&gt;
&lt;br /&gt;
Parameters&lt;br /&gt;
* '''q''':  Name of the interface (required)&lt;br /&gt;
** This name must match &amp;quot;Unique NAME&amp;quot;&lt;br /&gt;
* '''f''':  Format of the result (optional)&lt;br /&gt;
** Valid values: html json xml&lt;br /&gt;
* '''v''':  Parameter for dynamic values (optional)&lt;br /&gt;
** The value will be substituted to the parameter in &amp;quot;Dynamic parameter&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
   https://www.acme.com/TempusServa/cmsinterface?q=mysource&amp;amp;f=json&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
THIS ARTICLE IS UNDER DEVELOPMENT&lt;br /&gt;
&lt;br /&gt;
=== Configuration caching ===&lt;br /&gt;
For performance reasons information about the content sources is kept cached.&lt;br /&gt;
&lt;br /&gt;
Adding or changing sources will propegate automatically : You will need to clear the system cache to pick the changes.&lt;br /&gt;
&lt;br /&gt;
=== Parameter encoding ===&lt;br /&gt;
Note that URL's copied from a browser address bar are often encoded in HTML format. &lt;br /&gt;
&lt;br /&gt;
The content will not decode values and request strings, so all encoded strings will fail.&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=API_v1.0&amp;diff=6818</id>
		<title>API v1.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=API_v1.0&amp;diff=6818"/>
		<updated>2024-04-22T09:21:28Z</updated>

		<summary type="html">&lt;p&gt;Tvi: Added limit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Sessions and security ==&lt;br /&gt;
&lt;br /&gt;
For interacting with Tempus Serva you need a session&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Session session = SessionFactory.getSession(this);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All sessions need to be terminated after use (releasing DB connections etc.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
session.close();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Constructing queryies ==&lt;br /&gt;
First of create a query object &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
SolutionQuery myQuery = session.getSolutionQuery( &amp;quot;mynewsolution&amp;quot; );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A query is built much like an SQL query by appending different fields to be SELECT'ed&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
myQuery.addSelectField(&amp;quot;MYNUMBER&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additionally WHERE components are added&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
myQuery.addWhereCriterion(&amp;quot;StatusID&amp;quot;, &amp;quot;In progress&amp;quot;);&lt;br /&gt;
myQuery.addWhereCriterion(&amp;quot;INCOME&amp;quot;, QueryPart.MORE, &amp;quot;22&amp;quot;);&lt;br /&gt;
myQuery.addWhereInList(&amp;quot;PARENTITEMS&amp;quot;, arrayListOfDataID);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Likewise operators can be added&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
myQuery.addWhereOR();&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
myQuery.addWhereAND();&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that lookup values etc. will be translated silently.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
myQuery.setSortOrder(&amp;quot;INCOME&amp;quot;, true);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Order records by income in descending order (true).&lt;br /&gt;
&lt;br /&gt;
By default the API limits solution queries to 100 rows. To increase this:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
myQuery.setLimit(100000);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;To do pagination use this:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
myQuery.setLimitAndOffset(100, 100);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Finally execute the query and return the results&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
SolutionQueryResultSet records = myQuery.executeQuery();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Retrieve data ==&lt;br /&gt;
Data are extracted from the query resultset using a relative reference to the record number &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i=0; i&amp;lt;resultSet.size(); i++ ) {&lt;br /&gt;
   String text = &amp;quot;Value nr &amp;quot; + i &amp;quot; = &amp;quot; + '''resultSet.getRecordValue( i, &amp;quot;MYVALUE&amp;quot; );'''&lt;br /&gt;
   System.out.println( text );  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Retriever methods exist for different datatypes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public int getReference( int recordNr )&lt;br /&gt;
public Hashtable &amp;lt;String,String&amp;gt; getRecordValueList( int recordNr )&lt;br /&gt;
public String getRecordValue( int recordNr, String fieldName )&lt;br /&gt;
public int getRecordValueInteger( int recordNr, String fieldName )&lt;br /&gt;
private SolutionRecord getRecord(int recordNr, boolean isWrite)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Change / create data ==&lt;br /&gt;
&lt;br /&gt;
  AWAITING REVIEW&lt;br /&gt;
&lt;br /&gt;
== Code example ==&lt;br /&gt;
&lt;br /&gt;
The following example shows how data is retrieved from af collection of templates and used to create a collection of records (with values copied from the template).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
String thisKeyToParentTemplate = &amp;quot;VALGTSKABELON&amp;quot;; //Entity&lt;br /&gt;
String templateSolutionName = &amp;quot;tasktemplate&amp;quot;; //Entity&lt;br /&gt;
ArrayList fieldsTemplate = new ArrayList(String [] {&amp;quot;TASK&amp;quot;,&amp;quot;DEADLINE&amp;quot;,&amp;quot;RESPONSIBLE&amp;quot;}); //list of fields&lt;br /&gt;
String templateKeyToParentTemplate = &amp;quot;SKABELON&amp;quot;; //Entity&lt;br /&gt;
String instanceSolutionName = &amp;quot;taskinstance&amp;quot;;&lt;br /&gt;
String instanceKeyToParent = &amp;quot;LIST&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now to the code ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int parentTemplateDataID = Parser.getInteger( c.fields.getElementByFieldName(thisKeyToParentTemplate).FieldValue );&lt;br /&gt;
        &lt;br /&gt;
Session session = SessionFactory.getSession(this);&lt;br /&gt;
try {&lt;br /&gt;
    //Get data&lt;br /&gt;
    SolutionQuery opsaetning = session.getSolutionQuery(templateSolutionName);&lt;br /&gt;
    for(int i=0; i&amp;lt;fieldsTemplate.size(); i++ )&lt;br /&gt;
        opsaetning.addSelectField(fieldsTemplate.get(i));&lt;br /&gt;
    opsaetning.addWhereCriterion(templateKeyToParentTemplate, parentTemplateDataID);&lt;br /&gt;
    SolutionQueryResultSet recordsToCopy = opsaetning.executeQuery();&lt;br /&gt;
    &lt;br /&gt;
    int recordCount = recordsToCopy.size();&lt;br /&gt;
    for( int i=0; i&amp;lt;recordCount; i++ ) {&lt;br /&gt;
        SolutionRecordNew instance = session.getSolutionRecordNew(instanceSolutionName);&lt;br /&gt;
        &lt;br /&gt;
        for(int fi=0; fi&amp;lt;fieldsTemplate.size(); fi++ ) {&lt;br /&gt;
            String fieldNameToCopy = fieldsTemplate.get(fi); &lt;br /&gt;
            String value = recordsToCopy.getRecordValue( i, fieldNameToCopy );&lt;br /&gt;
            instance.setValue( fieldNameToCopy, value );&lt;br /&gt;
        }&lt;br /&gt;
        instance.setValueInteger( instanceKeyToParent, c.DataID );&lt;br /&gt;
        if( ! Parser.isEmpty(instanceKeyToTemplate) )&lt;br /&gt;
        instance.setValueInteger( instanceKeyToTemplate, recordsToCopy.getReference(i) );&lt;br /&gt;
        &lt;br /&gt;
        instance.persistChanges();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
catch(Exception e) {&lt;br /&gt;
    e.printStackTrace();&lt;br /&gt;
}&lt;br /&gt;
catch (TsCloseObjectRequired ex) {}&lt;br /&gt;
finally {&lt;br /&gt;
    session.close();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Integration/REST&amp;diff=6817</id>
		<title>Integration/REST</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Integration/REST&amp;diff=6817"/>
		<updated>2024-04-22T09:15:17Z</updated>

		<summary type="html">&lt;p&gt;Tvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction to the REST interface ==&lt;br /&gt;
This article has not yet been fully converted to Wiki format.&lt;br /&gt;
&lt;br /&gt;
Please download the original article: [http://www.tempusserva.dk/articlebase/Tempus%20Serva%20REST%20interface.pdf Tempus Serva REST interface.pdf]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netbeans quick start guide ==&lt;br /&gt;
&lt;br /&gt;
Steps to create a simple interaction&lt;br /&gt;
# Add Webservice to ide (wadl import)&lt;br /&gt;
#* URL: [ServerName]/[ApplicationName]/rest/[SolutionSystemName].wadl&lt;br /&gt;
#* If import causes trouble: Download the wadl file&lt;br /&gt;
# Create a new project&lt;br /&gt;
## Add REST Client to project&lt;br /&gt;
##* Point to newly created webservice: [SolutionSystemName]&lt;br /&gt;
## Add JAXB bindings to project (use XSD schema)&lt;br /&gt;
##* URL: [ServerName]/[ApplicationName]/rest/[SolutionSystemName].xsd&lt;br /&gt;
##* If import causes trouble: Download the xsd file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Sample code for list view (BASIC athentication) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//Create session&lt;br /&gt;
FirmabilerClient session = new FirmabilerClient();&lt;br /&gt;
session.setUsernamePassword(&amp;quot;admin&amp;quot;, &amp;quot;password1223&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//Set search parameters (first parameter is a dummy)&lt;br /&gt;
FirmabilerList result = session.getList(FirmabilerList.class, &amp;quot;&amp;quot;, &amp;quot;TITEL=Kasper&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
//Retrieve data and print&lt;br /&gt;
List &amp;lt;FirmabilerListItem&amp;gt; list = result.getFirmabilerListItem();&lt;br /&gt;
for(int i=0; i&amp;lt;list.size(); i++) {&lt;br /&gt;
    //Handle single item&lt;br /&gt;
    FirmabilerListItem item = list.get(i);&lt;br /&gt;
    System.out.println( item.getDataID() + &amp;quot;\t&amp;quot; + item.getNUMMERPLADE() );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Close connection&lt;br /&gt;
session.close();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample code for list view (parameter credentials) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//Create session&lt;br /&gt;
FirmabilerClient session = new FirmabilerClient();&lt;br /&gt;
&lt;br /&gt;
//Login and set search parameters &lt;br /&gt;
FirmabilerList result = session.getList(FirmabilerList.class, &amp;quot;admin&amp;quot;, &amp;quot;password1223&amp;quot;, &amp;quot;TITEL=Kasper&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
//Retrieve data and print&lt;br /&gt;
List &amp;lt;FirmabilerListItem&amp;gt; list = result.getFirmabilerListItem();&lt;br /&gt;
for(int i=0; i&amp;lt;list.size(); i++) {&lt;br /&gt;
    //Handle single item&lt;br /&gt;
    FirmabilerListItem item = list.get(i);&lt;br /&gt;
    System.out.println( item.getDataID() + &amp;quot;\t&amp;quot; + item.getNUMMERPLADE() );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Close connection&lt;br /&gt;
session.close();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== URL structure ==&lt;br /&gt;
When logged in the following URLs are available without further authentication&lt;br /&gt;
&lt;br /&gt;
Data list operations: GET, PUT &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
https://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;solution&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Data item operations: GET, POST &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
https://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;solution&amp;gt;/&amp;lt;DataID&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note: The fowllowing file handling endpoints are scheduled for Q2 2020'''&lt;br /&gt;
&lt;br /&gt;
File list operations: GET, PUT &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
https://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;solution&amp;gt;/&amp;lt;DataID&amp;gt;/&amp;lt;FieldName&amp;gt;/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File item operations: GET &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
https://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;solution&amp;gt;/&amp;lt;DataID&amp;gt;/&amp;lt;FieldName&amp;gt;/&amp;lt;ID&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Query parameters ===&lt;br /&gt;
&lt;br /&gt;
The REST API supports the same filtering and search parameters, as the list-command [[Integration/Content_source]].&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Integration/REST&amp;diff=6816</id>
		<title>Integration/REST</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Integration/REST&amp;diff=6816"/>
		<updated>2024-04-22T09:04:55Z</updated>

		<summary type="html">&lt;p&gt;Tvi: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Integration/REST&amp;diff=6815</id>
		<title>Integration/REST</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Integration/REST&amp;diff=6815"/>
		<updated>2024-04-22T09:04:38Z</updated>

		<summary type="html">&lt;p&gt;Tvi: Replaced content with &amp;quot;  === Query parameters ===  The REST API supports the same filtering and search parameters, as the list-command Integration/Content_source.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
=== Query parameters ===&lt;br /&gt;
&lt;br /&gt;
The REST API supports the same filtering and search parameters, as the list-command [[Integration/Content_source]].&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Integration/REST&amp;diff=6814</id>
		<title>Integration/REST</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Integration/REST&amp;diff=6814"/>
		<updated>2024-04-22T09:04:14Z</updated>

		<summary type="html">&lt;p&gt;Tvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction to the REST interface ==&lt;br /&gt;
This article has not yet been fully converted to Wiki format.&lt;br /&gt;
&lt;br /&gt;
Please download the original article: [http://www.tempusserva.dk/articlebase/Tempus%20Serva%20REST%20interface.pdf Tempus Serva REST interface.pdf]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netbeans quick start guide ==&lt;br /&gt;
&lt;br /&gt;
Steps to create a simple interaction&lt;br /&gt;
# Add Webservice to ide (wadl import)&lt;br /&gt;
#* URL: [ServerName]/[ApplicationName]/rest/[SolutionSystemName].wadl&lt;br /&gt;
#* If import causes trouble: Download the wadl file&lt;br /&gt;
# Create a new project&lt;br /&gt;
## Add REST Client to project&lt;br /&gt;
##* Point to newly created webservice: [SolutionSystemName]&lt;br /&gt;
## Add JAXB bindings to project (use XSD schema)&lt;br /&gt;
##* URL: [ServerName]/[ApplicationName]/rest/[SolutionSystemName].xsd&lt;br /&gt;
##* If import causes trouble: Download the xsd file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Sample code for list view (BASIC athentication) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//Create session&lt;br /&gt;
FirmabilerClient session = new FirmabilerClient();&lt;br /&gt;
session.setUsernamePassword(&amp;quot;admin&amp;quot;, &amp;quot;password1223&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//Set search parameters (first parameter is a dummy)&lt;br /&gt;
FirmabilerList result = session.getList(FirmabilerList.class, &amp;quot;&amp;quot;, &amp;quot;TITEL=Kasper&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
//Retrieve data and print&lt;br /&gt;
List &amp;lt;FirmabilerListItem&amp;gt; list = result.getFirmabilerListItem();&lt;br /&gt;
for(int i=0; i&amp;lt;list.size(); i++) {&lt;br /&gt;
    //Handle single item&lt;br /&gt;
    FirmabilerListItem item = list.get(i);&lt;br /&gt;
    System.out.println( item.getDataID() + &amp;quot;\t&amp;quot; + item.getNUMMERPLADE() );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Close connection&lt;br /&gt;
session.close();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample code for list view (parameter credentials) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//Create session&lt;br /&gt;
FirmabilerClient session = new FirmabilerClient();&lt;br /&gt;
&lt;br /&gt;
//Login and set search parameters &lt;br /&gt;
FirmabilerList result = session.getList(FirmabilerList.class, &amp;quot;admin&amp;quot;, &amp;quot;password1223&amp;quot;, &amp;quot;TITEL=Kasper&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
//Retrieve data and print&lt;br /&gt;
List &amp;lt;FirmabilerListItem&amp;gt; list = result.getFirmabilerListItem();&lt;br /&gt;
for(int i=0; i&amp;lt;list.size(); i++) {&lt;br /&gt;
    //Handle single item&lt;br /&gt;
    FirmabilerListItem item = list.get(i);&lt;br /&gt;
    System.out.println( item.getDataID() + &amp;quot;\t&amp;quot; + item.getNUMMERPLADE() );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Close connection&lt;br /&gt;
session.close();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Query parameters ===&lt;br /&gt;
&lt;br /&gt;
The REST API supports the same filtering and search parameters, as the list-command [[Integration/Content_source]].&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Integration/REST&amp;diff=6813</id>
		<title>Integration/REST</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Integration/REST&amp;diff=6813"/>
		<updated>2024-04-22T09:03:39Z</updated>

		<summary type="html">&lt;p&gt;Tvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction to the REST interface ==&lt;br /&gt;
This article has not yet been fully converted to Wiki format.&lt;br /&gt;
&lt;br /&gt;
Please download the original article: [http://www.tempusserva.dk/articlebase/Tempus%20Serva%20REST%20interface.pdf Tempus Serva REST interface.pdf]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Sample code for list view (BASIC athentication) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//Create session&lt;br /&gt;
FirmabilerClient session = new FirmabilerClient();&lt;br /&gt;
session.setUsernamePassword(&amp;quot;admin&amp;quot;, &amp;quot;password1223&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//Set search parameters (first parameter is a dummy)&lt;br /&gt;
FirmabilerList result = session.getList(FirmabilerList.class, &amp;quot;&amp;quot;, &amp;quot;TITEL=Kasper&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
//Retrieve data and print&lt;br /&gt;
List &amp;lt;FirmabilerListItem&amp;gt; list = result.getFirmabilerListItem();&lt;br /&gt;
for(int i=0; i&amp;lt;list.size(); i++) {&lt;br /&gt;
    //Handle single item&lt;br /&gt;
    FirmabilerListItem item = list.get(i);&lt;br /&gt;
    System.out.println( item.getDataID() + &amp;quot;\t&amp;quot; + item.getNUMMERPLADE() );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Close connection&lt;br /&gt;
session.close();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample code for list view (parameter credentials) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//Create session&lt;br /&gt;
FirmabilerClient session = new FirmabilerClient();&lt;br /&gt;
&lt;br /&gt;
//Login and set search parameters &lt;br /&gt;
FirmabilerList result = session.getList(FirmabilerList.class, &amp;quot;admin&amp;quot;, &amp;quot;password1223&amp;quot;, &amp;quot;TITEL=Kasper&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
//Retrieve data and print&lt;br /&gt;
List &amp;lt;FirmabilerListItem&amp;gt; list = result.getFirmabilerListItem();&lt;br /&gt;
for(int i=0; i&amp;lt;list.size(); i++) {&lt;br /&gt;
    //Handle single item&lt;br /&gt;
    FirmabilerListItem item = list.get(i);&lt;br /&gt;
    System.out.println( item.getDataID() + &amp;quot;\t&amp;quot; + item.getNUMMERPLADE() );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Close connection&lt;br /&gt;
session.close();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== URL structure ==&lt;br /&gt;
When logged in the following URLs are available without further authentication&lt;br /&gt;
&lt;br /&gt;
Data list operations: GET, PUT &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
https://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;solution&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Data item operations: GET, POST &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
https://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;solution&amp;gt;/&amp;lt;DataID&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note: The fowllowing file handling endpoints are scheduled for Q2 2020'''&lt;br /&gt;
&lt;br /&gt;
File list operations: GET, PUT &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
https://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;solution&amp;gt;/&amp;lt;DataID&amp;gt;/&amp;lt;FieldName&amp;gt;/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File item operations: GET &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
https://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;solution&amp;gt;/&amp;lt;DataID&amp;gt;/&amp;lt;FieldName&amp;gt;/&amp;lt;ID&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Query parameters ===&lt;br /&gt;
&lt;br /&gt;
The REST API supports the same filtering and search parameters, as the list-command [[Integration/Content_source]].&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Integration/REST&amp;diff=6812</id>
		<title>Integration/REST</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Integration/REST&amp;diff=6812"/>
		<updated>2024-04-22T09:03:18Z</updated>

		<summary type="html">&lt;p&gt;Tvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction to the REST interface ==&lt;br /&gt;
This article has not yet been fully converted to Wiki format.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netbeans quick start guide ==&lt;br /&gt;
&lt;br /&gt;
Steps to create a simple interaction&lt;br /&gt;
# Add Webservice to ide (wadl import)&lt;br /&gt;
#* URL: [ServerName]/[ApplicationName]/rest/[SolutionSystemName].wadl&lt;br /&gt;
#* If import causes trouble: Download the wadl file&lt;br /&gt;
# Create a new project&lt;br /&gt;
## Add REST Client to project&lt;br /&gt;
##* Point to newly created webservice: [SolutionSystemName]&lt;br /&gt;
## Add JAXB bindings to project (use XSD schema)&lt;br /&gt;
##* URL: [ServerName]/[ApplicationName]/rest/[SolutionSystemName].xsd&lt;br /&gt;
##* If import causes trouble: Download the xsd file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Sample code for list view (BASIC athentication) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//Create session&lt;br /&gt;
FirmabilerClient session = new FirmabilerClient();&lt;br /&gt;
session.setUsernamePassword(&amp;quot;admin&amp;quot;, &amp;quot;password1223&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//Set search parameters (first parameter is a dummy)&lt;br /&gt;
FirmabilerList result = session.getList(FirmabilerList.class, &amp;quot;&amp;quot;, &amp;quot;TITEL=Kasper&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
//Retrieve data and print&lt;br /&gt;
List &amp;lt;FirmabilerListItem&amp;gt; list = result.getFirmabilerListItem();&lt;br /&gt;
for(int i=0; i&amp;lt;list.size(); i++) {&lt;br /&gt;
    //Handle single item&lt;br /&gt;
    FirmabilerListItem item = list.get(i);&lt;br /&gt;
    System.out.println( item.getDataID() + &amp;quot;\t&amp;quot; + item.getNUMMERPLADE() );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Close connection&lt;br /&gt;
session.close();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample code for list view (parameter credentials) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//Create session&lt;br /&gt;
FirmabilerClient session = new FirmabilerClient();&lt;br /&gt;
&lt;br /&gt;
//Login and set search parameters &lt;br /&gt;
FirmabilerList result = session.getList(FirmabilerList.class, &amp;quot;admin&amp;quot;, &amp;quot;password1223&amp;quot;, &amp;quot;TITEL=Kasper&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
//Retrieve data and print&lt;br /&gt;
List &amp;lt;FirmabilerListItem&amp;gt; list = result.getFirmabilerListItem();&lt;br /&gt;
for(int i=0; i&amp;lt;list.size(); i++) {&lt;br /&gt;
    //Handle single item&lt;br /&gt;
    FirmabilerListItem item = list.get(i);&lt;br /&gt;
    System.out.println( item.getDataID() + &amp;quot;\t&amp;quot; + item.getNUMMERPLADE() );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Close connection&lt;br /&gt;
session.close();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== URL structure ==&lt;br /&gt;
When logged in the following URLs are available without further authentication&lt;br /&gt;
&lt;br /&gt;
Data list operations: GET, PUT &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
https://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;solution&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Data item operations: GET, POST &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
https://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;solution&amp;gt;/&amp;lt;DataID&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note: The fowllowing file handling endpoints are scheduled for Q2 2020'''&lt;br /&gt;
&lt;br /&gt;
File list operations: GET, PUT &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
https://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;solution&amp;gt;/&amp;lt;DataID&amp;gt;/&amp;lt;FieldName&amp;gt;/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File item operations: GET &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
https://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;solution&amp;gt;/&amp;lt;DataID&amp;gt;/&amp;lt;FieldName&amp;gt;/&amp;lt;ID&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Query parameters ===&lt;br /&gt;
&lt;br /&gt;
The REST API supports the same filtering and search parameters, as the list-command [[Integration/Content_source]].&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Integration/REST&amp;diff=6811</id>
		<title>Integration/REST</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Integration/REST&amp;diff=6811"/>
		<updated>2024-04-22T08:51:48Z</updated>

		<summary type="html">&lt;p&gt;Tvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction to the REST interface ==&lt;br /&gt;
This article has not yet been fully converted to Wiki format.&lt;br /&gt;
&lt;br /&gt;
Please download the original article: [http://www.tempusserva.dk/articlebase/Tempus%20Serva%20REST%20interface.pdf Tempus Serva REST interface.pdf]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netbeans quick start guide ==&lt;br /&gt;
&lt;br /&gt;
Steps to create a simple interaction&lt;br /&gt;
# Add Webservice to ide (wadl import)&lt;br /&gt;
#* URL: [ServerName]/[ApplicationName]/rest/[SolutionSystemName].wadl&lt;br /&gt;
#* If import causes trouble: Download the wadl file&lt;br /&gt;
# Create a new project&lt;br /&gt;
## Add REST Client to project&lt;br /&gt;
##* Point to newly created webservice: [SolutionSystemName]&lt;br /&gt;
## Add JAXB bindings to project (use XSD schema)&lt;br /&gt;
##* URL: [ServerName]/[ApplicationName]/rest/[SolutionSystemName].xsd&lt;br /&gt;
##* If import causes trouble: Download the xsd file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Sample code for list view (BASIC athentication) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//Create session&lt;br /&gt;
FirmabilerClient session = new FirmabilerClient();&lt;br /&gt;
session.setUsernamePassword(&amp;quot;admin&amp;quot;, &amp;quot;password1223&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//Set search parameters (first parameter is a dummy)&lt;br /&gt;
FirmabilerList result = session.getList(FirmabilerList.class, &amp;quot;&amp;quot;, &amp;quot;TITEL=Kasper&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
//Retrieve data and print&lt;br /&gt;
List &amp;lt;FirmabilerListItem&amp;gt; list = result.getFirmabilerListItem();&lt;br /&gt;
for(int i=0; i&amp;lt;list.size(); i++) {&lt;br /&gt;
    //Handle single item&lt;br /&gt;
    FirmabilerListItem item = list.get(i);&lt;br /&gt;
    System.out.println( item.getDataID() + &amp;quot;\t&amp;quot; + item.getNUMMERPLADE() );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Close connection&lt;br /&gt;
session.close();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sample code for list view (parameter credentials) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//Create session&lt;br /&gt;
FirmabilerClient session = new FirmabilerClient();&lt;br /&gt;
&lt;br /&gt;
//Login and set search parameters &lt;br /&gt;
FirmabilerList result = session.getList(FirmabilerList.class, &amp;quot;admin&amp;quot;, &amp;quot;password1223&amp;quot;, &amp;quot;TITEL=Kasper&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
//Retrieve data and print&lt;br /&gt;
List &amp;lt;FirmabilerListItem&amp;gt; list = result.getFirmabilerListItem();&lt;br /&gt;
for(int i=0; i&amp;lt;list.size(); i++) {&lt;br /&gt;
    //Handle single item&lt;br /&gt;
    FirmabilerListItem item = list.get(i);&lt;br /&gt;
    System.out.println( item.getDataID() + &amp;quot;\t&amp;quot; + item.getNUMMERPLADE() );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Close connection&lt;br /&gt;
session.close();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== URL structure ==&lt;br /&gt;
When logged in the following URLs are available without further authentication&lt;br /&gt;
&lt;br /&gt;
Data list operations: GET, PUT &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
https://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;solution&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Data item operations: GET, POST &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
https://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;solution&amp;gt;/&amp;lt;DataID&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note: The fowllowing file handling endpoints are scheduled for Q2 2020'''&lt;br /&gt;
&lt;br /&gt;
File list operations: GET, PUT &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
https://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;solution&amp;gt;/&amp;lt;DataID&amp;gt;/&amp;lt;FieldName&amp;gt;/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File item operations: GET &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
https://&amp;lt;server&amp;gt;/&amp;lt;application&amp;gt;/rest/&amp;lt;solution&amp;gt;/&amp;lt;DataID&amp;gt;/&amp;lt;FieldName&amp;gt;/&amp;lt;ID&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Query parameters ===&lt;br /&gt;
&lt;br /&gt;
The REST API supports the same filtering and search parameters, as the list-command [[Integration/Content_source]].&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Status_actions&amp;diff=6802</id>
		<title>Status actions</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Status_actions&amp;diff=6802"/>
		<updated>2024-04-09T10:13:01Z</updated>

		<summary type="html">&lt;p&gt;Tvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Status actions ==&lt;br /&gt;
The actions are fired when a certain condition is meet AND the item is in the parent status&lt;br /&gt;
* An item enters the status&lt;br /&gt;
* An item leaves the status&lt;br /&gt;
* Time has passed while an item was in this status&lt;br /&gt;
&lt;br /&gt;
=== Timed actions ===&lt;br /&gt;
The time specified is relative to a value of the item&lt;br /&gt;
* Creation date&lt;br /&gt;
* Last change&lt;br /&gt;
* Last status update&lt;br /&gt;
* Dynamic '''date field'''&lt;br /&gt;
&lt;br /&gt;
Time is specified in days and can assume both negative and positive values.&lt;br /&gt;
&lt;br /&gt;
== Action types ==&lt;br /&gt;
&lt;br /&gt;
=== Notification ===&lt;br /&gt;
This action sends an email for users or groups.&lt;br /&gt;
&lt;br /&gt;
Various options for the target email exists, including&lt;br /&gt;
* Raw email: Static reference&lt;br /&gt;
* User: A specific user in the database&lt;br /&gt;
* Field value: The contents of another field&lt;br /&gt;
** Email&lt;br /&gt;
** Phone (sent by SMS)&lt;br /&gt;
** CPR nr (sent by eBoks)&lt;br /&gt;
&lt;br /&gt;
Different types of content can be includeded in the emails&lt;br /&gt;
* Data from the record&lt;br /&gt;
* Document generated using data of the record&lt;br /&gt;
* Links to the record (internal users)&lt;br /&gt;
* Interface tokens (external users)&lt;br /&gt;
&lt;br /&gt;
Read about special tags and formatting her [[Tutorial/Status_notifications]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Task create ===&lt;br /&gt;
This will dynamically create new tasks for any '[[FieldTask|Task list]]' fields found in the solution.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Codeunit ===&lt;br /&gt;
This action triggers the execution of a special codeunit: [[Codeunit/Statusaction]].&lt;br /&gt;
&lt;br /&gt;
Except for timed actions you would implement this inside a [[Codeunit/Formevents]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Export ===&lt;br /&gt;
The template is optional: If no template is found raw XML will be generated (FTP/mailto will not work).&lt;br /&gt;
&lt;br /&gt;
The following types of routing are supported for template based exports&lt;br /&gt;
* Local file system (optionally a mapped share)&lt;br /&gt;
* Remote FTP server&lt;br /&gt;
* Sent by email&lt;br /&gt;
&lt;br /&gt;
Please note that export actions are handled in seperate threads (performance), and there is no guarantee the operation succeds (tjeck the event log)&lt;br /&gt;
&lt;br /&gt;
==== Values from record ====&lt;br /&gt;
The target reference may contain field references in the {FIELD} format, that will be populated at runtime.&lt;br /&gt;
&lt;br /&gt;
Other special tags include&lt;br /&gt;
* {SagID}&lt;br /&gt;
* {DataID}&lt;br /&gt;
* {Resume}&lt;br /&gt;
* {NanoTime}&lt;br /&gt;
&lt;br /&gt;
Note that values in records are not filtered for illegal og troublesome characters (such as \ or . )&lt;br /&gt;
&lt;br /&gt;
==== Usage examples ====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!Routing&lt;br /&gt;
!Syntax&lt;br /&gt;
!Syntax example&lt;br /&gt;
|-&lt;br /&gt;
|File system&lt;br /&gt;
|''local filesystem path''&lt;br /&gt;
|c:\exportFolder\{GROUP}\{TITLE}.docx&lt;br /&gt;
|-&lt;br /&gt;
|FTP server&lt;br /&gt;
|''ftp location and connection string''&lt;br /&gt;
|ftp://username:password@acme.com/exportFolder&lt;br /&gt;
|-&lt;br /&gt;
|Send by mail&lt;br /&gt;
|&amp;quot;mailto:&amp;quot;+[email]+&amp;quot;:&amp;quot;+[subject]+&amp;quot;:&amp;quot;+[filename]&lt;br /&gt;
|mailto:boss@acme.com:Attention:your_2013_report&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Shift status ===&lt;br /&gt;
A status merely changes the status to a new value.&lt;br /&gt;
&lt;br /&gt;
This type of action only makes sense to use in timed actions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Webhook ===&lt;br /&gt;
This action performs an HTTP-request with parameters from the updated item and update the item based on the result.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Datapoint&lt;br /&gt;
!&lt;br /&gt;
!Type&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|url&lt;br /&gt;
|Required&lt;br /&gt;
|String&lt;br /&gt;
|The url that is to be called. This supports input of parameters from the item.&lt;br /&gt;
|-&lt;br /&gt;
|method&lt;br /&gt;
|Optional&lt;br /&gt;
|String&lt;br /&gt;
|The HTTP-method of  the call, one of: &amp;quot;POST&amp;quot;, &amp;quot;GET&amp;quot;, &amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;. Default: &amp;quot;GET&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|type&lt;br /&gt;
|Optional&lt;br /&gt;
|String&lt;br /&gt;
|The datatype of data returned, supported types: &amp;quot;json&amp;quot;, &amp;quot;raw&amp;quot; or &amp;quot;XML&amp;quot;. Default: &amp;quot;json&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|headers&lt;br /&gt;
|Optional&lt;br /&gt;
|Map&lt;br /&gt;
|A map of extra headers that should be set&lt;br /&gt;
|-&lt;br /&gt;
|params&lt;br /&gt;
|Optional&lt;br /&gt;
|Map&lt;br /&gt;
|Path parameters that should be set and send.&lt;br /&gt;
|-&lt;br /&gt;
|body&lt;br /&gt;
|Optional&lt;br /&gt;
|String&lt;br /&gt;
|A string that will be set and send. Not available for &amp;quot;GET&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|update&lt;br /&gt;
|Optional&lt;br /&gt;
|Map&lt;br /&gt;
|Fields that should be updated based on the data returned.&lt;br /&gt;
If type is &amp;quot;raw&amp;quot;, only the first item in this list will be updated, and it will be set to the entire response.&lt;br /&gt;
&lt;br /&gt;
If type is &amp;quot;json&amp;quot;, attributes with keys formatted as &amp;lt;code&amp;gt;[FIELDNAME]&amp;lt;/code&amp;gt; will be updated from the given key in the returned data.&lt;br /&gt;
|}&lt;br /&gt;
In &amp;lt;code&amp;gt;params&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt;, values formatted as &amp;lt;code&amp;gt;[FIELDNAME]&amp;lt;/code&amp;gt;, will be filled with data from the record.&lt;br /&gt;
&lt;br /&gt;
==== Sample ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;url&amp;quot;: &amp;quot;http://localhost:3001/users/1&amp;quot;,&lt;br /&gt;
  &amp;quot;method&amp;quot;: &amp;quot;PUT&amp;quot;,&lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;json&amp;quot;,&lt;br /&gt;
  &amp;quot;headers&amp;quot;: {&lt;br /&gt;
    &amp;quot;authorization&amp;quot;: &amp;quot;Bearer XYZ&amp;quot;,&lt;br /&gt;
    &amp;quot;Content-type&amp;quot;: &amp;quot;application/json&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;params&amp;quot;: {&lt;br /&gt;
    &amp;quot;param&amp;quot;: &amp;quot;DATA&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;body&amp;quot;: {&lt;br /&gt;
     &amp;quot;id&amp;quot;: 1,&lt;br /&gt;
     &amp;quot;name&amp;quot;: &amp;quot;[NAME]&amp;quot;,&lt;br /&gt;
     &amp;quot;email&amp;quot;: &amp;quot;john.doe@example.com&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;update&amp;quot;: {&lt;br /&gt;
    &amp;quot;[NAME]&amp;quot;: &amp;quot;name&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tvi</name></author>
	</entry>
</feed>