User Interface

User Interface
Friday, November 17, 2017PrintSubscribe

Users love getting a confirmation for their actions but would not appreciate if the flow of data input is interrupted with blocking popups. Touch UI now has a built-in ability to automatically confirm Update, Insert, Delete data manipulations and Sort, Group, Search/Filter actions. In the screenshot below you can see an “Update” notification displayed at the bottom of the screen after product has been changed. Notification slide up from the bottom and stay for a short duration visible to the user without blocking interactions with the app. Notification automatically slides away or disappears if the user taps on it.

A notification confirming user action in app with Touch UI.

Notifications take the full display width on devices with small form factor.

A notification on a small factor device takes the entire width of the screen in the app created with Code On Time.

Modify ~/touch-settings.json to allow displaying notifications on the left side of the screen on large display devices.

  "ui": {
    "notify": {
      "location": "left"

Action notifications can be displayed on the left side of the screen in apps with Touch UI.

It is easy to setup your own notification on any action. For example, set Notification property of Actions / ag2 (Form) / a4 – Update, Save when Edit action in Products controller as follows:

Property Value
Notification Saved "{ProductName}" priced at {UnitPrice}.

This will result in the following notifications:

Custom notifications in Touch UI apps can reference field values.

The framework will automatically assign standard notifications to Insert, Update, and Delete commands in your data controllers if there is no value there.

Command Name Standard Notification
Insert Saved - {0}
Update Saved - {0}
Delete {$selected} deleted

Specifying {0} will include the value of the first visible data field in the view. Indexes are zero-based.

You can also {$selected} to specify the number of selected items or {$count} to specify the total number of items in the view.

If you want to disable a standard notification for a particular action, then enter $none in the Notification property of the action.

The fastest way to change the format of the standard notification is to change ^Saved^ and ^Deleted^ tokens using Visual Studio in the file Solution Name / Code On Time Items/ ClientLibrary.en-US.txt. Note that the culture in the name of the file may be different for your project. Save the changes in the file and re-generate the project. Use Ctrl+F5 to refresh the page to force the browser to load the update resources.

If the business rule forces a display of a message with Result.ShowMessage or Result.ShowViewMessage, then a corresponding notification will be displayed with medium duration.

Here is an example of SQL Business Rule handling a custom action.

set @Result_ShowMessage = 'Archived "' + @ProductName + '" product.'
set @Result_Continue = 1

A custom notification emitted in an SQL business rule implemented in the app with Touch UI.

Standard notifications are always displayed with short duration.

The standard notifications can be displayed with ui.notify.enabled property. The default duration of the notifications expressed in milliseconds is defined as follows:

  "ui": {
    "notify": {
      "enabled": true,
      "duration": {
        "short": 2500,
        "medium": 5000,
        "long": 10000

JavaScript business rules can send notifications as follows:

$app.touch.notify("Hello World");
$app.touch.notify({ text: "Hello World", duration: "long" });

The duration can be expressed in milliseconds. If force option is specified with value true, then any visible notification will be dismissed and your own notification will get displayed instead.

Future releases of the framework will further enhance notifications with an ability to provide a custom action or callback function that can activated by a button displayed directly in the notification.

Thursday, November 16, 2017PrintSubscribe
Peformance Improvements and Notifications

Code On Time release brings a significant improvement in the data processing framework and the new feature Notifications in Touch UI.

Performance Improvements

This release will speed up data interactions of the application framework with your database. Application always counts the number of available rows whenever your access any data for the first time. It uses an SQL query to count the total number of records to perform data paging when needed. Subsequent retrieval of pages of data does not require record counting. Starting with this release, the initial counting has been eliminated when only a small number of records available for retrieval. 

The change in the implementation will provide performance gains of up to 25% or more. This applies both to Classic and Touch UI when you re-generate your project.

Forms with the large number of static lookups (Drop Down List, Radio Button List, List Box) will see a significant boost.


Action notifications provide and effective method of confirming user actions without stopping the flow of user interactions with the app. Fleeting messages are displayed at the bottom of the screen to inform the user about data manipulations. Custom notifications can also be displayed when needed.

Custom action notification displayed in th app with Touc UI created with Code On Time.

Other Features and Ehancements

Popups is the standard feature of Touch UI. We display options with choice for dropdown menus, context menus, etc. Previous implementations have blocked user interaction with app until the popup is dismissed with Esc key or when the user clicks/taps outside.

The new release significantly modifies this behavior for end users working with the mouse. The drop downs on menu bar will automatically open when user hovers over. The entire toolbar set of elements is fully responsive when any popups are open. If the “mouse” user clicks ouside of the boundaries of the popup, then the user interface will respond. Use Esc key or click on static elements of GUI to prevent interactions and close the popup instead.

Users of touch screen will see no change in the behavior of popups.

This modification makes Touch UI behave in a mouse-friendly way.

Touch UI is now even more "mouse-friendly" than ever.

The styling of Calendar view has been changed.

New peresentation of the Calendar view style.

Previously a popup with a card representing the selected event has opened when the event was clicked or tapped on. Now the first available action is executed instead.

Clicking on the event in the Calendar view style will execute the first available action.

The up/down/right arrows in the lookups are now appearing larger as we are switching to material icons.

Material icons are now used in the implementation of right/down/up arrows in lookups.

Other notable changes:

  • Calendar view style is correctly rendered for dataview fields in modal forms.
  • Method DataView.findAction will return null if an empty path is specified.
  • TimeSpan fields can be passed to SQL business rules.
  • Increased speed of $settings method when verifying touch-settings.json variables on the client.
  • Popup menus dropped from the menu bar will auto-select on hover faster than when a standard popup menu is opened for improved user experience on mouse-pointer devices.
  • We have removed "apple" trick for numeric inputs. The numeric input type implemented through native HTML input for numbers will be replaced with the custom keyboard in the next release.
  • Surveys allow unlimited text input in multi-line string fields. This fixed the problem with Batch Edit form and multi-line fields.
  • BatchEdit correctly clears selected key list (checkboxes) after successful execution.
  • BatchEdit displays system notification about the number of updates items.
  • Method $app.execute now returns a "deferred" object to allow "done", "then", and "fail"
  • Methods $app.alert and $app.confirm now return "deferred" object to allow "done", "then", "fail".
  • If $settings('') == 'sidebar' then content pages display with a sidebar.
  • Added integration with Offline Sync to provide "cloud" icon
  • Event "before[panel-type]" event provides "panel" property with "type" and "id". List of items is in "items" property of event.
  • Calendar View now supports the following tags:
    • calendar-day(-disabled)
    • calendar-week(-disabled)
    • calendar-month(-disabled)
    • calendar-year(-disabled)
    • calendar-agenda(-disabled)
  • Calendar now runs first action in Grid scope instead of showing card, handles double click, fixed offset color boxes, month events no longer grow.
  • Core.css now contains glyphicons for Classic UI.
  • Fixed issue (again) where ASPX projects navigate to "/login" instead of "/login.aspx".
  • Fixed issue with server authentication generating incorrect code.
  • Added URL Decryption in @Url_XXX SQL business rule parameters.
  • Internal static page references will open in fullscreen mode when accessed from a non-modal page.
  • Static page navigation uses promises when making remote calls.
  • Integrated initial daf-odp.js into the framework and setup.
  • Flag mobile.busy is set to the same value as dataView._busy argument to ensure global “gray glass pane” on top of the GUI.
  • Auto-open menu options on hover.
  • Deleting and retyping incorrect unmatched value does not clear the selection in the drop down list.
  • Enhanced auto-completion of text in Lookup/AutoComplete/DropDownList. BackSpace and Del buttons do not cause auto-completion.
  • Fixed the typo in the label reference. It is again possible to access Sort, Filter, and Group menu options in the context menu.
  • Advanced Search now works with the data controllers based on rowsets created with the business rules.
  • Fixed. Group BY is not supported with controllers using DataTable for resultset.
  • Synchronization of Distinct page requestes performed by advanced search form is disabled to improve performance.
Wednesday, November 8, 2017PrintSubscribe
Announcing Custom Native Apps and Offline Sync Add-on

Code On Time release is expected to be available December 22, 2017. See our current roadmap at

With this release, will make it possible to download custom Windows 7 native client for your app based on embedded Chromium browser. The second option is a custom Universal Windows App for distribution via Microsoft Store. Both options will be available directly in the Publish screen of the app generator. We are also introducing a new product to enable “always offline” mode in those apps!

In a world where apps are everywhere, it makes sense to package your application in a native shell on all platforms, be it Windows, iOS, or Android. Such shell must not merely provide a custom online browser. The shell must host a local set of client-side application files while using the server components of the app to read and write data. This will not only increase speed of page loading (all required files are already on the device), but will also enable access to the device equipment and make it possible to work in a disconnected mode.

Custom Native Apps

Presently, the app generator offers a number of Publish options for deployment to a web server. After an application is published for the first time, an “App Store” option is displayed. The option is not implemented in the current release.

Generator will display “App Store” option on the Publish screen as soon as you publish your application to any of the supported targets (Azure, File System, FTP, etc). Deployed application is available on internet and native apps can access services provided by the server components of the app.


The Publish / App Store option will be expanded to allow getting access to the native implementation of the app for each supported mobile platform. The initial implementation will offer two options:

  • Mobile App for Windows - this is a customized version of the Universal Mobile App based on embedded Chromium browser (CMA-W7). Developers will be able to download the installation package for the app directly. Unlimited Edition users will have an option to download the source code as well

  • Universal Windows App - this is a customized version of the Universal Mobile App for Windows 10 and 10S (CMA-10). Developers will be able to download the installation package for Windows App Store. Unlimited Edition users will be able to download the source code as well.

Follow up releases will make available similar options for Apple iOS, Google Android, and Apple MacOS. We are hoping to complete support of the other mobile platforms by the end of March 2018. See the roadmap for details.

    Offline Sync Add-on

    Offline Sync Add-on makes its appearance in this release. The add-on will be available for purchase at The purchase will be delivered to you as a zip file with the name “”. Copy the zip file to ~/Documents/Code OnTime/Addons folder. The application generator will automatically expand the contents of the file when the app is generated.

    Installed addon will enable “always offline” mode in your application. Any pages marked for offline will magically become fully autonomous. The relevant data will be downloaded when application is installed on the native device. Any data modifications will be executed locally while requests to change data are logged and saved. User interface will expose Sync option in the menu. If synchronization is requested, then the log of changes will be submitted to the application server and requests will be executed as a single transaction. If there were no errors, then the transaction is committed. Otherwise, the user will have the option to reconcile issues for each individual error and attempt to resubmit the entire change log.

    Here is a screenshot on app with Offline Sync Add-On installed. The tablet-sized screen will display synchronization status icon as a cloud in different states. In this case, all data is downloaded and there are no pending changes.


    User can access “Sync” option in the context menu of their app shown next. This option is always present in the app enhanced with Offline Sync Add-On. It provides additional settings such as automatic synchronization.


    See the roadmap for more details about offline features.

    Continue to Rich Text in Touch UI