Questions, discussions, news and updates regarding the Thinkwise Platform.
Recently active
Since launch less than 2 years ago, the Model Context Protocol has become the de facto standard for integrating systems with LLM chat interfaces or AI Agents. MCP Servers are popping up everywhere, in varying quality when it comes to capabilities, security and governance. Either software vendors offer an officially supported MCP server, or else unofficial (often vibe-coded) MCP Servers pop up.As with any runtime component, an MCP Server for the Thinkwise Platform should work for all customers and all applications. Developing such a dynamic component takes a bit more time, but in return a Thinkwise-provided MCP Server works for all customers, all Application models and all future changes to your Application out-of-the-box. And since we develop the Software Factory and Intelligent Application Manager (IAM) with the Thinkwise Platform as well, we can implement MCP for the Software Factory and the Intelligent Application Manager in a similarly fast fashion as you can for your applications.
Last December, I joined Thinkwise as a Product Designer. My main focus for 2026 will be improving the developer experience. I’ll be spending a lot of time in the Software Factory myself to experience how developers work with the platform, where friction occurs, and how we can make everyday development tasks easier and more efficient. The move of the Software Factory to the Universal UI is an important first step in that direction. By working hands-on with the Software Factory in both the Windows GUI and the Universal UI, I’ve been able to experience these changes from a developer’s perspective. This article shares practical insights from getting started and working with the Software Factory in the Universal UI and is intended to spark discussion on how we can continue to improve the developer experience. Word of warning Before upgrading to the 2026.1 release, make sure that all of your applications are running on the Universal UI. The Windows GUI will no longer work, and you will get
One of the unique selling points of the Thinkwise Platform is our promise of Technology-as-a-Service. We provide the technology, you create the application, and together we build never-legacy software. Over the years the Thinkwise Platform has evolved with many different GUIs to meet changing technological standards and user expectations. Our current UI is the Universal UI, a modern responsive interface based on Progressive Web App technologies that works seamlessly across devices and platforms. The Universal UI is served through our Service Tier Indicium, effectively introducing a more secure and robust 3-tier Architecture for your application.Transitioning to the Universal UI is a relatively straightforward process, thanks to the model-driven nature of the Thinkwise Platform. With our 7-step approach the transition should take weeks, not months. The exact effort depends on your current Model quality, use of Extenders and deprecated Features.Our goal is for all applications and users
Compared to other platforms, Thinkwise really excels in productivity. Especially the fact that creating a Data Model immediately results in a working Application is unparalleled! One of the current strategic priorities is to double down on this development speed of the Thinkwise Platform: we strive to make every Developer a mythical 10X Developer!There are a lot of angles we can work in order to achieve that goal. As a first, we want to fix unnecessary limitation in the Software Factory (SF). This means we want to tackle those things for which you as Developer have to create workarounds to get functionality working the way you(r users) need it.There are a lot of great Ideas out there and of course we'll review the existing ones. But I would also like to call upon the Community to highlight which existing Ideas would be your priority and/or to create new Ideas related to eliminating SF workarounds (please keep it to this scope in this topic).Could you please:Reply with Ideas that would
I have a few smoke tests that seem to be weird.I have a prefilter like:t1.sales_manager_user_id = (select top (1) u.user_id from dbo.users as u where u.tsf_user = dbo.tsf_user() and u.sales_manager = 1)My dev user isn't setup in dbo.users so dbo.tsf_user() won’t find me.The smoke test tests:-- Prefilter appointment_list.i_am_sales_managerselect top 1 * from ( select 0 as tsf_dummy from "appointment_list" t1) t1where sales_manager_user_id = (select top (1) u.user_id from dbo.users as u where u.tsf_user = dbo.tsf_user() and u.sales_manager = 1)and gives:Invalid column name 'sales_manager_user_id'.But the colum does exist in dbo.appointment_list but it doesn't in the subquery that is used by the smoketest generator (what is tsf_dummy doing here?):select 0 as tsf_dummy from "appointment_list" t1In my perception the prefilter query is added in runtime as a simple where clause:SELECT *FROM "appointment_list" t1WHERE sales_manager_user_id = (
Hi,In the past we managed to create a very nice form list grid in the Windows GUI: Every line in the invoice is shown here with dynamic labels.It is build using a VIEW and for most fields the label width is set to 0. The shown labels are fields in the VIEW which we can manipulate. For example the ‘Totaal (€)` could have been `Totaal ($)` if that specific row had prcies in dollars. This way we were able to use dynamic field labels (I think that is a native option in Universal?) and by setting the exact sizes in pixels we were able to get it all nicely positioned.The exact same screens looks wildly different in the Universal gui: In the universal gui, as it is a web interface I guess, it doesn’t adhere to the pixel sizes but uses the Max. form-col space (%) which makes it virtually impossible to position the fields at the exact location I need them to be. It’s already way better than it originally was but for example the fields which I filled with “NULL” to make them visible are complete
We are running SF 2026.1.11 Recently I started using Copy to clipboard (form) on certain domain entities. I only now encounter the issue that when I want to edit in a grid, the column is not available for new or existing rows. It works fine on tasks and forms, but can't change data in a grid edit?
Hi, we noticed that in the universal gui we cannot change the filter behaviour anymore: At the top in the windows gui we can still switch between equals, between, empty etc…The bottom screenshot shows the exact same filter form in the universal gui and we can only use the one filter option selected in subjects.Am missing something here or is this something we need to get used to?
The Edit in Grid mode, as we knew it from previous versions, no longer seems to be available. Is there any plan to bring this functionality back?We would very much like to see it return, allowing end users to enable Edit in Grid for specific datasets. The ability to navigate from record to record and modify field values directly within the grid, without having to repeatedly click Save and Edit for each change, was very powerful.This functionality is also missed in the Software Factory, where it provided a much more efficient editing experience.Could you share whether this feature is on the roadmap?
I am trying to change a file link control, because it is deprecated, to a file upload control.However, the file link opened a folder on the disk. With file upload that does not seem to work.Is it possible to open a folder on the disk from a control?If not, is it possible to open a folder on a disk with the process action open link?From this community post is it correct that there is no option yet to open a folder?https://community.thinkwisesoftware.com/ideas/file-link-and-universal-open-files-directly-6473
Please let the multiline line control also show the magnifier action button in a read-mode grid when ‘Show action button’ is set to ‘Always’ for the domain. Currently the action button is only shown in edit mode.
Hi,We are currently transitioning a client from the Windows GUI to the Universal GUI.In the existing situation, reports are generated via tsfreportmailer (gui_code), which is not supported in the Universal GUI. During the transition phase, both GUIs are active, so we need to support both approaches.At the moment, we are experimenting with a process flow that calls Indicium for report generation.What we would like to achieve is a where we can decide, based on the client type, whether to:execute the exesting Windows-specific reporting task, or execute a Universal/Indicium-based reporting taskSo effectively, detect the active GUI..For testing, we tried select app_name(); This returns:Thinkwise Software Factory in the Windows GUI Indicium in the Universal GUIThis seems to work, but it feels a bit implicit.Questions:Is using app_name() the recommended way to distinguish between Windows and Universal GUI? Is there a more robust or supported method (e.g. via session_context or another mechani
Hallo, I have a question regarding database schemas in Thinkwise. Is it possible to use tables from a custom database schema (for example, a schema other than dbo) within a Thinkwise application? If yes, are there any considerations or limitations when using a different schema?What is the recommended approach when using tables from a schema other than dbo ? Thank youJheng
Hi all,I recently set up an SMTP connector process action to send emails with attachments stored in an AWS S3 file storage location, and collected the full set of file storage status codes along the way (-6, -7 and -8), so I feel qualified to ask this question now. 🙂What I learned:- **-6**: the storage location wasn't linked to the process action yet. Fixed.- **-7**: *Storage attachment path* must be the full absolute path *including* the storage location root (e.g. `https://bucket.s3.eu-central-1.amazonaws.com/2026/06/file.jpg`) — even though the storage location is already selected on the process action itself. A relative path within the storage location is rejected. Slightly surprising, and not great for maintainability if the storage location ever changes, but okay.- **-8**: this is where I'm stuck. I tried semicolon-separated paths to attach multiple files, the way *Disk file attachments* works. The connector treats the whole string as a single (non-existent) file path. The docum
I'm looking for a way to disable validation rules in the Thinkwise Platform that didn't originate from the current branch.The use case is when working in a feature branch: I'd like only the validations introduced or modified in that branch to be enforced, while validations inherited from other branches (e.g. main or parent branches) are ignored.Is there a built-in setting, script, or recommended approach to achieve this? Has anyone implemented something similar in their development workflow?
The Software Factory has been available on Universal for several weeks. During this period, we have received substantial positive feedback, as well as constructive suggestions for further improvement. In addition, both developers and our internal teams have identified a number of issues. This article provides a structured overview of:Known issues specific to the Software Factory on Universal Ideas and opportunities to further improve the SF on UniversalLatest status update: 20/07/2026 Please note that this overview applies exclusively to the Software Factory running on the Universal UI.More on the Software Factory on the Universal UI: Keep in mindSystem requirements Moving to the Software Factory in Universal UI requires version 2026.1. This release introduces specific system requirements and includes several breaking changes. Read more in the release notes. Keep your environment up to date To prevent running into issues that have already been fixed, ensure your applications are cons
In the Windows GUI when exporting data it is possible to choose whether to export database values or translated values separately for the Headers and the Data.I’m not sure if this already possible in a newer version of the Universal GUI. In version 2026.1.12.0.0 this cannot be chosen separately.So, my question is whether this is already available or whether it might be added back in the future.
Hi,I am using Testwise generated controls to create a purchase order. The test works, but filling the form feels quite slow.Example code:const expectedDescription = faker.person.firstName();const purchaseOrderMain = await page.subject.PurchaseOrderMain;await purchaseOrderMain.form1.descriptionField.fill(expectedDescription);await purchaseOrderMain.form1.supplierIDLookup.lookupSelect('Demo supplier');await page.getByTestId('form-field__delivery-date__date__input').fill('01/01/2027');await purchaseOrderMain.form1.heatNoMandatoryCheckbox.check();await purchaseOrderMain.toolbar482460FA.getSaveButton().click();In the latest run, the purchase order was created as Purchase-0019. The form filling and saving part took roughly 35-40 seconds before the next step continued. I also see repeated warnings like:Timeout reached while waiting for response. Proceeding anyway.My question is about the slow interaction while filling the purchase order form.Questions:Is this delay expected when using generat
Is it possible to send a WCF web service request in the MSBIN1 format using the Thinkwise Platform?I have tested a standard Web Connection, but it is unclear whether the MSBIN1 format is supported. Could you please clarify if there is a way to send requests to a WCF service that requires MSBIN1-encoded messages?
Hi,I'm trying to understand the expected behavior of the following grid validation methods:await grid.verifyGridRecordCount(expectedCount);await grid.hasNoRowsOverlay();I tested them on two different generated subjects/grids.For verifyGridRecordCount():getRowByIndex() and getCellValuesByColId() work correctly on the same generated grid. However, verifyGridRecordCount() always times out after 10 seconds. I tried different expected values (for example 1, 3, 6, and even the visible total count), but the result is always the same.For hasNoRowsOverlay():When the grid is empty, it correctly returns true. After records are displayed in the grid, I expected it to return false (as described in the documentation), but instead it waits for the overlay locator and eventually times out.Am I using these methods correctly, or are there any prerequisites or limitations for using them?For reference, other generated grid methods on the same subject, such as getRowByIndex() and getCellValuesByColId(), wo
At the customer we are facing the following issue:We have a table with a primary key (PK), and this field is of course mandatory.This column is not an identity column, and currently it cannot be made one because we need to remain compatible with the existing system (RPG/iSeries DB2).Because the field is mandatory, we populate the PK with a number via the DEFAULT, so that it can be sent to the database already filled in. However, it is possible that a second user generates the same number in the DEFAULT, since it is simply calculated as max number + 1.Duplicate numbers are not allowed, so in the TRIGGER the number is recalculated to ensure it is unique regardless. This uses the same logic as in the DEFAULT.As a result, when saving, you may receive a different number than what you initially entered. The GUI is then unable to find the inserted row and shows an error message.How can we solve this without using an identity column?There is a risk that, for example when adding a sales order,
Hi everyone,When I try to fetch the application structure using the PAT via Bearer authentication, I get a 403 error GET /indicium/iam/appl/ii/$metadataHowever, the exact same call works perfectly fine when I switch to Basic Authentication (username/password of the service account).Furthermore, I have no issues at all when fetching actual data from tables (like /employee) using the PAT. It seems to fail on the /$metadata endpoint.The service account has Available for Webservices enabled and full Fetch rights in IAM.Does anyone know why the PAT is being rejected specifically on the metadata endpoint while working fine everywhere else?
Hi,While working with Testwise I noticed that the documentation describes generated Task Bar components such as:subject.task1subject.task2However, none of the generated subjects in our project contain these properties.Instead, only components such as toolbars, grids, forms and tabs are generated.Could you explain under which circumstances Task Bar components are generated?Are they only generated for specific Thinkwise screen types, or should they always be available when a screen contains task buttons?If Task Bar components are not generated, what is the recommended way to interact with task buttons?Thank you.
We have some process flows which open a new document. Since we are transitioning to Universal, we have a Windows variant and a Universal variant of the subject. Now, I need to determine in the process flow which variant to open based on the platform that is being used. Can I get this data during runtime?I only need this solution temporarily until the Windows version has been made inactive, but still it would lead to disruption of work if I cannot control this while both versions are available.If there is another solution I would also like to hear it.
Hi,Update: After trying all generated subjects, I still cannot find a subject that targets the visible grid. It appears the generated root locator does not exist in the rendered DOM. I'm trying to use the generated grid instead of Playwright locators.According to the documentation, a generated subject should allow interactions like:await subject.grid1.getRowByIndex(0);await subject.grid1.getCellByExactValue('Some value');await subject.grid1.getCellValuesByColId('column_id');However, all generated subjects I tried fail because the generated root locator cannot be found in the DOM.For example, Testwise generates locators like:[data-testid="screen__..."]but those data-testid values do not exist in the rendered page. As a result, methods such as:subject.grid1.getRowByIndex(0)subject.grid1.getCellByExactValue(...)subject.grid1.getCellValuesByColId(...)always fail, even though the grid and its rows are clearly visible and can be accessed with standard Playwright locators.My questions are:How
Already have an account? Login
No account yet? Create an account
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.