SaaS

Labels
AJAX(112) App Studio(7) Apple(1) Application Builder(245) Application Factory(207) ASP.NET(95) ASP.NET 3.5(45) ASP.NET Code Generator(72) ASP.NET Membership(28) Azure(18) Barcode(2) Barcodes(3) BLOB(18) Business Rules(1) Business Rules/Logic(140) BYOD(13) Caching(2) Calendar(5) Charts(29) Cloud(14) Cloud On Time(2) Cloud On Time for Windows 7(2) Code Generator(54) Collaboration(11) command line(1) Conflict Detection(1) Content Management System(12) COT Tools for Excel(26) CRUD(1) Custom Actions(1) Data Aquarium Framework(122) Data Sheet(9) Data Sources(22) Database Lookups(50) Deployment(22) Designer(177) Device(1) DotNetNuke(12) EASE(20) Email(6) Features(101) Firebird(1) Form Builder(14) Globalization and Localization(6) How To(1) Hypermedia(2) Inline Editing(1) Installation(5) JavaScript(20) Kiosk(1) Low Code(3) Mac(1) Many-To-Many(4) Maps(6) Master/Detail(36) Microservices(4) Mobile(63) Mode Builder(3) Model Builder(3) MySQL(10) Native Apps(5) News(18) OAuth(9) OAuth Scopes(1) OAuth2(13) Offline(20) Offline Apps(4) Offline Sync(5) Oracle(11) PKCE(2) Postgre SQL(1) PostgreSQL(2) PWA(2) QR codes(2) Rapid Application Development(5) Reading Pane(2) Release Notes(183) Reports(48) REST(29) RESTful(29) RESTful Workshop(15) RFID tags(1) SaaS(7) Security(81) SharePoint(12) SPA(6) SQL Anywhere(3) SQL Server(26) SSO(1) Stored Procedure(4) Teamwork(15) Tips and Tricks(87) Tools for Excel(2) Touch UI(93) Transactions(5) Tutorials(183) Universal Windows Platform(3) User Interface(338) Video Tutorial(37) Web 2.0(100) Web App Generator(101) Web Application Generator(607) Web Form Builder(40) Web.Config(9) Workflow(28)
Archive
Blog
SaaS
Tuesday, September 12, 2017PrintSubscribe
CMS (Site Content) & OAuth Registration Form

Open Authentication (OAuth) allows secure Single Sign-On in distributed cloud infrastructure. For example, you may build a collection of business applications that use Azure Active Directory to manage users. Individual applications do not store original user information and instead rely on Azure Active Directory to manage users, control sign-in, as well as offer password recovery, suspicious activity detection, and general account security. In this example, each custom application is registered with Microsoft Graph and maintains it’s own configuration settings to delegate user sign-in to Azure Active Directory.

Delegated security speeds up your application development while conforming to high standards of account management and protection.

Release 8.6.6.0 of Code On Time web app generator now offers an easy way to register authentication handlers for Google, Facebook, Windows Live, Identity Server, Microsoft Graph, SharePoint, DotNetNuke, and upcoming Cloud Identity (replacement for ASP.NET Membership in applications built with Code On Time).

The dynamic nature of OAuth configuration requires a place to store settings in the application. Make sure to enable the Content Management System in the database of your app. Log in as admin to your app, and navigate to Site Content.

Site Content page represents the content management system of your app.

Click on the plus (+) button and a form will ask the type of content the user wishes to create. Two options are available – (custom) and Open Authentication Registration. Future releases will allow creating access control lists, custom pages, data controllers, user profile images, workflow register entries, etc. Developers will be able to create editors for custom content items in their applications.

Creating a new Site Content record.

Choose “Open Authentication Registration” option and press OK. Select the Authentication provider from the list of available options in the Open Authentication Registration form, and additional configuration parameters will be displayed.

Selecting an authentication provider on the Open Authentication Registration wizard.

Enter the required properties and press “Save” to register the provider.

Open Authentication Registration form for an existing record.

The new registration record will be displayed in the Site Content. Selecting an existing OAuth registration will reopen the Open Authentication Registration form.

The new registration entry has been inserted. 

User Synchronization

When clients complete authentication with an external provider, the provider returns a username to the app. If a user account is found with a matching username in the application database, then the client is logged in as that user. If the matching user account is not found, what will happen next is determined by the provider configuration. If “Synchronize users” is enabled, a user account will be created with that username and randomly generated password and password answer. If the “Synchronize users” property is disabled, then the user is denied access to the application.

Synchronizing users via external authentication.

Most of the time, you will want to enable user synchronization to create “shadow” user accounts in your application database automatically. Shadow user accounts are representations of the external user identity in the application database. Changes made to these accounts will not affect the identity configuration managed by authentication provider. These accounts represent a cached user name and email. The user password, contact, and identity recovery information is not stored in the application data. If the user is deleted or renamed, then only the cached data is changed. Next sign-in authenticated by the provider will create another shadow user account.

If synchronization of users is disabled, then you will need to create user accounts ahead of time. The passwords assigned to these accounts do not need to be known to the users. Successful authentication by a registered external provider will log in the user with a matching name to the app.

Many applications save references to users in special columns (for example: Modified, Created, ApprovedBy, Owner, DeletedBy, etc). If authentication provider is enabled, then references to shadow user accounts will be recorded.

User Role Synchronization

Many OAuth providers maintain user roles. When a user is authenticated by an external provider, the provider may return a list of roles or groups assigned to that user. If “Synchronize user roles” is enabled for that authentication provider, then the reported user roles will be assigned to the user. Any shadow user roles assigned to the shadow user but not matched by the provider will be removed.

Requesting a list of user roles requires adding a system account to the provider registration. The system account must have permission to access the roles or groups of authenticated users.

If “Synchronize user roles” is enabled, press ADD SYSTEM ACCOUNT to save the registration record. You will be redirected to the authentication provider to acquire permission to read user roles.

Synchronizing user roles via external authentication.

If authentication is successful, the provider will redirect back to the Site Content page and update the registration record with system access tokens. The application will use the system access token to obtain shadow user roles from the authentication provider on each successful login. Access tokens do expire periodically and will need to be renewed. Simply select the provider registration and click Add System Account.

Auto Login

If only one authentication provider is used to confirm user identities, then consider enabling “Force users to login with this provider”. If an anonymous user tries to access this application, then the app will immediately redirect to the authentication provider for sign in. This will also happen if the user logs out.

Enabling auto login for an external providier.

To access the system login form and sign in with an internal user account, append “?_autoLogin=false” to the URL of the page in your browser.

Redirect Uri and Local Redirect Uri

The Redirect Uri property determines the address that the provider will return to after a user has been authenticated. For providers that support defining more than one Redirect Uri, the Local Redirect Uri property will be passed to the provider when the app is running in “local mode”. This automatic switching makes it easy for developers to test the authentication pipeline on a development machine, without having to publish the app.

Specifying Redirect Uri.

Simply type in the address of your site (myapp.azurewebsites.net), and it will be expanded to the correct full URL (https://myapp.azurewebsites.net/appservices/saas/[ProviderName]).

Facebook

To create a registration for OAuth integration with Facebook, the properties Client Id, Client Secret, and Redirect Uri must be specified. Client ID and Client Secret can be obtained from the Facebook Developer Dashboard. Synchronization of roles is not supported.

Configuring Facebook OAuth Provider.

Google

The Google Developer Dashboard will provide the Client Id, and allow developers to generate a Client Secret. Adding system account also allows storing blob data in Google Drive by configuring the Google Drive Blob Adapter.

Configuring Google OAuth Provider.

Windows Live

The Microsoft Apps Dashboard allows creating new clients and secrets. Role synchronization is not supported.

Configuring Windows Live OAuth Provider.

Microsoft Graph

The Client Id and Client Secret values can be created from the Microsoft Apps Dashboard. The Microsoft Graph OAuth provider allows users to authenticate with their Windows Live, Office 365, Azure Active Directory, or SharePoint Online accounts. The Tenant ID property controls the source of external accounts. Specify the value “common” to allow all sources. Enter the specific Tenant ID of your tenant to restrict access to the app to only those accounts registered in the specific tenancy.

Configuring Microsoft Graph OAuth Provider.

If “Synchronize user roles” is enabled, be sure to press Add System Account to grant your app access to the roles or groups of the tenancy.

SharePoint

The Client Id and Client Secret properties can be acquired by navigating to “https://mysite.sharepoint.com/_layouts/15/AppRegNew.aspx”. Make sure to replace the root with your SharePoint site URL. The Client Uri property is equal to “mysite.sharepoint.com” if you are connecting to SharePoint Online.

Configuring SharePoint OAuth Provider.

When configuration is complete, be sure to press Add System Account to allow the app access to the SharePoint groups of each user that authenticates with your app. This also enables storing blobs in SharePoint file system via the SharePoint Blob Adapter and creating “service” data controllers from SharePoint lists in your site.

DotNetNuke

Configuring a DotNetNuke portal as an authentication provider requires installation of Cloud On Time Connector for DotNetNuke. Specify the authentication endpoint in the Client Uri property. Define a comma-separated list of tokens in the Tokens property. These tokens will be persisted to the SiteContent table for each user. These tokens can be accessed by calling @Profile_Token_Name in SQL business rules or GetProperty(“Token_Name”) in code business rules, replacing the colon (:) with an underscore (_).

Configuring DotNetNuke OAuth Provider.

Identity Server

Be sure to consult the documentation of your Identity Server installation on how to configure authentication clients.

Configuring Identity Server OAuth Provider.

Thursday, June 8, 2017PrintSubscribe
Announcing Advanced Search 3.0

We are pleased to announce the new feature of Touch UI called Advanced Search 3.0. This feature is re-introduced with many new capabilities and complete customization support.

If option “Search On Start” is enabled in the view, then an automatically constructed Advanced Search window is displayed.

image

Users can collapse the search form into the standard Quick Find search.  Button “more” will activate Advanced Search from Quick Find mode.

image

Dedicated filtering options of the data columns will display a “single field” advanced search form with a variety of filtering options.

image

Users can search across many fields and create multiple matching groups for complex searches.

image

Sophisticated type-specific data filtering options are automatically displayed.

image

Automatically constructed Advanced Search survey forms are controlled by field properties described at http://codeontime.com/learn/data-controllers/data-fields/search-mode and http://codeontime.com/learn/data-controllers/data-fields/search-options/overview.

Don’t forget that completely custom search forms can be designed. Next week we will publish new videos dedicated to search customization on our YouTube channel at https://youtube.com/codeontime. Stay tuned!

The release 8.6.3.0 will be out any day now. We are working tirelessly on getting it out.

Friday, March 3, 2017PrintSubscribe
Touch UI 2017, Modals, Import, Identity Manager, OAuth, SharePoint

Release 8.6.0.0 has arrived! This release contains thousands of changes to the application framework and client library. A new revision of Touch UI has been created to match modern user design principles. Modal Forms, Import, Search, and Themes have all been implemented or overhauled for this release. The new Identity Manager and OAuth support for Facebook, Google, Windows Live, and SharePoint make it easy for your users to login and/or switch accounts. The next generation of SharePoint is now supported with Software-as-a-Service (SaaS) mode.

Read on to explore the new features available in release 8.6.0.0. Learn more about upcoming Native Online and Offline Apps.

New YouTube Channel

Watch our brand new YouTube channel! See Touch UI 2017 in action and learn the latest development techniques.

Subscribe to the channel now! New videos will be published weekly. The transcripts of the videos will soon be available on our website in HTML and PDF format.

Modal Forms

Modal forms are now supported in Touch UI. Modals offer an enhanced sense of context and continuity to the user.

Forms will be displayed in modal presentation if sufficient screen space is available. The modal will be sized based on a proportion of the screen’s width and height. Opening additional forms will slide the form in a modal from right side of the screen. The user can tap the previous modal to go back.

Every modal offers access to the “more” menu, represented by the three dot icon in the top right corner. The close icon will return the user to the previous form or grid.

"New Attachments" modal form displayed in Touch UI 2017.

The maximize icon allows the user to expand the modal to fill the screen.

Modal form that has been maximized.

If there is insufficient width to render the form in a modal, it will be rendered in full screen mode. The view tag “modal-never” will also force full screen presentation.

Form is displayed in full screen mode.

Forms that have been tagged with “modal-always” will always be rendered in a modal window.

A form marked as always modal on a tiny screen.

A system of tags allows control over the sizing of modals. See the table below for more details.

Tag Description
modal-always Always render form as a modal.
modal-never Never render form as a modal.
modal-when-tn
modal-when-xxs
modal-when-xs
modal-when-sm
modal-when-md
modal-when-lg
modal-when-xl
modal-when-xxl
Will begin rendering the form as modal if the screen is at least the specified logical size. Default is “md”.
modal-fit-content Shrink the modal to fit the content. These modals will begin stacking, instead of sliding from the right.
modal-title-none Disables the modal title bar.
modal-buttons-more-none Disables the “more” icon.
modal-buttons-fullscreen-none Disables the “fullscreen” icon.
modal-tap-out Closes the modal form if the user taps outside the modal area.
modal-max-tn
modal-max-xxs
modal-max-xs
modal-max-sm
modal-max-md
modal-max-lg
modal-max-xl
modal-max-xxl
modal-max-any
The max width of the modal will be restricted to the selected logical size.
modal-dock-top
modal-dock-left
modal-dock-right
modal-dock-bottom
Docks the modal window to the specified side of the window.

New Theming Engine

A lighter touch has been applied to themes in Touch UI. Starting with release 8.6.0.0, the user has the ability to select “Light” or “Dark” base theme. Then, the user can select an accent for the theme. Each accent contains a combination of toolbar, sidebar, and icon color definitions.

The picture below shows “Light” theme with “Aquarium” accent.

Light theme with Aquarium accent in Touch UI 2017.

Here is “Light” theme with “Dark Knight” accent.

Light theme with Dark Knight accent in Touch UI 2017.

Finally, here is a sample of “Light” theme with “Plastic” accent.

Light theme with Plastic accent in Touch UI 2017.

The new theme engine significantly reduces the amount of CSS that comes with each app, resulting in smaller apps and better performance. It also makes possible the ability to create your own themes easily using a few colors. CoT v9 will offer a built-in Theme Builder.

Note that Dark theme did not make it into this release. We will be adding it in a subsequent release. Additional color variations will be added as well.

4,000+ Icons

Starting with release 8.6.0.0, over 4,000 icons are available for use in apps created with Touch UI. Icons can be applied to a page, view, or action to help the user in navigation and data manipulation.

By default, every application comes integrated with 1,650 icons from the Material icons library, provided for re-use by Google under the Apache License Version 2.0. There are 260 Halfling glyphicons (included with Bootstrap 3.0 under MIT License integrated as well. Additional icon libraries Font Awesome (730) and Ionicons (1,466) can be included using the method described here.

Icons available on actions, forms, and pages.

Import for Touch UI

A new implementation of Import has been added to Touch UI. The “Import” action is no longer hidden from the user. By default, it is available under the Actions menu.

"Import From File" action available on the Actions menu of the action bar.

This action will open the Import modal form, prompting the user to select a file for upload.

First screen of the Import process allows the user to upload a CSV, XLS, or XLSX document.

Upon selecting a file and pressing “SUBMIT”, the file will be processed. The next form will require the user to map the column headers of the imported file with the fields defined in the command argument of the Import action, or “createForm1”. Sample values from the imported file will be displayed as footer text in each field.

Second screen of the Import process allows the user to map columns from the imported file to fields in the controller.

Upon pressing “START IMPORT”, the client will begin resolving lookups and submitting batch insert requests to the server. A modal form will display the status of the import process.

During the Import process, a modal will show status.

The user will be alerted to the fact that the import process was completed.

When Import is complete, a modal will alert the user.

Enhanced Basket Lookups

This release enhances keyboard support for “Basket” lookups. This style, compatible with “Lookup”, “Auto Complete”, and “Drop Down List”, will display a list of values associated with a particular record. Users can use the lookup control to add additional items.

The "Tags" basket lookup shows multiple tags added to the task. A dropdown allows adding more tags.

Tap on an item to remove it from the list, or view details of that record.

Tapping on an item allows viewing or deleting the item.

If the “New Data View” is specified for the field, the user can type in a new item and press “Enter”. If there is only one required field, the record will be inserted and added. Otherwise, the create form will be shown. This allows rapid entry of items. Note that non-basket lookups also allow creating items in a similar fashion.

The “Basket” lookup style offers a great way to create many-to-many records if the Check Box List does not cut it.

Splash Screen

Many app stores recommend the use of a splash screen showing a logo or app name when the app is first started. Apps created with release 8.6.0.0 will show a splash screen for 2 seconds when the user begins a new session. The application logo is displayed in the top right corner. The app footer text is displayed in the bottom right corner. A default background image is displayed on the left side.

Splash screen for apps created with Touch UI 2017.

Learn how to customize the application logo and background.

Identity Manager

Previous releases required users to sign in every time they start working with the app. The new Identity Manager will store login tokens in the browser’s local storage. If the user enables “Remember Me”, the encrypted token will also enable the user to automatically sign in when their session needs to be refreshed. This login token is valid for up to one week. Otherwise, the token will simply remember the user’s name.

When the user begins a new session, an attempt will be made to sign in with the most recently used credential that contains a login token, if one is detected. The loading screen below will be displayed during the login attempt.

Automatic login for users that remember their password.

Otherwise, if there are any credentials, the list will be displayed.

A list of users is displayed on the Identity Manager screen.

The user can select an identity to sign in, and the login form will be displayed. They can also use the three dot icon to remove the identity.

A user icon will be rendered in the top right corner of the screen when signed in. Pressing the icon allows access to the account panel. The user can view their account, log out, switch to different user, add an additional account, or manage the list of accounts.

User can switch between accounts using the account panel in the top right corner.

When the screen is too narrow to display the user icon in the top right corner, the user icon will be accessible under the menu panel.

Account panel can accessed from the menu panel if space is insufficient for the user icon.

If login tokens are remembered for several accounts, it becomes trivial to switch between them – similar to how your smartphone allows jumping between different email accounts.

Open Authentication Support for Google, Facebook, Windows Live, SharePoint

Apps created with release 8.6.0.0 support integration with external authentication services via the OAuth 2.0 API. This feature is available in Unlimited edition. Enable the functionality for each service via the following procedure:

  1. Register your app with the external service.
  2. Register the external service with the app.
  3. Login.

The following services are supported:

Actions to login with a service are automatically displayed in the login form when that service is enabled.

Login with service actions displayed on the login form.

SharePoint Software-as-a-Service

SharePoint Factory project type was originally created as a server-side application that ran a traditional Code On Time Desktop app inside SharePoint 2010. However, the most recent editions of SharePoint (Online and 2016) do not offer the capability to run server-side applications inside the server farm. They do allow embedding simple client-side web apps. As such, the best solution to bring your favorite Code On Time pages into the SharePoint instance is to embed an external Web Site Factory or Web App Factory project in an iframe.

Code On Time app running inside SharePoint Online in SaaS mode.

We now offer the Data Connector for Cloud On Time add-in on the SharePoint Store. Install this add-in to your SharePoint instance. Place the new “Data Connector” web part onto a page, and connect the web part to your app. Once your app has been registered with SharePoint and vice versa, the web part will show a permission request to the user.

User identity is delegated to the SharePoint instance via OAuth support. The SharePoint user simply grants access to your external site, and a matching user identity will be created and automatically signed in to your app.

Learn how to configure the data connector add-in.

Mini Sidebar

The sidebar and menu button behavior has been changed. On larger screens, a wide sidebar is displayed by default.

The full sidebar displayed in a Touch UI app

Medium size screens (such as a virtual iPad Pro) will default to the mini sidebar.

Touch UI app with mini sidebar.

Pressing the hamburger icon in the top left corner will toggle between the full and mini sidebar.

Expanded Keyboard Support

The new release offers better support for keyboard navigation, helping experienced users manipulate data with ease. Arrow keys can be used to navigate the grid or panels. Additional shortcuts have been added:

  • Ctrl+F will search the first visible view on the screen.
  • F10 will trigger the menu button.
  • Shift+F10 brings up the “more” panel.
  • Esc will either close any pending panels, or navigate back to the previous screen.

The developer can also define custom keyboard shortcuts for actions. If the action is visible to the user, pressing that key combination will trigger that action. For example, configure “N” to create a new record from the grid. Configure “Delete” to delete the selected record. Configure “C” to mark a record as “Complete”.

User Icons

The app displays the user identity in the app toolbar and Identity Manager. By default, the first letter will be displayed. The developer can also configure avatars to be supplied for each user.

The user icon on the toolbar offers access to the different identities registered on that device.

Touch Settings

In prior releases, app configuration options were statically generated into a code file. The code would return this static definition to the user. Release 8.6.0.0 now first reads from the “~/touch-settings.json” file in the root of the project. This file is blank by default. If various configuration settings are not present in the file, it will write default values specified at generation time. Otherwise, it will take the values defined in the file. It is also possible to programmatically change values in the settings before it returns back to the client.

This behavior now allows us to rapidly introduce new configuration settings to get you app to look and behave the way you want. For example, to configure the menu to render in the sidebar, use the following config:

{
  "ui": {
    "menu": {
      "location":  "sidebar"
    }
  }
}

The result can be seen below.

Menu is displayed in the sidebar.

Some of the changes that can be made:

  • Move the menu to the toolbar, sidebar, or hide it.
  • Move the “Apps” button to the toolbar.
  • Disable the Quick Launch area of the sidebar.
  • Restrict the number of themes available to the user.
  • Disable user options, such as “Promote Actions” or “Initial List Mode”.
  • Configure a logo and background for the app.
  • Disable the splash screen.
  • Disable the Identity Manager.

See a sample configuration below. Some of the settings will be subject to change.

{
  "defaultUI": "TouchUI",
  "appName": "Inventory Manager",
  "map": {
    "apiKey": null
  },
  "charts": {
    "maxPivotRowCount": 100
  },
  "ui": {
    "theme": {
      "name": "Light",
      "accent": "Aquarium",
      "preview": null
    },
    "displayDensity": {
      "mobile": "Auto",
      "desktop": "Condensed"
    },
    "list": {
      "labels": {
        "display": "DisplayedBelow"
      },
      "initialMode": "SeeAll"
    },
    "menu": {
      "location": null,
      "apps": {
        "tiles": null,
        "location": "sidebar"
      }
    },
    "actions": {
      "promote": true,
      "reverse": null,
      "autoReverse":  null
    },
    "transitions": {
      "style": "slide"
    },
    "sidebar": {
      "when": "Landscape",
      "mini": true,
      "toolbar": true,
      "icons": true,
      "views": {
        "styles": null,
        "names": null,
        "collapsed": false
      }
    },
    "showSystemButtons": null,
    "smartDates": true
  },
  "settings": {
    "enabled": true,
    "options": {
      "displayDensity": true,
      "theme": true,
      "transitions": true,
      "sidebar": true,
      "labelsInList": true,
      "showSystemButtons": true,
      "promoteActions": true,
      "smartDates": true,
      "initialListMode": true
    }
  },
  "membership": {
    "enabled": null,
    "profile": "view switch login logout",
    "help": true,
    "accountManager": {
      "enabled": true
    }
  },
  "help": {
    "enabled": null
  },
  "search": {
    "quickFind": {
      "history": {
        "enabled": true,
        "depth": 25
      }
    }
  },
  "splash": {
    "enabled": true,
    "duration": null,
    "background": "/images/acme-bkg.jpg",
    "logo": "/images/acme-logo.png"
  }
}

A schema will be supplied in the near future to help construct your configuration. COT v9 will offer a built-in configuration editor.

Data Islands

The new “Data Island” feature allows web-dev savvy users to create their own pages using client-side templating. Simply configure a “$app.execute” script block on your page, and the server will automatically replace that block with the requested data in JSON format using standard data controller requests. Add tags to your HTML template, and the data will be rendered according to the template when page loads in the browser without making requests to the server.

Data islands are perfect for public-facing web pages that do not require data interactivity. For example, you can add pages that display product info, account status, etc.

The example below uses a simple Bootstrap table to render the list of products.

Products rendered with Boostrap CSS styling using the new Data Island feature.

The source code of the page is shown below.

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>Product Info</title>
</head>
<body data-authorize-roles="*">
    <div data-app-role="page" data-content-framework="bootstrap">
        <div class="jumbotron">
            <div class="container">
                <h1>My Products</h1>
            </div>
        </div>
        <div class="container">
            <table class="table">
                <tr>
                    <th>Product Name</th>
                    <th>Unit Price</th>
                </tr>
                <!-- repeating control -->
                <tbody data-control="repeater" data-source="ProductList">
                    <tr>
                        <td><span data-control="field" data-field="ProductName"></span></td>
                        <td><span data-control="field" data-field="UnitPrice"></span></td>
                    </tr>
                </tbody>
            </table>
        </div>
    </div>

    <!-- data island request -->
    <script data-type="$app.execute">
        ({
            "controller": "Products",
            "view": "grid1",
            "pageIndex": 0,
            "pageSize": 100,
            "sortExpression": null,
            "id": "ProductList"
        })
    </script>

    <!-- optional client-side post-render processing -->
    <script>
        $(document).on('start.app', function () {
            var productList = $app.data["ProductList"];
            if (productList && productList.length) {
                // process
            }
        });
    </script>
</body>
</html>

Search

The new Quick Find uses a modal form to render above the page content.

The new Quick Find panel displayed as a modal at the top of the screen.

Pressing the three dot icon will open the advanced search modal window.

IMPORTANT: Release 8.6.0.0 has the advanced search mode in a “temporary disabled” state.  The new advanced search allows complete customization of the user interface but is not quite stable at the moment. The feature will be re-enabled in the maintenance release expected to go out on March 13.

Miscellaneous

The release includes a host of other new features, improvements, and fixes. Some of the items are listed below:

  • CORS Support.
  • JavaScriptSerializer has been replaced with Newtonsoft.JSON to offer significantly greater performance .
  • File sizes are now displayed using “KB”, “MB”, “GB”, etc.
  • Issue with DateTime fields being shifted in reports has been resolved.
  • Footer Text property is now supported in Touch UI.
  • Floating category will create multiple internal columns in Touch UI.
  • Categories now offer “Flow” property. A value of “New Column” will render the category in a new column. A value of “New Row” will ensure that the category will move onto the next row, below any previous columns. This enables developers to configure several tabs of data views below the primary form, much like the “Tabbed” layout in previous versions of the app generator.
  • Touch UI dropdowns now render over the value, instead of below.
  • Static lookups in Touch UI grids will no longer query the database to fetch items.
  • Data View field properties are now supported.
  • “When Key Selected” is not re-enabled when opening an action in the Project Designer.
  • Removed several timers to allow Touch UI pages to load faster.
  • Alerts and confirms now use the new modal windows.
  • Desktop has been renamed to “Legacy”.
  • Legacy UI no longer scrolls incorrectly when a business rule changes a field value.