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
Monday, November 18, 2019PrintSubscribe
Offline Sync and Offline Data Processor
Code On Time release 8.9.0.0 delivers unprecedented power in the hands of application developers. It makes possible creating apps that work online and offline without writing a single line of code.



The framework in the foundation of apps created with Code On Time relies on a unified API to get data and to execute actions. The models, user interface elements, and relationships are stored in the data entity configuration files on the server. The server-side code of the app relies on entity configuration to handle the requests received from the GUI of the app.


Offline Data Processor (ODP) is the new core feature of the framework. It injects itself in the unified API on the app pages marked as "offline". ODP monitors communications between the GUI and the server. If a request to change data is detected, then ODP intercepts the request, downloads data from the server to the client device, and executes the request on the JSON representation of the data replica. Subsequent requests are also executed on the replica and logged.  The log is committed to the server when the master form is saved. This enables transaction data input in apps created with Code On Time. ODP is available in all product editions.

Cloud On Time is a general moniker for the collection of native apps created by Code On Time LLC. The purpose of the collection is to allow executing online apps created with our products on the mobile devices. The app is available on iOS, Mac OS, and Windows platforms. Android version of the app is coming soon!

The app allows installing multiple custom applications on a mobile device. The user interface components of a custom application are downloaded and stored locally. Cloud On Time app loads application pages from the device storage and channels the requests to read/write data from the application GUI to its server-side components.

End users can access online applications created with Code On Time either in the web browser or with Cloud On Time app. White-label versions of Cloud On Time tailored for a particular online application will be available soon.

Offline Sync is the new product that makes possible executing custom applications in a disconnected/offline mode in Cloud On Time app. Our innovative solution relies on the Offline Data Processor of the application framework to pre-load the server-side data to the device when the custom application is installed on the device. ODP interacts with Offline Sync to read and write data. End user must explicitly request Synchronization of changes with the server.

Custom application running in Cloud On Time app or its white-label version is not affected by connection drops or unreliable online connectivity if it has Offline Sync enabled. Such application is always working in offline mode until the next time the end user chooses to synchronize data with the server.

The best part is that there is no code to write! Just enable the Offline Sync Add-on in the application features and re-deploy your app to the server.

ATTENTION: The refreshed versions of Cloud On Time app compatible with release 8.9.0.0 and Offline Sync have been submitted to the corresponding app stores for approval. Offline Sync Add-on will ship on November 19 and will be initially compatible with Cloud On Time for Windows 1.8.9.0. Cloud On Time 1.8.9.0 for iOS, Mac OS, and Windows 10 will become available later this week upon approval by corresponding app store providers. Android version is expected to ship before the end of the year.

The following features and bug fixes are included in release 8.9.0.0:
  • (Touch UI) Components of Classic UI were moved to the dedicated classic.js file. The file is included in the app with the legacy user interface only.
  • (Touch UI) Material icons are not visible until the font is completely loaded.
  • (Touch UI) Fantom "empty" tool-tips are not displayed in Microsoft Edge browser.
  • (Touch UI) View selector display Select All option next to "Multi Selection" to allow selecting all items in Gird/List/Cards mode.
  • (Touch UI) SQL business rule calling set @Result_RefrehsChildren = 1 and "code" business rule calling Resutl.RefreshChildren() will correctly synchronize the child data view fields.
  • (Universal Input)  New client library method $app.input.reset("FieldName") will cause the lookup input to reset its items. Anny cached items are cleared. Static items are re-fetched from the server.
  • (Framework) Optimized server-side population of static lookup items.
  • (Framework) Check for aspnet_SchemaVersions is now wrapped in try/catch to prevent exceptions.
  • (AppGen) Restored ability to build projects with the framework in the class library when only VS2019 is installed.
  • (Touch UI) Pages with infinite data scrolling instantly update the menu on the toolbar instead of waiting for data to become available.
  • (Touch  UI) New option ui.multiSelectMaxRowCount controls the maximum number of rows that can be selected at once when specified in ~/touch-settings.json . The default value is 1000.
  • (Publish) Publishing will delete _server folder before the app is compiled to avoid  conflicts with Microsoft One Drive on Windows 10 trying to backup the folder.
  • (Touch UI) Basket input will cause the DataView fields to to move down with the content when items are wrapped to the next line.
  • (Touch UI)  Keyboard entry in the basket input will stay i the inbox box after hitting Enter key. Previously the first item in the basket was selected
  • (Batch Edit) Borrowed fields specified in the Copy property of lookups are visually presented in the Batch Edit form.
  • (Calendar) Popup calendar displays a count of events for individual dates when the option dates.calendar.countEvents is set to true in ~/touch-settiings.json  or if the data field is tagged as calendar-count-events. By default, the counting of events will be performed only in the calendar displayed on the sidebar. Previously counting has been performed always.  This feature improves performance.
  • (Touch UI)  Button "Show Less" is visible both on the Advanced Search form and in its context.
  • (Client Library) Gird/List/Cards collects the current row exactly as the form does when actions are executed.
  • (Touch) Fixed the issue with the page stub adjustment when the stub is not available.
  • (Touch UI) User interface behaviours conditioned on a return to the previous "virtual" page (previous form) are executed exactly at the end of the processing cycle. Previously this was not the case, which caused various GUI imperfections under some conditions.
  • (Client) Collection of action argument values does not include "null" field values that are not changed or read-only. This significantly reduces the payload of actions stored in the log by ODP.
  • (Framework) Added token-based resource translation to surveys.
  • (Framework) Visual Basic compatible FieldValue constructor.
  • (Touch UI) Event menuinit.app is raised just after the initialization of the navigation menu nodes.
  • Method BlobValidateAccess returns true if a request is received from ReportViewer. Such requests provide the validation key of the app and can be trusted.
  • (Framework) FieldValue instance constructed with new and old values is marked as modified only if the values are not the same.
  • (Touch UI) Blob upload prompt has a uniform height both on mobile and desktop devices.
  • (Touch UI) The default view style to present items on small screen is Grid. Previously the width of the screen was taken into account to present data as 'List' instead. List view style is selected automatically if long text or blobs are detected in the fields.
  • (Touch UI) Image preview will be displayed as semitransparent if it is going to be cleared after update.
  • (Offline Sync) Navigation menu is trimmed when online/offline status of the device is changed.
  • (ODP) Offline Data Processor is enabled automatically on pages marked as "offline".
  • (ODP) A dedicated data processor is assigned to any child form to allow multi-level transactional input.
  • (ODP) Numerous enhancements of many-to-many and BLOB field processing. ODP creates client-side actions to delete/insert junction table entries and marks the m2m field with Scope="client".
  • (ODP) Synchronized commit of logged actions with multiple instances of Data Processor.  Now commit and cancellation of in-memory data works correctly.
  • (ODP) If option odp.compressLog is set to false in ~/touch-settings.json, then no compression of log is performed. Log compression is enabled by default to combine multiple insert/update requests into a single request with an extended set of values.
  • (ODP) Server-side Calculate and New commands are executed by data processor if the app is not working in offline mode and if the device is online.
  • (ODP) Pending files of pending deleted records will not be uploaded when the master record is committed to the server.
  • (Client) JSON data is parsed with the standard JSON.parse if native data conversion is not required. This improves performance of ODP and Offline Sync.
  • (Project Designer) New property "text" is now supported in the data controllers. The value of the property is displayed as a user-friendly name of the data controller by ODP and Offline Sync.
  • (ODP) "Report..." and "Export..." commands will not execute and display a warning when:
    1) There are pending changes it the form.
    2) The app is offline and and the sync has not been performed.
    3) The device is not online.
  • (Framework) All views in MyProfile data controller are tagged as odp-enabled-none to facilitate server-side calls both in online and offline mode.
  • (OfflineSync) If offline sync is not enabled then $app.odp.offline() always returns false. Previously a value of 0 could have been returned when there are no offline data controllers.
  • (ODP) Multi-odp pass-through submission of files/blobs works correctly.
  • (ODP) If a new file/blob is submitted and later cleared by the user then there will be no attempt to submit a new blob when the record is committed.
  • (ODP) The cache of "load data" server responses in maintained in the master ODP instance. Previously a global ODP cache was used.
  • (ODP) No attempt to load data from the server is made if negative values are detected in external filter in the $app.odp.getData method. This will be the case when working with "new" data rows.
  • (Client Framework) Avatars are not added to the local storage when the token is refreshed in "hosted" mode in Cloud On Time or its derivative.
  • (OfflineSync) Logged transactions are stored in separate files for improved performance.
  • (Client Framework) Method $app.AccountManager.avatar is compatible with online and native modes.
  • (Touch UI) Added fail safe code to ensure that $app.input.focus will not fail if called before the app is initialized to ensure Mac OS compatibility.
Sunday, July 28, 2019PrintSubscribe
Save and Continue
Action command Update now support SaveAndContinue argument in Touch UI with the release 8.7.14.0. This special argument value changes the behavior of the form after successful completion of Update command on the server. The form will not return to the previous view and remain in edit mode. It will retrieve the server values and display them to the user. Any visible DataView fields will be refreshed.



User can continue editing the record. Any server-side changes to the master and detail rows are visible to the user.

We will incorporate Update/SaveAndContinue action in the "Form" scope in the new projects by default . The new button will be displayed between Save and Cancel buttons in edit mode. Define this action explicitly to have it in your apps today.

The forms will also start displaying Next and Previous navigation buttons that will perform Update/SaveAndContinue as needed. You can try the hidden "Next" form navigation feature in "read" mode today by pressing Right Arrow key.

Release 8.7.14.0 introduces the following features and bug fixes:
  • (Touch UI) Action with command Update and argument SaveAndContinue will not close the form after successful execution. The form will stay in the current state and refresh the current row with the server data. The form will also sync the child data views.
  • (App Gen) New command line option -DataModel changes behavior of -generate and -refresh commands. App generator will not produce the source code when the option is specified. It also resets the data controllers. If the data models are changed manually or via automated scripts then the next execute of -generate command will incorporate the model changes into the app.
  • (Framework) New method ActionArgs.AddValues allows adding values to the Values array.
  • (Framework) Method SqlStatement.Configure accepts DbCommand parameter. It allows configuration of command properties such as CommandTimeout to be applied to the entire application framework. Create a partial class SqlStatement in Data namespace to override the method.
  • (Framework)  Server-side API _invoke allows specifying additional path/query information. 
  • (Framework) OAuth access_token and refresh_token must be non-blank to be written to OAuth configuration. Refreshing of tokens will not cause loss of token. 
  • (Framework) Site Content now supports ModifiedDate and CreatedDate to allow date-driven manipulation of content in the upcoming Content Add-On.
  • (App Gen) Prevented  interruption of Project Designer operation when exception "Unable to initialize native support external to the web worker process..."  raised while trying to access HTTP cache. The error seems  to be have its source in ASP.NET 4.8  HTTP Activation feature.
  • (Touch UI) Apps based on Touch UI do not specify data-show-modal-pages attribute on "div" elements representing data views. This setting applies only if Classic UI is also supported.
  • (App Gen) File web.config is correctly processed with "regex" expressions when created for the first time.

Wednesday, June 5, 2019PrintSubscribe
June 2019 Hot Fix #2
Release 8.7.13.0 introduces the following enhancements and bug fixes:
  • (Code Gen) Generic property declarations do not reference "this" anymore.
  • (Framework) Implementation of class FieldValue performs a simpler calculation of Modified property value for efficiency and to provide compatibility with the compact JSON encoding of field values for Offline Sync. The new algorithm resolves the issue of saving of records with many-to-many fields.
  • (Framework) "Code" business rules created in MyProfile controller now inherit from MyProfileBusinessRulesBase class.
  • (Framework) Data Access Objects have a new implementation of SelectSingle method making it compatible with the filters produced in SELECT statements from  dynamic access control rules.
  • (Touch UI) Use import.batchSize option in ~/touch-settings.json to control the number of items submitted for insertion and optional duplicate testing from the client to the server for processing. The default size of the batch is 10 items. The larger batch size will allow fewer client/server requests to process large import files.
    {
      "import": {
        "batchSize": 100
      }
    }
See the description of the June 2017 release here
Labels: Release Notes
Continue to June Hotfix 1