Release Notes

Labels
AJAX(112) App Studio(9) 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(178) 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(184) 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(3) 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
Release Notes
Tuesday, March 5, 2019PrintSubscribe
Build Apps Faster With Maps and Postal Address Verification
Code On Time release 8.7.9.0 brings the upcoming live designer another step closer to reality and introduces various cool features in the application framework including Postal Address Verification, external JavaScript business rules, enhanced batch editing of many-to-many fields, maps in forms, and much more. We also hope that you will notice the significant increase in the code generation speed.

For the past few years we were developing a new innovative development environment to revolutionize Rapid Application Development of custom business applications that work offline, online, and on-premises. This particular release makes your apps ready for Code On Time v9. Today you are starting the Design environment by selecting the corresponding option in the project wizard. In the very near future your own app will be launched with the new design environment  overplayed on top! The upcoming live designer is implemented as addon.appbuilder.dll automatically included in the ~/app/bin folder of apps created with v9. The add-on integrates its own scripts in the application. The design environment is composed of Project Explorer and Object Inspector. Developer can click on user interface elements of their live app to inspect properties of the corresponding elements and have them changed when needed.  Changes to some properties (such as labels), will provide instant feedback in the user interface of the live app. Any significant changes will cause the app to be re-generated and restarted when the developer is ready to see the end result.

The mechanism of code generation has been changed significantly in release 8.7.9.0 to speed-up the code generation and improve the start time of the app. In many cases the app generator will replace only a few files in the source code and eliminate the need for hard restart of the app.

Published app will not include the add-on DLL in the output. App Builder add-on is not required for your apps to work. It is activated only if Code On Time generator is installed on the machine and if your app is accessed via localhost address. Both Touch UI and Classic UI apps will work with the new app builder, when released. You will be able maintain the source code of your apps in Visual Studio and work with the source control systems such as Git. Nothing will change from the development prospective.

Autofill and Postal Address Verification

Postal Address Verification is the new feature built on top of Autofill, the mechanism embedded in the universal input elements of apps created with Unlimited Edition.



An autofill group is created by tagging multiple fields with tags that start with "autofill-" prefix. For example, autofill-address-city. Component "address" in the tag defines the name of the group. Component "city" is the group-specific purpose of the field and does not need to match the physical field name. The trigger field in the group will cause "AutoFill" command to execute. More than one trigger can be declared by tagging multiple fields with autofill-[groupname]-trigger attribute. All trigger fields must have values for "AutoFill" command to execute.

The framework implements processing of autofill-address-, autofill-geocode-, and autofill-map- groups. Group address will verify postal addresses with Google Geocoding API. Addresses in the United States can be also optionally verified with USPS.  Group geocode will perform address lookup from latitude and longitude fields in the group. On-Demand field tagged as autofill-(address|geocode)-map will resolve the address into a static map presented to the user.

Event menuitem.app

New event menuitem.app is triggered on the document to allow a custom script to form. For example, the following script will display a login form if Test item is selected in the menu.

(function () {
    $(document).on('menuitem.app', function (e) {
        if (e.item.url === '/pages/test') {
            $app.touch.show({
                controller: 'MyProfile', 
                view: 'loginForm',
                startCommand: 'New',
                startArgument: 'loginForm'
            });
            return false;
        }
    });
})();

This is how the app will behave in response to the user actions:


External JavaScript Business Rules

It is now possible to create JavaScript business rules without explicit definition in the data controller. Save the file in ~/js folder of the app, put a breakpoint, and hit Ctrl+F5 when the app is loaded in the browser. Your custom business rules will execute in Before phase giving you complete control over various behaviors of the app. This type of business rules is also support in native mode.

This particular sample when force the user to enter USA in the Country field of Suppliers controller for the record to save. This is a perfect example of client-side validation.

Also the user will not be able to execute New command and therefore will not be able to bring up the form to create new records.

(function () {
    $app.rules = {
        'Suppliers': {
            'Update':
                function (dataView, args) {
                    var data = dataView.data();
                    if (data.Country !== 'USA') {
                        $app.input.focus({
                            fieldName: 'Country',
                            message: 'Only USA is allowed in this field.'
                        });
                        return false;
                    }
                },
            'New': function (dataView, args) {
                $app.touch.notify('You are not allowed to create new records.');
                return false;
            }

        }
    };
})();

This how it make look at runtime:


Also Included


The following features and bug fixes are included in this release:

  • (Batch Edit) Many-to-Many fields display "keep original selection" and "delete original selection" options to allow either expanding the set of selected options or to have it replaced with a new set.
  • (EASE) Tracking of created/modify by/on fields does not overwrite the values of Created By/On fields when blobs are uploaded.
  • (EASE) Modified/Created By/On fields are displayed on form views in edit/read mode.
  • (EASE)  Modifed/Created By/On fields are not displayed in form views in "new" mode.
  • (Classic UI) Projects with advanced options and "Classic UI" are correctly generating the theme folder.
  • (Framework) Data access objects based on models without a primary key will not result in compilation error when the app is generated.
  • (Touch UI) Floating category without wrapping will display 2 or 3 columns of fields with the minimal width of the form equal or greater than MD and LG accordingly.
  • (Touch UI) Floating category with wrapping will display 2, 3 or 4 columns of fields with the minimal width of the form equal or greater than SM, MD,  and LG accordingly.
  • (Touch UI) Import treats dates serialized in Excel files as UTC dates and performs de-serialization equivalent to the one performed when getting data from the server.
  • (Touch UI) Smart dates are instantly refreshed if a date value is changed by user via direct input without using the calendar popup.
  • (Touch UI) Map locations on iOS and Mac open via OS-specific URLs.
  • (Touch UI) URLs prefixed with "_blank:" will open in the default OS web browser when running in native mode (Cloud On Time or branded host app).
  • (Classic) Modal forms with conditionally visible content are resized after dragging.
  • (Classic) Initial state of "form" buttons with When Client Script expressions is calculated correctly.
  • (Touch UI) JavaScript expressions specified in When Client Script property of actions are evaluating the current row using the same mechanism as the Visible When and Read Only When expressions of fields and categories. This improves performance and addresses issue of incorrect values tested when form views are opened.
  • (Touch UI) RTF editor toolbar is fully visible whatever the position of the "Rich Text" field in the form view.
  • (Touch UI) RTF fully supports "Dark" theme.
  • (Touch UI) Calendar view does not display "New/grid1" option when user clicks the calendar to create an event.
  • (AppGen) Display name of the projects is used as application name when the app name is not defined in the project features.
  • (Touch UI) ListBox/RadioButtonList/CheckBoxList do not cut the bottom of item in FireFox browser.
  • (Classic)  Dedicated Login page correctly links bootstrap CSS file.
  • (AppGen) It is now again possible to create new projects based on ASPX page model with the framework in the class library.
  • (Framework) Message "unable to load..." with either the name of the resource script of path to the script is reported if there was an exception while enumerating client library scripts.
  • (App Gen) All translated files are created with UTF-8 encoding Byte Order Marker. If the translated resources are the same, then the files are not overwritten.
  • (AppGen)  All files are saved in UTF-8 format with explicit Byte Order Marker during the build process of the project.
  • (AppGen) VB projects with the core framework in the class library are generated correctly.
  • (Touch UI) Confirmation controller will display the value of "data field" of the context record in the header of the form.
  • (Touch UI) Action with confirmation controller will cause explicit validation of field value before execution. If action causes validation error, then the confirmation controller will not execute until all validation errors are fixed.
  • (Action State Machine) Calling BusinessRules.PreventDefault() method will cause action state machine to stop processing of actions unless Result.Continue() was explicitly requested or the command name was Insert|Update|Delete. 
  • (Action State Machine) If a value is assigned to Result.NavigateUrl in business rules, then the framework will stop processing of the actions unless Result.Continue() is called explicitly in business rules.
  • (Touch UI) Event createlayout.dataview.app is triggered on the document whenever a form layout is required. Event generatelayout.dataview.app is triggered once and the output is cached as needed.
  • (Project Wizard)  App generator version is embedded in DataAquairum.Project.xml to ensure regeneration of core framework files when f the project has been cloned/copied after a product update installation.
  • (Project Wizard) Data Model List or Business Entity List is automatically focused when Data Model & Business Logic page is activated.
  • (Project Wizard) Data Model List is fully redrawn after a new model is added.   Business Entity List is fully extended when there are no models.
  • (Client Framework) Method $app.execute accepts filter in the form of an object. For example, filter: {CategoryID:5}.
  • (Client Library) Method DataView.data() returns an object with properties representing current values of fields. New object property "_modified" will have its own properties representing old values of modified fields.
  • (Framework) XmlConverter automatically locates the first element in XML document and takes its name for the root JSON property if the root is not specified.
  • (AppGen) Removed redundant parenthesis for simple "Not" unary expressions in the code of c# projects.
  • (Framework) XmlConverter performs a robust enhanced conversion of XML to JSON to support v9 Project Designer and Inspector.
  • (Framework) User settings embedded in the page do not include "server" section from ~/touch-settings.json. This section is removed before inclusion in the page.
  • (Framework) Developers can implement method ApplicationServices.ValidateBlobAccess to alter the verification of user access to the row with the blob and the blob field itself. The overridden method can return false to disable blob access validation.
  • (Framework) Removed "download done" cookie creation when Blob.DirectAccessMode is true.
  • (Touch UI) Partially visible summary view is not scrolled into view when an option on its toolbar is selected.
  • (Touch UI) Fixed the bug in the implementation of auto focus on the last input when the window is activated.
  • (Framework) Added auto-registration of Code On Time App Builder v9.
  • (Touch UI) Reduced redundant functionality of jQuery Mobile for a more compact code.
  • (Touch UI) JavaScript business rules automatically skip updating values of fields with unchanged values.
  • (Touch UI) JavaScript event menuitem.app is triggered on document object before the menu option is selected. Event property "item" provides access to "url", "description", "title", and cssClass associated with the selected menu item. If an event handler returns false or prevents default then the menu option is not processed by the framework. Use this method to execute custom actions always available in the user interface.
  • (Client Framework) Added support for declarative JavaScript business rules that do not require explicit definition of the rule.
  • (Touch UI) Method $app.touch.show accepts object as "filter" property in the options for simplified syntax of filter definition.
  • (Framework) TLS12 is always enabled in the apps.
  • (Framework) Apps with ASPX page implementation do not serve files with *.json extension over HTTP.
  • (Framework) Denies HTTP access to acl.json, touch-settings.json, ~/permissions, and ~/reports folders in apps with SPA implementation of pages.
  • (Framework) Default settings from ~/touch-settings.json are stored in application cache for improved performance.
  • (Touch UI) Email icon is displayed in context menu as an independent action for "email" fields.
  • (Touch UI) Script error is displayed as notification when an exception is raised in the rendering phase of the view on the client
  • Monday, January 14, 2019PrintSubscribe
    Faster Code Generation, Clear Filter Button, Bug Fixes

    Release 8.7.8.0 introduces the following features, enhancements, and bug fixes:

    • (Touch UI) Ion “Clear” is displayed next to the "filter description" to allow one-click clearing of the filter.
      Clear button is displayed next to the filter in Touch UI apps created with Code On Time app builder.
    • (Touch UI) Lookup field tagged lookup-fetch-all will pull all values that match the user criteria. The default limit is 1000 items.
    • (Model Builder) List of models displays "last changed/sorted" button at the top of the list if five or more models are available. Clicking on the link will toggle the sort order of project models.
    • (Framework) Apps deployed to virtual folder correctly reference CSS resources from the root of the app.
    • (App Gen) XSLT transformations are performed in memory when output files already exist to eliminate writing to the file system. This speeds up production and compilation of projects.
    • (App Gen) Classic themes are not copied in projects based on Touch UI to speed up code generation.
    • (Framework) Default max upload size is set to 2,097,151 KB in apps created with Free Trial and Unlimited Edition.
    • (App Gen) Custom "code" business rules are automatically included in the class library of the projects when enabled.
    • (Project Designer) Duplicate fields are suppressed in "grid" views as well as in "form" views of controllers when developer drops duplicates on the corresponding configuration elements.
    • (Framework) Fixed VB compilation issues of Access Control List code.
    • (Framework) Renamed ApplicationServices.AuthorizationIsNotSupported to AuthorizationIsSupported and changed the codebase accordingly.
    • (Framework) Removed implicit dependency on membership support in the apps.
    • (Library Downloader) Uses GET requests to download the licensed content instead of POST.
    • (Framework) Auto-complete values in lookups are shown correctly when virtualization is enabled.
    • (Touch UI) Tag clear-all enables "clear" icon in the form. Clicking on the icon will "empty" all fields in the form. This feature is great in dashboards and custom search screens. The video tutorial is coming soon.
    • (Touch UI) Click on the "arrow right" next to the empty lookup fields will not open popup in webkit browsers and instead proceed directly to the lookup.
    • (ODP) Uses optimized method of data view location and avoids infinite cycling under certain conditions.
    • (Touch UI) Method $app.input.execute accepts values passed in options as array, single object with name/value properties, and also custom objects.
    Labels: Release Notes
    Saturday, December 29, 2018PrintSubscribe
    Access Control List and “Local” Dates

    Code On Time release 8.7.7.0 introduces the permission-based application configuration based on Access Control List. This feature is unique to applications created with Unlimited Edition. Next release of the app generator will introduce permission matrix  and permission builder to allow runtime configuration of live applications with ACL.

    Release 8.7.7.0 also enabled local time zone presentation of date values stored in UTC format.

    The following features and bug fixes are also introduces in this release:

    • (App Gen) Files with ProjectName\Services\ApplicationServices.* and ProjectName\Services\EnterpriseApplicationServices.* patterns are not deleted in projects with the framework in the class library when the project is re-generated.
    • (Touch UI) My Account option is displayed in *.aspx projects.
    • (Framework) ASPX projects turn-off combined/compressed scripts when the app running in debug mode from Visual Studio.
    • (Framework) Blob file name is stored in the database at the time of BLOB value submission if the matching "FileName" field is not automatically detected on the client.
    • (Framework) Blob handler validates read-access for blob fields by confirmation that the user can “see” the table row corresponding to the specified primary key. It also ensures that the particular BLOB field is also "visible" to the user and was not removed through virtualization of the controller.
    • (Framework) Prevented XPath injection attack errors reported by BURPSUITE Professional. Please note that testing methods would not have allowed to exploit the app framework.
    • (Framework) Absolute URIs are being used in script reference to appservices, __baseUrl, and __serviceUrl,
    • (Touch UI) Pages without content display a site map relative to the page.
    • (Project Designer) Dragging of field on a category will remove the corresponding data field from other categories of the same view.
    • (Touch UI) Bootstrap is correctly linked to pages in Premium edition.
    • (Touch UI)  Fixed. Tap on “more” button in child data view will select the row when multiple selection is enabled.
    • (Touch UI) Conditional Action Bar actions correctly respond to the changes in the values of the selected row with and without multiple selection.
    • (Client Library) Added caching of compiled functions to speed-up dynamic expressions.
    • (Touch UI) Only forms cache the current command row as "edit row".
    • (Touch UI) Switching of active tab performs full page resize.
    • (Client Framework) Added support for second-generation Grid/Cards/List.
    • (Framework) Fixed incorrect NullValue label in Classic UI.
    • (Model Builder) Single quotes in the name of the table will not cause exceptions displayed when models are rendered.
    • (Model Builder) Calculated fields created in Model Builder are not marked as "hidden" in the views of a data controller.
    • (Framework) Method AlterControllerWith handles parameters of methods wrapped in single quotes.
    • (Wizard) Tabs adjust their height when the window size is changed.
    • (Wizard) Models and Entities without Models take up the entire height of the page.
    • (Framework) Fixed "Key not found" in one-to-one entity processing causes by unmapped changed fields up the hierarchy of the relationships.
    • Fixed the "font" and "image" references in combined stylesheet that were not compatible with modern firewalls.
    • (Touch UI) Woff fonts are now returned with a static mime type "application/font-woff".
    • (Framework) Fixed incorrect parsing of "end-of-text" terminator in controller customization rules.
    • (App Gen) Option autoEventWireup is now set to "true" in ~/Config/CodeOnTime.CodeDom.xml.
    • (Designer) Assigned Data Text Field to Field lookup on Data Fields to fix issue where field is shown as empty
    • Removed allow nulls=false from Flat Rendering on Action Groups to ensure that user can save the action group if the field is hidden
    • (Touch UI) Event 'scrollablepageready.app' is triggered just before the transition to the active page. This allows the Grid 2.0 to render itself.
    • (Framework) Method ApplicationServices.ValidateToken will not fail when decrypted invalid token and will return "false" when this happens.
    • (Framework) Optimization o f "left join" to "inner join" is performed when access control rules are engaged.
    • (Framework) A dedicated connection is created for every Batch Edit or Delete to ensure that optional transactions do not include the entire set of selected records.
    • (Framework) The processing loop of custom actions can be interrupted by calling PreventDefault(true).
    • (Framework) Fixed transactional processing of 1-to-1 entities and many-to-many fields.
    • Exception during the loading faze of Azure publishing wizard.
    • (Touch UI) If the data view field has the parent form whose parent is not configured to have the same controller the parent form is chosen as the parent data view.