Skip to main content
  • 587 Product updates

Universal Development Update - October 2019

Universal Development Update - October 2019

Howdy everyone! The past three weeks we've been working on the upload file control, compatibility with the 2019.2 Universal themes and conditional layouts and a config file to make deploying Universal much easier. As always, we've made a demo for you: try it here. Before trying it out, press 'Clear Cache' on the login screen. We'll keep you updated regularly about Universal's progress. Beta build Like with every blog, we've released a beta build so you can test Universal out for yourself. Don't forget the documentation and be sure to keep the following in mind: Universal isn't actively tested on the internet browser Edge at the moment. Edge will be updated to use Chromium, which greatly changes the way it works under the hood. Once this is done, we will be testing on Edge too. Universal must be deployed on the same server as Indicium or it should be an allowed origin in appsettings.json. Universal only works with version 2019.1 and up of the Thinkwise Platform. Furthermore, make sure you run all hotfixes on the IAM and SF that you plan to use for Universal. Make sure you are on the latest version of Indicium Universal. Download your beta build here Upload file control We now added the ability to upload files in Universal. It looks like this: File upload controlConfig file We created a config file so the config settings can be changed by customers without requiring a new GUI or editing obfuscated JavaScript files. Note that  .json files need to be set as static content on the server. It looks like this: Sample config file  We provide the following options: defaultApplication: The id of the application that should be loaded, e.g. insights or 173 defaultPlatform: Whether to start Universal as Windows (0), Web (1), Mobile (2) or Universal (3) loginOptionsDisabled: Disables editing the login options serviceUrl: The URL where indicium can be found   SF 2019.2 themes and conditional layouts Universal now supports the new SF 2019.2 Universal theme color settings and conditional layout settings. This enables you to set the theme colors and backplate, and the conditional layout settings separate for dark and light mode. It looks like this: Differing theme colors in dark and light mode  Differing conditional layout appearance in dark and light mode  Unit tests In the past three weeks we've added another 34 unit test cases to the components and inner workings of Universal. This brings us up to 1088 test cases in total. Lots of minor fixes/tasks Miscellaneous You can now select grid cells to copy its value. Clear cache button on login screen now properly resets the login options. Edit mode is no longer lost when you switch between documents. Styling Made suggestion control's clear and chevron icons consistent with the other controls. Removed sidebar mini mode on touch devices. The dropdown menu's (e.g. application switcher) are now dark in dark mode. Technical Show an error message when the item is no longer available for the action that the users want to perform. Implemented infrastructure to support tasks with parameters including lookups. Errors about missing reference columns are now handled more gracefully. The blurring of input fields on the login screen has been refactored. What we'll be working on next sprint We're working towards a version with all essential features. This includes: Reports Details Charts Navigation within screens Look up popups A blog post with the planning for all essential features will follow shortly. The next sprint we'll be working on the following things: Execute tasks with parameters from a subject: you'll get a popup with a form to input the parameters and be able to execute the task Improving working in details - we'll autofill the fields when adding or copying a record. For example: if you go from Projects to Subprojects and press add, we'll fill in the original project for you. Implementing an editable image upload control. We'll also squash some bugs and improve the performance even more.

Related products:Universal UI
Thinkwise Platform release 2019.2
Universal Development Update - September 2019

Universal Development Update - September 2019

The past three weeks we've been working on applying context logic, applying translations, showing error messages and a redesign of the breadcrumb.As always, we've made a demo for you: try it here.We'll keep you updated regularly about Universal's progress. Alpha buildLike with every blog, we've released an alpha build so you can test Universal out for yourself. Don't forget the documentation and be sure to keep the following in mind:Universal isn't actively tested on the internet browser Edge at the moment. Edge will be updated to use Chromium, which greatly changes the way it works under the hood. Once this is done, we will be testing on Edge too. Universal must be deployed on the same server as Indicium or it should be an allowed origin in appsettings.json. Universal only works with version 2019.1 and up of the Thinkwise Platform. Furthermore, make sure you run all hotfixes on the IAM and SF that you plan to use for Universal. Make sure you are on the latest version of Indicium Universal. This is an Alpha version, there is no compatibility plan in place for Universal just yet. Indicium updates and IAM hotfixes will eventually break this Alpha release. Download your alpha build here Context logicTo disable or hide details and tasks we fetched the context for the active record. Now you can see if a task or detail is disabled or it's hidden completely. It looks like this:Disabling tasks that cannot be executed for the active record TranslationsSome displayed words in Universal were hardcoded in English, even if the application was in another language like German or Dutch. We now fetch translations for the users' language and show the correct translation translations.For now, the following words have been translated:Actions Details Filters Logout No Result Open Documents Search Error messagesError messages from Indicium are now shown when a resource cannot be found (e.g. when trying to edit a record that someone else just deleted) or when the user has no permission to perform an action (e.g. trying to delete an invoice that someone just sent to the customer). For now these messages only show as an ID since we do not have the translations available yet.Trying to delete a record that already has been deleted  Trying to modify a sales invoice that has already been sent to the customer  BreadcrumbThe breadcrumb has gotten some UI / UX improvements. The whole breadcrumb is now always placed under the open document title. This way the user always knows where to look when wanting insight of his navigation path. Also is the data displayed less scattered because the selected row used to be on top, but now it is the last part in the breadcrumb underneath the open document title.The below figures show the changes. The breadcrumb shown in the blue area.Before:Previous version of the breadcrumb in the Project Activities documentAfter:Updated version of the breadcrumb in the Project Activities document  Unsaved changesWhen trying to close a document with unsaved changes, we now show a Material styled popup instead of the native popup that was shown before. The title still shows up as an ID because the translation hasn't been added yet.Before:Trying to close the Customers document with unsaved changes - beforeAfter:Trying to close the Customers document with unsaved changes - after  Unit testsIn the past three weeks we've added another 30 unit test cases to the components and inner workings of Universal. This brings us up to 1054 test cases in total. Lots of minor fixes/tasksStylingFixed large space between a HTML editor and its label in some cases. Fixed inconsistent padding between words in HTML cells in the grid. Fixed a bug where the whole page would scroll on iOS. Fixed a bug causing tooltips not to work.PerformanceReduced the number of times the toolbars (filters, task, reports, CRUD, details) need to render.TechnicalWe now store the SF version so we can support any changes made in future versions The form was refactored to make it suitable to handle task parameters. We implemented loading the tasks and task parameter model information for listbar items.

Related products:Universal UI
Universal Development Update - August 2019

Universal Development Update - August 2019

Hello everyone! The past weeks we've been working on making Universal much more responsive with a responsive toolbar and a responsive form. We also implemented showing messages. As always we made a demo for you: try it here. We'll keep you updated regularly about Universal's progress. Alpha buildLike with every blog, we've released an alpha build so you can test Universal out for yourself. Don't forget the documentation and be sure to keep the following in mind: Universal must be deployed on the same server as Indicium or it should be an allowed origin in appsettings.json. Universal only works with version 2019.1 and up of the Thinkwise Platform. Furthermore, make sure you run all hotfixes on the IAM and SF that you plan to use for Universal. Make sure you are on the latest version of Indicium Universal. This is an Alpha version, there is no compatibility plan in place for Universal just yet. Indicium updates and IAM hotfixes will eventually break this Alpha release. Download your alpha build here. Responsive toolbarThe responsiveness of Universal continues! So next up; responsive toolbar with an Action and Filter components. For now the Action component will contain: CRUD Tasks Details (details of a screen will be later removed from the Action component, for now it's in the Action component) The Filter component will contain: Search (formerly: Filter) Prefilters The toolbar is divided with a 50% / 50% ratio for the Action and Filter component. This later on will be a setting for the developer to make sure each screen is suitable for the content of the Action and Filter component. Overflow menuWhen the content from an Action and / or Filter component doesn't fit in its available space it gets pushed to the overflow: Tasks and details in the overflow menu The prefilter overflow menu will always shows all prefilters. This helps the user get an oversight of all prefilters, their names and a to get an overview of all active / inactive prefilters: Prefilters and their state in the overflow menu Before content gets pushed to the overflow menu, the Action and Filter component tries to fit a much content as possible. This results in the following states for a tasks or details (CRUD actions and prefilters are always icons) ordered in maximum to minimum available space: 1. Button with icon and text: 2. Button with text: 3.Icon: 4. Overflow (moved to the overflow menu): Collapsing into the overflow will happen from right to left. This collapsing will be done per group so tasks, details or prefilters will never be separated from their group. First prefilter group collapsing The order of collapsing to the overflow is from right to left (in the future we want to use priority numbers to determine which items should stay the longest in the component). Tasks collapsing to the overflow menu Here, both sides are partially collapsed "But I see white space?" Yes, this is because the task group would never fit with text and thus collapses to icons. Overlay search fieldIf the screen gets really small and all the items are collapsed the search field will also collapse to an icon. To perform a search the user has to click the icon that will show the search field in an overlay. If the overlay is closed but there is still a search active the search icon will be in the active state so the user can see that the results are filtered. Searching on a mobile device Future improvementsThe work we've done is a huge improvement over what we had, but there still are some things we can do to further improve how toolbars behave. Enable the developer to define priorities, maybe on some screens, tasks are way more important than CRUD actions. Interpret groups for tasks. We'll add another step where tasks or reports will collapse into a dropdown, before getting pushed into the overflow menu. Use toolbar as a component anywhere in the document. Group related actions regardless of their type. The last item needs some more explanation. Right now you have all the prefilters, then all the tasks, etc. But this might not be the optimal solution. Imagine an invoice screen. You can generate invoices, approve invoices and send invoices to your customers. It might behoove us to have a bar that contains a prefilter that shows us all the invoices that have not been approved, and a task to approve them. The next bar would have a task that shows all approved invoices that have not been sent to the customer, and the task to send them to the customer. This approach would enable the developer to create and position their own toolbars. Grouping tasks, prefilters, reports, etc. by what they mean, not just by the fact that they are a task or prefilter. This is however not an easy feat, it is just an idea so it will take a while to accomplish. Responsive formHaving multiple columns in your form is a great way to make the most use of the screen real estate. But having two or three columns in your form on a small phone will get very crowded very fast. So on small screens, forms will now always have one column. Form with one column on a small screen Snackbar componentTo show messages to the user we've implemented a snackbar component. Since you might not be familiar with the term, here's what it looks like: An Indicium error message being shown in a Snackbar With this we can show any kind of notification, be it from Universal itself, Indicium, messages the developer made, or anything else. We don't load all GUI message translations yet, but we do show some messages. More messages will be added later. Unit testsIn the past three weeks we've added another 103 unit test cases to the components and inner workings of Universal. This brings us up to 1024 test cases in total. Minor fixes/tasks Styling Fixed a bug on iOS where part of the cardlist would be hidden when scrolling. Performance Universal no longer tries to load detail subjects to get the icons when there are no details. We now use objects to style components rather than calculating the style each time where possible.

Related products:Universal UI
Universal Development Update - July 2019

Universal Development Update - July 2019

Hello everyone, a new Universal Development Update is here! The past three weeks we've been working on an HTML control editor, applying visibility to form fields and action buttons while navigating, usability on Mobile devices and a popup component. As always we made a demo for you: try it here. We'll keep you updated regularly about Universal's progress. Alpha buildLike with every blog, we've released an alpha build so you can test Universal out for yourself. Don't forget the documentation and be sure to keep the following in mind: Universal must be deployed on the same server as Indicium or it should be an allowed origin in appsettings.json. Universal only works with version 2019.1 and up of the Thinkwise Platform. Furthermore, make sure you run all hotfixes on the IAM and SF that you plan to use for Universal. Make sure you are on the latest version of Indicium Universal. This is an Alpha version, there is no compatibility plan in place for Universal just yet. Indicium updates and IAM hotfixes will eventually break this Alpha release. Download your alpha build here Edit mode HTML Control editorA first basic HTML control editor has been implemented. With this editor you can apply bold, italic and underline text styles and create numbered and bulleted lists: Basic HTML editor Paper animation when going into edit modeTo let the user know where to edit the data when going into edit mode, we've animated the paper behind the form. When you go into edit mode it briefly gets more shadow: Paper of form briefly gets more shadow when going into edit mode Layout logic in non-edit mode ButtonsButtons can now be disabled or hidden due to layout logic. In the example below you cannot edit or delete booked hours that have already been invoiced because the buttons are disabled. Disabled buttons in non-edit mode FieldsAlso field can be disabled or hidden in non-edit mode. In the example below, you can see that 'Employment ended on date' will become visible if 'Employment ended' is checked. Field hidden in non-edit mode Improved login screen for small screensThe login screen now takes up less space on a small screen. In the image below the left image shows the old implementation and the right image is the new implementation. The paper background is removed on small screens and the input fields are more responsive. Login screen comparison on a 320 pixel wide screen Popup componentWe have created a popup component which will be used for example by task popups in the future. It is resizable and you can move it around. Check it out in the video below! Popup component with example content Unit testsIn the past three weeks we've added another 49 unit test cases to the components and inner workings of Universal. This brings us up to 921 test cases in total. Lots of minor fixes/tasks Styling Fixed Suggestion and Combo control not working on empty values. Fixed empty form fields being hard to focus with the cursor in it. The sidebar no longer opens when clicking anywhere on the screen on small devices Reduced margin of content when on small screens Fixed filelinks being shown as "[object Object]" instead of the filename in the Form and Cardlist. When clicking URLs without 'http://' or 'https://', it now opens the URL, instead of reloading Universal. Fixed inconsistent conditional layout background size in some Grid controls. Clicking on a link with the middle mouse button now also closes the Cardlist overflow menu. The clear cache button is now a text button so it won't be mistaken with the login button. Technical Fixed data not getting loaded on some screens because lookups failed to load. Fixed error when closing the last opened document while editing it. Performance Only one request for a subject's definition is now sent rather than multiple

Related products:Universal UI
Universal Development Update - June 2019

Universal Development Update - June 2019

Hello everyone, we have a new Universal Development Update for you! This past time we've been working on showing you if Universal is saving or cancelling, added the combo control, added executing tasks that have no (visible) parameters and improvement lots of styling. As always we made a demo for you: try it here. We'll keep you updated regularly about Universal's progress.   Alpha build Like with every blog, we've released an alpha build so you can test Universal out for yourself. Don't forget the documentation and be sure to keep the following in mind:   Universal must be deployed on the same server as Indicium or it should be an allowed origin in appsettings.json. Universal only works with version 2018.3 and up of the Thinkwise Platform. Furthermore, make sure you run all hotfixes on the IAM and SF that you plan to use for Universal. Make sure you are on the latest version of Indicium Universal. This is an Alpha version, there is no compatibility plan in place for Universal just yet. Indicium updates and IAM hotfixes will eventually break this Alpha release. Download your alpha build here     Edit mode We've made several improvements to edit mode this past sprint: First off, the save button is always enabled when saving is allowed. Universal previously always made sure everything was up-to-date before allowing users to save. This meant that when you changed the value of a field, you had to click away from the field to indicate you were done with your changes, Universal then did some checks and finally the save button would be enabled. Now we let you press the save button at any time and wait to perform the save until everything is fine and dandy. When you press the save button and before the record has been successfully saved, the save button animates to indicate that a save is happening. The cancel button is also disabled because it is not possible to cancel a save action. The form fields are also disabled at this point, so no data changes can be made that would be overwritten when the save successfully returns. It looks like this:         Action bar behavior when saving This is usually only apparent when you have a very slow internet connection. The same concept has also been implemented for cancelling. When you press cancel and before the record has been successfully cancelled, the cancel button animates to indicate that a cancel is happening. The save button is also disabled because it's not possible to save cancelled changes. The form fields are also disabled because any change you make would be immediately discarded. It looks like this:         Action bar behavior when cancelling         Controls       Lookup combo We recently implemented a 'starts with' suggestion control for lookups. But sometimes you just want to pick an item rather than search for it. For that we created a lookup combo control. It loads all values, rather than just the top eight. You also can't type to search for a value.       The lookup combo control         Tasks The first version of tasks is here. For now we execute tasks that have no (visible) parameters. After this we'll be laying the groundwork to execute tasks with parameters (think showing a popup with a form to enter your data) We'll also visually indicate when a task cannot be executed for the current row.         Executing a task without parameters         Layouts We laid the groundwork to execute layouts in non-edit mode when navigating rows in the grid / cardlist. For the next version we'll be working on actually using the layout in the form and the action bar.         Unit tests Like before, we've added 41 more unit test cases for our components, controls and the fetching of data.         Lots of minor fixes/tasks       Styling   The active cardlist row is now scrolled into view (e.g. when adding a new row that gets added to the bottom of the list The grid now occupies the full width When logging in fails, the username and password will still be remembered Detail tiles are now responsive, reducing the chance of scrollbars The font is now correct when there are multiple conditional layouts applied to a single row Form labels now have a tooltip Label control now has the correct font Technical We removed the CORS proxy to make the application faster when developing All common colors were made into variables rather than hardcoded strings Performance We now return the same empty result instead of creating a new one each time for lookups Fixed typing issues for various containers which reduces the number of times we need to update the screen

Related products:Universal UI
OpenAPI support for Indicium

OpenAPI support for Indicium

The 2019.1.7 release of Indicium has added support for an OpenAPI endpoint. This endpoint can be used in collaboration with tools like Postman or Swagger UI to explore what kinds of endpoints/requests an application exposes through Indicium. By exploring the application's endpoint/request definitions through these tools, a developer can more easily prototype and test their own requests when, for example, building an external service that consumes data from the application. Accessing the endpointTo access the OpenAPI endpoint of an application, send a GET request to the openapi path on the regular application root endpoint. Given an Indicium that is running on localhost and an application with the alias myapp that has been synced to IAM, the OpenAPI URL would be: https://localhost/iam/myapp/openapi Do note that, like all application endpoints, the OpenAPI endpoint requires a client to login before it can be used. On success the response will contain a JSON object describing the available requests for the application in OpenAPI specification version 3 format. PostmanTo import the OpenAPI definition into Postman first navigate to the application's openapi endpoint using a browser. Save the entire JSON document to a file or copy it from within your browser window. In Postman, open the workspace where the collection must be imported to and click the Import button. The window that pops up offers several ways to import an OpenAPI JSON document. For instance by selecting a saved OpenAPI document: Or pasting the document's content directly: Do note however, that because the openapi endpoint requires authorization, the Import From Link option cannot be used. The imported collection should now have been added to the Collections tab. Next, select a request and add an authorization method that works with the Indicium in question. For instance, Basic Auth with a username and password. Please note: Postman currently has an issue with importing OpenAPI requests for OData when the request contains a key parameter. These parameters will show up in the Params tab as so called Path Variables which are formatted like :variable in the request itself. While it may look like a value can be set for these variables using the Params tab, when sending the request, the variable name is not being replaced with the entered value. This means that requests containing a key will not work directly after importing the OpenAPI document. For now, to get around this, substitute the variable directly in the request url before sending it. An issue has been filed on the postman repository to track this. Swagger UITo use Swagger UI to explore the available requests for an application it must first be deployed to the same server (and domain) Indicium is running on. The following example will be using the dist deployment variant. This basically means that one must download the source code archive from the latest release and deploy the contents of the dist directory as a static website. To do this using IIS, create a swagger directory under the same website root that Indicium was deployed to. Then copy the contents of the dist package to it. Navigate to the swagger path using a browser, in the case of the example that would be http://localhost/swagger, and the Swagger UI should show up. Make sure your browser session has been logged into the target Indicium by opening a tab and navigating to any of the endpoints that are protected with authentication. The openapi endpoint is one of them so that can be used if you do not know any others. After logging in, enter the openapi endpoint url for the application whose endpoints you want to see in the Swagger UI search bar and click Explore. The endpoints for the application should now be loaded and shown on screen. Click on any of the endpoints to expand them and try them out.

Related products:Indicium Service Tier
Universal Development Update - May / June 2019

Universal Development Update - May / June 2019

What's up, Doc? We have another Universal Development Update for you. We've made a lot of progress on edit mode again, started working on tasks, and much more. Read on to find out all about it. We'll be releasing a blog post soon detailing the roadmap for getting Universal out of beta. Be sure to look out for that! You can subscribe to the blog to get a notification.Try the demo here   Alpha build Like with every blog, we've released an alpha build so you can test Universal out for yourself. Don't forget the documentation and be sure to keep the following in mind: Universal must be deployed on the same server as Indicium or it should be an allowed origin in appsettings.json. Universal only works with version 2018.3 and up of the Thinkwise Platform. Furthermore, make sure you run all hotfixes on the IAM and SF that you plan to use for Universal. Make sure you are on the latest version of Indicium Universal. This is an Alpha version, there is no compatibility plan in place for Universal just yet. Indicium updates and IAM hotfixes will eventually break this Alpha release. Download your alpha build here     Controls       Suggestion control Some of you may already have seen this, since we issued an extra release for this feature. We now translate lookup values in edit mode and you can edit those values using a suggestion control. First of all, this is what it looks like:       Suggestion control You can start typing and the control will suggest matching values from Indicium. You'll see the top 8 values that start with what you've typed in the field. As you'd expect, any prefilters that have been set in the model will apply to the results you'll get. You might notice that the suggestion control has a dropdown arrow. The suggestion control in Universal is like a combination of the combobox and suggestion control you know from the Windows and Web GUI's. If you do not know what to type, you can press the dropdown button and see what kind of data you need to enter. This also shows 8 results.         Google maps control We've made the Google maps control editable. This control is often used in your mobile apps. You can now edit the text and it has a button to open the location in Google Maps.         Google maps control         Edit mode When you previously checked a checkbox for example, you needed to click away before the value was updated. This meant that defaults and layouts were triggered later. We've changed the way changing the value works, and now you see the updates without needing to click away.           Default is triggered without clicking away This happens for the following controls:       Checkbox Combo Suggestion Radio   Copy / delete row We've added functionality to copy and delete rows. These actions can be executed from the action bar and work as you'd expect.   Copy and delete     Disabled moving away from a record in edit mode When editing a record, you want to stay with that record until the changes are done. To help avoid mistakes, and potentially the loss of work, we've disabled a couple features when you're editing a record:       Filtering (searching) Changing prefilters Going to a different row in the grid or cardlist   Unsaved changes We've added an unsaved changes indicator. When a document has unsaved changes, a dot will appear over the close button in the open documents and in the topbar. This also works for inactive documents, so you can see at a glance which documents have unsaved changes before you try to close one.   Unsaved changes indicator in open documents and topbar When you try to close a document with unsaved changes, Universal will not allow this, asking you to either save of discard your changes. If the document you're trying to close is not already active, it will be activated for you. We are designing a better-looking notification, for now we have something that works to ensure that you don't accidentally throw away unsaved changes.     Unsaved changes notification         Navigating to saved row When you add a new row, you want to have that row selected when you press save. Now this behavior has been implemented in Universal.         Tasks We've started working on tasks. For now, they are shown disabled in the action bar, since we haven't built executing them yet. This will follow shortly. We're currently working hard on the design phase. This is what tasks look like:         Tasks in the action bar We'll be working on making the action bar responsive so it'll fit neatly on any device without causing a scrollbar since tasks take up quite a bit of space for now.         Overlay sidebar We already had the option to make the sidebar very small, but on small devices you need all the space you can get. The sidebar now disappears completely when your screen gets smaller than 768px. You can get it to appear with the hamburger icon. To get rid of the sidebar again we've added a close icon, or you can press the darkened area next to the sidebar. Opening a document also closes the sidebar. It looks like this:         The overlay sidebar in action         Unit tests Like before, we've added 174 more unit test cases for       Several components Form controls Data fetching     Lots of minor fixes/tasks Styling     Date/time/datetime/radio button control labels are no longer always blue All fields on the login screen now use the correct colors The HTML control now changes the text color when switching between dark and light mode Note that the HTML control can add default (black) colors to the text. We do not override explicitly set colors. If these colors are undesirable, you can use [dbo].[sanitize_html] on the field The HTML control now uses the correct font by default Readonly fields no longer have a required asterisk Made all font sizes in the form the same DateTime/Time controls now show formatted value rather than timestamp Some SVG's with color got recolored when you switched dark/light mode. This has been fixed. Extended property theme colors are now correctly applied The label of a form field no longer animates down when field has a value Edit mode     Disabled Ctrl + Z (undo) and Ctrl + Y (redo) in the form Editing records that have a Date/Time field for a PK now works correctly Action bar now listens to edit mode of document, rather than its own Disabled fields in the form are now styled correctly Technical     Made it easier to see if the document is in edit mode Made it easier to see and fetch changes when reviewing code Enforced more code style in our development process Fixed bug where the current document would change when you close a different document Renamed 'Container' to descriptive names Added a size observer to help make Universal more responsive Refactored mapDispatchToProps from functions to objects where applicable Rename resource_id to staged_resource_id to comply with Indicium Properly handle alphanumeric PK's when editing, copying or deleting records Sanitize SVG's to prevent script execution Performance     Virtualized rendering for the Cardlist Reduced prop drilling in the ScreenBuilder Don't rerender form as much  

Related products:Universal UI
Guidelines Data Modeling moved to Thinkwise Docs
Universal Development Update – April 2019

Universal Development Update – April 2019

Good news everyone! We have another Universal Development update for you. We've been working on implementing more controls so edit mode works even better. Besides more controls we've fixed some bugs, worked on ensuring the quality of the GUI. We've also been working hard on lookups in edit mode, so you'll soon see the translated values when working with data. You'll get more on this later.Try the demo here   Alpha build Like with every blog, we've released an alpha build so you can test Universal out for yourself. Don't forget the documentation and be sure to keep the following in mind:   Universal must be deployed on the same server as Indicium or it should be an allowed origin in appsettings.json. Universal only works with version 2018.3 and up of the Thinkwise Platform. Furthermore, make sure you run all hotfixes on the IAM and SF that you plan to use for Universal. Make sure you are on the latest version of Indicium Universal. This is an Alpha version, there is no compatibility plan in place for Universal just yet. Indicium updates and IAM hotfixes will eventually break this Alpha release. Download your alpha build here     Controls We've implemented more controls this sprint, making it easier for users to edit more types of data:         Date editor We've implemented a date editor. It shows the date in the browser's date format and allows a user to either type or pick a date:         The date editor         Time editor We've also implemented a time editor. The time editor shows the time in the browsers' format and allows users to edit it by typing:       The time editor       DateTime editor We combined the date and time editors to form a DateTime editor. The user can also use the arrow keys on the keyboard to change the values for both the date and the time parts:       The DateTime editor       Phone number editor We also built the phone number editor. In edit mode, the field is no longer displayed as a link. A phone icon is shown to the right of the field. Clicking this icon opens the default app ready to call the number.       The phone number editor       Email editor We've implemented the email editor. In edit mode, the field is no longer displayed as a link. An icon is shown to the right of the field. Clicking this icon will compose an email in the default email client with the email address already filled in.       The email editor       URL editor The URL editor has been implemented. In edit mode, the field is no longer displayed as a link. An icon is visible to the right of the field. Clicking this icon opens the URL in a new browser window.       The URL editor       Radio button editor The radio buttons are now fully functional in edit mode. When a radio button is not required you can click on a selected radio button to remove the value altogether.       The radio buttons       [Preview] Lookup suggestion editor You can't try this yet, but we've been working very hard on lookups in edit mode. You can expect an extra release with this feature soon. It looks something like this:       Lookups in edit mode via a suggestion editor       Unit tests To ensure that the GUI keeps working correctly with all the changes we make, we've added about 300 unit test cases for among others:       Several components Form controls Data fetching   Lots of minor fixes/tasks Fixed bug where scrollbar didn't update after resizing the browser Fixed bug where field layouts HiddenInsideForm and HiddenOutsideForm didn't work Fixed bug where the login screen didn't get a scrollbar if it was taller than the browser height Fixed bug where open documents had no hover or ripple effect Fixed bug where the background image size was wrong Moved form control pristine state to Base Editable Control Improved unit test performance by utilizing cache Upgraded test framework Upgraded Material UI Improved our testing method Made authentication compatible with forms authentication Added design documentation for DateTime, Date and Time controls Researched preventing unnecessary updates to improve performance Researched whether we use correct form event handling (we do!) Disable refresh when in edit mode Created a technical design to optimize the loading of the dataset Researched impact on the state of letting the save and cancel user actions wait for the changes to be processed Researched and implemented code obfuscations Refactored the way files are loaded Refactored the way badges are loaded Researched visual testing to ensure ongoing development doesn't result in unintended visual changes

Related products:Universal UI
Thinkwise Platform release 2019.1
Universal Development Update – February / March 2019

Universal Development Update – February / March 2019

Howdy everyone, the time has come for another Universal development update and we have got some treats for you! The Universal GUI has had some major changes, both visually and functionally. With edit mode we're getting closer and closer to a replacement of the Mobile GUI. Try the demo here You can expect these blogs to come every six weeks from now on.   Alpha build Like with every blog, we've released an alpha build so you can test Universal out for yourself. Don't forget the documentation and be sure to keep the following in mind:   Universal must be deployed on the same server as Indicium. Browser security prohibits us from deploying this otherwise. For now. Universal only works with version 2018.3 of the Thinkwise Platform. Furthermore, make sure you run all hotfixes on the IAM and SF that you plan to use for Universal. Make sure you are on the latest version of Indicium. This is an Alpha version, there is no compatibility plan in place for Universal just yet. Indicium updates and IAM hotfixes will eventually break this Alpha release. Download your alpha build here     Add / Edit implementation According to our design, we've implemented the technical details for working with add and edit mode. We've added the options to add a new record, or update an existing record. This works as you'd expect, using the buttons in the action bar:       Adding a new row       Editing an existing row You'll notice in the images above that the action bar also reacts to edit mode. The save and cancel buttons are only visible in edit mode, and the edit button is only visible in non-edit mode. The asterisk that indicates that a field is mandatory is only shown in edit mode.         Controls We've created a base control which helps all other controls handle events like when a users leaves a field or when the value changed. This makes developing other controls much easier.Implemented controls We're working hard on implementing edit mode for each control. As you can imagine this takes quite a lot of work and care to ensure each control works as expected. Besides the base control, we've already implemented the following controls:Text       A text control in edit modeMultiline     A multiline control in edit modeNumeric     A numeric control in edit modeCombo     A combo control in edit modeCheckbox     A checkbox control in edit mode We'll continue to work on implementing the remaining controls and supporting lookups in edit mode.       Layouts / defaults We've also implemented layouts and defaults. For now the layout is executed when a field loses focus. We'll be making this more immediate in the future.Visibility       The field 'Beëindigd per' is only visible when 'Contract beëindigd' is checkedAlso notice in the above image that the date is filled by default with the current date.Mandatory     'Verstuurd door' becomes mandatory if 'Gepubliceerd' is checked.       Tooltips Because we don't have resizable components like splitters or the columns in the grid, it's possible that data gets hidden. To ensure it's still possible to read all the data, we've added tooltips.         A tooltip is shown on overflowing elements The general idea is that the tooltip is only shown when the content doesn't fit. It shouldn't matter what the content exactly is. There are some exceptions of course, like prefilters where you only see the icon, and always want to see the name on hover. Another exception is open documents. These always show a tooltip, and the tooltip also has the context when the open document is zoomed.         Tooltip on a zoomed document, more on this in the next section         Zoomed details in open documents The name of the currently open document got pushed away very quickly because we prepended the path, especially when you zoomed in multiple times. We've opted to simply show the name of the opened detail document. The user gets to see the path she took to get to that detail in the tooltip. The icon of the zoomed document is now correctly shown, rather than the icon of the parent. It looks like this:         'Emails' is a detail of 'Medewerkers', showing the parent row (Dave Brumfield) Zooming multiple times shows the path the user took to get to the current subject:         Zoomed in multiple times, each parent subject separated with a '>'         Papers To better distinguish visually between components, we've put papers around them. We already had papers around the login component and around detail tiles, but now the grid, form and cardlist components also have them. It looks like this:         Papers around the cardlist and the form And the same screen in dark mode (use the lightbulb in the topbar to switch modes):         Papers around the cardlist and the form in dark mode The paper has been put around the entire form, and the sections (what now are tabs) have been separated with a divider line.         Papers around the grid and detail tiles And the same screen in dark mode:         Papers around the grid and detail tiles in dark mode Adding paper to components makes it easier to see where one component ends and the next starts. It makes the screen look a lot cleaner and less cluttered because components are being lifted from the surface by papers.         Lots of minor fixes / tasks A lot of work has been done to ensure that the Universal GUI has the highest quality.         Fixed checkbox styling Fixed the selected and hover state of rows in the grid with conditional layout Made the 'Open documents' text animation Fixed nested lookups sometimes not being translated Put form controls closer together Only the available applications per platform are loaded, rather than all applications Fixed issue where there was no dataset available Fixed logout request not being sent when logging out Hide columns based on context filter in zoomed documents Fixed max-length property for multiline controls Fixed form multiline controls not showing on one line Several code and development improvements    

Related products:Universal UI
Universal Development Update – January 2019

Universal Development Update – January 2019

Hello everyone! Today we have the new monthly status update for the universal GUI. Like always, a demo environment of Universal on the Insights application is accessible here using your Thinkwise credentials as login.   Alpha build With this update we’ve also released an alpha build so you can test it out for yourself. To aid (external) developers, we’ve created documentation for deploying, running and troubleshooting Universal. Be sure to keep the following in mind:   Universal must be deployed on the same server as Indicium. Browser security prohibits us from deploying this otherwise. For now. Universal only works with version 2018.3 of the Thinkwise Platform. Furthermore, make sure you run all hotfixes on the IAM and SF that you plan to use for Universal. Make sure you are on the latest version of Indicium. This is an Alpha version, there is no compatibility plan in place for Universal just yet. Indicium updates and IAM hotfixes will eventually break this Alpha release. Download your alpha build here       Breadcrumbs The breadcrumbs are finished! With the complete breadcrumb you always know where you are in the application. We can divide the breadcrumb in three parts:   Active row indicates the current selected row. Between the parentheses the current type of subject is shown. The path summarizes the parents, how did you get to this screen.   Filtering on lookups After sorting we now also support filtering on lookup translation values as we promised in the previous Universal post. It maybe seems like an obvious feature to an end user, but under the hood it may be quite sophisticated. It means we should order or filter the current data set based on data values from a related subject, possibly with some other related subjects in between: called lookup value resolvement. From the end user’s point of view, this means (s)he gets the to see the expected filter results based on the values shown in the GUI, rather than their database values. In our Insights application, the direct result of this feature is visible in e.g. “Employee->Hours”, filtered on an Activity like “boatmans”. The name of the Activity is selected from the Activity via another subject, as shown in the image below.     The name of the activity is fetched using an intermediate table.         Scroll to selected row after filtering The Cardlist and Grid now scroll the selected row into the visible area of the screen after filtering. When the selected row is already visible, no scrolling will take place.     Scrolling to the selected row after filtering in the Grid.         Restoring vertical scroll position When switching to another document and back, the vertical scroll position is now restored. This is implemented for the Cardlist, Grid and Form.     Restoring vertical scroll position in the Grid.         Background image It's back from the past! We can apply the background image once again. For now we have one option available: we implemented this feature with a stretched background in mind. So smaller images won't look good because they will be stretched and become blurry, but other options are being considered as an setting in the SF.   Clear cache on errors We've added the ability to clear the cache when a severe error occurs. So when something really bad happens you can keep using Universal with a clean slate without needing to do anything technical. It looks like this:       Research Styling We noticed that the styling of Universal took an disproportional amount of time and resources to be applied in Universal. We figured out why this is and have made a design to remedy this. This will also make developing easier, but the most important part is that Universal will get a bit faster.Editing and adding data The moment we've all been waiting for. We're putting the finishing touches on the research and the plan to implement adding and editing data. This means that next month we can start work on building these features. Stay tuned for the next blog!Lookup translation strategies While implementing Breadcrumbs, we ran into a situation where a new kind of lookup translation strategy was requested. In this period we took our time to describe and design different strategies and their ideal application. This resulted into two strategies: #1: Translate an entire data set column at once with a single call to Indicium. We currently use this strategy.       1 call to Indicium, who calls the database once Returns duplicate results for the same value of data set rows Result is shown afterwards at once Translates invisible values #2: (new) Select the translation of a single data value directly from the lookup subject.     Multiple smaller requests to Indicium and the database, possibly optimized by HTTP2 Caching prevents duplicate translation requests Single result shown immediately Translate values only from visible parts of the GUI, e.g. optimistic scrolling in Grid or Cardlist. Currently possible, since the Universal now has knowledge about lookup value resolvement paths from the SF datamodel. We need the second strategy right away for the new Breadcrumb component on a detail subject with an empty set. The breadcrumb shows the identity values of the parent subject to let the user know the path to the zoomed detail document. Possibly, these identity values should be translated into human readable values by using the lookup mechanism. In this case we have no data row to let Indicium know where to translate its values from. So right now these values are untranslated, and by implementing the second strategy they will also be translated. Both strategies use the same caching mechanism, so each can use the data loaded and cached by the other one.       Lots of minor fixes / tasks We keep putting an enormous amount of work in ensuring a high-quality product:       Designed zoom details in open documents Designed scroll to active row Fix deprecated AgGrid toolpanel properties Fix console error on search Added script to get test coverage Fixed bug where conditional layout sometimes didn’t work Fix grid values not updating when refreshing Fix bug where browser refresh resulted in logout Removed the React Router Implemented compatibility with empty string as nulls in i_ui_views Refactored away deprecated React lifecycle hooks Fixed error when logging out immediately after a search Fixed grid data jumping when loading multilines Implemented domain alignment for grid cells and headers Refactored away any types No longer close open documents when switching applications Use file API for meta images Refactored sidebar Implemented Look-up display value resolvement. For more details, visit the previous December blog. Fixed grid line width Fixed the margins around grid data   What we’ll be working on next month Squashing another dozen or so bugs Form add / edit Adding paper to components to better separate them without splitter lines. Global application breakpoint Responsive filter Responsive search Responsive action bar Improving the way we style components Improving our build flow Zoomed details in open documents Form field alignment

Related products:Universal UI
Universal Development Update – December 2018

Universal Development Update – December 2018

Hello everyone. Today we have a new monthly status update for the Universal GUI. Like always, a demo environment of Universal on the Insights application is accessible here using your Thinkwise credentials as login. Alpha buildWith this update we’ve also released an alpha build so you can test it out for yourself. To aid (external) developers, we’ve created documentation for deploying, running and troubleshooting Universal. Like always, keep the following in mind: Universal must be deployed on the same server as Indicium. Browser security prohibits us from deploying this otherwise. For now. Universal only works with version 2018.3 of the Thinkwise Platform. Furthermore, make sure you run all hotfixes on the IAM and SF that you plan to use for Universal. Make sure you are on the latest version of Indicium. This is an Alpha version, there is no compatibility plan in place for Universal just yet. Indicium updates and IAM hotfixes will eventually break this Alpha release. Click here to download your alpha build Detail tilesThe first version of the detail tiles has been released, which is just a simple tile with no special abilities yet like badges or disabling. The only thing it does is open the detail. They can be placed like any screen component and will automatically position all the tiles in the available space. The detail tiles will be further improved in future sprints, for now you can enjoy the simple detail tiles. Refresh buttonSmall, but important. Refreshing will reload the data and the look-ups for the current document. It has a sweet animation too! Improved configuration optionsThe login screen has been extended with several configuration options: The previous release of Universal has support for logging in to your own IAM using https://server/indicium in the login screen. This URL format is old news, we don’t use it anymore. Now, you can use https://server/indicium/iam/iam to load products from IAM and https://server/indicium/iam/sf to load products from the Software Factory. Furthermore, you can configure Universal to load a specific application, which can be set by using the application ID or alias. When running against a Software Factory, the application points to a specific runtime configuration. Nothing new here. The interesting thing is that you can also choose to load a specific application when starting against IAM. This opens up possibilities like separate shortcuts for different applications. You can also choose to leave the application field empty and load all applications, like the GUI’s do now for IAM. With Universal, you can also choose to do this for the Software Factory. Universal will have all runtime configurations assigned to the current user available to switch to as if they were different applications. You can choose which runtime configurations are available per user in the Software Factory. A developer can create a menu specifically to Mobile, Windows or Web in the Software Factory. Since Universal is not bound to a specific platform, you can choose the platform it should load the menu for in the login options. Clear cacheWhen you log out in Universal, the cached model is deleted and will have to be reloaded. But there can be situations where you completely want to reset any data that might have remained offline. This can be the login settings, the status of the light switch or perhaps cached model data or offline data in the future. Hit that clear cache button to reset everything! Improved look-up mechanismsLook-up display value resolvement For a while, we were thinking about the perplexing feature of lookup references, called: Look display value resolvement. Especially the case where the lookup links to another lookup – and so on – to get the display value. To learn more about lookups, read this article. In the past month we figured out the plan and wrote a technical design for the Universal GUI. Until the development of this is completed, we handle such columns as untranslated lookup columns. Development is planned for the upcoming period. Our first though was to leave it completely to Indicium to figure this out, but we quickly found out this wouldn’t work. We switched over to the $expand statement of ODATA in Indicium to request lookup presentation values. code:GET http://localhost/odata/Categories(1)?$expand=Products/Supplier In this case the “Products” subject may of may not be directly referenced by “Categories”. From the Universal GUI point of view we should resolvethe path to “Products” by recursively walking over the lookup references of “Categories” to find the column with the presentation value (in this case “Supplier”). Sorting on display value The Universal GUI already supported default sorting as configured on the subject from the SF, however the sorting was applied to the data value rather than the presentation value when the column contained a lookup reference. This caused unexpected ordering of data after the data values been translated with their lookup display value by the GUI. From now on, the GUI sorts columns on its lookup display value rather than its data value. In our Insights application, direct result of this is visible in e.g. “Projects” sorted on “Customer”. Filtering on display value Granted, filtering on display value hasn’t made it into this release since we wanted to make sure the look-up mechanisms are high quality. The next release will have it! Design, design, designNothing in Universal is built without a good design. An improved design for all components has been done to make a clearer distinction between them, without having to resort to splitter-lines. Title bar and breadcrumb has been designed and will be implemented soon. A global design for editing is currently under review by the team. Many, many minor fixesAs always, we’ve put an enormous amount of energy in ensuring a top-quality GUI: Corrected path for placeholder Hide database value for lookups Made cardlist items all the same size Added target_tab_col_id to i_ui_tab_lookup Images in grid are now the same size, regardless of row height Fixed alignment of listbar items without icons Fixed the size of group icons in the listbar Fixed grid header font size Filter out untranslated lookups to avoid 500 statuscodes Data is properly loaded when starting against an SF Reinstated default prefilter button colors Properly aligned the HTML control content to the rest of the form Fixed alignment of items in the cardlist overflow menu Made input label styling consistent Validated and closed bugs that were no longer reproducible What we are working on next month Squashing about a dozen bugs Better quality control: Test coverage, typings and enabling strict mode Filtering on lookup presentation Look-up display value resolvement Breadcrumbs Refactoring the sidebar Scrolling the grid and cardlist to the active row after filtering Replacing our router Layout logic for the current row Align controls according to domain control alignment from SF Multiple designs for how to make Universal responsive

Related products:Universal UI