Skip to main content

2018.3

ยท 18 min read

The 2018.3 release of the Thinkwise Platform features a lot of improvements and additions, and over 100 feature requests and issues have been addressed. The most important changes are listed in this post. A complete list of all changes can be found in the Thinkwise Community Portal.

Upgrade notes

SQL Server and .NET Framework support

The 2018.3 release of the Thinkwise Platform takes advantage of the latest the .NET Framework and SQL Server features regarding storage, security, performance, and more. The Software Factory development environment and the Intelligent Application Manager therefore require SQL Server 2012 or higher.

This also applies to the Windows and Web userinterfaces, which additionally need version 4.7 of the .NET Framework (4.7.2 is advised for Web).

The Indicium application tier requires SQL Server 2012 or higher, .NET 4.7.2 and .NET Core 2.1.5.

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

Extenders

A range of new settings and model extenders have been introduced to configure for instance grid column groups, maps components, schedulers, editable cubes and more.

A message is shown if a component configured using a user interface model extender is now configurable through the model. This message is only shown only to Developers and IAM Administrators.

extenders

Lazy model loading

To reduce the load time of large application-models, especially on mobile devices, the model API has been improved to allow for lazy model loading. By using views instead of stored procedures, Indicium and the new Universal user interface (more on that soon!) can now lazy load the model per subject or even per component and will startup instantly, even with extremely large models.

These views are exactly the same for both the Software Factory and the Intelligent Application Manager, making it completely transparent for Indicium and the Universal user interface which meta-source is used.

To make this possible we have extended the Runtime Configurations in the Software Factory with an Application ID and Application Alias, similar to IAM.

To connect to a 2018.3 Indicium application tier, the Mobile user interface needs to provide this ID or alias

lazy_model_loading

Smart upgrades

This release fixes an issue where tasks removed in a new version were not dropped correctly for SQL Server.

It is therefore recommended to execute the full tasks script with the next upgrade to delete any obsolete stored procedures from the database.




Software Factory

New

Upgrade report

After upgrading the Software Factory to version 2018.3, an upgrade report is shown, providing an overview of pending upgrade validations. Developers can either resolve the upgrade validations, skip the message or hide the message until the next upgrade.

The report is also accessible from the Advanced menu.

suite_upgrade_report

This release features an improved menu, designed in close collaboration with our UI/UX specialists and Academy trainers.

To improve the useability we:

  • Switched to a list bar menu to limit the nesting depth.
  • Added group icons (and hid the item icons).
  • Rearranged the items in new groups.
  • Merged the different code overview screens.
  • Added menu items for Domains, Custom screens and Runtime configurations.

menu_sf

Can't find the item you're looking for? Use Ctrl+Q to search the menu!

Improved Azure support

Several changes are made to the Software Factory and the Deployer to better support Azure SQL Database:

  • Added the option to use an existing (empty) database.
  • Added Azure support for DevExpress reports.
  • Added support for current_server and current_database.
  • Improved Azure File Storage support.
  • Improved support for the tsf_user function.
  • Removed USE statements from scripts.
  • Fixed drop scripts trying to drop system tables and views.
  • Fixed the create database script trying to set the recovery mode and database file storage.
  • Added support for Azure SQL Data Sync

A Code search feature has been added to search for string occurrences in code. This includes template code and control procedure code, but also prefilter, expression and validation code.

code_search

Create upgrade scripts

Upgrades of end-products are performed automatically by the Software Factory. With the integrated data conversion feature is possible to specify and data transformations. Sometimes, however, you need more granular control over the upgrade process, which can be achieved using code scripts. To better facilitate this, new program objects are created to use during an upgrade.

upgrade_prog_objects

At the start of the upgrade:

  • before_upgrade_always
  • before_upgrade_[from_version]_to_[to_version]

While old and new tables both exist, before the old tables with the old data are dropped. Data has already been migrated to the new tables using the version control settings:

  • during_upgrade_always
  • during_upgrade_[from_version]_to_[to_version]

At the end of the upgrade, after 'old_' tables are dropped:

  • after_upgrade_always
  • after_upgrade_[from_version]_to_[to_version]

The program objects with id's ending with _always will retain the assigned templates on every upgrade.

The program object with the id's containing the from- and to project versions can be used for code that is specific for an upgrade between the specified versions. When version control is set to a new from- or to version, the code will no longer be executed.

To assign a template to any of these program objects, use the UPGRADE code group in a control procedure.

Application icon

It is now possible to set the application icon in the Software Factory (previously only possible in the Intelligent Application Manager).

Application_icon

When an application in IAM does not have an icon, the project version icon will be used.

Hide icons

In addition to icons in the list bar menu and tree menu, it is now also possible to indicate whether icons are shown in the document tab pages and the container and detail tab pages.

hide_icons

Copy file and folder connectors

Two new process action connectors have been added to copy files and folders.

new_process_actions

XML-JSON transformation connectors

Process action connectors have been added to convert XML to JSON and vice versa.

new_process_actions

Validations

Several new validations are added to help create secure applications. For instance by checking if authorization prefilters are provided for tables containing sensitive data, and checking if authorization prefilters are correctly propagated to references tables.

Assign validations

Validations can now be assigned to specific developers.

assign validation

In the validation screen, prefilters are available to show all validations assigned to the current developer or all unassigned validations.

validation_assignment_prefilters

Refresh subjects

It is now possible to configure the refresh behavior of the user interfaces. Per subject, te desired refresh option can be specified for insert, copy, update and delete actions. These options are:

  • None
  • Row
  • Subject
  • Document

The refresh option can be set in the Performance tab page of the Subject and Variant settings.

refresh_acitons

Memory optimized

It is now possible to specify if the database management system used should keep a table into memory to optimize performance. Available options are:

  • No
  • Yes (durable)
  • Yes (transient) - only available for SQL server projects

memory_optimized

More information about memory optimized tables in SQL server can be found see here.

For DB2 projects, the property KEEPINMEM will be used. More information about this property can be found here.

For Oracle project, the option CACHE will be used. More information about this option can be found here.

Indexes

Unique indexes can now be configured to exclude null values.

exclude_nulls

Execute-as option

An EXECUTE AS option is added for SQL Server procedures, functions, clr procedures and clr-functions.

execute_as

Source code obfuscation

By tagging a project version with the OBFUSCATE_LOGIC tag, all logic will be applied using the with encryption clause.

This causes the source code of all stored procedures, functions views and triggers functions to be obfuscated. This feature is only available for SQL server projects.

Stored procedure transactions

It is now possible to mark a task or subroutine to execute as an atomic transaction for SQL Server and DB2. This will affect the generated code for this stored procedure.

atomic_transaction

Project selection warning

To prevent accidental changes in an inactive or live project version, a warning is shown when a non-work project is chosen in the project selector.

project_vrs_warning

Constant lines in charts

Added support for constant lines in charts.

Conditional layout in cubes

It is now possible to create conditional layouts for cube fields using the values of other fields.

Grid column groups

Grid columns can now be grouped using the Next group and Group label column options. Multiline column headers are also supported.

grid_column_groups

Test automation

It is now possible to add and copy grid rows in a test case.

Filter and search conditions

Options to filter or search on strings using ends with and does not end with conditions are added.

Deploying offline code

Offline code can now be deployed using the Execute button in the Functionality modeler.

Changed

  • Branch deactivation - After a branch is merged to the trunk, the branch project is deactivated. After merging, a new branch should be created from the freshly merged trunk to prevent unneccesary delta actions.
  • Branching performance optimizations - Several performance optimisations have been realised to speed up the branching and merging process.
  • Azure subfolders - The option to set a subfolder with a column is now implemented for Azure file storage.
  • Copying columns - Renamed the 'Primary key' option when copying a column to 'Copy primary key settings' to be more clear.
  • Gradients - Gradient theme settings are now hidden by default to discourage the their use.
  • Rename tile groups - A task was added to rename a tile group.
  • Copy project version - This task now also copies the project version folder (using the new process actions).

Fixed

  • Deleting cube fields - Deleting a cube field that is used by another fields (group or sort) will no longer try to delete those referenced items but will clear the group or sort setting instead.
  • Renaming a table - Tables used by process actions or containing references with column-tags will no longer cause the rename action to fail.
  • Deleting generated domains - Generated domains are now deleted properly when they are only used by generated columns, tasks etc.
  • Calculated fields - Calculated fields can no longer be set as a primary key or identity value.
  • Theme import performance - Importing a theme from another project is improved.
  • Copying linked projects - If domain elements are changed in the base project, they will be updated during generation.
  • Publishing offline logic - When only the casing of offline logic has changed, this change will now be picked up correctly on publishing.
  • Code review comments - The tasks to change the status of a comment will now update the trace columns.
  • Copying tables - When a table is copied, the generated indexes and constraints will remain generated.
  • Removing unused font - The task to remove unused fonts now also checks if tab_disabled_header_font_id and ribbon_font_id are using the font.
  • Model loading performance - Task parameters and report parameters now load faster.
  • Expression dependencies - When an expression column uses an alias in the expression query, this column now has the correct expression dependencies.
  • Renaming control procedures or templates - Fixed bug where generated parameter was not updated.

Intelligent Application Manager

New

The IAM menu has been redesigned using new colors and icons.

menu_iam

Create deployment scripts

A task is added to automatically create a the scripts for the Thinkwise Deployment Center.

This task performs the following actions:

  • Copy the install and upgrade scripts to create or upgrade the application database
  • Create scripts to provide IAM with the model, roles, user groups and application
  • Create scripts to apply the rights to the application database

create_scripts_for_deployment_center

Password strength

The minimum password strength for IAM authenticated users can be set in the global settings.

The following calculation is used to determine the password strength:

  • The total password length gives up to 3 points (at 10 characters)
  • Two uppercase characters and two lowercase characters gives 0.6 points
  • Two numbers gives 0.6 points
  • Two symbols gives 0.8 points

Setting the minimum password strength to 5 will require the user to match all the password requirements. Setting the minimum password strength to 4 allows the user to skip either symbols, numbers or varying casing.

When the user attempts a password change and the password strength is insufficient, the user will be notified of the shortcomings of the desired password.

Password strength requirements for RDBMS accounts or Windows accounts is delegated to the database server or active directory.

The extended property min_password_strength can no longer be used for this purpose.

Login limitation

Indicium no longer accepts more than 5 consecutive wrong passwords in a 15-minute window. When this threshold is reached, the user name cannot be used for authentication for 5 minutes. Existing authenticated sessions using this user name are not affected by the lock-out.

Changed

  • User with duplicate email adresses - Added email address and user id to the message indicating an email address is already in use by another user.
  • Update existing users - The first name, last name and email address of existing users is updated when executing the Update Active directory Group task.
  • Logging of role table - The Role table is added to logging concept to log inserts, updates and deletes, including renames and all rights.
  • Translation of a new application - When an application is copied, and the old translation mentions a project or version in the translation or tooltip, the value is replaced by the new project or version automatically.
  • Set rights task - The task to set table rights has been extended to include the new grid features.

Fixed

  • Assigning rights to database - When a user uses the task to assigning rights to the database, this task check whether the user has the correct permissions to assign rights.
  • Software Factory & IAM default upload path - Files uploaded to IAM using the Web user interface will now be stored in the installation directory.
  • Orphaned prefilter status - When a custom prefilter is deleted, the status of that prefilter (on/of) is also deleted.

Data model changes

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

Software Factory

Table changes

Old tableNew table
employeeusr
code_search
code_search_result
usr_runtime_configuration
validation_msg_assigned

Column changes

Old tableOld columnNew tableNew columnState
change_logchange_logcontrol_proc_codeNew
change_log_templatechange_log_templatetemplate_codeNew
colfield_in_next_grpcolform_field_in_next_grpChanged
colnext_grp_labelcolform_next_grp_labelChanged
colnext_grp_iconcolform_next_grp_iconChanged
colcolgrid_field_in_next_grpNew
colcolgrid_next_grp_labelNew
dttpdttpdefault_input_defaultNew
dttpdttpdefault_output_defaultNew
dttpdttpdefault_input_layoutNew
dttpdttpdefault_input_contextNew
extender_enum_valuevalueextender_enum_valueDeleted
extender_enum_valuedb_valueextender_enum_valuevalueChanged
indxindxignore_nullNew
project_vrsdb_nameproject_vrsDeleted
project_vrsmobile_proxy_addressproject_vrsDeleted
project_vrsrdbms_typeproject_vrsDeleted
project_vrsserver_nameproject_vrsDeleted
project_vrsproject_vrsdefault_iconNew
reportreportdisplay_parmtr_idNew
report_parmtrfield_in_next_grpreport_parmtrform_field_in_next_grpChanged
report_parmtrnext_grp_labelreport_parmtrform_next_grp_labelChanged
report_parmtrnext_grp_iconreport_parmtrform_next_grp_iconChanged
report_variantreport_variantapply_display_parmtr_idNew
report_variantreport_variantdisplay_parmtr_idNew
report_variant_formfield_in_next_grpreport_variant_formform_field_in_next_grpChanged
report_variant_formnext_grp_labelreport_variant_formform_next_grp_labelChanged
report_variant_formnext_grp_iconreport_variant_formform_next_grp_iconChanged
runtime_configurationruntime_configurationgui_appl_idNew
runtime_configurationruntime_configurationgui_appl_aliasNew
runtime_configurationruntime_configurationdefault_configurationNew
sf_configurationsf_configurationdefault_appl_lang_idNew
subroutinesubroutinesingle_transactionNew
tab_variant_formfield_in_next_grptab_variant_formform_field_in_next_grpChanged
tab_variant_formnext_grp_labeltab_variant_formform_next_grp_labelChanged
tab_variant_formnext_grp_icontab_variant_formform_next_grp_iconChanged
tab_variant_gridtab_variant_gridgrid_field_in_next_grpNew
tab_variant_gridtab_variant_gridgrid_next_grp_labelNew
tasktasksingle_transactionNew
tasktaskdisplay_parmtr_idNew
task_parmtrfield_in_next_grptask_parmtrform_field_in_next_grpChanged
task_parmtrnext_grp_labeltask_parmtrform_next_grp_labelChanged
task_parmtrnext_grp_icontask_parmtrform_next_grp_iconChanged
task_varianttask_variantapply_display_parmtr_idNew
task_varianttask_variantdisplay_parmtr_idNew
task_variant_formfield_in_next_grptask_variant_formform_field_in_next_grpChanged
task_variant_formnext_grp_labeltask_variant_formform_next_grp_labelChanged
task_variant_formnext_grp_icontask_variant_formform_next_grp_iconChanged
themethemedocument_show_document_iconsNew
themethemetab_show_detail_iconsNew
themethemegrid_grp_border_colorNew
themethemegrid_grp_text_alignmentNew
employeeemployee_idusrusr_idChanged
employeeemployee_nameusrusr_nameChanged
employeeusrappl_lang_idNew
employeeusrshow_sf_upgrade_msg_overviewNew

Intelligent Application Manager

Table changes

There are no name changes or new tables for IAM.

Column changes

Old tableOld columnNew tableNew columnState
colfield_in_next_grpcolform_field_in_next_grpChanged
colnext_grp_labelcolform_next_grp_labelChanged
colnext_grp_iconcolform_next_grp_iconChanged
colcolgrid_field_in_next_grpNew
colcolgrid_next_grp_labelNew
global_settingsglobal_settingsmin_password_strengthNew
project_vrsproject_vrsdefault_iconNew
reportreportdisplay_parmtr_idNew
report_parmtrfield_in_next_grpreport_parmtrform_field_in_next_grpChanged
report_parmtrnext_grp_labelreport_parmtrform_next_grp_labelChanged
report_parmtrnext_grp_iconreport_parmtrform_next_grp_iconChanged
report_variantreport_variantdisplay_parmtr_idNew
report_variant_parmtrfield_in_next_grpreport_variant_parmtrform_field_in_next_grpChanged
report_variant_parmtrnext_grp_labelreport_variant_parmtrform_next_grp_labelChanged
report_variant_parmtrnext_grp_iconreport_variant_parmtrform_next_grp_iconChanged
tab_variant_colfield_in_next_grptab_variant_colform_field_in_next_grpChanged
tab_variant_colnext_grp_labeltab_variant_colform_next_grp_labelChanged
tab_variant_colnext_grp_icontab_variant_colform_next_grp_iconChanged
tab_variant_coltab_variant_colgrid_field_in_next_grpNew
tab_variant_coltab_variant_colgrid_next_grp_labelNew
tasktaskdisplay_parmtr_idNew
task_parmtrfield_in_next_grptask_parmtrform_field_in_next_grpChanged
task_parmtrnext_grp_labeltask_parmtrform_next_grp_labelChanged
task_parmtrnext_grp_icontask_parmtrform_next_grp_iconChanged
task_varianttask_variantdisplay_parmtr_idNew
task_variant_parmtrfield_in_next_grptask_variant_parmtrform_field_in_next_grpChanged
task_variant_parmtrnext_grp_labeltask_variant_parmtrform_next_grp_labelChanged
task_variant_parmtrnext_grp_icontask_variant_parmtrform_next_grp_iconChanged
themethemedocument_show_document_iconsNew
themethemetab_show_detail_iconsNew
themethemegrid_grp_border_colorNew
themethemegrid_grp_text_alignmentNew
usrsur_nameusrDeleted
usrnameusrDeleted
usrname_prefixusrDeleted
usrusrsur_nameNew
usrusrnameNew
usrusrusr_typeNew
usrallow_change_totpusrallow_fallback_to_emailChanged