<?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=Nun</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=Nun"/>
	<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Special:Contributions/Nun"/>
	<updated>2026-04-11T20:40:00Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.0</generator>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Codeunit/Formevents&amp;diff=7296</id>
		<title>Codeunit/Formevents</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Codeunit/Formevents&amp;diff=7296"/>
		<updated>2025-06-25T14:55:13Z</updated>

		<summary type="html">&lt;p&gt;Nun: /* FILTER event hooks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Form events fires different actions during execution of a solution&lt;br /&gt;
&lt;br /&gt;
== Creating the codeunit ==&lt;br /&gt;
# Make sure that '''p2eShared.jar''' is included in the project&lt;br /&gt;
# Create a new class that extends&lt;br /&gt;
&lt;br /&gt;
    com.tsnocode.codeunit.CodeunitFormevents&lt;br /&gt;
&lt;br /&gt;
== LIST level event hooks ==&lt;br /&gt;
&lt;br /&gt;
    public String appendListPageHead() { return &amp;quot;&amp;quot;; }&lt;br /&gt;
    public String appendListPageFoot() { return &amp;quot;&amp;quot;; }&lt;br /&gt;
&lt;br /&gt;
    public void beforeSelectList() throws Exception {}    &lt;br /&gt;
    public void beforeRenderList() throws Exception {}       &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== LIST execution order ====&lt;br /&gt;
# '''beforeSelectList'''&lt;br /&gt;
# Gather form data from database&lt;br /&gt;
#* '''dataFilterActive &amp;gt; dataFilterHandler'''&lt;br /&gt;
#* '''listFilterActive &amp;gt; listFilterHandler'''&lt;br /&gt;
# '''beforeRenderList'''&lt;br /&gt;
# Return list to user&lt;br /&gt;
&lt;br /&gt;
== ITEM level event hooks ==&lt;br /&gt;
&lt;br /&gt;
    public String appendItemPageHead() { return &amp;quot;&amp;quot;; }    &lt;br /&gt;
    public String appendItemPageFoot() { return &amp;quot;&amp;quot;; }    &lt;br /&gt;
&lt;br /&gt;
    public void beforeSelectItem() throws Exception {}    &lt;br /&gt;
    public void beforeChangeItem() throws Exception {}&lt;br /&gt;
    public void beforeUpdateItem() throws Exception {}&lt;br /&gt;
    public void beforeRenderItem() throws Exception {}    &lt;br /&gt;
    public void afterUpdateItem() throws Exception {   return false; }&lt;br /&gt;
    &lt;br /&gt;
    public boolean afterUpdateRedirectActive() {   return false; }&lt;br /&gt;
    public String afterUpdateRedirectContent()   {   return null;    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== ITEM execution order: viewing data ====&lt;br /&gt;
# '''beforeSelectItem'''&lt;br /&gt;
# Gather form data from database&lt;br /&gt;
#* '''dataFilterActive &amp;gt; dataFilterHandler'''&lt;br /&gt;
#* '''itemFilterActive &amp;gt; itemFilterHandler'''&lt;br /&gt;
# '''beforeRenderItem'''&lt;br /&gt;
# Return form to user&lt;br /&gt;
&lt;br /&gt;
==== ITEM execution order: posting data ====&lt;br /&gt;
# '''beforeSelectItem'''&lt;br /&gt;
# Gather form data from database&lt;br /&gt;
# '''beforeChangeItem'''&lt;br /&gt;
# Update field values&lt;br /&gt;
# '''beforeUpdateItem'''&lt;br /&gt;
# Write changes to database&lt;br /&gt;
# '''afterUpdateItem'''&lt;br /&gt;
# if NO OTHER ACTION: &lt;br /&gt;
#* '''afterUpdateRedirectActive'''&lt;br /&gt;
#* if TRUE&lt;br /&gt;
#** '''afterUpdateRedirectContent'''&lt;br /&gt;
# Return content to user&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== FILTER event hooks ==&lt;br /&gt;
Filters will help you build customized permission schemes. They are called for '''both''' LIST and ITEM commands.&lt;br /&gt;
&lt;br /&gt;
  @Override&lt;br /&gt;
  protected boolean dataFilterActive() {&lt;br /&gt;
      return true;&lt;br /&gt;
  }&lt;br /&gt;
  @Override&lt;br /&gt;
  protected void dataFilterHandler(StringBuilder sql) {&lt;br /&gt;
      sql.append(&amp;quot; AND something&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
In some cases you only want the filter to trigger for '''either''' LIST or ITEM commands&lt;br /&gt;
&lt;br /&gt;
  itemFilterActive() {}&lt;br /&gt;
  itemFilterHandler(StringBuilder sql) {}&lt;br /&gt;
&lt;br /&gt;
  listFilterActive() {}&lt;br /&gt;
  listFilterHandler(StringBuilder sql) {}&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
The xxxFilterActive tells if the filter is active&lt;br /&gt;
&lt;br /&gt;
  boolean dataFilterActive() { return ! s.isAdministor(); }&lt;br /&gt;
&lt;br /&gt;
The xxxFilterHandler modifies the SQL used to fetch data&lt;br /&gt;
&lt;br /&gt;
 void dataFilterHandler(StringBuilder sql) { sql.append(&amp;quot; AND CATEGORY NOT IN (123,456,789)&amp;quot;); }&lt;br /&gt;
&lt;br /&gt;
== Event firing details ==&lt;br /&gt;
&lt;br /&gt;
==== Event firing global ====&lt;br /&gt;
The following events are ALLWAYS fired&lt;br /&gt;
* beforeSelectList&lt;br /&gt;
* beforeSelectItem&lt;br /&gt;
* beforeChangeItem&lt;br /&gt;
* beforeUpdateItem&lt;br /&gt;
* afterUpdateItem&lt;br /&gt;
&lt;br /&gt;
==== Event firing in UI (reserved for normal users) ====&lt;br /&gt;
The following events will NOT be fired during imports etc.&lt;br /&gt;
* appendListPageHead&lt;br /&gt;
* appendListPageFoot&lt;br /&gt;
* beforeRenderList&lt;br /&gt;
* appendItemPageHead&lt;br /&gt;
* appendItemPageFoot&lt;br /&gt;
* beforeRenderItem&lt;br /&gt;
&lt;br /&gt;
==== Event firing in UI depending on user actions ====&lt;br /&gt;
The following events are SOMETIMES be fired for normal users depending on navigation&lt;br /&gt;
* afterUpdateRedirectActive&lt;br /&gt;
** Not executed in SUBFORM mode&lt;br /&gt;
** Not executed in during imports etc.&lt;br /&gt;
* afterUpdateRedirectContent&lt;br /&gt;
** Depends on a TRUE result from afterUpdateRedirectActive()&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=JavaScript_functions_v1.0&amp;diff=7295</id>
		<title>JavaScript functions v1.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=JavaScript_functions_v1.0&amp;diff=7295"/>
		<updated>2025-06-25T14:50:07Z</updated>

		<summary type="html">&lt;p&gt;Nun: /* Get and set values */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;amp;nbsp;&lt;br /&gt;
= Code placement =&lt;br /&gt;
The following places can contain JS code&lt;br /&gt;
* Entity header&lt;br /&gt;
* Entity status&lt;br /&gt;
* JavaScript field&lt;br /&gt;
&lt;br /&gt;
Additionally HTML with inline script can be placed in&lt;br /&gt;
* Wrapper&lt;br /&gt;
* Template&lt;br /&gt;
&lt;br /&gt;
Finally expressions can be evaluated using&lt;br /&gt;
* Entity field dependency&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
= Builtin functions =&lt;br /&gt;
The following functions are only available for single item views (edit or show).&lt;br /&gt;
&lt;br /&gt;
== Get and set values ==&lt;br /&gt;
Display values are handled using standard getter and setters&lt;br /&gt;
* '''getValue(fieldName) '''&lt;br /&gt;
* '''setValue(fieldName,value) '''&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
let a = getValue(&amp;quot;NUMBER1&amp;quot;);&lt;br /&gt;
let b = getValue(&amp;quot;NUMBER2&amp;quot;);&lt;br /&gt;
setValue( &amp;quot;RESULT&amp;quot;, (a-b) );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For explicitly getting a value (or ID) use&lt;br /&gt;
* '''getDecimal(fieldName)'''&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
let recordId = getDecimal(&amp;quot;SELECTRECORD&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For explicitly getting a datetime use&lt;br /&gt;
* '''getFieldTime(fieldName)'''&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
const time = new Date(getFieldTime('DEADLINE'));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Toggling fields (5478+) ==&lt;br /&gt;
Note: Hide functions are NOT intended for denying access to data -it will only be hidden in the frontend, but is still accessible to savvy users.&lt;br /&gt;
&lt;br /&gt;
Fields can be  shown or hidden calling the fieldname&lt;br /&gt;
* '''hideField(fieldName)'''&lt;br /&gt;
* '''showField(fieldName)'''&lt;br /&gt;
&lt;br /&gt;
Examples&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
hideField(&amp;quot;USER&amp;quot;);&lt;br /&gt;
hideField(&amp;quot;StatusID&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dependent toggling ===&lt;br /&gt;
&lt;br /&gt;
Hiding and showing fields can be made dependent on classes in the TempusServaPage&lt;br /&gt;
* '''hideFieldForPageClass(fieldName,className)'''&lt;br /&gt;
* '''showFieldForPageClass(fieldName,className)'''&lt;br /&gt;
&lt;br /&gt;
Hiding and showing fields can be made dependent on items current status.&lt;br /&gt;
* '''hideFieldForStatusId(fieldName,statusId)'''&lt;br /&gt;
* '''showFieldForStatusId(fieldName,statusId)'''&lt;br /&gt;
&lt;br /&gt;
Hiding and showing fields can be made dependent on classes in the TempusServaPage AND items current status.&lt;br /&gt;
* '''hideFieldForPageClassAndStatusId(fieldName,className,statusId)'''&lt;br /&gt;
*'''showFieldForPageClassAndStatusId(fieldName,className,statusId)'''&lt;br /&gt;
&lt;br /&gt;
In case of advanced setup consider &amp;quot;hide for all first and show for some later&amp;quot;.&lt;br /&gt;
In this example NAME should only be displayed for a few status&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
hideField(&amp;quot;NAME&amp;quot;);   &lt;br /&gt;
showFieldForStatusId(&amp;quot;NAME&amp;quot;,1234);&lt;br /&gt;
showFieldForStatusId(&amp;quot;NAME&amp;quot;,1235);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Disclaimer ===&lt;br /&gt;
The functions are the equivilant of JQuery &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
$(&amp;quot;#VB_DATA_&amp;quot;+fieldName).parent().parent().hide();&lt;br /&gt;
$(&amp;quot;#VB_DATA_&amp;quot;+fieldName).parent().parent().hide();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means that fields are expected to be wrapped in TWO layers of html tags for the functions to work&lt;br /&gt;
&lt;br /&gt;
== Toggling status ==&lt;br /&gt;
A convenience method is planned for version 7800. Untill then you can use a Jquery expression.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
   $(&amp;quot;#DATA_StatusID option[value='123']&amp;quot;).remove();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Binding to events (6734+)==&lt;br /&gt;
The platform sends out events when a couple of events are performed. Code can be written to bind to these.&lt;br /&gt;
&lt;br /&gt;
===Events=== &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;hide-field&amp;lt;/code&amp;gt;, triggered when the platform hides a field (dependency or hideField-function)&lt;br /&gt;
*&amp;lt;code&amp;gt;show-field&amp;lt;/code&amp;gt;, triggered when the platform shows a field (dependency or showField-function)&lt;br /&gt;
&lt;br /&gt;
===How to bind ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
$(&amp;quot;tr&amp;quot;).bind(&amp;quot;hide-field&amp;quot;, function(e) {&lt;br /&gt;
    // Do stuff..&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Value dependencies==&lt;br /&gt;
Using lookup select boxes you can set up complex dependencies between values. The target field will be filtered when the page loads and on all changes to the filter field(s).&lt;br /&gt;
&lt;br /&gt;
===Single dependency===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
lookupValueFilterOnChange(fieldNameTarget, fieldNameSource, tripleArrayOfConditions);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var conditions = [&lt;br /&gt;
  [ TargetValue, SourceValue ... ],&lt;br /&gt;
];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var conditions = [&lt;br /&gt;
  [&amp;quot;Ding&amp;quot;, &amp;quot;Foo&amp;quot;],&lt;br /&gt;
  [&amp;quot;Dong&amp;quot;, &amp;quot;Foo&amp;quot;],&lt;br /&gt;
  [&amp;quot;Ding&amp;quot;, &amp;quot;Bar&amp;quot;],&lt;br /&gt;
];&lt;br /&gt;
lookupValueFilterOnChange(&amp;quot;LOOKUP&amp;quot;, &amp;quot;FILTER&amp;quot;, conditions);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above &amp;quot;Ding&amp;quot; and &amp;quot;Dong&amp;quot; will be available to select when  FILTER = &amp;quot;Foo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Double dependency===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
lookupValueFilterDoubleOnChange(fieldNameTarget, fieldNameSource1, fieldNameSource2, tripleArrayOfConditions);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var conditions = [&lt;br /&gt;
  [&amp;quot;Ding&amp;quot;, &amp;quot;Foo&amp;quot;, &amp;quot;Cat&amp;quot;],&lt;br /&gt;
  [&amp;quot;Dong&amp;quot;, &amp;quot;Foo&amp;quot;, &amp;quot;Dog&amp;quot;],&lt;br /&gt;
  [&amp;quot;Ding&amp;quot;, &amp;quot;Bar&amp;quot;, &amp;quot;Cat&amp;quot;],&lt;br /&gt;
  [&amp;quot;Dong&amp;quot;, &amp;quot;Bar&amp;quot;, &amp;quot;Fish&amp;quot;],&lt;br /&gt;
];&lt;br /&gt;
lookupValueFilterDoubleOnChange(&amp;quot;LOOKUP&amp;quot;, &amp;quot;FILTERA&amp;quot;, &amp;quot;FILTERB&amp;quot;, conditions);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above &amp;quot;Ding&amp;quot; will be available to select when either : &lt;br /&gt;
*FILTERA = &amp;quot;Foo&amp;quot;  -AND-  FilterB = &amp;quot;Cat&amp;quot;&lt;br /&gt;
*FILTERA = &amp;quot;Bar&amp;quot;  -AND-  FilterB = &amp;quot;Cat&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Value triggers==&lt;br /&gt;
Value triggers will make things happen when a field changes. Multiple triggers can be assigned to the same field.&lt;br /&gt;
&lt;br /&gt;
*'''setValueOnChange(sourceName,targetName,targetValue)'''&lt;br /&gt;
* '''setValueOnSetValue(sourceName,sourceValue,targetName,targetValue)'''&lt;br /&gt;
&lt;br /&gt;
Sets the value if another field is changed. Optionally only if a ceratain value is selected (sourceValue) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
setValueOnChange(&amp;quot;CATEGORY&amp;quot;,&amp;quot;Silver&amp;quot;,&amp;quot;StatusID&amp;quot;,&amp;quot;Customer changed&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''warningOnChange(sourceName,message)'''&lt;br /&gt;
*'''warningOnSetValue(sourceName,sourceValue,message)'''&lt;br /&gt;
&lt;br /&gt;
Display a warning to a user if another field is changed. Optionally only if a ceratain value is selected (sourceValue) &lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Value lookups==&lt;br /&gt;
Value lookups will copy values from other records to the current one. The normal usecase is records referring other records via parent references.&lt;br /&gt;
&lt;br /&gt;
*'''getValueFromLookup(SourceSagID,SourceDataID,FieldNameSource)'''&lt;br /&gt;
&lt;br /&gt;
*'''setValueFromLookup(SourceSagID,SourceDataID,FieldNameSource,FieldNameTarget)'''&lt;br /&gt;
&lt;br /&gt;
The function will &lt;br /&gt;
#Make a call to ?SagID=''[SagID]''&amp;amp;DataID=''[DataID]''&amp;amp;command=show&lt;br /&gt;
#Pickup the value in the page at #VB_DATA_''[FieldNameSource]''&lt;br /&gt;
#Insert the value in the local field ''FieldNameTarget''&lt;br /&gt;
&lt;br /&gt;
The DataID on the remote record can be picked up automatically by specifying FieldNameTrigger. Note this will only work as long as the trigger field is in editable and the value is changed.&lt;br /&gt;
&lt;br /&gt;
*'''setValueFromLookupTriggered(FieldNameTrigger,SourceSagID,FieldNameSource,FieldNameTarget)'''&lt;br /&gt;
&lt;br /&gt;
The function will  &lt;br /&gt;
#E´xtract the DataID form the field ''FieldNameTrigger''&lt;br /&gt;
# Same as above&lt;br /&gt;
&lt;br /&gt;
== Named queries ==&lt;br /&gt;
You can add peprared statements configurations and make paramterized class to them&lt;br /&gt;
&lt;br /&gt;
*'''lookupNamedQuery(query,value)'''&lt;br /&gt;
&lt;br /&gt;
The query executed in the backend, must be stored under the configuration named: &amp;quot;NamedQueryLookup.&amp;quot; + query&lt;br /&gt;
&lt;br /&gt;
The value will be inserted into the ? parameter an escaped properly&lt;br /&gt;
&lt;br /&gt;
  SELECT CVR FROM data_company WHERE NAME = ?&lt;br /&gt;
&lt;br /&gt;
If call is made from an entity the Query will be stored in either&lt;br /&gt;
* Entity configuration (if SagID on caller page is present in URL)&lt;br /&gt;
* System configuration&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
In the following example we want to look up a phone number from an email value in the entity 'company'.&lt;br /&gt;
&lt;br /&gt;
==== Client code ====&lt;br /&gt;
Somewhere in a Javascript the following code is found&lt;br /&gt;
&lt;br /&gt;
  var email = getValue(&amp;quot;EMAIL&amp;quot;);&lt;br /&gt;
  setValue( &amp;quot;PHONE&amp;quot;,&lt;br /&gt;
     '''lookupNamedQuery(&amp;quot;FindPhoneFromEmail&amp;quot;,email)'''&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
==== Server code ====&lt;br /&gt;
In the configuration '''NamedQueryLookup.FindPhoneFromEmail''' the following SQL is stored&lt;br /&gt;
&lt;br /&gt;
   SELECT COMPANYPHONE FROM data_company WHERE COMPANYEMAIL = ?&lt;br /&gt;
&lt;br /&gt;
==Inspect command and users==&lt;br /&gt;
The currect command can be examined using&lt;br /&gt;
*'''isCommandNew()'''&lt;br /&gt;
*'''isCommandEdit()'''&lt;br /&gt;
*'''isCommandList()'''&lt;br /&gt;
&lt;br /&gt;
Note that commands are allways added as a class to the #TempusServaPage element&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;div id=&amp;quot;TempusServaPage&amp;quot; class=&amp;quot;TempusServaPage listCommand da_DK&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User types can be determined using&lt;br /&gt;
&lt;br /&gt;
* '''isUserAdmin()'''&lt;br /&gt;
*'''isUserExternal()'''&lt;br /&gt;
*'''isUserNormal()'''&lt;br /&gt;
* '''isUserExclusive()''' (from version 6248)&lt;br /&gt;
&lt;br /&gt;
Note that special roles are allways added as a class to the #TempusServaPage element&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;div id=&amp;quot;TempusServaPage&amp;quot; class=&amp;quot;TempusServaPage IsAdministrator listCommand da_DK&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This allows for custom CSS for special roles&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
   .IsAdministrator h1 { color: red; }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Other functions==&lt;br /&gt;
&lt;br /&gt;
=== selectSingleOption(fieldName) ===&lt;br /&gt;
Will set a value if only one option is avaiable in a select box.&lt;br /&gt;
&lt;br /&gt;
=== warnDateAfterOtherDate( dateA, dateZ, message ) ===&lt;br /&gt;
Alerts the user via a popup, if two dates are not after each other. Both date changes triggers the test.&lt;br /&gt;
&lt;br /&gt;
=== disableErrorCountInTitle() and enableErrorCountInTitle() (6734+) ===&lt;br /&gt;
Will disable/enable displaying of numbers of errors i the page-title. Default is enabled&lt;br /&gt;
&lt;br /&gt;
=== changeFieldToShow(fieldName) ===&lt;br /&gt;
Remove input and select boxes and replace them with the value in the field&lt;br /&gt;
&lt;br /&gt;
=== showMoreTableRows(fieldName,rowsShown,buttonLabel) ===&lt;br /&gt;
Makes a nested table shorter by hiding lines &amp;gt; rowsShown. Hidden rows can be shown with the button below the table.&lt;br /&gt;
&lt;br /&gt;
=Control variables=&lt;br /&gt;
TS uses a number of special variables to control the behavior of the frontend. These variables can be changed anywhere.&lt;br /&gt;
&lt;br /&gt;
===Opening new windows===&lt;br /&gt;
Window default sizes are controlled by the following variables&lt;br /&gt;
*'''tsOpenWindowHeight''' = 680;&lt;br /&gt;
*'''tsOpenWindowWidth'''  = 820;&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
===Dependency hiding fields ===&lt;br /&gt;
'''hideTableRowsForElements''' is by default true. &lt;br /&gt;
&lt;br /&gt;
Set to false if template structure is only in a single level.&lt;br /&gt;
*true: Hide two parent nodes when hiding fields&lt;br /&gt;
*false: Hide single parent node when hiding fields&lt;br /&gt;
&lt;br /&gt;
Example of 2 level template (default)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
    &amp;lt;input ..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example of 1 level template (special cases)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
  &amp;lt;input ..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
=Other sources=&lt;br /&gt;
&lt;br /&gt;
*[[JQUERY / SCRIPT CHEATSHEET| Readonly radiobuttons, copy text in field, build selectbox from service ...]]&lt;br /&gt;
*[[HACKING DEPENDENT VALUES| Handling dependent lookup values (showing all elements etc.)]]&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Developing_codeunits&amp;diff=7264</id>
		<title>Developing codeunits</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Developing_codeunits&amp;diff=7264"/>
		<updated>2025-04-08T12:47:24Z</updated>

		<summary type="html">&lt;p&gt;Nun: uddybning af beskrivelser og stavevejl.&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 set up 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 buildt 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 your code to the local Tomcat instance do the following:&lt;br /&gt;
&lt;br /&gt;
# Open Netbeans&lt;br /&gt;
#Build the project (right-click the project 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) or go back to the app in firefox and select Administrator -&amp;gt; Services -&amp;gt; Cache control -&amp;gt; Cache clear&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 your code by selecting the line number 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>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=How_to_use_DumpFilesToDiscCLI&amp;diff=6785</id>
		<title>How to use DumpFilesToDiscCLI</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=How_to_use_DumpFilesToDiscCLI&amp;diff=6785"/>
		<updated>2024-02-12T10:49:20Z</updated>

		<summary type="html">&lt;p&gt;Nun: updated for running non-localhost&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DumpFilesToDiscCLI is a tool to run the DumpFilesToDisc codeunit directly from a Command Line Interface such as Windows Powershell. To run the command, you must have JDK 1.8 (Or probably newer) installed and set up. You must also have access to the database server you are connecting to in the case that you are not running from localhost. From here you must do the following steps:&lt;br /&gt;
&lt;br /&gt;
# Get war file from www.tempusserva.dk/install/nightly/TempusServa.war&lt;br /&gt;
# Rename file ending to .zip&lt;br /&gt;
# Unzip the file&lt;br /&gt;
# Navigate to \TempusServa\WEB-INF\lib in zip file in a CLI such as Powershell&lt;br /&gt;
# Run the following command, but replace the placeholder variables, including  the &amp;lt;&amp;gt; characters with appropriate values for the given application you are running the tool on:&lt;br /&gt;
&lt;br /&gt;
java -cp &amp;quot;./*&amp;quot; com.tsnocode.codeunit.common.DumpFilesToDiscCLI &amp;lt;live db name&amp;gt; &amp;lt;db username&amp;gt; &amp;lt;db password&amp;gt; &amp;lt;Database server IP Address&amp;gt; &amp;lt;entity db name&amp;gt; &amp;lt;category field db name *optional*&amp;gt; &amp;lt;category entity db name *optional*&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice that all names must be the database names, not the front-end names. The database names of entities and fields can be found in the back-end in parentheses on the given entity. Depending on the number of files to be dumped, this tool may take a little while to run.&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=How_to_use_DumpFilesToDiscCLI&amp;diff=6753</id>
		<title>How to use DumpFilesToDiscCLI</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=How_to_use_DumpFilesToDiscCLI&amp;diff=6753"/>
		<updated>2024-02-06T14:24:29Z</updated>

		<summary type="html">&lt;p&gt;Nun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DumpFilesToDiscCLI is a tool to run the DumpFilesToDisc codeunit directly from a Command Line Interface such as Windows Powershell. To run the command, you must have JDK 1.8 (Or probably newer) installed and set up. From here you must do the following steps:&lt;br /&gt;
&lt;br /&gt;
# Get war file from www.tempusserva.dk/install/nightly/TempusServa.war&lt;br /&gt;
# Rename file ending to .zip&lt;br /&gt;
# Unzip the file&lt;br /&gt;
# Navigate to \TempusServa\WEB-INF\lib in zip file in a CLI such as Powershell&lt;br /&gt;
# Run the following command, but replace the placeholder variables, including  the &amp;lt;&amp;gt; characters with appropriate values for the given application you are running the tool on:&lt;br /&gt;
&lt;br /&gt;
java -cp &amp;quot;./*&amp;quot; com.tsnocode.codeunit.common.DumpFilesToDiscCLI &amp;lt;live db name&amp;gt; &amp;lt;db username&amp;gt; &amp;lt;db password&amp;gt; &amp;lt;entity db name&amp;gt; &amp;lt;category field db name *optional*&amp;gt; &amp;lt;category entity db name *optional*&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice that all names must be the database names, not the front-end names. The database names of entities and fields can be found in the back-end in parentheses on the given entity. Depending on the number of files to be dumped, this tool may take a little while to run.&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=How_to_use_DumpFilesToDiscCLI&amp;diff=6752</id>
		<title>How to use DumpFilesToDiscCLI</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=How_to_use_DumpFilesToDiscCLI&amp;diff=6752"/>
		<updated>2024-02-06T09:15:06Z</updated>

		<summary type="html">&lt;p&gt;Nun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DumpFilesToDiscCLI is a tool to run the DumpFilesToDisc codeunit directly from a Command Line Interface such as Windows Powershell. To run the command, you must have JDK 1.8 (Or probably newer) installed and set up. From here you must do the following steps:&lt;br /&gt;
&lt;br /&gt;
# Get war file from www.tempusserva.dk/install/nightly/TempusServa.war&lt;br /&gt;
# Rename file ending to .zip&lt;br /&gt;
# Unzip the file&lt;br /&gt;
# Navigate to \TempusServa\WEB-INF\lib in zip file in a CLI such as Powershell&lt;br /&gt;
# Run the following command, but replace the placeholder variables, including  the &amp;lt;&amp;gt; characters with appropriate values for the given application you are running the tool on:&lt;br /&gt;
&lt;br /&gt;
java -cp &amp;quot;./*&amp;quot; com.tsnocode.codeunit.common.DumpFilesToDiscCLI &amp;lt;live db name&amp;gt; &amp;lt;db username&amp;gt; &amp;lt;db password&amp;gt; &amp;lt;entity db name&amp;gt; &amp;lt;category field db name *optional*&amp;gt; &amp;lt;category entity db name *optional*&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice that all names must be the database names, not the front-end names. The database names of entities and fields can be found in the back-end in parentheses on the given entity. Depending on the number of files to be dumped, this tool may take a long time to run.&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=How_to_use_DumpFilesToDiscCLI&amp;diff=6751</id>
		<title>How to use DumpFilesToDiscCLI</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=How_to_use_DumpFilesToDiscCLI&amp;diff=6751"/>
		<updated>2024-02-06T09:14:00Z</updated>

		<summary type="html">&lt;p&gt;Nun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DumpFilesToDiscCLI is a tool to run the DumpFilesToDisc codeunit directly from a Command Line Interface such as Windows Powershell. To run the command, you must have JDK 1.8 (Or probably newer) installed and set up. From here you must do the following steps:&lt;br /&gt;
&lt;br /&gt;
# Get war file from www.tempusserva.dk/install/nightly/TempusServa.war&lt;br /&gt;
# Rename file ending to .zip&lt;br /&gt;
# Unzip the file&lt;br /&gt;
# Navigate to \TempusServa\WEB-INF\lib in zip file in a CLI such as Powershell&lt;br /&gt;
# Run the following command, but replace the placeholder variables, including  the &amp;lt;&amp;gt; characters with appropriate values for the given application you are running the tool on:&lt;br /&gt;
&lt;br /&gt;
java -cp &amp;quot;./*&amp;quot; com.tsnocode.codeunit.common.DumpFilesToDiscCLI &amp;lt;live db name&amp;gt; &amp;lt;db username&amp;gt; &amp;lt;db password&amp;gt; &amp;lt;entity db name&amp;gt; &amp;lt;category field db name *optional*&amp;gt; &amp;lt;category entity db name *optional*&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice that all names must be the database names, not the front-end names. The database names of entities and fields can be found in the back-end in parentheses on the given entity.&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=How_to_use_DumpFilesToDiscCLI&amp;diff=6750</id>
		<title>How to use DumpFilesToDiscCLI</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=How_to_use_DumpFilesToDiscCLI&amp;diff=6750"/>
		<updated>2024-02-06T08:16:53Z</updated>

		<summary type="html">&lt;p&gt;Nun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DumpFilesToDiscCLI is a tool to run the DumpFilesToDisc codeunit directly from a Command Line Interface such as Windows Powershell. To run the command, you must have JDK 1.8 (Or probably newer) installed and set up. From here you must do the following steps:&lt;br /&gt;
&lt;br /&gt;
# Get war file from www.tempusserva.dk/install/nightly/TempusServa.war&lt;br /&gt;
# Rename file ending to .zip&lt;br /&gt;
# Unzip the file&lt;br /&gt;
# Navigate to \TempusServa\WEB-INF\lib in zip file in a CLI such as Powershell&lt;br /&gt;
# Run the following command, but replace the placeholder variables, including  the &amp;lt;&amp;gt; characters with appropriate values for the given application you are running the tool on:&lt;br /&gt;
&lt;br /&gt;
java -cp &amp;quot;./*&amp;quot; com.tsnocode.codeunit.common.DumpFilesToDiscCLI &amp;lt;live db name&amp;gt; &amp;lt;db username&amp;gt; &amp;lt;db password&amp;gt; &amp;lt;solution&amp;gt; &amp;lt;categoryField *optional*&amp;gt; &amp;lt;categoryEntity *optional*&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=How_to_use_DumpFilesToDiscCLI&amp;diff=6749</id>
		<title>How to use DumpFilesToDiscCLI</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=How_to_use_DumpFilesToDiscCLI&amp;diff=6749"/>
		<updated>2024-02-05T14:35:32Z</updated>

		<summary type="html">&lt;p&gt;Nun: prettier&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DumpFilesToDiscCLI is a tool to run the DumpFilesToDisc codeunit directly from a Command Line Interface such as Windows Powershell. To run the command, you must have JDK 1.8 (Or probably newer) installed and set up. From here you must do the following steps:&lt;br /&gt;
&lt;br /&gt;
# Get war file with www.tempusserva.dk/install/nightly/TempusServa.war&lt;br /&gt;
# Rename file ending to .zip&lt;br /&gt;
# Unzip the file&lt;br /&gt;
# Navigate to \TempusServa\WEB-INF\lib in zip file in a CLI such as Powershell&lt;br /&gt;
# Run the following command, but replace the placeholder variables, including  the &amp;lt;&amp;gt; characters with appropriate values for the given application you are running the tool on:&lt;br /&gt;
&lt;br /&gt;
java -cp &amp;quot;./*&amp;quot; com.tsnocode.codeunit.common.DumpFilesToDiscCLI &amp;lt;live db name&amp;gt; &amp;lt;db username&amp;gt; &amp;lt;db password&amp;gt; &amp;lt;solution&amp;gt; &amp;lt;sqlCategoryKey *optional*&amp;gt; &amp;lt;sqlCategoryEntity *optional*&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=How_to_use_DumpFilesToDiscCLI&amp;diff=6748</id>
		<title>How to use DumpFilesToDiscCLI</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=How_to_use_DumpFilesToDiscCLI&amp;diff=6748"/>
		<updated>2024-02-05T14:31:29Z</updated>

		<summary type="html">&lt;p&gt;Nun: Created page with &amp;quot;DumpFilesToDiscCLI is a tool to run the DumpFilesToDisc codeunit directly from a Command Line Interface such as Windows Powershell. To run the command, you must have JDK 1.8 (Or probably newer) installed and set up. From here you must do the following steps:  1. get war file with www.tempusserva.dk/install/nightly/TempusServa.war 2. rename file ending to .zip 3. unzip the file 4. navigate to \TempusServa\WEB-INF\lib in zip file in a CLI 5. run the following command, but...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DumpFilesToDiscCLI is a tool to run the DumpFilesToDisc codeunit directly from a Command Line Interface such as Windows Powershell. To run the command, you must have JDK 1.8 (Or probably newer) installed and set up. From here you must do the following steps:&lt;br /&gt;
&lt;br /&gt;
1. get war file with www.tempusserva.dk/install/nightly/TempusServa.war&lt;br /&gt;
2. rename file ending to .zip&lt;br /&gt;
3. unzip the file&lt;br /&gt;
4. navigate to \TempusServa\WEB-INF\lib in zip file in a CLI&lt;br /&gt;
5. run the following command, but replace the placeholder variables, including  the &amp;lt;&amp;gt; characters with appropriate values for the given application you are running the tool on:&lt;br /&gt;
java -cp &amp;quot;./*&amp;quot; com.tsnocode.codeunit.common.DumpFilesToDiscCLI &amp;lt;live db name&amp;gt; &amp;lt;db username&amp;gt; &amp;lt;db password&amp;gt; &amp;lt;solution&amp;gt; &amp;lt;sqlCategoryKey *optional*&amp;gt; &amp;lt;sqlCategoryEntity *optional*&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Features/Personal_views&amp;diff=6713</id>
		<title>Features/Personal views</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Features/Personal_views&amp;diff=6713"/>
		<updated>2023-09-06T11:00:13Z</updated>

		<summary type="html">&lt;p&gt;Nun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:View options.PNG|thumb|Picture 1]]&lt;br /&gt;
A View (also called List View) is a specific showing of a list of records from an Entity. Using the search and advanced search functions, you can choose to exclude records form the View using different parameters. The currently active parameters can be seen below the View. To save the parameters of a View for later reuse, click the 'Views' button in the functions menu and give the saved View a name in the text field as shown in Picture 1&lt;br /&gt;
&lt;br /&gt;
[[File:View option location.PNG|thumb|Picture 2]]&lt;br /&gt;
Initially this saved View is a Personal View, meaning that only you will have access to it. To make it a Shared View, which every application user has access to, navigate to the back-end and select the 'List views' option from the 'Resources' dropdown menu as shown in Picture 2. Now select the name of the View and check the 'Shared' box. The Personal View is now a Shared View instead.&lt;br /&gt;
&lt;br /&gt;
Other users who use the Shared View are still restricted to the information available to their own user group. You can therefore not accidentally share unauthorized data by making a Shared View.&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Features/Personal_views&amp;diff=6712</id>
		<title>Features/Personal views</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Features/Personal_views&amp;diff=6712"/>
		<updated>2023-09-06T10:59:10Z</updated>

		<summary type="html">&lt;p&gt;Nun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:View options.PNG|thumb|Picture 1]]&lt;br /&gt;
A View (also called List View) is a specific showing of a list of records from an Entity. Using the search and advanced search functions, you can choose to exclude records form the View using different parameters. The currently active parameters can be seen below the View. To save the parameters of a View for later reuse, click the 'Views' button in the functions menu and give the saved View a name in the text field as shown in Picture 1&lt;br /&gt;
&lt;br /&gt;
Initially this saved View is a Personal View, meaning that only you will have access to it. To make it a Shared View, which every application user has access to, navigate to the back-end and select the 'List views' option from the 'Resources' dropdown menu. Now select the name of the View and check the 'Shared' box. The Personal View is now a Shared View instead.&lt;br /&gt;
&lt;br /&gt;
Other users who use the Shared View are still restricted to the information available to their own user group. You can therefore not accidentally share unauthorized data by making a Shared View.&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Features/Personal_views&amp;diff=6711</id>
		<title>Features/Personal views</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Features/Personal_views&amp;diff=6711"/>
		<updated>2023-09-06T10:58:48Z</updated>

		<summary type="html">&lt;p&gt;Nun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A View (also called List View) is a specific showing of a list of records from an Entity. Using the search and advanced search functions, you can choose to exclude records form the View using different parameters. The currently active parameters can be seen below the View. To save the parameters of a View for later reuse, click the 'Views' button in the functions menu and give the saved View a name in the text field as shown in Picture 1&lt;br /&gt;
[[File:View options.PNG|thumb|Picture 1]]&lt;br /&gt;
&lt;br /&gt;
Initially this saved View is a Personal View, meaning that only you will have access to it. To make it a Shared View, which every application user has access to, navigate to the back-end and select the 'List views' option from the 'Resources' dropdown menu. Now select the name of the View and check the 'Shared' box. The Personal View is now a Shared View instead.&lt;br /&gt;
&lt;br /&gt;
Other users who use the Shared View are still restricted to the information available to their own user group. You can therefore not accidentally share unauthorized data by making a Shared View.&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Features/Personal_views&amp;diff=6710</id>
		<title>Features/Personal views</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Features/Personal_views&amp;diff=6710"/>
		<updated>2023-09-06T10:56:21Z</updated>

		<summary type="html">&lt;p&gt;Nun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A View (also called List View) is a specific showing of a list of records from an Entity. Using the search and advanced search functions, you can choose to exclude records form the View using different parameters. The currently active parameters can be seen below the View. To save the parameters of a View for later reuse, click the 'Views' button in the functions menu and give the saved View a name in the text field. Initially this saved View is a Personal View, meaning that only you will have access to it. To make it a Shared View, which every application user has access to, navigate to the back-end and select the 'List views' option from the 'Resources' dropdown menu. Now select the name of the View and check the 'Shared' box. The Personal View is now a Shared View instead.&lt;br /&gt;
&lt;br /&gt;
Other users who use the Shared View are still restricted to the information available to their own user group. You can therefore not accidentally share unauthorized data by making a Shared View.&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=File:View_option_location.PNG&amp;diff=6709</id>
		<title>File:View option location.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=File:View_option_location.PNG&amp;diff=6709"/>
		<updated>2023-09-06T10:50:23Z</updated>

		<summary type="html">&lt;p&gt;Nun: Location of List view options&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Location of List view options&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Features/Personal_views&amp;diff=6708</id>
		<title>Features/Personal views</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Features/Personal_views&amp;diff=6708"/>
		<updated>2023-09-06T10:49:05Z</updated>

		<summary type="html">&lt;p&gt;Nun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A View (also called list view) is a specific showing of a list of records from an Entity. Using the search and advanced search functions, you can choose to exclude records form the view using different parameters. The currently active parameters can be seen below the view. To save the parameters of a view for later reuse, click the 'Views' button in the functions menu and give the saved view a name in the text field. Initially this saved view is a Personal View, meaning that only you will have access to it. To make it a shared view, which every application user has access to, navigate to the back-end and&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=File:View_options.PNG&amp;diff=6707</id>
		<title>File:View options.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=File:View_options.PNG&amp;diff=6707"/>
		<updated>2023-09-06T10:38:22Z</updated>

		<summary type="html">&lt;p&gt;Nun: View option window&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
View option window&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Features/Personal_views&amp;diff=6706</id>
		<title>Features/Personal views</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Features/Personal_views&amp;diff=6706"/>
		<updated>2023-09-06T10:37:33Z</updated>

		<summary type="html">&lt;p&gt;Nun: Created page with &amp;quot;A View (also called list view) is a specific showing of a list of records from an Entity. Using the search and advanced search functions, you can choose to exclude records form the view using different parameters. The currently active parameters can be seen below the view. To save the parameters of a view for later reuse, select&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A View (also called list view) is a specific showing of a list of records from an Entity. Using the search and advanced search functions, you can choose to exclude records form the view using different parameters. The currently active parameters can be seen below the view. To save the parameters of a view for later reuse, select&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Nomenclature&amp;diff=6705</id>
		<title>Nomenclature</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Nomenclature&amp;diff=6705"/>
		<updated>2023-09-01T10:15:36Z</updated>

		<summary type="html">&lt;p&gt;Nun: /* Objects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objects == &lt;br /&gt;
&lt;br /&gt;
*Dashboard: Front-end page&lt;br /&gt;
**Widget: UI element in a dashboard&lt;br /&gt;
*Section: Collection of entities&lt;br /&gt;
*Entity: Describes a type of record, including its behavior and datatypes (This is a class in OOP)&lt;br /&gt;
*Record: Main data holding thing (This is an object in OOP)&lt;br /&gt;
**Revision: How many times a record has been changed&lt;br /&gt;
*Status: Configurable state a record is in&lt;br /&gt;
**Level: Assignable number to a status&lt;br /&gt;
**Action: Configurable behavior depending on status&lt;br /&gt;
*Field: A single data point of a record  &lt;br /&gt;
**Block: Collection of fields for the purpose of access management&lt;br /&gt;
**Validation: A check on whether or not a field has received correct data&lt;br /&gt;
**Dependency: A field's existence can be made dependent on other things&lt;br /&gt;
*User group: Determines who has access to which data and features&lt;br /&gt;
*Codeunit: Java code for specialized functionality&lt;br /&gt;
*Template: Tool for automatically creating documents and interfaces by feeding values into a predefined layout.&lt;br /&gt;
*Interface:&lt;br /&gt;
&lt;br /&gt;
==Parts==&lt;br /&gt;
*Front-end: The system that the normal user sees&lt;br /&gt;
*Back-end: Where the front-end is configured&lt;br /&gt;
*Database: It's a database&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Nomenclature&amp;diff=6704</id>
		<title>Nomenclature</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Nomenclature&amp;diff=6704"/>
		<updated>2023-09-01T10:14:57Z</updated>

		<summary type="html">&lt;p&gt;Nun: /* Objects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objects == &lt;br /&gt;
&lt;br /&gt;
*Dashboard: Front-end page&lt;br /&gt;
**Widget: UI element in a dashboard&lt;br /&gt;
*Section: Collection of entities&lt;br /&gt;
*Entity: Describes a type of record, including its behavior and datatypes (This is a class in OOP)&lt;br /&gt;
*Record: Main data holding thing (This is an object in OOP)&lt;br /&gt;
**Revision: How many times a record has been changed&lt;br /&gt;
*Status: Configurable state a record is in&lt;br /&gt;
**Level: Assignable number to a status&lt;br /&gt;
**Action: Configurable behavior depending on status&lt;br /&gt;
*Field: A single data point of a record  &lt;br /&gt;
**Block: Collection of fields for the purpose of access management&lt;br /&gt;
**Validation: A check on whether or not a field has received correct data&lt;br /&gt;
**Dependency: A field's existence can be made dependent on other things&lt;br /&gt;
*User group: Determines who has access to which data and features&lt;br /&gt;
*Codeunit: Java code for specialized functionality&lt;br /&gt;
*Template: Tool for automatically creating documents and interfaces by feeding values into a predefined layout.&lt;br /&gt;
&lt;br /&gt;
==Parts==&lt;br /&gt;
*Front-end: The system that the normal user sees&lt;br /&gt;
*Back-end: Where the front-end is configured&lt;br /&gt;
*Database: It's a database&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Nomenclature&amp;diff=6701</id>
		<title>Nomenclature</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Nomenclature&amp;diff=6701"/>
		<updated>2023-08-28T13:00:30Z</updated>

		<summary type="html">&lt;p&gt;Nun: /* Objects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objects == &lt;br /&gt;
&lt;br /&gt;
*Dashboard: Front-end page&lt;br /&gt;
**Widget: UI element in a dashboard&lt;br /&gt;
*Section: Collection of entities&lt;br /&gt;
*Entity: Describes a type of record, including its behavior and datatypes (This is a class in OOP)&lt;br /&gt;
*Record: Main data holding thing (This is an object in OOP)&lt;br /&gt;
**Revision: How many times a record has been changed&lt;br /&gt;
*Status: Configurable state a record is in&lt;br /&gt;
**Level: Assignable number to a status&lt;br /&gt;
**Action: Configurable behavior depending on status&lt;br /&gt;
*Field: A single data point of a record  &lt;br /&gt;
**Block: Collection of fields for the purpose of access management&lt;br /&gt;
**Validation: A check on whether or not a field has received correct data&lt;br /&gt;
**Dependency: A field's existence can be made dependent on other things&lt;br /&gt;
*User group: Determines who has access to which data and features&lt;br /&gt;
*Codeunit: Java code for specialized functionality&lt;br /&gt;
&lt;br /&gt;
==Parts==&lt;br /&gt;
*Front-end: The system that the normal user sees&lt;br /&gt;
*Back-end: Where the front-end is configured&lt;br /&gt;
*Database: It's a database&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Nomenclature&amp;diff=6700</id>
		<title>Nomenclature</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Nomenclature&amp;diff=6700"/>
		<updated>2023-08-28T13:00:16Z</updated>

		<summary type="html">&lt;p&gt;Nun: /* Objects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objects == &lt;br /&gt;
&lt;br /&gt;
*Dashboard: Front-end page&lt;br /&gt;
**Widget: UI element in a dashboard&lt;br /&gt;
*Section: Collection of entities&lt;br /&gt;
*Entity: Describes a type of record, including its behavior and datatypes (This is a class in OOP)&lt;br /&gt;
*Record: Main data holding thing (This is an object in OOP)&lt;br /&gt;
**Revision: How many times a record has been changed&lt;br /&gt;
*Status: Configurable state a record is in&lt;br /&gt;
**Level: Assignable number to a status&lt;br /&gt;
**Action: Configurable behavior depending on status&lt;br /&gt;
*Field: A single data point of a record  &lt;br /&gt;
**Block: Collection of fields for the purpose of access management&lt;br /&gt;
**Validation: A check on whether or not a field has received correct data&lt;br /&gt;
**Dependency: A field's existence can be made dependent on other things&lt;br /&gt;
*User group: Determines who has access to which data and features&lt;br /&gt;
*Codeunit: Advanced piece of Java code for specialized functionality&lt;br /&gt;
&lt;br /&gt;
==Parts==&lt;br /&gt;
*Front-end: The system that the normal user sees&lt;br /&gt;
*Back-end: Where the front-end is configured&lt;br /&gt;
*Database: It's a database&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Nomenclature&amp;diff=6699</id>
		<title>Nomenclature</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Nomenclature&amp;diff=6699"/>
		<updated>2023-08-28T12:57:51Z</updated>

		<summary type="html">&lt;p&gt;Nun: /* Objects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objects == &lt;br /&gt;
&lt;br /&gt;
*Dashboard: Front-end page&lt;br /&gt;
**Widget: UI element in a dashboard&lt;br /&gt;
*Section: Collection of entities&lt;br /&gt;
*Entity: Describes a type of record, including its behavior and datatypes (This is a class in OOP)&lt;br /&gt;
*Record: Main data holding thing (This is an object in OOP)&lt;br /&gt;
**Revision: How many times a record has been changed&lt;br /&gt;
*Status: Configurable state a record is in&lt;br /&gt;
**Level: Assignable number to a status&lt;br /&gt;
**Action: Configurable behavior depending on status&lt;br /&gt;
*Field: A single data point of a record  &lt;br /&gt;
**Block: Collection of fields for the purpose of access management&lt;br /&gt;
**Validation: A check on whether or not a field has received correct data&lt;br /&gt;
**Dependency: A field's existence can be made dependent on other things&lt;br /&gt;
*User group: Determines who has access to which data and features&lt;br /&gt;
&lt;br /&gt;
==Parts==&lt;br /&gt;
*Front-end: The system that the normal user sees&lt;br /&gt;
*Back-end: Where the front-end is configured&lt;br /&gt;
*Database: It's a database&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Nomenclature&amp;diff=6698</id>
		<title>Nomenclature</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Nomenclature&amp;diff=6698"/>
		<updated>2023-08-28T12:53:07Z</updated>

		<summary type="html">&lt;p&gt;Nun: /* Objects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objects == &lt;br /&gt;
&lt;br /&gt;
*Dashboard: Front-end page&lt;br /&gt;
**Widget: UI element in a dashboard&lt;br /&gt;
*Section: Collection of entities&lt;br /&gt;
*Entity: Describes a type of record, including its behavior and datatypes (This is a class in OOP)&lt;br /&gt;
*Record: Main data holding thing (This is an object in OOP)&lt;br /&gt;
**Revision: How many times a record has been changed&lt;br /&gt;
*Status: Configurable state a record is in&lt;br /&gt;
**Level: Assignable number to a status&lt;br /&gt;
**Action: Configurable behavior depending on status&lt;br /&gt;
*Field: A single data point of a record  &lt;br /&gt;
**Block: Collection of fields&lt;br /&gt;
**Validation: A check on whether or not a field has received correct data&lt;br /&gt;
**Dependency: A field's existence can be made dependent on other things&lt;br /&gt;
*User group: Determines who has access to which data and features&lt;br /&gt;
&lt;br /&gt;
==Parts==&lt;br /&gt;
*Front-end: The system that the normal user sees&lt;br /&gt;
*Back-end: Where the front-end is configured&lt;br /&gt;
*Database: It's a database&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Nomenclature&amp;diff=6697</id>
		<title>Nomenclature</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Nomenclature&amp;diff=6697"/>
		<updated>2023-08-28T12:44:13Z</updated>

		<summary type="html">&lt;p&gt;Nun: /* Objects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objects == &lt;br /&gt;
&lt;br /&gt;
*Dashboard: Front-end page&lt;br /&gt;
**Widget: UI element in a dashboard&lt;br /&gt;
*Section: Collection of entities&lt;br /&gt;
*Entity: Describes a type of record, including its behavior and datatypes (This is a class in OOP)&lt;br /&gt;
*Record: Main data holding thing (This is an object in OOP)&lt;br /&gt;
**Revision: How many times a record has been changed&lt;br /&gt;
*Status: Configurable state a record is in&lt;br /&gt;
**Level: Assignable number to a status&lt;br /&gt;
**Action: Configurable behavior depending on status&lt;br /&gt;
*Field: A single data point of a record  &lt;br /&gt;
**Block: Collection of fields&lt;br /&gt;
**Validation: A check on whether or not a field has received correct data&lt;br /&gt;
**Dependency: A field's existence can be made dependent on other things&lt;br /&gt;
&lt;br /&gt;
==Parts==&lt;br /&gt;
*Front-end: The system that the normal user sees&lt;br /&gt;
*Back-end: Where the front-end is configured&lt;br /&gt;
*Database: It's a database&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Features/Duplicate_prevention&amp;diff=6696</id>
		<title>Features/Duplicate prevention</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Features/Duplicate_prevention&amp;diff=6696"/>
		<updated>2023-08-28T12:25:48Z</updated>

		<summary type="html">&lt;p&gt;Nun: /* What it is */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What it is ==&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
  A hr-management system is used to hire new employees that have to be registered with information such as name and email address. During this registration mistakes can happen where an employee is registered multiple times, creating duplicates in the system with different system ID's. To prevent this there should be some part of the data from the employee that would not impossibly exist for another employee, such as the email address which by design are unique. If you are adding a record of an employee whose email address already exists in the system, then that employee certainly already exists in the system. Other suitable types of data could be Social Security Numbers or CPR numbers, which are also unique by design. If no such suitable data field is available, two or more fields can be used, so that they in combination constitute a unique value. It is for example unlikely that two people with the same name and same date of employment should exist.&lt;br /&gt;
&lt;br /&gt;
== Guide ==&lt;br /&gt;
To prevent duplications when records are created, the entity needs to be set up right. Either a single field or a combination of fields need to be designated as being a unique key, meaning that if you attempt to create another record with the same combination of fields, you will be prevented form doing so. This can be some field with inherently unique data or for example the combination of a date and a name, where the chance of another record sharing the same date and name is considered extremely unlikely.&lt;br /&gt;
&lt;br /&gt;
[[File:Field select.PNG|thumb|Picture 1]]&lt;br /&gt;
To set a field of an entity to be a unique key, go to that entity in the back-end and select your chosen field as shown in picture 1.&lt;br /&gt;
[[File:Field advanced toggle.PNG|thumb|Picture 2]]&lt;br /&gt;
The unique key feature is an advanced one, which means that you have to toggle the advanced view as shown in picture 2.&lt;br /&gt;
[[File:Unique key.PNG|thumb|Picture 3]]&lt;br /&gt;
Now enable the check mark as shown in picture 3.&lt;br /&gt;
Your chosen field is now part of a unique key. If this is the only field with this check mark enabled, then this will be the only key. If you select a second or third field, then the combination of the values of those fields will be the unique key.&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Features/Status_level_dependencies&amp;diff=6695</id>
		<title>Features/Status level dependencies</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Features/Status_level_dependencies&amp;diff=6695"/>
		<updated>2023-08-28T11:31:02Z</updated>

		<summary type="html">&lt;p&gt;Nun: /* What it is */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What it is ==&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
  A hr-management system is used to show information on employees who are assigned to projects. These employees are either currently working on a project or between projects. Or they might be in the process of being hired and would therefore not be a full employee yet. Depending on which of these states the employee is currently in, different information about them would be made available. If they were under consideration of being hired, we should see their application. If they were working on a project, we should see their work schedule. If they were between projects, we should see the end date of their last project. Each piece of information should only be made visible for the status in question, since they make no sense or are unimportant otherwise. Status level dependencies are used to manage this visibility.&lt;br /&gt;
&lt;br /&gt;
== Guide ==&lt;br /&gt;
[[File:Levels.png|thumb|397x397px|Picture 1]]&lt;br /&gt;
Status levels are numerical categories that one or more statuses can belong to.&lt;br /&gt;
Individual Fields in an Entity can be configured to depend on these levels such that they can be made inactive and hidden if the Entity record is not in a status with the correct level.&lt;br /&gt;
For example can the dependency be set for all status levels above a certain value such that one or more Fields are only active and displayed for those levels.&lt;br /&gt;
To see the status levels of an Entity's statuses, go to that Entity in the back-end and look in the column shown in picture 1.&lt;br /&gt;
[[File:Picture 2.png|thumb|Picture 2]]&lt;br /&gt;
To change a status's level, go to that status and edit it as shown in picture 2.&lt;br /&gt;
[[File:Advanced toggle.png|thumb|Picture 3]]&lt;br /&gt;
[[File:Level dependency.png|thumb|Picture 4]]&lt;br /&gt;
To set the dependency, toggle the advanced view of the Entity panel on as shown in picture 3 and go to the bottom as shown in picture 4.&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Features/Status_level_dependencies&amp;diff=6694</id>
		<title>Features/Status level dependencies</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Features/Status_level_dependencies&amp;diff=6694"/>
		<updated>2023-08-28T11:30:03Z</updated>

		<summary type="html">&lt;p&gt;Nun: /* What it is */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What it is ==&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
  A hr-management system contains some employees who are assigned to projects. These employees are either currently working on a project or between projects. Or they might be in the process of being hired and would therefore not be a full employee yet. Depending on which of these states the employee is currently in, different information about them would be made available. If they were under consideration of being hired, we should see their application. If they were working on a project, we should see their work schedule. If they were between projects, we should see the end date of their last project. Each piece of information should only be made visible for the status in question, since they make no sense or are unimportant otherwise. Status level dependencies are used to manage this visibility.&lt;br /&gt;
&lt;br /&gt;
== Guide ==&lt;br /&gt;
[[File:Levels.png|thumb|397x397px|Picture 1]]&lt;br /&gt;
Status levels are numerical categories that one or more statuses can belong to.&lt;br /&gt;
Individual Fields in an Entity can be configured to depend on these levels such that they can be made inactive and hidden if the Entity record is not in a status with the correct level.&lt;br /&gt;
For example can the dependency be set for all status levels above a certain value such that one or more Fields are only active and displayed for those levels.&lt;br /&gt;
To see the status levels of an Entity's statuses, go to that Entity in the back-end and look in the column shown in picture 1.&lt;br /&gt;
[[File:Picture 2.png|thumb|Picture 2]]&lt;br /&gt;
To change a status's level, go to that status and edit it as shown in picture 2.&lt;br /&gt;
[[File:Advanced toggle.png|thumb|Picture 3]]&lt;br /&gt;
[[File:Level dependency.png|thumb|Picture 4]]&lt;br /&gt;
To set the dependency, toggle the advanced view of the Entity panel on as shown in picture 3 and go to the bottom as shown in picture 4.&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Features/Status_level_dependencies&amp;diff=6693</id>
		<title>Features/Status level dependencies</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Features/Status_level_dependencies&amp;diff=6693"/>
		<updated>2023-08-28T11:29:17Z</updated>

		<summary type="html">&lt;p&gt;Nun: /* What it is */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What it is ==&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
  Say we have a hr-management system containing some employees who are assigned to projects. These employees are either currently working on a project or between projects. Or they might be in the process of being hired and would therefore not be a full employee yet. Depending on which of these states the employee is currently in, different information about them would be made available. If they were under consideration of being hired, we should see their application. If they were working on a project, we should see their work schedule. If they were between projects, we should see the end date of their last project. Each piece of information should only be made visible for the status in question, since they make no sense or are unimportant otherwise. Status level dependencies are used to manage this visibility.&lt;br /&gt;
&lt;br /&gt;
== Guide ==&lt;br /&gt;
[[File:Levels.png|thumb|397x397px|Picture 1]]&lt;br /&gt;
Status levels are numerical categories that one or more statuses can belong to.&lt;br /&gt;
Individual Fields in an Entity can be configured to depend on these levels such that they can be made inactive and hidden if the Entity record is not in a status with the correct level.&lt;br /&gt;
For example can the dependency be set for all status levels above a certain value such that one or more Fields are only active and displayed for those levels.&lt;br /&gt;
To see the status levels of an Entity's statuses, go to that Entity in the back-end and look in the column shown in picture 1.&lt;br /&gt;
[[File:Picture 2.png|thumb|Picture 2]]&lt;br /&gt;
To change a status's level, go to that status and edit it as shown in picture 2.&lt;br /&gt;
[[File:Advanced toggle.png|thumb|Picture 3]]&lt;br /&gt;
[[File:Level dependency.png|thumb|Picture 4]]&lt;br /&gt;
To set the dependency, toggle the advanced view of the Entity panel on as shown in picture 3 and go to the bottom as shown in picture 4.&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Features/Status_level_dependencies&amp;diff=6691</id>
		<title>Features/Status level dependencies</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Features/Status_level_dependencies&amp;diff=6691"/>
		<updated>2023-08-28T07:37:21Z</updated>

		<summary type="html">&lt;p&gt;Nun: /* How to do */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What it is ==&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
  Say you had a management system containing employees. These employees have the following information: They have a CV, current working details, and last workday. If a given employees can be in a few different statuses then each of the fields might not make sense. If an employee is in the process of being hired, then they would not have any current work details or a specific last work day. If the employee were in the process of being fired, then their CV would not matter. This example illustrates how you might want to hide away certain record fields depending on which status the record currently is in. Status level dependencies are used to solve this problem.&lt;br /&gt;
&lt;br /&gt;
== Guide ==&lt;br /&gt;
[[File:Levels.png|thumb|397x397px|Picture 1]]&lt;br /&gt;
Status levels are numerical categories that one or more statuses can belong to.&lt;br /&gt;
Individual Fields in an Entity can be configured to depend on these levels such that they can be made inactive and hidden if the Entity record is not in a status with the correct level.&lt;br /&gt;
For example can the dependency be set for all status levels above a certain value such that one or more Fields are only active and displayed for those levels.&lt;br /&gt;
To see the status levels of an Entity's statuses, go to that Entity in the back-end and look in the column shown in picture 1.&lt;br /&gt;
[[File:Picture 2.png|thumb|Picture 2]]&lt;br /&gt;
To change a status's level, go to that status and edit it as shown in picture 2.&lt;br /&gt;
[[File:Advanced toggle.png|thumb|Picture 3]]&lt;br /&gt;
[[File:Level dependency.png|thumb|Picture 4]]&lt;br /&gt;
To set the dependency, toggle the advanced view of the Entity panel on as shown in picture 3 and go to the bottom as shown in picture 4.&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Features/Duplicate_prevention&amp;diff=6690</id>
		<title>Features/Duplicate prevention</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Features/Duplicate_prevention&amp;diff=6690"/>
		<updated>2023-08-28T07:37:08Z</updated>

		<summary type="html">&lt;p&gt;Nun: /* How to do */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What it is ==&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
  If you are adding a record to an entity, it would be annoying to later find out that the record already exists. Now you have two records with the same data, but with different DataIDs. To prevent this there should be some part of the data in the record that is impossible to exist in another record. An example of this would be the social security number of a person. If you are adding a record of a person whose SSN already exists in the system, then the person is certainly a duplicate.&lt;br /&gt;
&lt;br /&gt;
== Guide ==&lt;br /&gt;
To prevent duplications when records are created, the entity needs to be set up right. Either a single field or a combination of fields need to be designated as being a unique key, meaning that if you attempt to create another record with the same combination of fields, you will be prevented form doing so. This can be some field with inherently unique data or for example the combination of a date and a name, where the chance of another record sharing the same date and name is considered extremely unlikely.&lt;br /&gt;
&lt;br /&gt;
[[File:Field select.PNG|thumb|Picture 1]]&lt;br /&gt;
To set a field of an entity to be a unique key, go to that entity in the back-end and select your chosen field as shown in picture 1.&lt;br /&gt;
[[File:Field advanced toggle.PNG|thumb|Picture 2]]&lt;br /&gt;
The unique key feature is an advanced one, which means that you have to toggle the advanced view as shown in picture 2.&lt;br /&gt;
[[File:Unique key.PNG|thumb|Picture 3]]&lt;br /&gt;
Now enable the check mark as shown in picture 3.&lt;br /&gt;
Your chosen field is now part of a unique key. If this is the only field with this check mark enabled, then this will be the only key. If you select a second or third field, then the combination of the values of those fields will be the unique key.&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Features/Duplicate_prevention&amp;diff=6689</id>
		<title>Features/Duplicate prevention</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Features/Duplicate_prevention&amp;diff=6689"/>
		<updated>2023-08-28T07:36:40Z</updated>

		<summary type="html">&lt;p&gt;Nun: /* How to do */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What it is ==&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
  If you are adding a record to an entity, it would be annoying to later find out that the record already exists. Now you have two records with the same data, but with different DataIDs. To prevent this there should be some part of the data in the record that is impossible to exist in another record. An example of this would be the social security number of a person. If you are adding a record of a person whose SSN already exists in the system, then the person is certainly a duplicate.&lt;br /&gt;
&lt;br /&gt;
== How to do ==&lt;br /&gt;
To prevent duplications when records are created, the entity needs to be set up right. Either a single field or a combination of fields need to be designated as being a unique key, meaning that if you attempt to create another record with the same combination of fields, you will be prevented form doing so. This can be some field with inherently unique data or for example the combination of a date and a name, where the chance of another record sharing the same date and name is considered extremely unlikely.&lt;br /&gt;
&lt;br /&gt;
[[File:Field select.PNG|thumb|Picture 1]]&lt;br /&gt;
To set a field of an entity to be a unique key, go to that entity in the back-end and select your chosen field as shown in picture 1.&lt;br /&gt;
[[File:Field advanced toggle.PNG|thumb|Picture 2]]&lt;br /&gt;
The unique key feature is an advanced one, which means that you have to toggle the advanced view as shown in picture 2.&lt;br /&gt;
[[File:Unique key.PNG|thumb|Picture 3]]&lt;br /&gt;
Now enable the check mark as shown in picture 3.&lt;br /&gt;
Your chosen field is now part of a unique key. If this is the only field with this check mark enabled, then this will be the only key. If you select a second or third field, then the combination of the values of those fields will be the unique key.&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Features/Duplicate_prevention&amp;diff=6688</id>
		<title>Features/Duplicate prevention</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Features/Duplicate_prevention&amp;diff=6688"/>
		<updated>2023-08-28T07:36:06Z</updated>

		<summary type="html">&lt;p&gt;Nun: /* How to do */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What it is ==&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
  If you are adding a record to an entity, it would be annoying to later find out that the record already exists. Now you have two records with the same data, but with different DataIDs. To prevent this there should be some part of the data in the record that is impossible to exist in another record. An example of this would be the social security number of a person. If you are adding a record of a person whose SSN already exists in the system, then the person is certainly a duplicate.&lt;br /&gt;
&lt;br /&gt;
== How to do ==&lt;br /&gt;
To prevent duplications when records are created, the entity needs to be set up right. Either a single field or a combination of fields need to be designated as being a unique key, meaning that if you attempt to create another record with the same combination of fields, you will be prevented form doing so. This can be some field with inherently unique data or for example the combination of a date and a name, where the chance of another record sharing the same date and name is considered extremely unlikely.&lt;br /&gt;
&lt;br /&gt;
To set a field of an entity to be a unique key, go to that entity in the back-end and select your chosen field as shown in picture 1.&lt;br /&gt;
[[File:Field select.PNG|thumb|Picture 1]]&lt;br /&gt;
The unique key feature is an advanced one, which means that you have to toggle the advanced view as shown in picture 2.&lt;br /&gt;
[[File:Field advanced toggle.PNG|thumb|Picture 2]]&lt;br /&gt;
Now enable the check mark as shown in picture 3.&lt;br /&gt;
[[File:Unique key.PNG|thumb|Picture 3]]&lt;br /&gt;
Your chosen field is now part of a unique key. If this is the only field with this check mark enabled, then this will be the only key. If you select a second or third field, then the combination of the values of those fields will be the unique key.&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Features/Duplicate_prevention&amp;diff=6687</id>
		<title>Features/Duplicate prevention</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Features/Duplicate_prevention&amp;diff=6687"/>
		<updated>2023-08-28T07:33:03Z</updated>

		<summary type="html">&lt;p&gt;Nun: /* How to do */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What it is ==&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
  If you are adding a record to an entity, it would be annoying to later find out that the record already exists. Now you have two records with the same data, but with different DataIDs. To prevent this there should be some part of the data in the record that is impossible to exist in another record. An example of this would be the social security number of a person. If you are adding a record of a person whose SSN already exists in the system, then the person is certainly a duplicate.&lt;br /&gt;
&lt;br /&gt;
== How to do ==&lt;br /&gt;
To prevent duplications when records are created, the entity needs to be set up right. Either a single field or a combination of fields need to be designated as being a unique key, meaning that if you attempt to create another record with the same combination of fields, you will be prevented form doing so. This can be some field with inherently unique data or for example the combination of a date and a name, where the chance of another record sharing the same date and name is considered extremely unlikely.&lt;br /&gt;
&lt;br /&gt;
To set a field of an entity to be a unique key, go to that entity in the back-end and select your chosen field as shown in picture 1.&lt;br /&gt;
[[File:Field select.png|thumb|Picture 1]]&lt;br /&gt;
The unique key feature is an advanced one, which means that you have to toggle the advanced view as shown in picture 2.&lt;br /&gt;
Now enable the check mark as shown in picture 3. Your chosen field is now part of a unique key. If this is the only field with this check mark enabled, then this will be the only key. If you select a second or third field, then the combination of the values of those fields will be the unique key.&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Features/Duplicate_prevention&amp;diff=6686</id>
		<title>Features/Duplicate prevention</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Features/Duplicate_prevention&amp;diff=6686"/>
		<updated>2023-08-28T07:32:38Z</updated>

		<summary type="html">&lt;p&gt;Nun: /* How to do */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What it is ==&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
  If you are adding a record to an entity, it would be annoying to later find out that the record already exists. Now you have two records with the same data, but with different DataIDs. To prevent this there should be some part of the data in the record that is impossible to exist in another record. An example of this would be the social security number of a person. If you are adding a record of a person whose SSN already exists in the system, then the person is certainly a duplicate.&lt;br /&gt;
&lt;br /&gt;
== How to do ==&lt;br /&gt;
To prevent duplications when records are created, the entity needs to be set up right. Either a single field or a combination of fields need to be designated as being a unique key, meaning that if you attempt to create another record with the same combination of fields, you will be prevented form doing so. This can be some field with inherently unique data or for example the combination of a date and a name, where the chance of another record sharing the same date and name is considered extremely unlikely.&lt;br /&gt;
&lt;br /&gt;
To set a field of an entity to be a unique key, go to that entity in the back-end and select your chosen field as shown in picture 1.&lt;br /&gt;
[[File:field select.png|thumb|Picture 1]]&lt;br /&gt;
The unique key feature is an advanced one, which means that you have to toggle the advanced view as shown in picture 2.&lt;br /&gt;
Now enable the check mark as shown in picture 3. Your chosen field is now part of a unique key. If this is the only field with this check mark enabled, then this will be the only key. If you select a second or third field, then the combination of the values of those fields will be the unique key.&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=File:Unique_key.PNG&amp;diff=6685</id>
		<title>File:Unique key.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=File:Unique_key.PNG&amp;diff=6685"/>
		<updated>2023-08-28T07:30:55Z</updated>

		<summary type="html">&lt;p&gt;Nun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=File:Field_select.PNG&amp;diff=6684</id>
		<title>File:Field select.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=File:Field_select.PNG&amp;diff=6684"/>
		<updated>2023-08-28T07:30:44Z</updated>

		<summary type="html">&lt;p&gt;Nun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=File:Field_advanced_toggle.PNG&amp;diff=6683</id>
		<title>File:Field advanced toggle.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=File:Field_advanced_toggle.PNG&amp;diff=6683"/>
		<updated>2023-08-28T07:30:26Z</updated>

		<summary type="html">&lt;p&gt;Nun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Features/Duplicate_prevention&amp;diff=6682</id>
		<title>Features/Duplicate prevention</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Features/Duplicate_prevention&amp;diff=6682"/>
		<updated>2023-08-28T07:29:11Z</updated>

		<summary type="html">&lt;p&gt;Nun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What it is ==&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
  If you are adding a record to an entity, it would be annoying to later find out that the record already exists. Now you have two records with the same data, but with different DataIDs. To prevent this there should be some part of the data in the record that is impossible to exist in another record. An example of this would be the social security number of a person. If you are adding a record of a person whose SSN already exists in the system, then the person is certainly a duplicate.&lt;br /&gt;
&lt;br /&gt;
== How to do ==&lt;br /&gt;
To prevent duplications when records are created, the entity needs to be set up right. Either a single field or a combination of fields need to be designated as being a unique key, meaning that if you attempt to create another record with the same combination of fields, you will be prevented form doing so. This can be some field with inherently unique data or for example the combination of a date and a name, where the chance of another record sharing the same date and name is considered extremely unlikely.&lt;br /&gt;
&lt;br /&gt;
To set a field of an entity to be a unique key, go to that entity in the back-end and select your chosen field as shown in picture 1.&lt;br /&gt;
The unique key feature is an advanced one, which means that you have to toggle the advanced view as shown in picture 2.&lt;br /&gt;
Now enable the check mark as shown in picture 3. Your chosen field is now part of a unique key. If this is the only field with this check mark enabled, then this will be the only key. If you select a second or third field, then the combination of the values of those fields will be the unique key.&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Features/Duplicate_prevention&amp;diff=6681</id>
		<title>Features/Duplicate prevention</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Features/Duplicate_prevention&amp;diff=6681"/>
		<updated>2023-08-28T07:28:08Z</updated>

		<summary type="html">&lt;p&gt;Nun: /* How to do */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What it is ==&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
  If you are adding a record to an entity, it would be annoying to later find out that the record already exists. Now you have two records with the same data, but with different DataIDs. To prevent this there should be some part of the data in the record that is impossible to exist in another record. An example of this would be the social security number of a person. If you are adding a record of a person whose SSN already exists in the system, then the person is certainly a duplicate.&lt;br /&gt;
&lt;br /&gt;
== How to do ==&lt;br /&gt;
To prevent duplications when records are created, the entity needs to be set up right. Either a single field or a combination of fields need to be designated as being a unique key, meaning that if you attempt to create another record with the same combination of fields, you will be prevented form doing so. This can be some field with inherently unique data or for example the combination of a date and a name, where the chance of another record sharing the same date and name is considered extremely unlikely.&lt;br /&gt;
&lt;br /&gt;
To set a field of an entity to be a unique key, go to that entity in the back-end and select your chosen field as shown in picture 1.&lt;br /&gt;
The unique key feature is an advanced one, which means that you have to toggle the advanced view as shown in picture 2.&lt;br /&gt;
Now enable the check mark as shown in picture 3. Your chosen field is now part of a unique key. If this is the only field with this check mark enabled, then this will be the only key. If you select a second or third field, then the combination of the values of those fields will be the unique key.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Entity: Check for duplicates&lt;br /&gt;
* Field: Is part of a unique key&lt;br /&gt;
&lt;br /&gt;
Note checks realtime when entering data&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Features/Duplicate_prevention&amp;diff=6675</id>
		<title>Features/Duplicate prevention</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Features/Duplicate_prevention&amp;diff=6675"/>
		<updated>2023-08-24T14:49:42Z</updated>

		<summary type="html">&lt;p&gt;Nun: /* How to do */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What it is ==&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
  If you are adding a record to an entity, it would be annoying to later find out that the record already exists. Now you have two records with the same data, but with different DataIDs. To prevent this there should be some part of the data in the record that is impossible to exist in another record. An example of this would be the social security number of a person. If you are adding a record of a person whose SSN already exists in the system, then the person is certainly a duplicate.&lt;br /&gt;
&lt;br /&gt;
== How to do ==&lt;br /&gt;
To prevent duplications when records are created, the entity needs to be set up right. Either a single field or a combination of fields need to be designated as being a unique key, meaning that if you attempt to create another record with the same combination of fields, you will be prevented form doing so. This can be some field with inherently unique data or for example the combination of a date and a name, where the chance of another record sharing the same date and name is considered extremely unlikely.&lt;br /&gt;
&lt;br /&gt;
To set a field of an entity to be a unique key, go to that record in the back-end &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Entity: Check for duplicates&lt;br /&gt;
* Field: Is part of a unique key&lt;br /&gt;
&lt;br /&gt;
Note checks realtime when entering data&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Features/Duplicate_prevention&amp;diff=6671</id>
		<title>Features/Duplicate prevention</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Features/Duplicate_prevention&amp;diff=6671"/>
		<updated>2023-08-24T14:27:34Z</updated>

		<summary type="html">&lt;p&gt;Nun: /* What it is */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What it is ==&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
  If you are adding a record to an entity, it would be annoying to later find out that the record already exists. Now you have two records with the same data, but with different DataIDs. To prevent this there should be some part of the data in the record that is impossible to exist in another record. An example of this would be the social security number of a person. If you are adding a record of a person whose SSN already exists in the system, then the person is certainly a duplicate.&lt;br /&gt;
&lt;br /&gt;
== How to do ==&lt;br /&gt;
* Entity: Check for duplicates&lt;br /&gt;
* Field: Is part of a unique key&lt;br /&gt;
&lt;br /&gt;
Note checks realtime when entering data&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Features/Duplicate_prevention&amp;diff=6670</id>
		<title>Features/Duplicate prevention</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Features/Duplicate_prevention&amp;diff=6670"/>
		<updated>2023-08-24T14:17:18Z</updated>

		<summary type="html">&lt;p&gt;Nun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What it is ==&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
  Say you had a management system containing employees. These employees have the following information: They have a CV, current working details, and last workday. If a given employees can be in a few different statuses then each of the fields might not make sense. If an employee is in the process of being hired, then they would not have any current work details or a specific last work day. If the employee were in the process of being fired, then their CV would not matter. This example illustrates how you might want to hide away certain record fields depending on which status the record currently is in. Status level dependencies are used to solve this problem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Entity: Check for duplicates&lt;br /&gt;
* Field: Is part of a unique key&lt;br /&gt;
&lt;br /&gt;
Note checks realtime when entering data&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Features/Status_level_dependencies&amp;diff=6645</id>
		<title>Features/Status level dependencies</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Features/Status_level_dependencies&amp;diff=6645"/>
		<updated>2023-08-11T09:08:04Z</updated>

		<summary type="html">&lt;p&gt;Nun: /* How to do */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What it is ==&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
  Say you had a management system containing employees. These employees have the following information: They have a CV, current working details, and last workday. If a given employees can be in a few different statuses then each of the fields might not make sense. If an employee is in the process of being hired, then they would not have any current work details or a specific last work day. If the employee were in the process of being fired, then their CV would not matter. This example illustrates how you might want to hide away certain record fields depending on which status the record currently is in. Status level dependencies are used to solve this problem.&lt;br /&gt;
&lt;br /&gt;
== How to do ==&lt;br /&gt;
[[File:Levels.png|thumb|397x397px|Picture 1]]&lt;br /&gt;
Status levels are numerical categories that one or more statuses can belong to.&lt;br /&gt;
Individual Fields in an Entity can be configured to depend on these levels such that they can be made inactive and hidden if the Entity record is not in a status with the correct level.&lt;br /&gt;
For example can the dependency be set for all status levels above a certain value such that one or more Fields are only active and displayed for those levels.&lt;br /&gt;
To see the status levels of an Entity's statuses, go to that Entity in the back-end and look in the column shown in picture 1.&lt;br /&gt;
[[File:Picture 2.png|thumb|Picture 2]]&lt;br /&gt;
To change a status's level, go to that status and edit it as shown in picture 2.&lt;br /&gt;
[[File:Advanced toggle.png|thumb|Picture 3]]&lt;br /&gt;
[[File:Level dependency.png|thumb|Picture 4]]&lt;br /&gt;
To set the dependency, toggle the advanced view of the Entity panel on as shown in picture 3 and go to the bottom as shown in picture 4.&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Nomenclature&amp;diff=6644</id>
		<title>Nomenclature</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Nomenclature&amp;diff=6644"/>
		<updated>2023-08-11T08:58:29Z</updated>

		<summary type="html">&lt;p&gt;Nun: /* Objects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objects == &lt;br /&gt;
&lt;br /&gt;
*Dashboard: Front-end page&lt;br /&gt;
**Widget: UI element in a dashboard&lt;br /&gt;
*Section: Collection of entities&lt;br /&gt;
*Entity: Describes a type of record, including its behavior and datatypes (This is a class in OOP)&lt;br /&gt;
*Record: Main data holding thing (This is an object in OOP)&lt;br /&gt;
**Revision: How many times a record has been changed&lt;br /&gt;
*Status: Configurable state a record is in&lt;br /&gt;
**Level: Assignable number to a status&lt;br /&gt;
**Action: Configurable behavior depending on status&lt;br /&gt;
*Field: A single data point of a record  &lt;br /&gt;
**Block: Controls which user groups have access to the field&lt;br /&gt;
**Validation: A check on whether or not a field has received correct data&lt;br /&gt;
**Dependency: A field's existence can be made dependent on other things&lt;br /&gt;
&lt;br /&gt;
==Parts==&lt;br /&gt;
*Front-end: The system that the normal user sees&lt;br /&gt;
*Back-end: Where the front-end is configured&lt;br /&gt;
*Database: It's a database&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Nomenclature&amp;diff=6643</id>
		<title>Nomenclature</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Nomenclature&amp;diff=6643"/>
		<updated>2023-08-11T08:52:02Z</updated>

		<summary type="html">&lt;p&gt;Nun: /* Objects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objects == &lt;br /&gt;
&lt;br /&gt;
*Dashboard: Front-end page&lt;br /&gt;
**Widget: UI element in a dashboard&lt;br /&gt;
*Section: Collection of entities&lt;br /&gt;
*Entity: Describes a type of record, including its behavior and datatypes (This is a class in OOP)&lt;br /&gt;
*Record: Main data holding thing (This is an object in OOP)&lt;br /&gt;
**Revision: How many times a record has been changed&lt;br /&gt;
*Status: Configurable state a record is in&lt;br /&gt;
**Level: Assignable number to a status&lt;br /&gt;
**Action: Configurable behavior depending on status&lt;br /&gt;
*Field: A single data point of a record  &lt;br /&gt;
**Block: Controls which user groups have access to the field&lt;br /&gt;
**Validation: A check on whether or not a field has received correct data&lt;br /&gt;
**Dependency: A field's existence can be made dependent on other things&lt;br /&gt;
*Template:&lt;br /&gt;
&lt;br /&gt;
==Parts==&lt;br /&gt;
*Front-end: The system that the normal user sees&lt;br /&gt;
*Back-end: Where the front-end is configured&lt;br /&gt;
*Database: It's a database&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Nomenclature&amp;diff=6642</id>
		<title>Nomenclature</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Nomenclature&amp;diff=6642"/>
		<updated>2023-08-11T08:51:39Z</updated>

		<summary type="html">&lt;p&gt;Nun: /* Objects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objects == &lt;br /&gt;
&lt;br /&gt;
*Dashboard: Front-end page&lt;br /&gt;
&lt;br /&gt;
*Widget: UI element in a dashboard&lt;br /&gt;
*Section: Collection of entities&lt;br /&gt;
*Entity: Describes a type of record, including its behavior and datatypes (This is a class in OOP)&lt;br /&gt;
*Record: Main data holding thing (This is an object in OOP)&lt;br /&gt;
**Revision: How many times a record has been changed&lt;br /&gt;
*Status: Configurable state a record is in&lt;br /&gt;
**Level: Assignable number to a status&lt;br /&gt;
**Action: Configurable behavior depending on status&lt;br /&gt;
*Field: A single data point of a record  &lt;br /&gt;
**Block: Controls which user groups have access to the field&lt;br /&gt;
**Validation: A check on whether or not a field has received correct data&lt;br /&gt;
**Dependency: A field's existence can be made dependent on other things&lt;br /&gt;
*Template&lt;br /&gt;
&lt;br /&gt;
==Parts==&lt;br /&gt;
*Front-end: The system that the normal user sees&lt;br /&gt;
*Back-end: Where the front-end is configured&lt;br /&gt;
*Database: It's a database&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Nomenclature&amp;diff=6641</id>
		<title>Nomenclature</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Nomenclature&amp;diff=6641"/>
		<updated>2023-08-11T08:47:48Z</updated>

		<summary type="html">&lt;p&gt;Nun: /* Objects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objects ==&lt;br /&gt;
* Section: Collection of entities&lt;br /&gt;
* Entity: Describes a type of record, including its behavior and datatypes (This is a class in OOP)&lt;br /&gt;
* Record: Main data holding thing (This is an object in OOP)&lt;br /&gt;
** Revision: How many times a record has been changed&lt;br /&gt;
* Status: Configurable state a record is in&lt;br /&gt;
** Level: Assignable number to a status&lt;br /&gt;
** Action: Configurable behavior depending on status&lt;br /&gt;
* Field: A single data point of a record &lt;br /&gt;
** Block: Controls which user groups have access to the field&lt;br /&gt;
** Validation: A check on whether or not a field has received correct data&lt;br /&gt;
** Dependency: A field's existence can be made dependent on other things&lt;br /&gt;
&lt;br /&gt;
== Parts ==&lt;br /&gt;
* Front-end: The system that the normal user sees&lt;br /&gt;
* Back-end: Where the front-end is configured&lt;br /&gt;
* Database: It's a database&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Nomenclature&amp;diff=6640</id>
		<title>Nomenclature</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Nomenclature&amp;diff=6640"/>
		<updated>2023-08-11T08:47:11Z</updated>

		<summary type="html">&lt;p&gt;Nun: description of terms&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Objects ==&lt;br /&gt;
* Section: Collection of entities&lt;br /&gt;
* Entity: Describes a type of record including its behavior and datatypes (This is a class in OOP)&lt;br /&gt;
* Record: Main data holding thing (This is an object in OOP)&lt;br /&gt;
** Revision: How many times a record has been changed&lt;br /&gt;
* Status: Configurable state a record is in&lt;br /&gt;
** Level: Assignable number to a status&lt;br /&gt;
** Action: Configurable behavior depending on status&lt;br /&gt;
* Field: A single data point of a record &lt;br /&gt;
** Block: Controls which user groups have access to the field&lt;br /&gt;
** Validation: A check on whether or not a field has received correct data&lt;br /&gt;
** Dependency: A field's existence can be made dependent on other things&lt;br /&gt;
&lt;br /&gt;
== Parts ==&lt;br /&gt;
* Front-end: The system that the normal user sees&lt;br /&gt;
* Back-end: Where the front-end is configured&lt;br /&gt;
* Database: It's a database&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tsnocode.dev/index.php?title=Features/Status_level_dependencies&amp;diff=6635</id>
		<title>Features/Status level dependencies</title>
		<link rel="alternate" type="text/html" href="https://wiki.tsnocode.dev/index.php?title=Features/Status_level_dependencies&amp;diff=6635"/>
		<updated>2023-08-11T08:03:15Z</updated>

		<summary type="html">&lt;p&gt;Nun: /* How to do */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What it is ==&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
  Say you had a management system containing employees. These employees have the following information: They have a CV, current working details, and last workday. If a given employees can be in a few different statuses then each of the fields might not make sense. If an employee is in the process of being hired, then they would not have any current work details or a specific last work day. If the employee were in the process of being fired, then their CV would not matter. This example illustrates how you might want to hide away certain record fields depending on which status the record currently is in. Status level dependencies are used to solve this problem.&lt;br /&gt;
&lt;br /&gt;
== How to do ==&lt;br /&gt;
[[File:Levels.png|thumb|397x397px|Picture 1]]&lt;br /&gt;
Status levels are numerical categories that statuses can belong to.&lt;br /&gt;
Fields in entities can be configured to depend on these levels such that they can be made inactive if the entity record is not in a status with the correct level.&lt;br /&gt;
For example can the dependency be set for all status levels above a certain value such that the field is only shown for those levels.&lt;br /&gt;
To see the status levels of an entity's statuses, go to that entity in the back-end and look in the column shown in picture 1.&lt;br /&gt;
[[File:Picture 2.png|thumb|Picture 2]]&lt;br /&gt;
To change a status's level, go to that status and edit it as shown in picture 2.&lt;br /&gt;
[[File:Advanced toggle.png|thumb|Picture 3]]&lt;br /&gt;
[[File:Level dependency.png|thumb|Picture 4]]&lt;br /&gt;
To set the dependency, toggle the advanced view of the entity on as shown in picture 3 and go to the bottom as shown in picture 4.&lt;/div&gt;</summary>
		<author><name>Nun</name></author>
	</entry>
</feed>