News

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
News
Wednesday, November 8, 2017PrintSubscribe
Announcing Custom Native Apps and Offline Sync Add-on

Code On Time release 8.8.0.0 is expected to be available December 22, 2017. See our current roadmap at https://codeontime.com/roadmap.

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.

image

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 https://codeontime.com/buy. The purchase will be delivered to you as a zip file with the name “addon.OfflineSync.YOURCOMPANY.zip”. 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.

    image

    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.

    image

    See the roadmap for more details about offline features.

    Wednesday, October 18, 2017PrintSubscribe
    OAuth Wizards, RTF, DNN Integration, Enhanced Quick Find, New Folder Structure, and more.

    Code On Time release 8.6.6.0 brings about a new folder structure, RTF support in Touch UI, OAuth registration wizards, built-in integration with DotNetNuke, enhanced Quick Find with history and auto-suggestions. User interface of the generated apps has also changed in subtle ways.New features of Code On Time 8.6.6.0

    Keep reading to find out what’s new!

    Native Client Apps

    The release sets up the stage for the upcoming Native Client Apps (NCA). NCA is a hybrid app composed of HTML,  JavaScript, CSS, and native platform-specific executable that can be installed on a mobile device. NCA makes HTTP requests  to the sever-side components of the application to read-write data. Apps generated with the release 8.6.6.0 have a folder structure compatible with the platform-specific executables designed and developed by our team.

    New folder structure of apps created with Code On Time release 8.6.6.0

    Folders css, fonts, images, js, and pages are transferred as-is to the mobile device upon installation of the app directly from the server deployment. Various application framework components were added and enhanced to support self-updatable NCA executables.

    Presently Code On Time generator produces apps composed of HTML, JavaScript, CSS, and server-side code written in C# or Visual Basic. Apps are hosted on a Microsoft IIS web server and can be accessed via modern web browsers from mobile and desktop devices. Starting with the release 8.7.0.0 (see notes at the end of the post) we will introduce generation of Native Client Apps for distribution via Apple App Store, Google Play Store, and Window App Store.  Also Chromium-based native Windows Apps will be supported for Windows 7 and all other compatible versions of Microsoft OS as alternative to Windows App Store.

    Theme Enhancements

    The release intoduces numerous subtle Light theme enhancements. The toolbar is now a little taller. The selection indication colors are borrowed from the theme accent. Feedback response is expressed via background color changes.

    New “Dark” theme will become available soon to double the theming choices. We are also considering configurable “dark” theme variations to allow custom “main” themes.

    All future themes will share the same color accents.

    Simple Search With SuperPowers

    Quick Find has been greatly enhanced to offer search history, auto suggestions, and field level search.

    Auto-suggestions in Quick Find of apps created with Code On Time

    Enter the first letters of the field name separated with a colon symbol from the search sample to limit the search scope.

    Field-level search in the app created with Code On Time and Touch UI

    RTF (Rich Text Format)

    Built-in Rich Text editor without any external dependencies is now available in Touch UI. Simply set the Text Mode property of a data field to Rich Text to enable displaying and editing of formatted content.

    Built-in Rich Text Editor in a Touch UI app build with Code On Time

    “See All” to Fullscreen

    Summary data views will open in “fullscreen” mode when “See All” option is selected. This screenshot shows a summary view of suppliers.

    Summary view of records in an app with Touch UI

    A fullscreen infinite “grid” of suppliers without paging is displayed when the user taps “See All” in the right top corner or when the user taps on the pager area.

    Infinite view of records in the app created with Code On Time

    Previously a modal view of data items was displayed instead.

    User Avatars

    App administrators can now upload user photos directly into the built-in conent management system of the app. First enable CMS for your project. Next ;ogin as administrator and navigate to Site Content. Upload a custom image and set its name to the name of the corresponding user and leave .PNG or .JPG extension. Set Path to sys/users. If the user logs out and logs in again, then the image is automatically displayed on the app toolbar.

    Uploading a user photo into Content Management System on an app created with Code On Time

    The same mechanism is automatically engaged upon Single Sign On (SSO) with Facebook, Google, Windows Live, DotNetNuke, etc.

    Automatic Focus and Modal Fullscreen

    Developers are now able to set a focus on an arbitrary field in a form by specifing focus-auto tag. The field will be focused in edit/new mode.

    Frequently requested feature to display forms in “fullscreen” mode is now a part of the framework. Developers can specify modal-fullscreen tag on the form view to accomplish this effect.

    A fullscreen editForm1 view in edit mode with the automatic focus on the second field is shown in the screenshot.

    A fullscreen form view with the focus automatically set on the second field in an app created with Code On Time

    CMS + OAuth Registration

    Content Management System now supports OAuth Registration wizards to enable easy registration of external OAuth providers in the apps to enable SSO and optional communication services. Custom wizard forms are now available for Facebook, Google, Windows Live, Microsoft Graph, SharePoint, Identity Server, and DotNetNuke.

    Open Registration Authentication for Microsoft SharePoint is displayed below.

    OAuth registration form for Microsoft SharePoint integration of an app created with Code On Time

    You will find implementation of the OAuth Wizards under ~/js/surveys/cms folder. Take a look to see how the wizards are working and build your own surveys.

    We will be adding more custom editors for CMS content to enable easy runtime configuration of data controllers, pages, access control rules, workflow register, and much more.

    Cloud On Time Connector for DotNetNuke

    An app created with any edition of Code On Time can now be integrated with a popular content management system DotNetNuke. DNN allows easy deployment of customer-facing web portals built with Microsoft.NET. 

    Just a few lines of code are now included in every generated app to allow easy integration with DotNetNuke portal instances. The portal administrator must install the free module Cloud On Time Connector for DNN available on our website. The application administrator will have to configure the app for integration. Integration with DNN is discussed in details if you follow the links.

    We have also developed a collection of video tutorials to provide step-by-step guidance for the process of integrating DotNetNuke and apps created with Code On Time.

    Watch a brief intro to learn how to rapidly build database forms, reports, apps for DotNetNuke portals. Use the links above to find the full details and instructions.

     

    Applications generated with Unlimited edition can also be integrated with Microsoft SharePoint Online (Office 365) in a similar fashion.

    You may not need a full featured portal as the front end for your app, but be assured that the technology making integration with DNN and SharePoint possible has singificant implications. Soon you will be able to use Code On Time to build your own apps that act as providers of identity information such as users, roles, and various custom data properties. It will be possible to create custom business applications that outsource user/role management to the identity provider app via OAuth. Apps acting as identity consumers will not have a built-in user management and will defer authentication and authorization decisions to the identity provider application created with Code On Time.  This will greatly simplify user management and enhance application security when large collections of apps are developed. This mechanism is the core component of the upcoming Cloud Edition of the v9, the next generation app builder of mobile and desktop apps. The new Cloud Identiy component of generated apps will become the default universal option for “Authentication and Membership” instead of ASP.NET Membership.

    See Also

    The following bug fixes, enhancements, and new features were introduced:

    • Light theme has been enhanced to use the “grey” background for visual response on click/touch with additional accent colors from to indicate the “selected” state of the elements of user interface.
    • There is no gap between modal pages and screen edge if the screen width is less than 480px.
    • Rich Text Formatting is now available in Touch UI when the Text Mode of a data field is set to Rich Text.
    • Read Only When expression works correctly when the field is specified in the Copy property of the lookup field.
    • List/Grid/Cards display a text-only tooltip limited to 300 characters.
    • Fixed. Model Builder sets up the sort expression of the baseline data controller view grid1 according to the order of the fields.
    • Enhanced rendering on Windows 10 tablets and horizontal touch-scrolling in grid view style.
    • Property Visible When of tabbed categories works correctly in Touch UI with container-level data views and DataView fields in forms. Tabs in forms will continuosly respond to changes to the fields used in Visible When expressions. Tabs of container-level data view fields will respond only to the initial values of the master row.
    • Switching between tabs will maintain the scroll position in forms even when the tabs reveal a small amount of content to prevent “jumping” effect.
    • Forms templates created by the framework at runtime will not include data-visibility attribute on field and category elements unless there is a Visible When expression on the corresponding object of the data controller.
    • JSON serialization of dates now uses String.Format method instead of DateTime.ToString to prevent culture related exceptions for some date values.
    • Globalization scripts are now included explicitly in the framework file set under ~/js/sys/culture folder of the app. If only the en-US culture is supported in the app, then the folder does not exist. New culture files are automatically generated when globalization settings of the project are changed. Calendars Hijri and UmAlQura are incuded directly in the corresponding globalization script as needed.
    • Controller MyProfile now includes culture-specific translated resources.
    • Added German membership translations - Thank you Peter Teutsch.
    • Fixed the double selection of auto-complete with the mouse in Touch UI on Mac OSX.
    • Fixed issue with custom session state with "DELETE * FROM..."
    • OAuth login using token in cookie and auto login causing redirect loop has been fixed.
    • Added check to fix issue with EnsureFieldValues when no values are submitted (Export, Download, etc).
    • Added JSON serialization support for the fields of type “Date” to work the same as “DateTime”.
    • Application framework now implements GetIdentity, GetManifest, GetManifestFile to support the native client apps.
    • Tag focus-auto will cause the form to set the focus on the corresponding data field in the form in new/edit mode on devices with a mouse pointer.
    • Tag modal-fullscreen will cause the form view to open as “fullscreen” modal view when the screen width allow “modal” presentation.
    • Ensured that the field outputs use the proper model name when available, instead of column name.
    • Added default user roles to user accounts created by external authentication.
    • Added new OAuth Registration Surveys to SiteContent.
    • Password recovery is denied if user has "Source: \w" in the comment (i.e. came from SSO source).
    • SiteContent is now sorted by FileName, Path.
    • Disabled ASP.NET request validation. Added RequestValidationService class as a replacement.
    • Client Framework now HTML-encodes the entire request. The server-side framework HTML-decodes the request to prevent HTML injection on HTTP level.
    • DotNetNuke integration via OAuth and Cloud On Time Connector for DotNetNuke is introduced in the apps. DNN tokens are now persisted in the database. OAuthHandler can now set email separately from the username.
    • Classic UI: Mandatory dropdownlist/radiobuttonlist/listbox will display NULL option if the field value is null. This will force the user to make a choice.
    • Touch UI: "N/A" text is not displayed in mandatory dropdownlist/radiobuttonlist/listbox when the field with null value is activated. Instead the placeholer is displayed in the empty input text box.
    • Fixed. Operation "$lastweek" missing from RowFilterOperations.
    • It is now possible to use culture-specific “comma” in decimal values on iOS devices when entering numbers.
    • Fixed left sidebar shifting with glyphicon icon.
    • New methods added to SiteContentFile: WriteAllBytes, WriteAllText, Exists, Delete.
    • User pictures (avatars) can now be saved in CMS as "sys/users/[UserName].(jpg|png)".
    • Quick Find now supports auto-suggestions, history, and field-level search. Improved search results for "search anywhere" and "search in field".
    • Universal Input: Refactored for speed the implementation of "change" function that monitors lookup input.
    • Ensured application name is "/" for apps using ASP.NET membership.
    • Publish will re-ask permissions if expired or incorrect.
    • Fixed. “Required” Tooltip shows up incorrectly when the field is on an inactive tab.
    • Search On Start works in Summary mode.
    • New tag search-on-start-simple will force search to be displayed in "simple" mode instead of "advanced". Advanced is the default mode for "Search On Start".
    • Client framework ignores HTTP error codes < 0 frequently causes by user navigating away when a data request is still in progress.
    • Ensure date picker closes after selection if no time component in Touch UI.
    • Context Values are passed as External Filters to enable additional server-side analysis and filtering similar to https://codeontime.com/learn/data-controllers/fields/context-field/implicit-lookup-filters-with-filter-expression.
    • It is now again possible to specify literal values on the right side of mappings in "Context Fields" expression in Touch UI.
    • Application Framework: Legacy security attribute legacyCasModel of "trust" element is restored to enable better performance of Report Viewer on more secure Windows Servers.
    • Folder structure of generated apps has changed:.
      • All javascript goes under ~/js with /js/sys and /js/daf folders.
      • All touch CSS goes under ~/css.
      • Lowercase pages, reports, controls.
      • Method sm_ResolveScriptReference has been removed from Site.cs(vb), and instead sm.AjaxFrameworkMode = Disabled for both ASPX and HTML projects.
    • Renamed import-1.0.0.0.js to touch-import.js. Included jQuery 2.2.4 into release.

    Next

    Monitor our roadmap 2017 updates over this weekend to see what is coming next (Native Client Apps for mobile devices, Chromium-based client for Windows, Offline Data Processor, etc.)

      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.
      Continue to Announcing COT v9