Skip to main content


· 37 min read

The 2021.3 release of the Thinkwise Platform features a lot of additions and improvements, and a large number of feature requests and tickets have been addressed.

Table of contents

Upgrade notes

SQL Server and .NET Framework support

  • The Software Factory development environment and the Intelligent Application Manager require SQL Server 2016 or higher.
  • This also applies to the Windows and Web user interfaces, which additionally need version 4.7 of the .NET Framework (4.7.2 is advised for Web).
  • The Indicium application tier requires SQL Server 2016 or higher and .NET 5.0. Indicium Legacy requires .NET Framework 4.7.2. For more information please check the Indicium documentation.

For more information about supported technologies, see the Thinkwise Lifecycle Policy.

Upgrading from 2020.1 or earlier

If you're upgrading from version 2020.1 or earlier, it is required to upload all image and report files to the database once. More information about uploading images and reports can be found here: Images and reports should be uploaded

Breaking changes

No more hash password using business logic


For applications integrating directly with the IAM database for automated account creation: IAM no longer provides the option to securely hash a password for an IAM account using business logic on the IAM database. The procedure task_usr_update_password is no longer available. The new process action type Hash password can be used to re-enable this functionality in your application.

Note: Administrators using IAM won't experience these changes. The option to update the password of an IAM user via the UI is still available and unmodified.

Function tsf_user will now return Azure users instead of system users


For Azure, the function tsf_user will now return Azure users instead of system users. An upgrade validation has been created to remind you to reapply the function onto all the end-product databases.

In rare cases, it is desirable to deviate from the logged-in user and select a different user. For this, we recommended altering the CONTEXT_INFO as described in User name.

Data conversion - Expressions in default values

Community idea

In the 2021.1 version of the Thinkwise Platform, we introduced expressions in default domain values. This is now also available in the Data conversion screen. A new Default value type field has been added to toggle between a constant value and an expression. An expression can fill any new or changed columns during the upgrade. You can find the new field in the menu Data > Data conversion > tab Data conversion (all columns) or tab Data conversion > Columns.

As some of our most experienced users may know, we already provided an option to specify a default value preceded by an =. The = is now replaced by the default value expression, a more formal way of achieving the same. The upgrade to this 2021.3 version provides a conversion, so default values ​​preceded by an = will be transferred (without the =) to the default expression field.

Maps renewed

Maps have been changed from an extender to a formalized feature in the Software Factory.

The new Maps screen can be found in the menu User Interface > Maps, or, in the menu User interface > Subjects > Components.

In the main Maps screen, a map can be added to a table or view. Note that to make the map visible in your end-product, the table or view needs a screen-type with a Maps component.

You need to define Linked columns to populate the map with entities:

  • Data mapping column: This column should contain an image combo domain with elements. Settings for each element can be further specified in the Data mappings tab.
  • Lat/long column: This column should contain the location information for the entity.
  • Popup column: Use this column to store the HTML data that will be displayed when hovering over the entity on the map.

Maps configuration Maps configuration

Further specifications can be made in the tabs:

  • tab: Base layers - The base layer is the layer shown in the maps component. A URI is needed to retrieve the layer information. Settings like minimum and maximum zoom levels can be set here as well. If any attribution is necessary, use the Attribution field to store the attribution HTML snippet.
  • tab: Overlays - Overlays can be shown on top of the base layer to add extra information, such as weather or traffic information. To retrieve the overlay data, a URI is needed.
  • tab: Data mappings - The overview displays all the domain elements of the data mapping column. Here, the geometric type of the data mapping can be specified. If the geometric type is not a marker, you can specify additional settings like border and fill color.

After upgrading, the Thinkwise Platform attempts to convert existing Maps extenders to the new implementation. However, not all configurations of Maps extenders will be compatible with the new implementation, so please check if a manual conversion is needed. If any of the following properties are used in your current Maps extender, Maps will not be converted automatically:

  • free_form_address_col_id
  • api_key_cols_tab_cols_col_id
  • geocoder
  • layer_menu_layer_menu_entries_layer_menu_entry_show_menu_title
  • legend_menu_menu_entries_menu_entry_show_menu_title
  • marker_entries_marker_entry_icon_path
  • library_tiles_layer_configurations_creation_script.

Also, if the following elements or ids cannot be found in your current Maps extender, Maps will not be converted automatically:

  • tab/tab_variant
  • coordinates_col_id
  • type_col_id
  • popup_html_col_id.

Software Factory


Redesigned creation process

In this release, we redesigned and improved the way the Creation screen works. This redesign offers many advantages:

  • All jobs are no longer performed by a client (the GUI) but instead by Indicium. This shift means that generation, validation, etc., will continue even if you close the Software Factory GUI.
  • Since all jobs are performed by Indicium, it is possible to automate the entire process.
  • All developers can track a job's progress. For example, if one developer starts generating the definition of a project version, another developer can see this in their Creation screen.
  • This behavior extends to the validation- and unit test tabs in various modelers. The Validation and Unit test screens that can be opened directly from the menu have also been updated.
  • You can execute the steps in the creation process separately or all at once.

The screens and steps you already know in the creation process are still available. But to move the responsibility of the creation process to Indicium, a few screens have changed, and we have cleaned up some unused features.

  • Generate definition:

    • Visually, the screen now shows a progress bar and initiates the definition generation via a task. The screen provides you with information about the most recent definition generation job.
    • Some configuration options have been removed since it is never necessary to change them: Include control procedures in development, Delete generated specifications, Copy base projects, Generation specifications.
    • When an error occurs at one of the control procedures, the generation will halt. You have various options to either skip the control procedure and continue execution or abort the definition generation. This choice can also be made by a different developer than the developer initiating the definition generation.
  • Validate definition:

    • The screen now shows a progress bar at the bottom which displays the progress of current validation executions.

    • A validation will receive a question mark as an icon if it is subject to re-validation and will show a progress icon when being executed.

    • You can still choose to perform a full validation or only validate a specific validation group or the selected validation(s).

    • Note: unlike other jobs, multiple validation jobs can be active at once for a project version.

      Validate definition Validation is currently active for the User Interface validation group

  • Generate source code: this step is simplified because of some overlap with the functionality modeler:

    • Writing all program objects to disk during the generation of the source code is no longer possible. However, you can still write a program object to disk in the functionality modeler.

    • Writing code files to disk is now a button (instead of a checkbox when starting source code generation).

    • Generation method 'Manual' is no longer supported. For cherry-pick execution of specific pieces of logic, use the functionality modeler or the Code overview screen.

      Generate source code The new generate source code screen

  • Execute source code

    • It is no longer possible to execute source code on an arbitrary server and database. You must select a runtime configuration now. The server and database of this runtime configuration will be used to create or upgrade the database and deploy the business logic code.

    • There are two ways to execute source code. In both scenarios, you are first prompted to select a runtime configuration.

      • With Connect, you can change the default selection of code files to execute. The default selection may vary depending on whether or not the database exists and the current versioning information stored in the database. You can also choose to reconnect to a different runtime configuration or cancel the code execution at this point.

      • With Execute all code files, no further input is asked, and the code files are executed directly on the runtime configuration.

        Execute source code Execute source code

    • If an error occurs during the execution of the code files, you are prompted with various options to either continue or abort code execution. You can skip the code file and continue execution with the next code file, abort the execution completely, or continue with the next statement in the current code file. This choice may also be made by a different developer than the developer initiating the code execution.

      Error An error occurred. Note the three tasks to choose on how to continue.​​

  • Unit tests

    • Just as with source code execution, it is no longer possible to run unit tests on an arbitrary server and database. You have to select a runtime configuration.

    Select a runtime configuration Executing unit tests prompts a runtime configuration selection.

    • The unit test screen from the menu has also been updated. It has been split into a Unit tests execution tab and a Maintenance tab for creating and updating unit tests.

Task to execute a complete creation

As part of the redesigned creation process, we added a task to the Generate Definition screen (menu Deployment > Creation > tab Generate definition). This task makes it easier to execute all the creation steps successively. It is called Execute complete creation Execute complete creation. By using this task, you don't need to run each step separately. It also runs the complete creation through the Indicium API.

You can define for each step whether it should be executed and what the error handling should be. For the source code, you can define the Upgrade method (Full or Smart).

Execute complete creation Taks for executing all creation steps

Automate your creation process

Thanks to the redesign of the creation process, you can now start a job via the UI and via Indicium's API.

You can use the following APIs to start the various Creation steps. Note that these calls only queue the job and directly respond with a 200 - OK.

  • To start the Generate definition job:
POST [indicium]/iam/sf/add_job_to_generate_definition
"project_id": "MY_PROJECT",
"project_vrs_id": "1.12",
"error_handling": 1

The parameter error_handling allows the caller to configure what happens when a control procedure fails to execute properly during definition generation. The following options are available:

Error handlingDescription
0Pause and await user input.
1Skip the control procedure in error and continue.
2Abort Generate definition.
  • To start the Validate definition job:
POST [indicium]/iam/sf/add_job_to_validate_all
"project_id": "MY_PROJECT",
"project_vrs_id": "1.12"
  • To start the Generate source code job:
POST [indicium]/iam/sf/add_job_to_generate_code
"project_id": "MY_PROJECT",
"project_vrs_id": "1.12",
"upgrade_method": 0

Writing code files to disk is not yet possible via the API. The parameter upgrade_method determines the generation method.

Upgrade methodDescription
0Smart generation
1Full generation
  • To start the Source code execution job:
POST [indicium]/iam/sf/add_job_to_execute_source_code
"project_id": "MY_PROJECT",
"project_vrs_id": "1.12",
"runtime_configuration_id": "default"

The runtime_configuration_id is used to select the target for the source code execution. Note that this has to be the exact name of the runtime configuration as configured in the Software Factory. You cannot use an application id or application alias.

An error handling option is not available yet but will be added in the future. Source code execution will wait for developer input if an error occurs.

  • To start the Unit test execution job (all unit tests):
POST [indicium]/iam/sf/add_job_to_test_unit_test
"project_id": "MY_PROJECT",
"project_vrs_id": "1.12",
"runtime_configuration_id": "default"

The body is the same as in the source code execution. Inactive unit tests will not be executed.

  • To execute the Full creation process via the API:
POST [indicium]/iam/sf/add_job_to_test_unit_test
"project_id": "MY_PROJECT",
"project_vrs_id": "1.12",
"execute_complete_creation": 0,
"generate_definition": true,
"validate_definition": true,
"generate_source_code": true,
"execute_source_code": true,
"execute_unit_tests": true,
"generate_definition_error_handling": 1,
"validation_result_creation": 3,
"upgrade_method": 0,
"runtime_configuration_id": "default",
"execute_source_code_error_handling": 1

Code execution and unit test execution will both be done on the provided runtime configuration.

The execute_complete_creation setting should be set to 0 if manual selection of individual steps is desired. When set to 1, all steps will be executed.

The generate_definition_error_handling and execute_source_code_error_handling values are the same as described earlier:

0Pause and await user input.
1Skip the control procedure in error and continue.
2Abort generate definition.

The validation_result_creation setting indicates how the validation results should affect the further steps.

0Abort if there are errors.
1Abort if there are warnings.
2Abort on any validation message.
3Always continue the subsequent creation steps.

Next steps in the creation process

In this release, we focused on the automation of the Creation screen. This screen focuses mainly on your development environment.

For the next release, we will focus on the automation of deployment to IAM environments. This includes synchronizing to IAM, writing code files, and the combination - creating deployment packages via jobs in Indicium. The Thinkwise Deployment Center will be able to pick up these packages for updating environments via a wizard or automated via the command-line interface.

Process flows: reusable subflows

Community idea

It's now possible to create subflows. These are system flows that can be executed within another process flow. Subflows are reusable and easier to manage than adding the same subflow manually to several other process flows. For now, subflows are limited to process actions that are suitable for system flows. Subflows can be managed via the menu Processes > Subflows.

Subflows Adding a subflow

Subflow process variables Process variables in a subflow

A new process action is available to include a subflow inside a process flow: Execute subflow. This process action contains all the subflows public input and output parameters and can return a status code.

Subflow in a flow Adding a subflow to a flow

Tasks are available to facilitate the migration of a process flow to a subflow and vice versa.

Migrate flows and subflows Task for migrating a process flow to a subflow and vice versa

Process flows can only be migrated to subflows when:

  • The process flow is a system flow (i.e., it only contains system flow actions).
  • The process flow is not an API flow.
  • The process flow uses an Execute subflow process action. (Subflows cannot execute subflows.)

Subflows can only be migrated to process flows when:

  • The subflow is not used by a process action in the Execute subflow process action. An error will be shown to notify the developer.

Process flows: multiple running instances of system flows

System flows can run multiple instances in parallel. When allowed, and when a system flow instance is running, new instances of the system flow will start according to the active schedule.

Allowing multiple instances is enabled in the menu Processes > Process flows > tab Process flows. This option is only available for system flows.

Allow multiple running instances for system flows

However, Indicium cannot take care of overlap prevention, since it cannot take multiple Indicium instances into account. Therefore, IAM will take this responsibility and only let system flow instances run in parallel when allowed. This also makes it possible in the future to configure the number of allowed parallel instances.

For now, if multiple running instances are allowed for a system flow, we recommend creating a queuing table in your end product. IAM will execute a system flow according to its active schedule and allow multiple instances to run parallel. The system flow also follows the created queuing table to see whether it should continue executing or not.

For example, the system flow could start with a task to consult the queuing table. If the first record's status is 'Open', the flow will continue. If no records are available, the flow will continue to 'Stop'.

Process flows: lookup for process action type

In the menu Processes > Process flows > tab Process actions, the field Process action type now has a lookup screen. Upon opening, the lookup screen will show the available process action types.

The column System flow action has been added to this lookup, to show which actions are usable in system flows. System flows are process flows without user interaction.

Process flows: new process actions

Two new process actions are available in the Software Factory to safely store a password for the sole purpose of password verification.

  • Hash password takes a plain-text password as input and returns a salt, hash, and the used algorithm. The used algorithm is always the latest supported algorithm by the runtime components, to ensure it is up-to-date with cryptographic standards for safe password storage. Hashed passwords can only be used for password verification via the Check password process action and cannot be restored to their original plain-text form. For instance, a hashed password cannot be used as a credential for an external service.

    Be very cautious when dealing with passwords. There are barely any scenarios where these process actions are actually required when developing an enterprise application.

  • Check password takes a plain-text password as input and a hash, salt, and algorithm used to check this password against. The latter 3 will nearly always be the result of a hash-password process action at a different point in time, loaded from storage. When provided password matches, the process action will be successful.

Other new process actions are:

  • Provision database - provides a platform-independent method to connect to an RDBMS and run create database scripts in order to provision a database.
  • Indicium Universal Execute system task - allows using tasks inside system flows. Note that the default procedure will not be executed when using this process action. Any task parameters that are not set as input and output will not be used by Indicium to run the task. A validation is created for this.

New process action type: Execute system task

Process flows: new input parameter

A new input parameter has been added to the process actions Application connector and Database connector: Start from index.

When multiple statements are specified with a delimiter in the Application connector or Database connector, Indicium will start with the one indicated by the Start from index parameter, ignoring all the statements before that.

Generation optimization

As part of the generation process, base projects were copied into the work project. This was done by deleting the old data (where possible) and then adding all data again. Now, the data will no longer be deleted from the work project in advance, but during the generation. So, the data is added or updated when missing or incorrect, and only removed when this object's base project is no longer available. This speeds up the generation process.

Generation strategies for control procedures

When generating source code (program objects or code groups), all generated objects were deleted, and new objects created. So, the majority of objects were deleted just to be re-created later. This process costs performance and IO. Several generation strategies are now available for control procedures to prevent this. These strategies can be set in the menu Business logic > Functionality > tab Control procedure:

  • Delete: All objects generated by this control procedure will be dropped during the Generate definition process.
  • Fully managed: All objects generated by this control procedure will not be dropped during the Generate definition process. This strategy means the developer has to manage all the objects generated by this control procedure. So, previously generated and outdated objects need to be deleted by code, if necessary.
  • Staged: All objects generated by this control procedure will be either updated, inserted, or deleted based on the data of the objects. If any data has changed, the object will be updated. If no corresponding object is found, a new object will be created. If an object is found but no corresponding data is present, the object will be deleted.

Staged is the default for new SQL-typed control procedures. However, during the upgrade to the 2021.3 version, existing SQL-typed control procedures will be set to Delete. Delete corresponds to the strategy used up to this release. So, this ensures that you can switch to other strategies in a controlled manner.

Also, if the assignment of a control procedure is changed to SQL, the strategy will automatically be set to Staged. The generated SQL code will automatically use the correct staging tables. The assignment can be set in the menu Business logic > Functionality > tab Control procedure (task Switch assignment to SQL).

The definitions are created in the menu Deployment > Creation > tab Generate definition.

New validation

A new validation has been added: Process variable has incorrect datatype. This validation checks if the datatype of the used process variable does not result in an undesired conversion, e.g., incorrectly converted dates or unreadable data.

Validations for translations improved

There are two validations for translations that can lead to many validation messages: 'Object is not translated' and 'Translation is not verified'. The number of messages depends on the number of languages ​​linked to a project version; the more languages, the more validation messages.

Both validations are now split into a validation per language, based on the languages linked to the project version. All messages for a language are grouped. That makes it easier, for example, to link the messages for a specific language to the right person (manually or in the dynamic model).

If messages for the old validations have already been assigned to a developer, they will be migrated to the corresponding new validations.

Translation validation

Validation 'Table has no primary key' is now more strict

The validation 'Table has no primary key' will from now on also check views that do not allow editing and have no bound tasks.

The Universal GUI and Indicium require the view to have a primary key at all times. This change may introduce new validation messages. If it is certain that the view is not accessible in the GUI or via the API, the validation message may be approved.

Whitelisted functions in the column's Default value query

The Software Factory generates a function for the query in the Default value for Columns (menu Data > Data model > tab Tables > tab Columns). This function is used as the default for the column.

However, some SQL functions cannot be used inside scalar functions, for example, NEWID(). These functions will fail since they cannot be used in this context. So, we created a whitelist to ensure some default value queries will not trigger the Software Factory to generate a function but instead use the given default value query as the default value.

The whitelist includes the following functions:

  • newid()
  • getdate()
  • getutcdate()
  • sysdatetime()
  • dbo.tsf_user()

To use these functions as a default value query, just specify the function.

Your own code into the catch part of atomic tasks

Community idea

Now, developers can weave their own code into the catch part of atomic tasks. The catch part has been separated into two templates, allowing templates to be weaved in-between. You could use this, for example, to weave code for logging.

Own code in catch part Example: add your own code in the catch part

Table tasks and table reports: dealing with empty subjects

Community idea

To disable reports when no data is present on the screen, we have introduced the setting Enable for empty subject for Table reports. When the box is unchecked, reports will be disabled (read-only) when no data is available in the subject. This can save quite some coding in a context procedure.

This setting is available, for example, in the menu Processes > Reports > Table reports, or in the menu User interface > Subjects > Links > Reports. This same setting is already available for Table tasks.

Enable for empty subject Enable for empty subject

Table tasks and table reports: default values

It is now possible to choose your own default values for table tasks and table reports on a project version level in the menu Projects > Project overview > tab Project versions > tab Form.

Note: adjusting this setting afterwards will not change the existing table tasks and table reports. It will only set the default value for new rows.

Default value for table reports and table tasks

Dark/light mode settings in conditional layout for cube view fields

Universal GUI

In the Universal GUI, it is now possible to use dark/light mode settings in the conditional layout for cube view fields. These settings are available in the menu User interface > Business Intelligence > tab Cube views > tab Conditional layouts > tab Universal.

For more information, see Conditional formatting and Universal conditional formatting.

Light and dark themes for Universal GUI

Undo a merge session

When a merge session has been completed, but the result is not what you expected, it is now possible to undo a merge session. For example, when resolved conflicts do not turn out as intended.

This comes with some limitations because undoing a merge session deletes a created project and base versions. You cannot undo a merge session if any of the project or base versions created by the merge session is in use. Whether a project or base version is in use, is determined by the Previous project and Previous project version in the Project versions tab.

The task Undo merge session is available in the menu Projects > Merging > tab Merging.

  • Merge to trunk - Deactivate branch: deletes the created project version in the trunk. The merge session is reopened.
  • Merge to trunk - Keep branch active: deletes the created project version in the trunk, the base version, and the branch. The merge session is reopened.
  • Merge to branch: deletes the created project version in the branch. The merge session is reopened. The created base project version is not deleted, since it is in use by the merge session.

Undo merge Undo merge session

Unit tests: rollback setting

A unit test is performed within its own transaction. When, during the unit test, the tested code did a rollback on its own, an error message was displayed. Now you can indicate for each unit test whether you expect the code to do a rollback or not. This setting is checked with the unit test result. The Should rollback setting is available in the menu Quality > Unit tests > tab Logic > tab Form.

Unit tests: 'Expected output' detail available for tasks

Community idea

In the unit tests, the Expected output detail is now also available for tasks (menu Quality > Unit tests > tab Expected output). Assertions can be made here for task output parameters.

Manual test administration

It is now possible to plan, run and keep track of manual test scenarios inside the Software Factory. You can use a manual test scenario to test a complete process from start to finish. As the name suggests, these tests need to be run manually. You can link a test scenario to a requirement, a business process, a feature, and an iteration.

A manual test scenario consists of test steps. You can describe tests and give the expected outcome, and add attachments for more information.

After designing a test scenario, you can create a Test run for a project and project version. A test scenario can contain test runs in multiple projects and project versions. This way, a scenario can be reused, e.g., a scenario for opening a project.

Test scenarios and test runs can be created in the menu Specification > Manual test scenarios.

Manual test scenario A manual test scenario with test steps

Now, you can assign a tester to a scenario to manually test your software according to the prescribed tests and outcomes.

  • An overview of all the test runs (for all projects and project versions) is available in menu Specification > Manual test scenarios > tab Test runs.
  • An overview of all the necessary test runs for a specific project and project version is available in menu Quality > Manual tests.

During test runs, you can approve successful test steps or disapprove steps if something goes wrong. It's possible to create a test finding to record work for a developer. For traceability, this Work item links to the Test scenario and Test run in which it failed.

Disapproved manual test A disapproved manual test

Show and hide all planning poker votes for a requirement

All submitted planning poker votes are now hidden for other users until the Show votes task is executed by one of the team members. When the votes are visible, the task will change into a Hide votes task . In this way, everyone can formulate and show their vote without being influenced by others.


Sub-names of generated objects

Sub-names of generated objects are no longer automatically approved. This prevents divergent naming between generated and non-generated objects. We advise you to use the same sub-name group for base projects as for your work projects.

This change can generate more validation messages.

Process flows: renamed overlapping process actions

Four process actions have been renamed to remove overlapping names. This only affects the translation.

  • Execute task -> Start task
  • Execute table task -> Start table task
  • Print report -> Start report
  • Print table report -> Start table report.

Process flows: no more translation objects for system flows and actions

Translations are no longer generated for system flows and system actions. These translations are redundant since the system flows and system actions will never be executed by the GUI.

TSF_send procedures support non-Latin characters upon executing in SQL

Community idea

To support the use of non-Latin characters in the text parameter of the TSF send procedures, the procedures need to be reapplied. An upgrade validation is created for this to assist developers in the upgrade to 2021.3. This concerns the procedures tsf_send_message, tsf_send_progress and tsf_send_assertion_msg.

Integrity check for table references

When creating or modifying a table reference, it can occur that the source column definition does not (or no longer) match the primary key of the source table. So, referential integrity is lost when the reference to a primary key is no longer valid. If this happens, a warning pops up stating that the integrity will not be checked.

Indicium no longer selects task and report parameters with invalid cardinality

Indicium checks the model's validity. In case of an invalid cardinality, Indicium won't load the model. By excluding task and report parameters with invalid cardinality, the model will now be loaded successfully. Validations are in place to notify you of any invalid cardinality in look-ups.

This change excludes task and report parameters with invalid cardinality as a possible cause for problems.

Changed column order for table task parameters

Community idea

The fields Column and Task parameter have switched positions to align them with the Task and Table fields. As a result, the Task parameter field is likely to be filled in first since it is placed before the Column field.

This concerns the fields in the menu Processes > Tasks > tab Table tasks > tab Table task parameters.

Table task parameter fields Fields for 'Task parameter' and 'Column' switched positions

Hide the main action bar

Universal GUI

It was already possible to hide the main action bar in the Universal GUI screens by adding the HIDE_TOOLBAR property to the root screen component.

Now, this property has been replaced by the checkbox Hide main action bar (menu User interface > Screen types > tab Form > tab Screen types).

During the upgrade, the screen types with the property HIDE_TOOLBAR will be converted to the Hide main action bar setting.

Hide main action bar Setting for hiding the main action bar

Rearranged fields in theme and conditional layout

Universal GUI

The color fields in Themes and Conditional layouts have been rearranged to avoid confusion about which fields control the Light mode and Dark mode colors. The fields are now separated in Light/Dark mode form groups for easier configuration.

Themes Light and dark mode in Themes

Conditional layout Light and dark mode in Conditional layout


  • Indicium would log a missing AutoML service URL error even when no models were queued to train. We've added a decision node to ensure the AutoML process actions in a system flow are not executed when there are no models queued for training.
  • After a validation was approved or fixed, the cursor was randomly placed. We changed the sorting, now the next record in the validation tree is selected.
  • To prevent errors, the button type parameters (e.g., add_button_type, confirm_button_type, etc.) now get a default value of 0 when performing layout unit tests.
  • When upgrading a project version, columns with data type 'rowversion' were added to the insert statements, and used to migrate data from the old table to the new table. Since it is not possible to manually insert data into a column using the 'rowversion' data type, the upgrade caused an error at this insert statement. Now, these columns have been excluded from the insert statements.
  • During the generation of the upgrade script, new identity columns were excluded from both the system-versioned table and the history table. This has been corrected because the history table needs this column to be filled initially with a value.
  • The Copy project task had a problem: templates inside this task were misplaced causing the task to fail when Help index was used inside the project. This has been fixed, projects can successfully be copied again.

Intelligent Application Manager


Tenants: moving users and copying user group to another tenant

Community idea

We created two new tasks for moving users and copying user groups to other tenants.

  • In the menu Authorization > Users, a task for moving a user to another tenant is available (only for Root administrators).

    Move user to tenant Move a user to another tenant

    Move user to tenant Move user to tenant

  • In the menu Authorization > User groups, a task to copy a user group to another tenant is available (only for Root administrators). This task will only copy the user group, not the users, because the users are assigned to a tenant. An option for including authorization is available. Checking the Include authorization box ensures that active roles are also copied to the user group copy.

Copy user group to tenant Copy a user group to another tenant

Copy user group to tenant Copy user group to tenant


Changed order no (sequence number) for IAM application in IAM

The previous versions of the Thinkwise Platform gave the IAM application a sequence number of 10. However, when changing the Software Factory sequence number to a number higher than the IAM application, the Project tab in the Software Factory would not get translated correctly. To ensure this won't happen, the sequence number of the IAM application has changed to 10000.

Community idea

The breadcrumb in the Applications screen (menu Authorization > Applications) now shows the alias of the selected application. This makes it easier to distinguish applications based on the same project and project version.

Breadcrumbs with alias Alias in the breadcrumbs


  • With the Universal GUI, users were unable to make changes in the File storage location screen in IAM (menu Projects > Project overview > tab Project versions > tab File storage locations). This was due to a hidden field that was mandatory. This has been fixed, the hidden field is no longer mandatory.

Data model changes

Data model changes for the Software Factory and IAM meta-models are listed here. This overview can be used as a reference to fix dynamic control procedures, dynamic model code or custom validations after an upgrade.

Changes Software Factory

Table changes

SF - From tableSF - To table

Column changes

SF - From tableSF - From columnSF - To tableSF - To column

Changes Intelligent Application Manager

Table changes

IAM - From tableIAM - To table

Column changes

IAM - From tableIAM - From columnIAM - To tableIAM - To column