Forms, Reports, Apps

Build and deploy rapidly. Use offline, online, on-premises.

  Blog

Blog
Tuesday, December 10, 2019PrintSubscribe
December 2019 Hot Fix 2
Release 8.9.2.0 arrives with a collection of fixes and enhancements that will increase the speed of your apps both online and offline.

Offline Data Processor (ODP) has been greatly enhanced and now handles gracefully many edge cases that were missed in the initial implementation.

The production release of Offline Sync is working with the apps produced with the release 8.9.2.0. The delayed licenses will ship in the next 24 hours!

Offline Sync requires Cloud On Time 8.9.2.0 to operate. We have decided to sync the version number of the app generator and Cloud On Time client for all supported operating systems. The first implementation available for immediate download is Cloud On Time for Windows. This version of the native app host is based on CEF (Chromium Engine). The corresponding versions for iOS, Mac, and Windows stores have been submitted for approval and will become available in a few days. The Android version of Cloud On Time is being completed right now. Our recommendation for the buyers of Offline Sync is to try the add-on with Cloud On Time for Windows when you get your download link in the email.

The following items are included in the release:

  • (AppGen) Fixed the issue of field duplication in custom reports caused by mismatched namespaces of RDLC language.
  • (Touch UI) Data validation is not skipped in inline editor. Previously an incomplete input may have caused an erratic display.
  • (Data Aquarium) The core framework uses JSON.parse if there are no "date" values in the server response or when the "native" dates are not required. This improves performance.
  • (ODP) Static lookup fields with context dependencies are correctly populated in online and offline modes.
  • (Touch UI) Empty keys are not added to the selection in inline editing mode when multi-select is enabled.
  • (ODP)  New row is generated with a full set of field values to fix the issue with inline editing in Offline mode.
  • (Client Framework) Fixed incorrect concatenation of compound primary keys in multi-select mode.
  • (Classic UI) Fonts are correctly included in the app based on Classic UI.
  • (Classic UI) The framework triggers 'start.app' event on the document when the app is ready to execute custom code.
  • (ODP) Fixed the issue with processing of DELETE with multi-select of  objects with compound primary keys.
  • (Touch UI) The user if forced to provide a value for an editable primary key field. Last release has caused a round-trip to the server. Now the user is forced to supply a value.
  • (Framework) Implemented server-based resolution on of client-generated Guid primary keys to support Offline Sync when transaction log is committed.
  • (Touch UI) Animated promo button does not prevent clicking on the items in the "fast" web views such as Chromium.
  • (Offline Sync) Server-values (primary keys and calculated values) are resolved on the client in the transaction log when returned from the server. This ensures that pending actions are compatible with the server data even if the primary keys and other server values were not known at the time when client data was created.
  • (Offline Sync) Pending logs are refreshed after each iteration of uploading during sync to ensure that resolved primary keys are replaced in the pending logs. This allows reconciling errors with incomplete upload and to survive physical crashing of device mid-synchronization.
  • (Offline Sync) Server error is cleared when the user is cancelling reconciliation to allow resubmitting transactions to the server. Previously the last captured reconciliation error was displayed without attempting to commit the log to the server.
  • (Touch UI) Orphan dropdownlist is not displayed in the top left corner of the screen when the input with auto-complete has lost the focus.
Wednesday, December 4, 2019PrintSubscribe
December 2019 Hot Fix 1
Update 8.9.1.0 is compatible with the first official release of Offline Sync Add-On. Purchased licenses with download link and installation instructions will be delivered via email by the end of day on December 5, 2019.

The new Cloud On Time app 8.9.1.0 is being rolled out today. The version number is matched with the app generator to indicate the compatibility level.

This update introduces the following bug fixes and product enhancements:

  • (App Gen) Custom report template is automatically extended with additional fields found in the corresponding data controller view.
  • (Business Rules) It is now possible to mix parameters of scalar and nullable scalar types with those based on BusinessRulesObjectModel type descendants.
  • (Model Builder) Fixed incorrect detection of integer fields as OnDemand in Postgress.
  • (Model Builder) Fixed detection of foreign keys in MySQL.
  • (ODP) Data processor will not hang when child rows are not found. Instead the action result is resolved with "zero" row count.
  • (ODP) Multi-level DataView fields correctly respond to the change in the master DataView field.
  • (ODP) Referential integrity check uses the label of the DataView field to display an error with the number of dependent items.
  • (ODP) The original deferred operation is resolved when an error is detected. Previously the operation was incorrectly rejected.
  • (ODP) Insert commands are executed with mandatory data retrieval to ensure that Offline Sync is correctly loading the local data.
  • (ODP) Data loading from the server is skipped for New records with the negative values in the external filter.
  • (Offline Sync) Files listed in "file cache manifest" are removed 3 at a time before the downloading of data is started. 
  • (Offline Sync) Fixed incorrect references to the resources in the tooltip of "cloud" icon.



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.