This release main changes affect to the UI, by implementing the Material design in Axional Studio pages; and adding new functionalities. According to this, it has little affection on application programming, so an upgrade from the latest version 2018.3 does not involve much reprogramming, but the visual impact might be huge for the user.

1 Architecture

1.1 Server-side JavaScript execution

Until now Axional Studio application server was capable to execute stored scripts in XSQL Script syntax. Since the current version, it also executes scripts in Javascript syntax.

Those scripts are stored in the wic_dbscripts_js entity, and can be invoked from any statement within the Axional Studio framework. Such as Form Buttons, SQL-Tables, etc.

The main purposes of executing Javascript syntax for business logic are:

  • Powerful dynamic language
  • Incredibly fast engines
  • Consistent language for Client/Server applications
  • Popularity (Many Libraries and Documentation)
  • Unit testing

1.2 Security filters

New security filters have been added. The following filter can be enabled using the config.xml file

A complete description of the available filters can be found by following this link.

1.2.1 Denial of Service Filter

The Denial of Service (DoS) filter limits exposure to request flooding, whether malicious, or as a result of a misconfigured client. The DoS filter keeps track of the number of requests from a connection per second. If the requests exceed the limit, Jetty rejects, delays, or throttles the request, and sends a warning message.

1.2.2 Cross-Site Request Forgery Filter

Cross-Site Request Forgery (CSRF) is an attack that forces an end user to execute unwanted actions on a web application in which they're currently authenticated. CSRF attacks specifically target state-changing requests, not theft of data, since the attacker has no way to see the response to the forged request.

1.3 Axional external services server

Some processes such as generating PDF can be very resource consuming. From this version, the processing of FOP, DOT and DITAA files is carried out in an external microservice. That is, the file is sent to an specialized server which converts to the appropriate format (fop to pdf, dot to svg... ) and returns to the Axional Studio Server.

Required

That means that from version 2019 onwards, Axional Studio installations must run a separate microservices server. The details of the installation and setup of the microservice servers are explained here.

1.4 Configurable JS APIs

With the help of the new table wic_rest_api it's possible to configure REST APIs that execute server-side javascript functions. Indeed, the table is used to map HTTP methods (GET, POST, PUT, DELETE ) and PATHS to javascript functions, allowing to define dynamic and configurable REST APIstailored for the needs of any installation.

More info regarding the programming of the API can be found here.

Deprecations

Since the new API is very flexible, the following REST services have been deprecated:

  • RESTSQLServer
  • RESTXMLServer
  • RESTOBJServer
  • RESTAPPServer

Everything that the old services could do it can now be done with the REST API service

2 Functionalities

2.1 Box subscriptions

Box subscriptions is a new functionality which implements the Observer pattern in Axional Studio Forms. This functionality allows that a certain box in a form reacts in front of an event in the Form.

This event can be a transaction in other box, or a selection of records, etc. Basically, when one of those events is fired, the observer box reloads its content.

2.2 Colorize grids with color palettes

The SQL tables have the new functionality of being colorized according to several criteria, such as mathematical algorithms or UEL expressions. For more information, see Table Colorizer.

SQL Table colorized with a quantiles distribution method

SQL Table colorized with a repetitions method

2.3 SQL Matrix

The SQL-Matrix component allows transposing data from a table layout into a matrix. This is very useful for making more user friendly the representation and manipulation of certain information stored in a relational database. That is, sized and colored products, Doodle like surveys, Employees skill list, etc.

SQL Matrix with comboboxs

SQL Matrix with checkboxs

2.4 Column options: JRep Object context

Column options initially appeared as a definition by Table and Column. It might seem logical for basic rules. For example, if a document is closed certain columns cannot be modified. But there are more complex rules that are applicable only in certain contexts, in this case in certain JRep Object. For example, referencing an entity attribute in SQL Tables of different objects might require defining particular hidden expression for each object.

So, this version introduces the possibility of defining a parameterization of column options for a specific JRep Object.

2.5 Column options: Reactive value

It has been introduced a new expression at Column Options definition which allows calculating the value of a column automatically, depending of the value of other columns of the table. The calculated value is determined by the execution of a UEL Expression. Furthermore, this value is recalculated immediately when any of the values involved in the expression changes.

With the intention of removing any Javascript code from JRep Object used for business logic, this expression is intended to replace the use of the user function setFieldValue, as far as possible.

2.6 Client-side validation expression

It has been introduced a new entity for implementing Client-side data validation before executing insert and update operations on Axional Studio transactional components.

The mentioned validation is defined by a UEL Expression, so before executing any insert or update transaction the expression is evaluated with the transaction data. In case of the evaluation of the expression is true, the transaction is allowed; otherwise, the transaction is not performed and the user is notified with an specific message.

With the intention of removing any Javascript code from JRep Object used for business logic, this expression is intended to replace the use of the user function setFieldError and the JRep Object events before_insert and before_update returning false, as far as possible.

2.7 JSON Syntax highlight on Text Edit box

It has been included the option for highlighting JSON syntax on JRep Object component for Text Edition.

2.8 New DBStudio

TO DO

This section is incomplete and will be concluded as soon as possible.
  • Server explorer
  • Server admin
  • Powerful table loader / unloader

2.9 Message Board OS tool

The Message Board Editor tool is used to create messages that will automatically pop up to the users after the login to ensure that they see the message.

The aim of this tool is to make sure that a user or a group of users will se a message. These messages can be translate to different languages and will appear to each user in the corresponding language

To create a new message this form will appear asking for who will receive the message (user or group of users) when this message have to appear. Can be programmed not to appear until a certain date, and if the message type between confirmation and notification. Confirmation forces the user to select a combo box.

2.10 Channels

In this version we have incorporated the option of displaying tooltips in desktop channels. The contents of the tooltip consist of the content of a column in the channel resultset. In general, tooltip columns should be marked as hidden in wic_pt_channel_out

We have also added the ability of defining external links in desktop channels. The destination url is extracted from the contents of a column in the resultset. In the following example the column website contains the url of the link

In addition, channel now can be exported to PDF from the export menu in the channel toolbar

 

2.11 Wiki documentation at Explorer OS tool

The explorer tool has added a wiki documentation to add information related to the different wics. The information will be visible to all the users with access to the wic.

Only users with permissions to the wic will be able to create / edit or delete a document from the wic.

These documents are created at the same explorer OS tool to make it easy, and are created with the markdown language. See here for more information about how to use this language.

2.12 SQL List

The SQL List component allows to list data from a table query to a list. This is very useful for specific functions such as transferring data from a table to another or ordering correctly the data of a table, among many other utilities. For more information, see SQL List.

SQL List with avatars

 

2.13 Drag and Drop

The Drag and Drop functionality allows to drag and drop from a component of a form to another component of the same type.

Currently, it is only implemented for the SQL List component, but the idea is to implement it also for more components in the future.

For more information about the Drag and Drop functionality in SQL List component, see Drag and Drop on SQL List.

SQL List with drag and drop implemented
 

2.14 Font images

Since the introduction of Material Design, and the use of Dark/Light theme it has been noticed several issues with the images used in Axional Studio application. Basically the problems were related with the size and color of the images. So, depending on the background and font size of the application some images does not look well.

In order to fix these issues, it has been implemented the possibility of define an image using a font icon libraries:

All the icons in the icon libraries below are scalable vector icons that can be customized with CSS (size, color, shadow, etc.)

The images are defined by the same entity until now wic_image_object.

The option Menu/Menu images has disappeared. Now you can use the standard Images repository (Dictionary / Logical / Images) to illustrate menus, shared with the rest of the dictionary. For further information see Images repository.

3 Programming

3.1 Advanced input types to attribute option

Until now, there were the input types FIELD MULTIPLE and FIELD PASSWORD that could be used in a JRep Object Form. These input types enabled special properties to the input field in form. Besides, another way of enabling special properties to the input field was defining a format function COLOR at the Column Attributes entity, which enabled a color picker for the field.

Since the current version it has been added a new property Input type to the Column Attributes entity for handling the mentioned functionalities.

In conclusion, the previous FIELD MULTIPLE and FIELD PASSWORD input types, and the format function COLOR has been replaced by the Input type attribute. According to this, the Input type handle the following modes:

  • Auto: Normal input.
  • Color: Enables a color picker.
  • Multiple: Split content in tokens, separated by the pipe character '|'.
  • Password: Characters are masked.

The purposes of this change are two:

  • Having consistent fields properties.
  • General field properties, applicable to the whole Axional Studio Environment: Forms, Channels, Reports, etc.

 

3.2 Asynchronous user function return Promises

It has been implemented that all asynchronous public functions return a Javascript Promise instance. This allow the programmers to take the most profit of Axional Studio applications in order to improve user experience and have a more clear code.

Those asynchronous public functions are:

  • executeButton
  • executeDelete
  • executeInsert
  • executeNext
  • executeUpdate
  • executePrevious
  • executeReload
  • executeReset
  • executeAsyncQueryMap
  • executeAsyncQueryValue
  • executeAsyncQueryValues
 

3.3 New user Javascript functions

The list below show the new user Javascript added in this version. These functions can be called from any wic_jrep_object Javascript programming.

  • getUserDateFormat(): Obtains the date format set by the connection user.
  • getUserDecimalSeparator(): Obtains the decimals separator character set by the connection user.
  • executeReloadRow(mandatory): Force reloading the data of the current row.
  • executeFormAction(action_code): Execute a form action by its mnemonic code.

3.4 Handle asynchronous Javascript in Form buttons

Until now, if the Javascript code executed via a Form button performed any asynchronous action, the form was not able to handle this asynchronicity. As a result, the loading mask displayed during the button execution was immediately hidden even though the asynchronous code was still executing. So, when these executions were noticeably slow they caused weird effects.

In order to solve the mentioned issues, it has been introduced the capability of handling asynchronous Javascript executions. This is done by returning a Promise instance from the button statement. In this case, loading mask will not hide until the Promise is resolved.

Even if the programmers are not familiar with asynchronous programming, this issue may be more common than it seems, considering some user Javascript functions are asynchronous, such as executeInsert, executeUpdate, etc. In that case, every asynchronous user function returns a Promise.

 

3.5 Avoid references to auxiliary fields with '?' character

Since the introduction of Javascript execution on server-side it has been implemented a new way to reference auxiliary fields on some JRep Object statement executions:

  • wic_jrep_form_query
  • wic_jrep_form_butt (deprecated)
  • wic_jrep_box_celldata_action (deprecated)
  • wic_jrep_form_action

Before this implementation, referencing the auxiliary fields was made by using the '?' character; taking care of using the '?' character in the same order as fields was defined. So, a button calling a XSQL-Script statement, and asking the user for to fields was:

Copy
<call name='myscript'>
    <args>
        <arg>?</arg>
        <arg>?</arg>
    </args>
</call>

After the current version, in case of the referenced fields were named 'myfield1' and 'myfield2': they can be used in the JUEL expression. The call to the script will be:

Copy
<call name='myscript'>
    <args>
        <arg>${field('myfield1')}</arg>
        <arg>${field('myfield2')}</arg>
    </args>
</call>
 

3.6 New column attribute function UUID

It has been implemented a new function for column attributes default value. The funcion UUID automatically generates a random UUID, defined by the specification RFC 4122. As it is defined by the mentioned specification, the generated UUID is 128 bits long, and can guarantee uniqueness across space and time.

The obtained UUID is a 36 character long identifier, such as: f81d4fae-7dec-11d0-a765-00a0c91e6bf6

3.7 Form actions

It has been changed the form to parameterize actions, making independent of the element that triggers the action.

Previously, we parameterized the data of the button and the action at the same time, or of the context menu and its action. Now, the parameterization has been separated, being able to reuse the code of the action for other elements.

These changes make it easier for us to define the code of the trigger of actions (buttons, context menus ...) and the one referring to the action itself.

At the same time, new functionalities have been implemented (return a personalized message upon completion of the action, create dynamic input fields for the actions...).

For more information about the Form Actions implementation, see Form Actions.

 

3.8 Import multiple JS functions

A form has been changed to allow multiple imports of JS functions files. This functionality allows user import multiple JS files (with functions) stored in Form javascript (wic_jrep_form_import_js)

To import File, go to form, and click on the Import JS box. Now, you have to inform import order and import file.

  • Order: Order is important when you want to overload any function of previous files.
  • JS Code: Code of file to import. It has to be stored in the Form javascript (wic_jrep_form_import_js) of the same wise or in any custom work.

Old version, only allows import one JS functions file.

Form data with Import JS box selected.

4 User interface

 

4.1 Material style in QBE forms

The QBE page style has been modified to adapt to Material Design . The Material style enables bigger and more accessible fields. It also enables full responsive forms, which are accessible from any device.

Old QBE design

New QBE design

4.2 Material style in reports

The reports style has been modified to adapt to Material Design . The design has been applied to several elements of the reports, such as header inputs, header groups, icons, aggregations, graphics and links, in addition to the common elements of each report.

Old report design

New report design

We also have different densities, allowing the reports to be adapted to the appropriate measurement according to the elements of the report (number of columns, groups, type of fields...).

New report design - Dense low

New report design - Dense high

 

4.3 Dark and light theme

Following our transition to Material Design, we have started the introduction of a UI dark mode. User can choose between light and dark modes in userconf tool.

We also have added two colors for tweaking the UI: accent color and highlight color

Accent color change UI elements such as app menus, popup menus, radio buttons, focus fields, and more. Changing your accent color will automatically change your highlight color to match. Highlight color is pretty self explanatory in that it changes what color appears text is highlighted or selected. They don’t have to exclusively be the same color, either.

As of this release, dark mode is implemented only in webos tools and in QBE forms

OS tool in dark mode

QBE forms in dark mode

 

4.4 Style Chooser

It has been introduced a tool for editing and testing application styles.

 

4.5 New selection controls

In this version it has been introduced two new types of selection control:

  • Switch
  • Radio buttons

For more information, see Column attributes.

 

4.5.1 Switch

The "Switch" type of selection control is practically identical to the "Checkbox" type, with the difference that the style used in the new type corresponds to a switch.

Form data with "Switch" selection control

The "Switch" selection controls are displayed correctly on all forms that already use the Material style. In the other cases they will be shown as "Checkbox".

 

4.5.2 Radio buttons

The "Radio buttons" type of selection control is very similar to the "Dropdown list" type, but in this case the source elements of the include are all listed and the value of the field is indicated from the selected option button.

Form data with "Radio buttons" selection control

The "Radio buttons" selection controls are displayed correctly on all forms that already use the Material style. In the other cases they will be shown as "Dropdown list".

 

4.6 Explorer tool

Explorer tool now shows by default the databases and dictionaries used in the last month. By clicking a button the user can expand and see the full set of databases and dictionaries.

 

4.7 SQL Table Column Actions

In this version has been introduced the option to add column actions to SQL Tables.

With this implementation actions that apply changes to the indicated row of the table can be executed.

Column actions can be shown like buttons or icons.

Column actions shown as buttons

Column actions shown as icons

For more information about the Form Actions implementation, see Form Actions.

5 Bug fixes

  • Fixed function sqltableToggleSelection of Form JS API.
  • Fixed Is between and Is not between checks of QBE Guided Window.
  • Fixed bug with SQL Style Icons of SQL Tables, not showing in some cases.
  • Fixed variables with includes on QBE Window.
  • Fixed bug with Form Box Actions when an action with fields is called with a lot of rows selected on the SQL Table of the box.
  • Fixed bug with error messages that contains : character, the error message is shown cut.
  • Fixed bug with Blob columns of SQL Tables when there are more than one Blob column, making it impossible to download the files.
  • Hidden button to access to object configuration on query information window if the user has not permissions to access to the dictionary.
  • Fixed Label Event cell with material theme. Renamed to Label Code.
  • Prevent Form action to refresh row if no row is selected.
  • Fixed HREF column format Attribute to be shown equally than another links of forms.
  • Fixed form actions fields of type CHAR to be shown as field text when have soft references and size greater than 39.
  • Fixed bug with Update authorization on SQL Tables.
  • Ensure that a multichoice row of an SQL Table is selected when an editable cell of the row is changed [Recover functionality of 2018.3 version].
  • ...