The 2021.2 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
- Breaking changes
- Software Factory
- Fallback language for applications
- Default user groups
- Verify synchronization to IAM
- Partitioning available
- Validation on shortcuts that are in use by the GUI
- New menu setting: 'Show open documents'
- New setting 'Translation review required'
- New domain setting: make domain elements unavailable
- New domain controls: 'Datetime short' and 'Time short'
- 'Debug' as message location for sending messages
- Priority added to messages with regular expression
- Table tasks can be marked as grid double click action
- Trace information updates
- Column 'Type' in variant screens
- First column by default set to primary key
- A new connector process action for OAuth 2.0 connection
- Sequences available
- Planning poker to estimate story points for requirements
- Project version increment in global configuration
- Continue working in branches after merging
- AWS S3 file storage subfolders
- Unit tests: save and retrieve runtime info in results
- Unit tests: check output parameters for null or not null
- Unit tests: prepare query available
- Unit tests: output parameters for assertion query
- Unit tests: parameter length increased
- Unit tests: Task for showing unit test code
- Version information extended
- Task for creating a new project
- Disabled mutation buttons in a view
- Work can't link to itself
- Data sets moved to another menu
- Prefilters shown for subject tab pages
- Behavior of process action id names
- Subroutines for Indicium (Legacy)
- Developer field for a changelog after a merge
- Changed responsibility display in control procedures and code search
- Intelligent Application Manager
- Data model changes
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).
Using Indicium (both Universal and Legacy) requires the .NET 5 Windows Hosting Bundle. Additionally .NET Framework 4.7.2 is required when using:
- Indicium Legacy (Windows/Mobile GUI)
- Crystal Reports
- SQL Server Reporting Services.
For more information about supported technologies, see the Thinkwise Lifecycle Policy.
We have changed the data model for process action output parameters so a process variable can be assigned only once. An upgrade validation is made for the deleted duplicate assignments.
Subroutines for type Function moved
The subroutines for type Function with return value
table have moved to another code file, from
File storage extension whitelist moved
From now on, the extension whitelist for file storage is specified in the Software Factory instead of in the Indicium configuration. This whitelist can be used to limit the file types that can be uploaded. It can be defined for each file storage location separately, in the menu Projects > Project overview > tab Project versions > tab File storage location > tab Extension whitelist.
The whitelist setting in Indicium's appsettings.json won't be used any longer. So, as of this release, the whitelist has to be specified in the Software Factory.
Fallback language for applications
A fallback language can now be specified by developers for a project version. The fallback language will be applied when a user uses a language that is not available for the application. It will affect both users using the application via IAM as well as users starting the application directly on the Software Factory. A language can, for example, be available if the application is started via IAM but not if it is started directly on the Software Factory. In that case, the fallback language is used.
When upgrading to version 2021.2, the fallback application language will be set as English. If English is not a valid language in your application, the upgrade will set the fallback language to the language having the most translated objects.
- The fallback language for a project version can be changed in the menu Projects > Project overview > tab Project versions > tab Form > tab Project version.
- The default fallback language for new projects and project versions is set in the menu Settings > Configuration.
As of Indicium version 2021.1.18, the session variable
tsf_appl_lang_id is available. The statement
select SESSION_CONTEXT(N'tsf_appl_lang_id') will send the user's language to the SQL server, for instance,
ENG or NL.
Default user groups
To speed up the rollout of an application instance or an application for a new tenant, we've added the option to create a reusable, preconfigured set of user groups and role assignments in the Software Factory.
It is called Default user groups and can be found in the Software Factory in the menu Access Control > Default user groups. Here, developers can register the default user groups and role assignments. This may vary per project version.
In the Intelligent Application Manager, users with the following roles can add the default user groups to a certain application for a provided tenant: root administrator, application administrator, or application owner. Selecting a tenant is only possible for root administrators and application administrators. An application owner may only provide for their own tenant.
The default user groups can be added to an application in the menu Authorization > Applications > tab Authorization, by using the task Apply default authorization. Any user group that does not yet exist for the tenant will be created, and new role assignments will be added. Existing role assignments will not be removed. Any role that is not available due to module authorization will not be assigned.
Default authorization in IAM
Verify synchronization to IAM
It is now possible to verify your synchronized model. Since the model is not locked during synchronization, it can be changed while synchronizing is in progress. This could lead to errors when a change applies to an object that has already been synchronized. For example, when a table has been renamed, but the columns have already been synchronized with the old table name.
By default, the option Verify synchronization is checked. Thinkwise advises sticking to this default. Deviate from it only if you're absolutely certain that no changes will be made during synchronization (e.g., in a one-man project).
When the model changes during synchronization, a warning is shown. The prefilter Only warnings for last run will show which items contain changes. Based on the outcome, you can decide to rerun the synchronization.
Warning: model has changed during synchronization
It is possible to verify the synchronized model by:
- Synchronization to IAM (in the menu Deployment > Synchronization to IAM > task Synchronize to IAM ).
- Synchronization to disk (in the menu Deployment > Synchronization to IAM > task Write to Disk ).
- Creating a deployment package (in the menu Deployment > Deployment package > task Create deployment package ).
Warning: This is an advanced feature that should not be used without a proper understanding of SQL Server's implementation of partitioning.
It's now possible to apply partitioning to the tables in your application. Partitioning allows data in a table to be stored in separate chunks on the file system. For very large tables this could possibly lead to a performance increase.
To get started with partitioning, a partition scheme needs to be created in the menu Data > Data model > tab Tables > tab Form. Open the pop-up next to the Partition scheme field.
The following information is required:
- A name for the partition scheme (field: Partition Scheme).
- A domain to determine which data type will be used to partition the data (field: Domain). This domain needs to be of the same data type as the column that is going to be used as the partition column.
- The alignment for the boundaries of the partition ranges (field: Range). The boundaries can be aligned either left or right.
Create a partition scheme
After the partition scheme is created, boundaries need to be defined in the Partition boundaries detail tab. Boundaries determine where the data is going to be split. In the example below, every year on January 1st.
The last step is to apply the partitioning to the table, in the menu Data > Data model > tab Tables > tab Form. Select one of the created partitions in the field Partition scheme, and select a column in the field Partition column. The partition column is the column that contains the data that will be used to partition the table.
Apply a partition to a table
Validation on shortcuts that are in use by the GUI
Some shortcuts (shift code + ASCII code) are dedicated to being used by the GUI, for example [ctrl]+[R] for filtering. So, if a shortcut is already in use by the GUI, it won't work for a self-made object like a task, report, or prefilter. New validations have been introduced to warn about this situation.
New menu setting: 'Show open documents'
By default, the open screens are shown on top of a menu as Open documents. Now you can specify in the Menu settings if the open documents should be displayed or not. This is a setting that only affects the Universal GUI.
The Show open documents checkbox can be found in menu User Interface > Menus > tab Menus > tab Menus. Previously, these open
documents could be hidden by using the extended property:
Show open documents
New setting 'Translation review required'
In the 2021.1 version of the Thinkwise Platform, the option was introduced to approve and disapprove translations. Translations that were not yet approved or disapproved, would lead to validation messages.
However, not every project requires to review translations. For example, single developer projects, or projects where translations are being reviewed by an external party.
Therefore, we've created a new setting named Translation review required in the menu Settings > Configuration. When this setting not checked, the tasks to (dis)approve translations will be hidden. Also, no validations regarding (dis)approved translations will be shown.
Translation review required
New domain setting: make domain elements unavailable
Windows GUI Web GUI Community idea
It is now possible to mark a domain element as 'unavailable'. This way, it won't be shown in the drop-down, so it can't be selected for future entries. This setting doesn't affect older or historic entries. For these, the domain element is still available.
A domain element can be marked as 'unavailable' by unchecking the Available checkbox in menu Data > Domains > tab Elements > tab Form > tab Element.
New domain controls: 'Datetime short' and 'Time short'
Universal GUI Community idea
Two new controls (DATETIME_SHORT and TIME_SHORT) have been introduced. These can be used in domains (menu Data > Domains > tab Form > field Control). The controls show a DateTime or Time without seconds.
Note: In the Windows GUI and Web GUI, these controls can be used, but will be treated as DateTime/Time (with the seconds).
New domain controls
'Debug' as message location for sending messages
We have added 'Debug' as a message location, which will show messages in the debug window when running the application in developer mode.
The message location indicates how messages should be displayed and can be set in the menu User interface > Messages. The options 'Popup', 'Panel', and 'None' were already available.
Priority added to messages with regular expression
Messages with a regular expression are parsed based on the error code. The messages are sorted alphabetically and the first message that matches the error code is used to parse the message. Now, we've added the priority column to these messages, so they will be sorted based on the priority.
Table tasks can be marked as grid double click action
Using the checkbox Grid double click in a table task makes it possible to execute the task by clicking twice on the desired row. The checkbox can be found in
menu User Interface > Subjects > tab Subjects > tab Links > tab Tasks. Previously, this was possible by using the extended property:
Grid double click
Trace information updates
The trace information has been improved by updating many tasks and triggers. From now on, when other fields in a table are updated, the
update_date_time trace fields are also filled.
Column 'Type' in variant screens
The column Type was not present for several variant screens, like Filter, Search, and Sort. This column has been added for those screens, including the conditional layout. This made it possible to add the prefilters Possibly visible and Possibly editable, which are also available at the main table level.
First column by default set to primary key
Usually, the first column of a table is used for the primary key. Therefore, as of this release, it will be marked as such automatically. If you wish to deviate from this, it is still possible to uncheck the box. Previously you had to mark each first column manually as a primary key.
A new connector process action for OAuth 2.0 connection
Windows GUI Community idea
A new connector process action has been added: the OAuth connector. You can use it to retrieve an OAuth 2.0 authorization code, by redirecting a user to an external identity platform.
It can be used, for example, to leverage the Microsoft Graph API (Azure, Office 365, Microsoft 365) on behalf of a user instead of a service account. For this process action, input and output parameters are added.
New Oauth connectors
This process action needs an OAuth server configuration to work:
Oauth server configuration
This server can be configured in the menu Projects > Project Overview > tab Project versions -> tab OAuth servers.
It is possible to override these settings for development/testing purposes in the runtime configuration (menu Deployment > Runtime configuration > tab OAuth servers).
It is also possible to override the configuration settings in IAM (menu Authorization > Applications > tab OAuth server configurations).
Sequences can now be created in the Software Factory. Sequences are database objects that can be used as a counter. A sequence can be queried to get the next number in the series. You can find the new sequences screen in the Data menu.
When a sequence is created, it will be generated to its own code file, which can be run on the database. The current implementation of sequences does not allow them to be used as a replacement for identity columns. Sequences can, however, be freely used in any functionality, for example, in defaults or default value expressions for a column.
Planning poker to estimate story points for requirements
To make a good story points estimation for requirements with your team, the Planning poker feature has been added to the Software Factory. This feature can be found as a detail of the menu Specification > Requirement overview. Since the individual estimations may lead to discussion, a discussion panel is available. A message in the discussion panel can only be deleted and edited by the user who sent it.
- By using the Vote task, a development team can vote individually for their estimation of the story points. You can update your vote by using the task again.
- When everyone has voted, the story points can be set for the selected requirement by using the Set story points task. The highest vote is selected by default.
Planning poker overview
Project version increment in global configuration
It is now possible to set a default project version increment of a hundredth, a tenth, or a whole number (so, .01, .10, or 1). By default, it's .10. You can change this setting in the menu Settings > Configuration > tab Configuration > field Project version increment.
Continue working in branches after merging
When merging a branch to the trunk (or another branch), it is now possible to indicate if you want to deactivate the branch (default) or continue working in the branch. When continuing the branch, a new version will be created in the branch after merging, based on the new target version.
AWS S3 file storage subfolders
It is now possible to work with file storage subfolders when using the AWS S3 file storage.
Subfolders for AWS S3 file storage
Unit tests: save and retrieve runtime info in results
When running a unit test, the runtime configuration, host, and database name are now stored in the Results tab.
The runtime configuration that was most recently used for all unit tests within a project version, will now be filled by default when executing a unit test. Previously, the default set runtime configuration was used. Since you'll usually use the same configuration, this will save manual adaptation if your configuration deviates from the default set runtime configuration.
The host and the database name are also shown for debugging purposes.
Unit tests: check output parameters for null or not null
Unit test output parameters can now also be validated with a 'null', and 'not null'. Previously, validation was only possible with an 'equal to' function.
Expected output for 'null' and 'not null'
Unit tests: prepare query available
We have added the ability to add a prepare query to a unit test. A prepare query can be used, for example, to influence parameter values. It can be created in the menu Quality > Unit tests > tab Logic > tab Form > tab Prepare. Check the Use prepare query box to enable the query field.
Unit tests: output parameters for assertion query
The output parameters for a unit test are now also available in the assertion query.
Unit tests: parameter length increased
The length of the input and output parameters is increased so that all the object names will fit.
Unit tests: Task for showing unit test code
In the unit test screen (menu Quality > Unit test), we have added a task to show the unit test code. This can be used to debug the unit test.
Task for showing unit test code
Version information extended
The version information (table
sf_info) of the Software Factory now contains information of the user performing the installation or update, and the date on
which the installation or update was performed. It used to contain only information regarding the creation of the installation or update package by Thinkwise.
Task for creating a new project
It is no longer possible to add a project by creating a new project record. Instead, you should use the task Create project in the menu Projects > Project overview > tab Projects.
New task: create project
This task creates a project and a project version using the default configuration.
The default configuration is set in the menu Settings > Configuration. When critical information is missing, an error is shown and you are guided to the Configuration screen.
Disabled mutation buttons in a view
Since a view is by default not editable, we made sure that from now on, the Software Factory by default disables the mutation buttons (add, copy, delete, edit, mass update, import) when you create a view. The reason is, that it was often forgotten to disable the buttons, which resulted in errors if the user uses them. Of course, you can still deviate from this default.
Work can't link to itself
There is no point in linking work to itself. For this reason, this is prevented from now on, by means of an error message.
Data sets moved to another menu
The data sets screen has been moved from the Data menu to the menu Quality > Unit tests > tab Data sets. The reason is, that data sets are only used in combination with unit tests.
Prefilters shown for subject tab pages
In some tab pages in the Subject menu (eg Search, or Filter), a prefilter named Possibly visible is active. This prefilter hides all the columns that will be hidden in the end product, because hidden fields are not the typical fields used for searching or filtering. But since the prefilters were not shown as buttons here, this meant that information easily could be missed. Therefore, the screen types for these tab pages have been altered to show the prefilter buttons on-screen.
Behavior of process action id names
The process action id is now automatically entered if the process action uses an object from the model, this provides the name with a context. If this is not the case, the developer has to enter an id. This way, the process action id gets a logical name that makes its function recognizable. The process action id can be found in the menu Processes > Process flows > tab Process actions > tab Process action > field Process action (under Description).
Subroutines for Indicium (Legacy)
It is now possible to choose whether or not a subroutine is published as an API by Indicium and/or Indicium Legacy. This is set in the menu Business Logic > Subroutines > tab Form.
Before, enabling the API checkbox would publish the subroutine as an API for both runtime service tiers. Now, the API checkbox only affects Indicium, and the API (legacy) checkbox only affects Indicium Legacy.
Any current subroutine with the former API checkbox enabled will have both checkboxes enabled after the upgrade.
Checkboxes for publishing a subroutine as an API
Developer field for a changelog after a merge
For every change pushed to the changelog, the developer id was changed as well. This also happened when a branch was merged. The person executing the merge session was set as the developer id for the changelog. The developer id will now remain the same when new changes are pushed to an open changelog of a control procedure with a review status or when a branch is merged.
Changed responsibility display in control procedures and code search
We've improved and extended how the responsibility is displayed in control procedures and code search:
- menu Business logic > Functionality > tab Templates: When a control procedure is in development, and you are not the responsible developer, the templates would already be shown in red. The same behavior now also applies when a control procedure is in review and you are not the responsible developer. In that case, the templates will also be shown in red.
- menu Business logic > Code search: The same now also applies to hits on control procedures in development or in review when using Code search. If you are not the responsible developer, these hits are shown in red.
Truncation error when generating foreign key indexes - When generating foreign key indexes, the name of the foreign key is 'fk_' + the name of the foreign key. However, a foreign key has a varchar(300) data type, and an index has a varchar(128) data type. So, when a foreign key was too long, it led to a truncation error. To solve this, the foreign key name must be shortened, but also remain unique. Therefore, the foreign key name is now shortened to 120 characters, followed by a unique identifying row number (00001, 00002, etc.).
Form fields after a hidden field - Universal GUI When a field is hidden but contains form group or tab page settings, the next visible field in the form will inherit this information.
Merging to branch
- When merging to the branch, the status of the old branch project version will now be changed to the chosen status in the Execute merge session task pop-up.
- The merge sessions now have a default description for the two merging project versions. This editable description will also be used as a description for the new project version.
- Community idea When merging to the branch, the project folder for the new project version is now copied from the previous branch version instead of the trunk.
Merge of control procedure in review - When a merge session includes control procedures in review, this would in some scenarios cause a change in the control procedure or one of its templates submitted for review would be omitted from the control procedure's changelog in the resulting merged project version. This has been resolved.
Intelligent Application Manager
Multi tenancy available
As of this release, multi-tenancy is supported. Tenants are only visible for root and application administrators. Other administrators can only see, add, and update users and user groups that are from the same tenant.
One tenant is included in every IAM by default. New tenants can be created in the new tenant screen, which you can find in the menu Authorization > Tenants.
Add a tenant
For every user and user group, it is possible to add a tenant.
For users, the field Tenant is available in the menu Authorization > Users > tab Form. For user groups, the field Tenant is available in the menu Authorization > User groups > tab Form.
Which tenants have access to which modules is visible in various ways:
- Per tenant: information about the current access to applications and modules for each tenant (menu Authorization > Tenants > tab Form). The tabs Application administration analysis and Current access analysis can be used to delve deeper into the details.
- Per application: In the applications screen (menu Authorization > Applications > tab List), information about which tenants have access (column: Accessible by tenants) and which tenants have administrative access (column: Administrated by tenants) is available.
Tenant overview per application
To delve deeper into this information for the selected application, two cubes have been added to the menu Authorization > Applications > tab Analysis):
- Application administration analysis: per application, the assigned administrative roles for each tenant, both root IAM administration and tenant self-administration.
- Current access analysis: per application, which users have access to which module.
Detailed tenant information
It is now possible to set up module authorization in IAM. It can be used, for example, to limit or extend a tenant's access to IAM. This can be done at the application level and only by a root administrator or an application administrator.
To enable module authorization for an application, the Limited module access box needs to be checked (menu Authorization > Applications > tab Form).
Enable module authorization. Field of interest: Limited module access
This activates the tab Module authorization, where modules can be authorized (activated or deactivated) for the application.
A subset of authorized modules
Module authorization can affect roles:
- Roles that are not a part of a module are always available.
- Roles that are part of at least one authorized module, are also available.
- So, if a role is only a part of unauthorized modules, it is not available.
Role configuration visible
The role configuration is now visible in IAM. This can help application administrators to configure user groups and troubleshoot authorization issues.
Role rights are displayed in three tabs (only granted role rights are shown):
- menu Projects > Project overview > tab Project versions > tab Roles.
- menu Authorization > Applications > tab Authorization > tab Roles.
- menu Authorization > User groups > tab Authorization > tab Roles.
Password expiration in IAM
In IAM, in the Global settings (menu Settings - Global settings) it is now possible to add an expiration period for passwords.
For each user, the administrator can select an Expiration policy in IAM (menu Authorization > Users):
- Force expired - The user needs to change the password on the next login.
- Default expiration policy - After the number of days specified, the user needs to change the password. When the field Password expires in (days) is empty, passwords with * Default expiration policy will never expire.
- Never expires - Use this for service accounts that never need to expire and have no user available to change the password.
Faster second synchronization
We've added a new mechanism to cache the synchronization. This results in a faster second synchronization of limited changes in the same project.
Note: working around supported features is not supported and not advised. But if you decide to make a manual change in the model anyway, you should also update the table sync_view to make sure that the synchronization will work as expected.
Windows GUIWeb GUI Indicium
Authentication type External will provide authentication for Azure Active Directory. You can set the authentication for users in the menu Authorization > Users.
Role inactivation instead of disposal
When roles or modules are no longer available, the existing role assignments and module assignments will now become inactive. Inactivation instead of disposal allows an administrator to fix mistakes in the configuration, either in IAM or during synchronization.
Roles can become unavailable due to changes in modules or module authorization, or due to synchronization.
In the example below, a role assignment is highlighted because its role is no longer available (menu Authorization > Applications > tab Authorization > tab Roles):
The highlighted role is assigned but no longer available
Application owners are no longer allowed to activate or deactivate an application. This prevents the application owners from (de)activating applications that an application administrator is still working on. So, the application administrator decides when an application is ready to be handed over (activated) to an application owner.
Applying roles or user rights to the Software Factory database
IAM will now show an error when trying to apply roles or user rights to the Software Factory database. Applying roles or user rights to the database could overwrite the necessary rights needed for the Software Factory to function properly.
Default title for new and upgraded environments
Previously, the Title in IAM (menu Settings > Global settings) was always filled with 'Thinkwise Software Factory', even if it was manually changed or emptied. Since this can affect, for example, your splash screen, this has been changed:
- Newly installed environments still initially use 'Thinkwise Platform' as splash- and application title.
- Upgrades no longer override manual changes to the title.
- When installing the Software Factory in an IAM environment, the title is still set to 'Thinkwise Software Factory'. This may override a manually configured title.
Data model changes
Changes Software Factory
|SF - From table||SF - To table|
|SF - From table||SF - From column||SF - To table||SF - To column|
Changes Intelligent Application Manager
|IAM - From table||IAM - To table|
|IAM - From table||IAM - From column||IAM - To table||IAM - To column|