Roadmap 2023 - 2024

Glance into the future and start building online and offline apps today!

This roadmap does not represent a guarantee that the features and products will be delivered on the specified dates as described in this document. The delivery dates may change, and features may be added or removed at any time. It is merely an outline of our thoughts for the future, and is subject to change at our discretion.

Roadmap: 2024 - App Studio (aka v9)

Code On Time release 8.9.29.0 introduces the groundbreaking embedded development platform in the live apps. App Studio aims to increase the developer productivity and reduce the maintenance costs. The embedded tooling allows visual inspection of the user interface. Developers without prior knowledge of Code On Time will become experts in building and maintaining apps that run online and offline.

image2.png
The studio mode is activated automatically when the app is started on the localhost address. The space surrounding the app boundaries provides quick access to the App Studio tools. Developers can instantly inspect the user interface elements of the live app to locate the corresponding definition in the application configuration. Design changes, runtime settings, data models, and navigation system can be modified and previewed instantly. A single click will bring up the app source code in the File Explorer or load the code in the Microsoft Visual Studio. Another click will start the publishing process and preview the production app in the separate browser tab.
Properties Window will reveal every single configuration option of the user interface element or RESTful API. Instant preview of changes cuts down the time it takes to accomplish the desired functionality.

image1.png
The Property Grid is the standard feature of Touch UI. A custom form is created from the property set definition on the fly. Users can navigate the property set with the keyboard, mouse, and touch. A description of the selected property is presented at the bottom of the grid. App Studio uses this feature in the implementation of the Properties Window.
Follow the App Studio Roadmap to stay up-to-date with the latest features added to the platform. The delivery schedule shows the completed and pending features. App Studio is expected to be delivered in 2023.

Developers will benefit from the new technology in the foundation of the App Studio features such as the Project Explorer and Properties Window. The former will allow the hierarchical presentation of grid/list/cards with the self-referring lookup fields and child DataView fields. The latter will offer the new form presentation style.

Browser-based App Studio will replace the existing functionality of the Windows-based Project Wizard and Project Designer.

Major Features and Products

The major features and new products that will become available in 2023-2024 are presented next. All of them are enhancements on top of the already existing functionality. Many were prompted by conversations with our customers and are easy to implement. Their aim is to empower developers to find new ways to utilize applications created with Code On Time platform.

Workflow Links (New Product)

A Workflow Link is the web address that transforms a Code On Time application into a single-purpose software. An application accessed via a data link will have a reduced user interface and display a form that must be completed by anonymous or authenticated users. The completion of the form will redirect to another page in the same app or an external URl.

Workflow Links will allow apps to participate in complex workflow orchestrations.

For example, the link https://lmyapp.net/forms/edit-customer-info/ALFKI specified in the email will open a form that allows the user to edit the customer data. The form will display either in the modal or fullscreen mode. Completed form will offer users a menu of options. Users will be able to repeat the task or choose another type of activity that will lead to another workflow link or an external address. The custom server-side code will be able to send the collected data to any destination when the form is completed.

App Identity (New Feature)

A collection of Code On Time applications can designate one of them as the sourcer of identity. Developers will need to enable the RESTful API and OAuth 2.0 in the identity provider application. Other applications in the collection must be configured to use the identity provider for user authentication. Each identity consumer application will need to be registered by the provider and specify the provider as its authentication option. Applications in the collection are redirected to the identity provider to sign in. They use the OAuth 2.0 Authorization flow to obtain the user name, roles, avatar, and other information from the provider.

Applications will have their own security system that will be updated with the user-specific information. The identity provider will maintain the master copy of user data and implement the centralized user management for the collection. The same database can be shared by all apps in the collection, but the user authentication will be performed by the identity provider only.

App Identity is available in the release 8.9.29.0.

Serverless Apps (New Product)

Code On Time will turn an app and its database into a collection of static files ready for deployment to any hosting platform. The App and its data are deployed as a static set of files. Data is serialized in the JSON format. Custom or integrated security with OAuth 2.0 protocol of a Code On Time app is optional.

Custom hook for Sync action will send the client-side objects to any destination specified by the developers. The default Sync handler will persist the changed data objects in XML, CSV or XLSX format to the client device.

Users do not require an online connection to work with the serverless app. The code and data are always offline after the initial download.

Offline Sync core technology will be included with the app frontend to allow the autonomous operation after the initial loading sequence. Developers create an app with a physical database on their workstation and use the app to populate the default dataset.

Applications published as serverless will have the data included. Serverless Apps are perfect for warranty registration, offline questionnaires, personal To-Do lists, etc.

Database Builder (New Feature)

The new Database tool will allow basic manipulation of the database schema in the App Studio. This tool will bring up the application database diagram and allow creating and changing the database schema entities. The presentation of the entities will be similar to the one found in the Model Builder.

Database Builder will be available in the release 9.2.0.0.

Content Hub (New Product)

This new product is the add-on for Code On Time applications consisting of the agent and rendering engine.

The agent can process documents in the file system folders, Google Docs, or Microsoft Office 365. Changes to the documents are detected, processed, and placed in the Content Hub database used by the rendering engine. This makes possible producing content online and on the mobile devices with simultaneous editing by multiple content contributors. Cross-document links are automatically resolved by the rendering engine when handling requests from the browsers and web crawlers.

The rendering engine uses the basic HTML tags and display flow instructions to produce the complex rich output. Several presets allow rendering content as a documentation page, community post, help desk ticket, or blog entry. The online editor allows creating presentation instructions on any display flow content to alter the presentation.This allows post-production on the content that is being produced or changed at a later date.

Data-Driven Surveys (New Product)

Survey Add-on will make it possible to configure a powerful auditing and inspection system with just two tables. Users can take their surveys offline.

Consider the following database schema that may become a foundation of an auditing or inspection system. The catalog of survey forms is stored in the Surveys table. The definition of a survey is persisted in the JSON format to the Surveys.Definition column.

image3.png
A simple auditing or inspection system can be set up with just two tables. The catalog of survey forms is referenced in the audits. The Definition of the survey form is stored in the JSON format and conforms to the survey specification of Touch UI Framework. The data collected in the survey form is persisted to the Response column of an audit in the JSON format.

The results of an audit or inspection are stored in the Audits table row. The column Audits.SurveyID is referring to the survey form. The data collected in the survey form is persisted in the JSON format to the Audits.Response column. The application framework will rely on the input-survey-form and input-survey-data tags to activate the survey form and persist the collected data in JSON format to the database.

Application framework enhanced with the Surveys Add-on will display the progress button for the Audits.Response data field at runtime, when an audit record is shown in the Audit form. The button text will show the progress of the audit. The survey form will be displayed with the previously collected data when the button is pressed. The collected values are persisted as the value of the field marked as input-survey-data when the form is saved.

image4.png
Touch UI Framework creates a virtual data controller from the survey definition. The virtual controller behaves just like the data controllers created from the data models with one exception - its data must be provided and handled with JavaScript. The survey may have static fields, blob fields, database lookups, and DataView fields.

This is the definition of the survey in the ~/js/surveys/audits/questionnaire1.js file that will be displayed as the form shown above. The new survey definition format was introduced in the release 8.9.29.0 to allow visual customization in the App Studio, which will be possible at design-time and also in production apps with the help of the Surveys Add-on.

JavaScript
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596(function () {

    $app.survey.library['audits/questionnaire1.js'] = {
        text: "Important Questions",
        text2: "Information Request",
        submit: "questionnaire1_submit.app",
        submitText: "Submit",
        description: 'Please answer these important questions. Your prompt response is appreciated.',
        options: {
            materialIcon: "database",
            discardChangesPrompt: false,
            modal: {
                max: "xs"
            }
        },
        topics: [
            {
                questions: [
                    {
                        name: "Name",
                        text: "Full Name",
                        required: true
                    },
                    {
                        name: "Age",
                        text: "How old are you?",
                        type: "number",
                        required: true
                    },
                    {
                        name: "FavoriteColor",
                        text: "What is your favorite color?",
                        items: {
                            style: "RadioButtonList",
                            list: [
                                {
                                    value: "red",
                                    text: "Red"
                                },
                                {
                                    value: "green",
                                    text: "Green"
                                },
                                {
                                    value: "blue",
                                    text: "Blue"
                                }
                            ]
                        },
                        options: {
                            lookup: {
                                nullValue: false
                            }
                        }
                    },
                    {
                        name: "SupplierID",
                        text: "Favorite Supplier",
                        visibleWhen: "$row.FavoriteColor === 'green'",
                        items: {
                            controller: "Suppliers",
                            dataValueField: "SupplierID",
                            dataTextField: "CompanyName"
                        }
                    },
                    {
                        name: "ProductID",
                        text: "Product",
                        visibleWhen: "$row.SupplierID != null",
                        items: {
                            controller: "Products",
                            style: "ListBox",
                            filter: {
                                match: "SupplierID",
                                to: "SupplierID"
                            },
                            dataValueField: "ProductID",
                            dataTextField: "ProductName"
                        }
                    },
                    {
                        name: "Smoking",
                        type: "bool",
                        required: true
                    },
                    {
                        name: "Exercising",
                        type: "bool",
                        required: true
                    }
                ]
            }
        ]

    };
})();

The static surveys are visually designed in the App Studio tools. The dedicated hierarchy will present the surveys detected in the JavaScript files under the ~/js/surveys folder of an application.

The add-on registers custom inputs that will be rendered as values of the form fields tagged as input-survey-form or input-survey-data.

This is the same input extension mechanism used by the Barcode Reader.

If the editable field is tagged as the input-survey-form, then the field value will render as the inline Edit Form button. The survey form will be visually displayed when the button is pressed. The app will enter the development mode. The custom Survey hierarchy will assist in designing the survey form in the Project Explorer and Properties Window. The design of the survey will be saved as the field value. The read-only field tagged as input-survey-form is automatically hidden.

If the field is tagged as input-survey-data, then its value will be rendered as the survey progress button. The button text will show the progress of the survey form. The survey form is displayed when the button is pressed. The form definition will come from the field of the same data controller that has the input-survey-form tag specified. Typically the form field will be “borrowed” by the Audits data model from the “catalog” of surveys. Application users will be able to save an incomplete survey. The survey is completed when all required fields are entered.

Developers can write client-side and server-side business rules to process the survey questionnaires. The value of the survey response is the JSON object that combines the user answers and statistical information such as the progress and time spent.

ACL Editor (New Feature)

Permission-based access control list (ACL) is the built-in feature of the application framework. It ensures the complete lock down of application and requires the explicit exposure of data and functionality to specific user roles through permissions. Ability to access pages, to read, update, insert, and delete records is disabled if ACL is activated.

The lock down approach is more secure than the traditional restrictive method of hiding features and data. If the ACL configuration mistake is made by developers, then the data and features are under-exposed to the users. The traditional restrictive security model may reveal data unintentionally when the application is changed and a new revision is deployed.

ACL Editor will introduce the built-in visual security matrix that presents permissions as rows and roles as columns. Developers will use the ACL Editor to assign permissions to the user roles at design time. The default association of permissions and user roles is persisted in ~/acl.json file in the application code base. New associations and permissions created by application Administrators at runtime are stored in the CMS of the app.The framework merges the default ACL with the runtime ACL.

App Identity will be extended with the automatic synchronization of the consumer app ACL with the master ACL defined in the identity provider.

Roadmap: Spring 2024 - v10

Transition of HTTP request/response processing of the server-side framework to a shared class and implementation of this class for .NET Core. This will enable cross-platform deployment to Windows, Mac OS, and Linux. Code On Time version number will switch to v10.


We will begin the transitioning to .NET Core right on the heels of the completed App Studio release to production. The server-side framework in the foundation of the generated application is overriding the handling of request/response by .NET Framework. First, the server-side code references to HttpContext class and its various properties will be replaced with the new wrapper class implementation. Next, we will migrate an app created with Code On Time to the .NET Core 6. The wrapper class will be changed to make use of the .NET Core facilities. Finally, a new target will become available in the project configuration settings as we put together the new code generation templates.

The changes will not affect the application framework and will not require any additional knowledge from developers. Selection of the .NET Core as the target for the project will produce the output that can be deployed to Windows, Mac OS, and Linux. We expect to complete the work in the first half of the year 2024.

Code On Time v9 enables the customization of live applications with the embedded development tools, which offers unparalleled productivity and ease of maintenance for developers without prior knowledge of our product.

Code On Time v10 makes it possible to deploy the server-side components of applications on multiple operating systems extending the deployment options beyond Windows.

Roadmap: Summer 2024 - v11

The app generator will migrate from .NET Framework to .NET Core and allow cross platform development on Windows, Mac, and Linux. Code On Time version number will switch to v11.

Cross platform frontend and its development tools along with the cross platform deployment will leave behind the only one element of Code On Time tooling tied to Windows - the app generator itself. Presently the app generator is implemented as the Windows Forms Application with the Project Wizard and Project Designer that have the WebBrowser control instances hosting the locally stored HTML files. The code generator can also run in the command-line mode to perform various tasks.

With the release of Code On Time v9 the “original” Project Wizard and Project Designer will become dormant since the entire project configuration process will be browser-based. Instead the command-line capabilities of the app generator will be heavily in use.

Our research shows that the implementation of the code generator can be ported to the .NET Core with relative ease. Successful migration will make Code On Time into a fully cross-platform development environment with the cross platform deployment of the frontend and backend.

Cross platform server-side code can be deployed in a container to various cloud providers. The cross-platform frontend will not know the difference given that it can also execute in the offline/disconnected mode.


This roadmap does not represent a guarantee that the features and products will be delivered on the specified dates as described in this document. The delivery dates may change, and features may be added or removed at any time. It is merely an outline of our thoughts for the future, and is subject to change at our discretion.