This section aims to provide useful info in order to prepare, execute and review the evolution from previous versions to the current release.

1 Database

1.1 wic_conf

At the wic_conf the tables related with the definition of database servers, database objects and connection groups has been rebuilded.

<table name='wic_database_object'>

    <!-- COLUMNS -->
    <column name='database_id'                            type='serial'                                   required='y'                       info='Database serial identifier ' />
    <column name='database_code'                          type='char'         size='30'                   required='y'                       info='Database logical name ' />
    <column name='database_physname'                      type='char'         size='30'                                                      info='Database physical name (when it is different of code)' />
    <column name='database_title'                         type='varchar'      size='80'                                                      info='Database title' />
    <column name='server_code'                            type='char'         size='20'                   required='y'                       info='Database server where the database resides'  />

    <column name='database_isolation_level'               type='smallint'                                 required='y'    default='1'        info='Indicates the isolation level (none, dirty read, commited read, cursor stability, repeteable read...) for the connection to the database' />

    <column name='database_has_olap'                      type='smallint'                                 required='y'    default='0'    info='Indicates if the database is available at OLAP tool' />
    <column name='database_has_portaltemplate'            type='smallint'                                 required='y'    default='0'    info='Indicates if the database has templates of portal (applies on metadata database)' />
    <column name='database_has_restapp'                   type='smallint'                                 required='y'    default='0'    info='Indicates if the database has REST Applications' />

    <column name='database_insert'                        type='smallint'                                 required='y'    default='0'    info='Permission to insert rows' />
    <column name='database_delete'                        type='smallint'                                 required='y'    default='0'    info='Permission to delete rows'/>
    <column name='database_update'                        type='smallint'                                 required='y'    default='0'    info='Permission to update rows'/>
    <column name='database_execute'                       type='smallint'                                 required='y'    default='0'    info='Permission to execute SQL Objects defined as process'/>

    <column name='database_trans_req'                     type='smallint'                                 required='y'    default='1'    info='Indicates if the database must be in transactional mode' />
    <column name='database_check_req'                     type='smallint'                                 required='y'    default='1'    info='Indicates if the database requires consistency check' />
    <column name='database_auth_extranet'                 type='smallint'                                 required='y'    default='1'    info='Indicates if the database is visible from extranet' />
    <column name='database_isblocked'                     type='smallint'                                 required='y'    default='0'    info='Indicates if the database is blocked' />
    <column name='database_initialsql'                    type='varchar'      size='255'                                                 info='SQL to execute the first time that a connection is stablished' />

    <column name='database_info'                          type='clob'                                                                    info='Information of database' />
    <column name='database_weblogo'                       type='blob'                                                                    info='Logo for the web' />
    <column name='database_doclogo'                       type='blob'                                                                    info='Logo for the printed documents' />

    <!-- INDEXES -->
    <primary name='p_wic_database_object' columns='database_id' />
    
    <unique name='u_wic_database_object1' columns='database_code' />

    <foreign name='f_wic_database_object1'    columns='server_code'    references='wic_database_server'    refcols='server_code'  />

    <!-- CHECKS -->
    <check name='c_wic_database_object1'>
        <constraint><![CDATA[
            (database_code != 'wic_conf' )
]]>     </constraint>
    </check>

</table>
<table name='wic_database_group'>

    <!-- COLUMNS -->
    <column name='group_code'                        type='char'         size='20'                   required='y'                       info='Database logical Group' />

    <!-- Connection Pool options -->
    <column name='group_pooltype'                    type='smallint'                                   required='y'    default='0'      info='Poo type: [0] only primary, [1]: allows secondary' />
    <column name='group_poolaccess'                  type='smallint'                                   required='y'    default='0'      info='Protocol access: [0]: HTTP, [1]: SOAP, [2]: ALL' />
    <column name='group_poolmirror'                  type='smallint'                                   required='y'    default='0'      info='Indicates if the secondary servers are visible from application explorer' />
    <column name='group_poolmaxsize'                 type='smallint'                                   required='y'    default='5'      info='Maximum number of connections in pool' />
    <column name='group_pooltout'                    type='smallint'                                   required='y'    default='10'     info='Maximum time in seconds that the server can wait to acquire a connection of pool'/>

    <!-- Maximum queries limit -->
    <column name='group_maxqrows'                    type='integer'                                    required='y'    default='1000'   info='Maximum number of rows readable from an execution of SQL Object'/>
    <column name='group_maxerows'                    type='smallint'                                   required='y'    default='500'    info='Maximum number of rows returned at getQueryValue, OLAP getUniqueMembers, JRepStruct to parse default values.' />
    <column name='group_maxcrows'                    type='smallint'                                   required='y'    default='100'    info='Maximum number or rows in desktop channels' />
    <column name='group_maxfrows'                    type='smallint'                                   required='y'    default='500'    info='Maximum number of rows (standard multirow object) allowed to be sent to print in PDF' />
    <column name='group_maxprows'                    type='smallint'                                   required='y'    default='10'     info='Maximum number of documents (form object) allowed to be sent to print in PDF' />

    <!-- Cache ResultSet -->
    <column name='group_cressize'                    type='smallint'                                 required='y'    default='100'    info='Maximum number of ResultSet in cache' />
    <column name='group_rs_max_cached_rows'          type='smallint'                                 required='y'    default='1000'   info='Maximum number of rows cached in ResultSets'/>
    <column name='group_rs_mapped_cache'             type='smallint'                                 required='y'    default='0'      info='If it is active (mapped) indicates that the ResultSets are cached at disk instead of memory'/>
    
    <!-- Cache JRepAdapter -->
    <column name='group_jrepsize'                    type='smallint'                                 required='y'    default='10'     info='Maximum number of JRepAdapter stored in cache (per session)'/>
    <column name='group_jreptime'                    type='smallint'                                 required='y'    default='300'    info='Maximum time in seconds that a JRepAdapter remains cached (after this time will expire)' />

    <!-- Connections -->
    <column name='group_qtimeout'                    type='smallint'                                 required='y'    default='300'     info='Maximum number of seconds that a statement can be run before being canceled'/>
    <column name='group_qtimebgt'                    type='smallint'                                 required='y'    default='120'     info='Limit time in seconds that a query can be run before being passed to background' />
    <column name='group_dbmaxidle'                   type='smallint'                                 required='y'    default='300'     info='Maximum number of seconds a Connection can go unused before it is closed'/>
    <column name='group_dbmaxcoutcount'              type='smallint'                                 required='y'    default='1000'    info='The number of times a Connection may be checked out before it is closed'/>
    <column name='group_jdbc_max_statistics'         type='smallint'                                 required='y'    default='1000'    info='Max size for the statistics queue in the poll. -1 means disabled statistics'/>
    <column name='group_jdbc_test_on_borrow'         type='smallint'                                 required='y'    default='0'       info='Indicates if perform connection test on each borrow connection'/>

    <!-- Cache of cursors -->
    <column name='group_fetchbufsize'                type='smallint'                                 required='y'    default='50'      info='Buffer rows size'/>
    <column name='group_refreshdelay'                type='smallint'                                 required='y'    default='5'       info='Number of seconds to wait before reload row (JRepAdapter.__reloadRow)'/>
    <column name='group_verifyupdate'                type='smallint'                                 required='y'    default='1'       info='Indicates if it is necessary to verify the row before update (JRepAdapter.getRowIdentifierCRC)'/>
    <column name='group_enable_count'                type='smallint'                                 required='y'    default='1'       info='Indicates if enable or not the counters for the rows selected on tables'/>

    <!-- Logs flag -->
    <column name='group_enable_qrylogs'              type='smallint'                                 required='y'    default='1'       info='Flag to enable query logs'/>
    <column name='group_enable_trxlogs'              type='smallint'                                 required='y'    default='0'       info='Flag to enable transaction logs'/>
    <column name='group_enable_xsqllogs'             type='smallint'                                 required='y'    default='0'       info='Flag to enable XSQL-Scripts execution logs'/>
    <column name='group_enable_soaplogs'             type='smallint'                                 required='y'    default='0'       info='Flag to enable SOAP request logs'/>
    <column name='group_enable_apilogs'              type='smallint'                                 required='y'    default='0'       info='Flag to enable API REST logs'/>

    <column name='group_select_conf_tables'          type='varchar'      size='80'                                                     info='Regular expression to allow this group to do queries on wic_conf tables that matches with it'/>
    <column name='group_info'                        type='varchar'      size='255'                                                    info='Group info'/>

    <!-- INDEXES -->
    <primary name='p_wic_database_group'     columns='group_code' />

    <!-- CHECKS -->
    <check name='c_wic_database_group1'>
        <constraint><![CDATA[
            group_poolmaxsize > 0 AND group_poolmaxsize < 100
]]>     </constraint>
    </check>

    <check name='c_wic_database_group2'>
        <constraint><![CDATA[
            group_maxqrows = 0 OR group_maxqrows > 50
]]>     </constraint>
    </check>

    <check name='c_wic_database_group3'>
        <constraint><![CDATA[
            group_maxerows > 50
]]>     </constraint>
    </check>

    <check name='c_wic_database_group4'>
        <constraint><![CDATA[
            ((group_maxqrows = 0 ) OR ((((group_maxqrows > group_maxerows ) AND (group_maxqrows >= group_maxfrows ) ) AND (group_maxqrows >= group_maxprows ) ) AND (group_maxfrows >= group_maxprows ) ) )
]]>     </constraint>
    </check>

    <check name='c_wic_database_group5'>
        <constraint><![CDATA[
            group_jrepsize >= 10 AND group_jrepsize <= 100 
]]>     </constraint>
    </check>

    <check name='c_wic_database_group6'>
        <constraint><![CDATA[
            group_jreptime >= 60 AND group_jreptime <= 3600
]]>     </constraint>
    </check>

    <check name='c_wic_database_group7'>
        <constraint><![CDATA[
            group_fetchbufsize >= 10 AND group_fetchbufsize <= 500
]]>     </constraint>
    </check>

    <check name='c_wic_database_group8'>
        <constraint><![CDATA[
            group_refreshdelay >= 5 AND group_refreshdelay <= 360
]]>     </constraint>
    </check>

    <check name='c_wic_database_group9'>
        <constraint><![CDATA[
            group_qtimeout >= 60
]]>     </constraint>
    </check>

    <check name='c_wic_database_group10'>
        <constraint><![CDATA[
            group_dbmaxidle >= 60
]]>     </constraint>
    </check>

    <check name='c_wic_database_group11'>
        <constraint><![CDATA[
            group_dbmaxcoutcount >= 100
]]>     </constraint>
    </check>
    
    <check name='c_wic_database_group12'>
        <constraint><![CDATA[
            group_jdbc_max_statistics = 0 OR (group_jdbc_max_statistics >= 100 AND group_jdbc_max_statistics <= 2000)
]]>     </constraint>
    </check>

    <check name='c_wic_database_group13'>
        <constraint><![CDATA[
            ((group_qtimebgt = 0 ) OR ((group_qtimebgt >= 60 ) AND (group_qtimebgt < group_qtimeout ) ) )
]]>     </constraint>
    </check>

    <check name='c_wic_database_group14'>
        <constraint><![CDATA[
            group_select_conf_tables = '(wic[_]mobile[_][\w\.]+$)'
]]>     </constraint>
    </check>

</table>
<table name='wic_database_group_objects'>

    <!-- COLUMNS -->
    <column name='group_code'                        type='char'         size='20'                   required='y'                       info='Database logical Group' />
    <column name='database_code'                     type='char'         size='30'                   required='y'                       info='Database code (wic_database_object)' />

    <column name='database_auth_select'              type='smallint'                                 required='y'    default='1'        info='Permission to do queries via dbstudio' />
    <column name='database_auth_insert'              type='smallint'                                 required='y'    default='0'        info='Permission to insert rows' />
    <column name='database_auth_delete'              type='smallint'                                 required='y'    default='0'        info='Permission to delete rows'/>
    <column name='database_auth_update'              type='smallint'                                 required='y'    default='0'        info='Permission to update rows'/>
    <column name='database_auth_execute'             type='smallint'                                 required='y'    default='0'        info='Permission to execute SQL Objects defined as processes'/>
    
    <column name='database_auth_soap_app'            type='smallint'                                 required='y'    default='0'        info='Indicates if the SOAP service for Applications (mobility) is available' />
    <column name='database_auth_soap_obj'            type='smallint'                                 required='y'    default='0'        info='Indicates if the SOAP service for SQL Objects is available' />
    <column name='database_auth_soap_xml'            type='smallint'                                 required='y'    default='0'        info='Indicates if the SOAP service for XML (XSQL-scripts, SOAPExports) is available' />
    <column name='database_auth_soap_sql'            type='smallint'                                 required='y'    default='0'        info='Dangerous. Indicates if the SOAP service for SQL (any SQL) is available'  />
    <column name='database_auth_soap_sqlc'           type='smallint'                                 required='y'    default='0'        info='Indicates if the SOAP service for SQL Cataloged (defined at the wic) is available'  />
    <column name='database_auth_soap_api'            type='smallint'                                 required='y'    default='0'        info='Indicates if the SOAP service for building APIs is available'  />    
    
    <column name='database_role_jrep'                type='char'         size='25'                                                      info='JREP role (SQL objects)' />
    <column name='database_role_desk'                type='char'         size='25'                                                      info='JREP role (Templates and channels)' />
    <column name='database_role_jsql'                type='char'         size='25'                                                      info='JSQL role (Query conditions to restrict the data access)' />
    <column name='database_role_jtrx'                type='char'         size='25'                                                      info='JTRX role (permissions for transactions)' />
    <column name='database_role_jdef'                type='char'         size='25'                                                      info='JDEF role (pre setted default values)' />
    <column name='database_role_jlck'                type='char'         size='25'                                                      info='JLCK role (lock object for execution or print)' />
    <column name='database_role_olap'                type='char'         size='128'                                                     info='OLAP roles' />
    <column name='database_role_api'                 type='char'         size='25'                                                      info='API role (REST api path)' />

    <!-- INDEXES -->
    <primary name='p_wic_database_group_objects'    columns='group_code, database_code' />

    <!-- FK -->
    <foreign name='f_wic_database_group_objects1'    columns='group_code'       references='wic_database_group'    refcols='group_code'     ondeletecascade='y' />

    <foreign name='f_wic_database_group_objects2'    columns='database_code'    references='wic_database_object'   refcols='database_code'  />

    <foreign name='f_wic_database_group_objects3'    columns='database_role_jrep'    references='wic_role_jrep'       refcols='role_code'  />
    <foreign name='f_wic_database_group_objects4'    columns='database_role_jsql'    references='wic_role_jsql'       refcols='role_code'  />
    <foreign name='f_wic_database_group_objects5'    columns='database_role_jtrx'    references='wic_role_jtrx'       refcols='role_code'  />
    <foreign name='f_wic_database_group_objects6'    columns='database_role_jdef'    references='wic_role_jdef'       refcols='role_code'  />
    <foreign name='f_wic_database_group_objects7'    columns='database_role_jlck'    references='wic_role_jlck'       refcols='role_code'  />
    <foreign name='f_wic_database_group_objects8'    columns='database_role_api'     references='wic_role_api'        refcols='role_code'  />
    <foreign name='f_wic_database_group_objects9'    columns='database_role_desk'    references='wic_role_desk_group' refcols='role_group_code'  />
</table>
<table name='wic_database_server'>

    <!-- COLUMNS -->
    <column name='server_code'                      type='char'            size='20'           required='y'                   info='Code of server' />
    <column name='server_name'                      type='char'            size='40'                                          info='Name of server' />
    <column name='server_driver'                    type='char'            size='20'           required='y'                   info='JDBC Driver' />
    <column name='server_user'                      type='char'            size='40'           required='y'                   info='Database physical user for administrative connections.' />
    <column name='server_password'                  type='char'            size='40'                                          info='Database physical user password'/>
    <column name='server_mirror_code'               type='char'            size='20'                                          info='Code of secondary (replicated) server'/>
    <column name='server_is_blocked'                type='smallint'                            required='y'    default='0'    info='Indicates if the server is blocked (not available)'/>
 
    <column name='server_protocol'                  type='varchar'         size='30'                                          info='Connection protocol'/>
    <column name='server_host'                      type='char'            size='16'                                          info='Service host'/>
    <column name='server_port'                      type='integer'                                                            info='Service port'/>
    <column name='server_service'                   type='varchar'         size='60'                                          info='Service name (sqlserver)'/>
    <column name='server_options'                   type='varchar'         size='255'                                         info='Service options as ENABLE_TYPE_CACHE'/>

    <column name='server_info'                      type='varchar'         size='255'                                         info='Server Information'/>

    <column name='server_initial_sql'               type='varchar'         size='255'                                         info='SQL to execute the first time that a connection is created'/>
    <column name='server_xml_config'                type='clob'                                                               info='XML with the database layout dbspaces configuration'/>

    <!-- INDEXES -->
    <primary name='p_wic_database_server'     columns='server_code' />

    <foreign name='f_wic_database_server1'    columns='server_mirror_code'    references='wic_database_server'    refcols='server_code'  />


   <!-- CHECKS -->
   <!-- Si protocol es NULL se usa la conexio definida al config.xml. -->
   <check name='c_wic_database_server1'>
       <constraint>server_protocol IS NOT NULL OR (server_protocol IS NULL AND server_host IS NULL AND server_port IS NULL AND server_service IS NULL)</constraint>
   </check>
</table>
<table name='wic_database_server_users'>

    <!-- COLUMNS -->
    <column name='server_code'                       type='char'         size='20'                 required='y'                       info='Code of server' />
    <column name='group_code'                        type='char'         size='20'                 required='y'                       info='Group' />
    <column name='database_code'                     type='char'         size='30'                                                    info='Database code. If null the user is the same for all dbs at server.' />
    <column name='server_user'                       type='char'         size='20'                 required='y'                       info='Database physical user' />
    <column name='server_password'                   type='char'         size='40'                                                    info='Database physical user password'/>
    <column name='server_info'                       type='varchar'      size='80'                                                    info='Information' />
    <column name='date_updated'                      type='datetime'     size='year to second'     required='y'    default='current'  info='Date of modification'/>

    <unique name='u_wic_database_server_users1'     columns='server_code,group_code,database_code' />

    <foreign name='f_wic_database_server_users1'    columns='server_code'    references='wic_database_server'    refcols='server_code'   ondeletecascade='y' />
    <foreign name='f_wic_database_server_users2'    columns='group_code'     references='wic_database_group'     refcols='group_code'    ondeletecascade='y' />
    <foreign name='f_wic_database_server_users3'    columns='database_code'  references='wic_database_object'    refcols='database_code' ondeletecascade='y' />
</table>
Change Desc
Administrator group In the definition of the database there was an administrator group. It was used for administrative connections, those that are not from user. This field has been deleted and now the administrative connections are established with the physical user (and its corresponding password) defined in the database server.
wic_dbms_objects.obj_user --> wic_database_server.server_user
Physical user The physical user to connect to the database was on the table wic_dbms_usersdb (the list of databases for each connection group). Now this user it is on the database server. For each database server there is a list where indicate for each connection group the physical user and its password.
wic_dbms_usersdb.dbms_user --> wic_database_server_users.server_user
Old table New table
wic_dbms_servers wic_database_server
wic_dbms_objects wic_database_object
wic_dbms_users wic_database_group
wic_dbms_usersdb wic_database_group_objects
wic_dbms_passwords wic_database_server_users

1.1.1 wic_user_pt_data

In this release Desktop channels have become monodatabase, and therefore the table wic_user_pt_data has become deprecated. Database and symbols used in a channel are stored in wic_user_pt_boxs table. A conversion has been added to help the migration process. The conversion creates new desktop boxes for each database defined in wic_user_pt_data

2 Application

Changes on Application Server.

2.1 Removed features

2.1.1 IP filter

The IP filtering defined in the wic_conf table wic_dbms_ipfilters has been deprecated.

2.2 wic_conf database

Table Table / Column(s)
wic_dbms_ipfilters [table]

3 Upgrade Dashboard

The Upgrade Dashboard provides the information overview in a centralized desktop. These KPI highlight the required changes, for each dictionary, in order to perform the upgrade of the version of Axional Studio.

3.1 Channels

The available channels of Upgrade Dashboard are:

Title Description Topic
Pending Soft-References by dictionary For each Dictionary retrieves the list of previous soft-references, that do not have a mirroring defintion inside the new [wic_jdic_softref_rel] table. Soft References
Pending Soft-References by dict [Totals] For each Dictionary counts the total of previous soft-references, that do not have a mirroring defintion inside the new [wic_jdic_softref_rel] table. Soft References
Helpers 'disable verify', without DUAL Soft-reference which previous definition [wic_jdic_collist ]
had enabled the flag 'disable verify' but that bow,
while it has been translated as Helper [wic_jdic_softref_rel], and
it wears a sentence of verification which do not have
a union with a SELECT upon the wic_dual table.

This SELECT allows emulating the functionality under the 'disable verify'
Soft References
Helpers, autofill with ordering criteria Soft-reference which autofill statement where there is an ordering criteria,
By default, the resulset is orders directly upon th resulset list
Soft References
Errors on Relation Helper definitions This KPI retrieves several issues evolving from previous to new soft-reference definition.
Topics covered are:
  • New helper without DUAL for [disable_verify]
  • There is an atribute with include
  • Column mapping mismatch
  • Helper without relation
  • Relation without Helper
  • Missing object column in Helper
  • Relation without disable clear
Soft References
SQL cond. with wrong format (Sharps and quotes) The KPI checks the syntax of the SQL conditions in:
  • wic_jrep_form_tabs.tab_cond (tab conditions)
  • wic_jrep_form_parents.form_cond (parent references conditions)
  • wic_jrep_collnk.lnk_stmt (Object links)
  • wic_jrep_box_collnk.lnk_stmt (SQL table links)

The results show:
  • Char columns without quotes
  • Non char columns with quotes
Eval JS condition
Search the sharp character [#] Search the expressions [#] within the tables:
  • wic_jrep_form_import_js
  • wic_jrep_form_butt
  • wic_jrep_form_cols
  • wic_jrep_form_data
Form JS
JS cursor references Search for cursor references [with sharp or dollar definition] inside the SQL Object formulary at:
  • wic_jrep_form_data
  • wic_jrep_form_cols
If exists, the cursor references inside the Javacript code of the form, must be changed for the apropriate JS Function
  • #colname Replace with: getFieldValue(colname)
  • #parent(colname) Replace with: getParentFieldValue(colname)
  • $VARNAME Replace with: getVariableValue(varname)
  • #istrue(caninput) Replace with: canInput()
  • #istrue(rowselected) Replace with: isRowSelected()
  • #istrue(parentselected) Replace with: getParentCode() != null
Form JS
JS function setGlobalMapping Search for expressions [setGlobalMapping] within tables:
  • wic_jrep_form_import_js
  • wic_jdic_jsfuncs
  • wic_jrep_form_data
  • wic_jrep_form_cols
Form JS
JS function getQueryValue Search for expressions [getQueryValue] within tables:
  • wic_jrep_form_import_js
  • wic_jdic_jsfuncs
  • wic_jrep_form_data
  • wic_jrep_form_cols
Field JS
JS function getQueryValue [Totals] Search the total number of expressions [getQueryValue] within tables:
  • wic_jrep_form_import_js
  • wic_jdic_jsfuncs
  • wic_jrep_form_data
  • wic_jrep_form_cols
Field JS
JS form function setFieldNullable It s hows the list of SQL Object codes, that contain the javascript function setFieldNullable inside JS functions of the formulary.
  • wic_jrep_form_import_js
  • wic_jdic_jsfuncs
  • wic_jrep_form_data
  • wic_jrep_form_cols
The link drills down to the formulary, where you can find this function in any of the text fields of JS functions.
JS
JS function setFieldNoentry It shows the list of SQL Object codes, that contains the javascript function setFieldNoentry inside the JS functions of formulary.
  • wic_jrep_form_import_js
  • wic_jdic_jsfuncs
  • wic_jrep_form_data
  • wic_jrep_form_cols
The link drills down to the formulary, where you can find this function in any of the text fields of JS functions.
JS

All of this channles are defined at the new wic dictionary (provided with the new distribution) and you must apply them to all dictionaries that you want to upgrade (dictionaries that needs conversion).