Propose your fantastic ideas regarding the Thinkwise Platform to our Product Team.
When searching for code in the screen 'Code search', inactive control procedures (and their templates) are always included. Most of the times, however, I want to search/analyze impact in active control procedures because they have an actual effect on your end product. Results for inactive control procedures then only distract me.I propose to add a new checkbox to this screen, making this an optional feature: "Extend search to inactive control procedures". This checkbox should be empty by default, in my opinion.
Wouldn’t it be nice to send a link via email to allow for password Reset instead of a token. Additionally for the IAM operator to be able to set a template for the Reset password email that will be send to the user.Scenario:User presses the forgot password. Receives an email, provided the email or username entered exists under an IAM user. The User upon pressing the link it is redirected to Reset password page The User enters only new password and verifies password, provided it meets strength and complexity.Cons: We avoid the sending of tokens and the User needing to copy/paste or memorize it to enter it in the existing reset password.Pros: The Reset password becomes simpler, as the token can be already enbedded in the link send in the email.
If we want to check a field on a valid input value (and prevent saving) we need to create a default, a layout and a trigger procedure.We regularly use a combination of a default + trigger because the user will see an error message as early as possible and the trigger would prevent the insert the record.The default will validate the field after leaving it (@cursor_from_col_id) and return an error message. The trigger will also validate the field with the same code (but with the inserted of course).There’s a problem with this combination when a user fills in the field and saves the form without leaving the field first. In this case the error message (see screenshot below) will be shown twice. Once for the default and once for the trigger. A solution could be to add a layout procedure that also validates the field with (again) the same code. The layout procedure could disable the save button when it determines that the field value is incorrect. But this result in a default, layout and a trigger with the same validation check. Not exactly low code.What if the TSF offers a field validation option? A screen to create one or multiple validations per field. It could range from simple checks like: field is empty, field value must be unequal to 0 or the option the add a query. We could also add a desired result to a configured field validation like showing an error message or placing a conditional layout.These new field validations need to be executed in the GUI before saving/inserting a record and could act as a default because the validation is linked to a field. They can also be used for dynamically creating the validation within triggers.
We appreciate having the Simulate User functionality available in Indicium/Universal GUI nowadays! It is a quick and easy way to reproduce issues our end users encounter. There is however one thing we noticed, which to us is a risk in terms of logging. It should always be clear that it is a Simulation done by another User. Therefore I believe the tsf_usr functionality should always retrieve the originally logged in User. Due to the fact that that is currently not happening, our Trace field logic (based on this ThinkStore article https://community.thinkwisesoftware.com/user-interface-88/trace-your-changes-by-adding-trace-fields-1107) actually registers the Simulated User as Insert/Update user, instead of the originally logged in user. This is a risk, since we use these Trace fields (icm with system-versioning on certain tables) to be able to see who did what and when.As per suggestion from @Vincent Doppenberg: Could a separate function be introduced for the Simulated User?
I work on a huge project for a client and the data model contains 1200+ subjects. Every branch we make works on other subjects, for example a Project branch works on Project related subjects and the CRM branch works on the CRM subjects. These branches currently both have the same subjects (1200+) and this makes the branch (data model) pretty big. What would be great to have is that we could define a Module; or a part of the data model specific for that branch. Probably the CRM module doesn't need all 1200+ subjects but only needs around 300 or so. If that Module would only have in it those 300 subjects needed to develop the CRM, then it would save a lot of space, time and most importantly synchronization time (syncing to IAM). What do you think about this Community? Would love to hear more about this.
We are running a development platform with about 30 developers and thus we are often bothered with a slow working SF, which primarily happens when someone is either generating definitions,validating definitions or executing a merge. But it also can happen sometimes just by trying to save a template or a new table column.The root cause of this, in my opinion, is the fact that all of our transactions within the SF are executed on one single SF database. Especially during generation or merging a lot of data is being read, deleted or created in that single database, which often results in a slow performance or even processes being assigned as deadlock victim.I believe the performance of the SF could largely be improved if we were able to run multiple instances of the SF database, maybe even across multiple database servers, and be able to merge branches from different databases. A couple of great benefits are:Whenever I work in a branch I am only bothering people that work in the same branch as I do or at least people that work in the same SF database that I do. It greatly improves scalability, especially when it supports multiple database serversEspecially the first benefit is great for a performance improvement.With about 30 people developing there are several merges happening in a week. Consider the trunk to have it’s own SF-database and executing a merge to the trunk. This merge will then primarily lock access to the SF-database that belongs to the trunk and not slow down performance of the other 29 developers still developing in their own branches.
Currently if I open the application (directly to the SF) it'll open with the given project version. In my case I put in 'null' so it will open the latest development version. When I do an upgrade in the Software Factory and then make a new project version, I have to close my application to open the same application again, just to change the project version of the application. What I would like as developer is that when I press the 'Refresh model' task (only available to developers) that the GUI (application) will look if there's a newer development version available. Then if so, that it will give me a message saying if I would like to instead switch my application project version to the newer project version; a simple yes/no would do the trick. That would mean I don't have to close my application anymore and it is always running the latest project version. It will ensure I'm never making changes in a wrong version because I didn't notice that the project version I'm working in (in the SF) is not the same version (in the application) I'm looking at. Side note: When a new project version is made and the old one has been made 'Inactive', the GUI will actually freeze upon refreshing the model
I would like indicium to have support for managed identity in Azure. Managed Identity is a way to prevent to have usernames/passwords in the appsettings.json and therefor to have less risc of hacking. For those unknown with Managed Identity, documentation is on this page: https://docs.microsoft.com/nl-nl/azure/active-directory/managed-identities-azure-resources/tutorial-windows-vm-access-sql and https://docs.microsoft.com/nl-nl/azure/active-directory/managed-identities-azure-resources/overview
When exporting an excel file, the group labels are not included in the excel file. As you can see in the image, the labels ‘kostprijs’ and ‘bruto verkoopprijs’ will not show up in the excel doc. The problem occurs when I translate the columns ‘huidige kostprijs’ and ‘nieuwe kostprijs’ to ‘huidige’ and ‘nieuwe’ (in order to make the screen readable). Then, the excel only shows columns named ‘huidige’ and ‘nieuwe’, which would make the excel unreadable. Is there a way to work around this problem? And otherwise, could it be possible to include group labels in an excel export? Kind regards, Mark
The support for integrating Open ID providers with the Thinkwise Platform is great, but also a very common functionality in modern applications. With support for the Microsoft Common tenant around the corner, another important improvement is delivered on the topic of Single Sign-On capabilities.As already referred to by Vincent in this blog from almost 1,5 years ago, the next step is User Provisioning (sometimes called Application Provisioning or Identity Provisioning). That feature helps streamline and automate the creation of new users within an organization, including a pre-defined set of Roles & Rights.For the Thinkwise Platform User Provisioning would entail both the creation of a User and the assigning of applicable User Groups.Not a new Idea, since it's already on the Indicium backlog, but by raising it as Idea and putting it up for a vote I hope we'll manage to move it higher up the agenda!
As also discussed in the following link, since SQL Server 2019 inlineable scalar functions are an option. This can make sure a query can run parallel. The tsf_user function is not inlineable at this moment. When using this function in a heavy query, it will not be executed parallel as you can see in the images below. Not inlineable not inlineable Query with tsf_user not being executed parallelWhen removing the use of variables in the function, the function is inlineable and the queries will run parallel when needed:Inlineable = trueMy heavy query with tsf_user goes parallelThe script I have used is:SET QUOTED_IDENTIFIER ON;SET ANSI_NULLS ON;GOCREATE OR ALTER FUNCTION tsf_user()RETURNS tsf_userASBEGIN --control_proc_id: sql_tsf_user --template_id: sql_tsf_user --prog_object_item_id: sql_tsf_user --template_description: Returns context_info or system_user RETURN CASE WHEN CONTEXT_INFO() IS NOT NULL THEN CASE WHEN LEN(REPLACE( CONVERT( VARCHAR(128), CONTEXT_INFO() )COLLATE Latin1_General_BIN, CHAR(0), '' ) ) <> 36 THEN REPLACE( CONVERT(VARCHAR(128), CONTEXT_INFO())COLLATE Latin1_General_BIN, CHAR(0), '' ) WHEN SERVERPROPERTY('EngineEdition') <> 5 THEN REPLACE( CONVERT(VARCHAR(128), CONTEXT_INFO())COLLATE Latin1_General_BIN, CHAR(0), '' ) WHEN REPLACE( CONVERT(VARCHAR(128), CONTEXT_INFO())COLLATE Latin1_General_BIN, CHAR(0), '' )NOT LIKE '________-____-4___-____-____________' THEN REPLACE( CONVERT(VARCHAR(128), CONTEXT_INFO())COLLATE Latin1_General_BIN, CHAR(0), '' ) END ELSE SYSTEM_USER END;END;GOPerhaps this is something you can use in a new version.
A graphical representation in documentation and merge session functionality would help for explaining the choices a user has and the consequences of those choices for merge sessions.
I found the setting ‘Developer mode’ in IAM. In the Windows GUI this gives you the extra tab ‘Developer’. Unfortunatelly you won't get debug information. It would be nice if the developer mode in IAM works the same as the ini-parameter setting.
I would like to propose the idea of having an Indicium debug mode.Currently if Indicium throws and error whiles using the Universal UI the user will get the following message “Unknown Error”. I can understand that we do not want to bother end users with specific database error messages.However it would be very useful if you can enable the display of such error message in the indicium settings. Currently when a client of mine gets this error message (unknown error) they will submit a ticket with a screenshot of this error message. That means that I have to go through the Indicium log and hope to identify the error message that was related to the message the client received. And to make matters worse, if you have load balancer enabled it can be a big issue determining which Indicium the client was logged into. Which makes finding the Indicium error near to impossible.Therefor it would be super useful have a setting which you can enable that will results in the actual database error message instead of the unknown error message.
In an action flow I have the ability to read/write/move/delete files and folders. I have no option to get a list of files inside of a folder. This would be very helpful. Currently I have an external document generator that creates PDF files and puts them on a file share. The filename convention of the generator contains a timestamp and some other variables that I am not aware of. Because of this I can’t READ FILE since I don’t know when the file was generated or what other variables are part of it’s file name.
If I have a lot of details in one screen, I mainly use grids instead of grid and form. But if I want to add a record I have to use add in grid or make a task to add a record. It would be really nice to have generated CRUD tasks, this would prevent modelling the same thing multiple times.
We require a change of the translations of the “Forgot Password” link in the Universal Login page as well as the subsequent screen objects in Indicium Universal as they do not really correspond to our liking.Idea:There needs to be a way to have access to the translations of these screen objects to be customizable according to the corresponding audience that is using the application.
Since a recent version of the Software Factory it is possible to create unique indexes that exclude NULL values. This is a useful feature, however, I think it would be great if we can take it one step further.I’d like to propose the possibility to create filtered indexes, where the developer him/herself can supply a where clause that will be applied to the index.For myself, I have this working using some dynamic model fiddling, but I think it would be pretty straight-forward to implement as a default feature.This is an example from the index script that is being created using my adjustment:/* Create index 'ix_un_def_dimensions_len' on table 'article_default_dimension'. */*snip*create unique nonclustered index ix_un_def_dimensions_len on "article_default_dimension"( article_id, default_length)where default_width is nullgo/* Create index 'ix_un_def_dimensions_len_width' on table 'article_default_dimension'. */*snip*create unique nonclustered index ix_un_def_dimensions_len_width on "article_default_dimension"( article_id, default_length, default_width)where default_width is not nullgoThese indexes ensure that I can have unique records for either article_id / length where width has not been provided and have unique records for article_id / length / width where width has been provided.The only thing the developer has to do, in my example, is provide the where clause, i.e.where default_width is nullAt the moment, I use a tag on the indexes to do this, but this could just as well be a field on the index-table/screen.
Currently when setting up a task or subroutine within the Software Factor the checkbox Atomic Transaction is set to false by default. It be better if the default is set to true instead of false. Normally all tasks and subroutine (procedures) will have to be set up using an atomic transaction. In some exceptions you would like to disable this feature.
Hi all,In order to synchronize data from a local MS SQL database to a MS Azure database, Microsoft offers a tool named the “SQL Data Synch”. In order to use this tool, a table cannot be using a user defined datatype. By default the Software Factory generates tables in MS SQL Server based on user defined types. You need to be able to disable this and instead use system datatypes when deploying.Therefor I would like to be able to configure this within a project version. And I would like to specify whether this is done for tables and or stored procedures. In some cases you would like to enable this for tables, but not for stored procedures.Currently you can set this by manually setting the column “alias_allowed” in the table dttp to 1 and after that alter the column user_defined_dttp on the table dom. This should be something that you can configure within the project version.Do keep in mind that you should still be able to deploy the user defined datatypes so that they can be used in SQL code templates. If you change to alias_allowed column that will also cause the user defined datatypes not to be generated within the upgrade/db create code groups. You should still be able to deploy the user defined datatypes in those script.
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.