Dodeca Version 6.7.1

March 11, 2014 - Build 4340


This version of the Dodeca Framework uses the .NET Framework, version 2.0, Service Pack 1 and higher on the desktop. The components used in this version of Dodeca are SpreadsheetGear 2012 (7.0.5.140), NetAdvantage 2011, Volume 1 (11.1.20111.2042), Aspose.Cells 7.0.3.0, and Syncfusion Essential Studio 11.3.0.30.

This version of Dodeca has two server-side services that run inside a Java Application Server. The Dodeca service is supported and tested on Java 1.6. The Dodeca-Essbase service for all Essbase versions prior to, and including, Essbase 11.1.1.3 are supported and tested on Java 1.5. The Dodeca-Essbase service for all Essbase versions 11.1.1.4 and higher are supported and tested on Java 1.6. Both services are known to run on Java 1.7, although extensive testing has not been performed on that Java version.

The release notes for this version contain the following sections:

Adhoc Essbase View — Fixes

Dodeca Metadata Service Timed Logger Enhancements

Essbase Member Select Dialog — Fixes

Essbase Selector Metadata Editor — Fixes

Excel Essbase View — Fixes

Metadata Editors — Fixes

PDF View Enhancements

SQLPassthroughDataSet — Concurrent Query Execution

View Selector Tree and View Selector Explorer Bar — Fixes

Workbook Script Editor — Fixes

Workbook Scripting — Event Links, Functions, Methods

Adhoc Essbase View

  • Fixed Issue: When an error occurs during an Essbase operation, the context menu fails to display when the right mouse button is clicked on a member cell, and the Essbase operation tools are disabled. (#714)

  • Fixed Issue: When a Remove Only operation results in an Essbase error, such as "This operation would generate a nonsensical report," the error is not reported in the view’s status bar. (#732)

Dodeca Metadata Service Timed Logger Enhancements

The Dodeca Metadata Service timed logger was introduced in Version 6.0.0.3106. Additional DEBUG level log messages have been added to the timed logger messages, which provide timings for relational queries.

These log messages help identify the components that are consuming time inside the server. Each message contains 12 columns, which are delimited by a vertical bar '|'.

Column 1: log message level

Column 2: timestamp

Column 3: dodeca.service.timed

Column 4: sequential transaction number

Column 5: number of active threads

Column 6: unique GUID to identify the transaction

Column 7: client/user

Column 8: server action or method that is executed

Column 9: message description

Column 10: reserved

Column 11: reserved

Column 12: timings in milliseconds

Note that the columns can vary based on the configuration set in the log4j.properties file.

The row containing the string SQLPassthroughDataSet [SQLPassthroughDataSet name] complete indicates the total time the query runner thread took to complete its work, and the line identified by the INFO logging level is the total time of the transaction through the server including the unpackaging/packaging of xml and writing of the xml to the response stream.

If the query is configured to execute the queries concurrently, the Thread ID’s may be intermingled in the logs (i.e. you may see Thread-n references followed by Thread-n+1 references followed by more Thread-n references.)

DEBUG|2014.03.11 10:59:36.983|dodeca.service.timed|2|1|3ff034a7-92b8-413c-a10b-b7e926d1212c|aoi-kevin/kevin|SQLPassthroughDataSetQueryDetails|Servlet doPost method: pre-invoke action - SQLPassthroughDataSetQueryDetails.|0|0|1|

DEBUG|2014.03.11 10:59:36.984|dodeca.service.timed|2|1|3ff034a7-92b8-413c-a10b-b7e926d1212c|aoi-kevin/kevin|SQLPassthroughDataSetQueryDetails|Pre-parse processing|0|0|0|

DEBUG|2014.03.11 10:59:36.985|dodeca.service.timed|2|1|3ff034a7-92b8-413c-a10b-b7e926d1212c|aoi-kevin/kevin|SQLPassthroughDataSetQueryDetails|Parse XML|0|0|1|

INFO|2014.03.11 10:59:36.993|dodeca.service.timed|2|1|3ff034a7-92b8-413c-a10b-b7e926d1212c|aoi-kevin/kevin|SQLPassthroughDataSetQueryDetails|Servlet doPost method: post-invoke action - SQLPassthroughDataSetQueryDetails.|0|0|10|

DEBUG|2014.03.11 10:59:36.998|dodeca.service.timed|3|1|7c200bd6-6343-44b9-8fd1-eac49fac36fc|aoi-kevin/kevin|SQLConnectionQueryDetails|Servlet doPost method: pre-invoke action - SQLConnectionQueryDetails.|0|0|0|

DEBUG|2014.03.11 10:59:36.999|dodeca.service.timed|3|1|7c200bd6-6343-44b9-8fd1-eac49fac36fc|aoi-kevin/kevin|SQLConnectionQueryDetails|Pre-parse processing|0|0|0|

DEBUG|2014.03.11 10:59:37.000|dodeca.service.timed|3|1|7c200bd6-6343-44b9-8fd1-eac49fac36fc|aoi-kevin/kevin|SQLConnectionQueryDetails|Parse XML|0|0|1|

INFO|2014.03.11 10:59:37.007|dodeca.service.timed|3|1|7c200bd6-6343-44b9-8fd1-eac49fac36fc|aoi-kevin/kevin|SQLConnectionQueryDetails|Servlet doPost method: post-invoke action - SQLConnectionQueryDetails.|0|0|9|

DEBUG|2014.03.11 10:59:37.013|dodeca.service.timed|4|1|8de776cf-6479-4cda-8c79-a1e4087b0082|aoi-kevin/kevin|BinaryArtifactQueryDetails|Servlet doPost method: pre-invoke action - BinaryArtifactQueryDetails.|0|0|0|

DEBUG|2014.03.11 10:59:37.014|dodeca.service.timed|4|1|8de776cf-6479-4cda-8c79-a1e4087b0082|aoi-kevin/kevin|BinaryArtifactQueryDetails|Pre-parse processing|0|0|0|

DEBUG|2014.03.11 10:59:37.016|dodeca.service.timed|4|1|8de776cf-6479-4cda-8c79-a1e4087b0082|aoi-kevin/kevin|BinaryArtifactQueryDetails|Parse XML|0|0|2|

INFO|2014.03.11 10:59:37.028|dodeca.service.timed|4|1|8de776cf-6479-4cda-8c79-a1e4087b0082|aoi-kevin/kevin|BinaryArtifactQueryDetails|Servlet doPost method: post-invoke action - BinaryArtifactQueryDetails.|0|0|15|

DEBUG|2014.03.11 10:59:37.217|dodeca.service.timed|5|1|c89086d0-20c1-4ab7-86eb-b7e192596029|aoi-kevin/kevin|SQLPassthroughDataSet|Servlet doPost method: pre-invoke action - SQLPassthroughDataSet.|0|0|8|

DEBUG|2014.03.11 10:59:37.219|dodeca.service.timed|5|1|c89086d0-20c1-4ab7-86eb-b7e192596029|aoi-kevin/kevin|SQLPassthroughDataSet|Pre-parse processing|0|0|1|

DEBUG|2014.03.11 10:59:37.225|dodeca.service.timed|5|1|c89086d0-20c1-4ab7-86eb-b7e192596029|aoi-kevin/kevin|SQLPassthroughDataSet|Parse XML|0|0|6|

DEBUG|2014.03.11 10:59:37.231|dodeca.service.timed|5|1|c89086d0-20c1-4ab7-86eb-b7e192596029|aoi-kevin/kevin|SQLPassthroughDataSet|Query threads created: 1|0|0|6|

DEBUG|2014.03.11 10:59:37.231|dodeca.service.timed|5|1|c89086d0-20c1-4ab7-86eb-b7e192596029|aoi-kevin/kevin|SQLPassthroughDataSet|Query thread Thread-26 started|0|0|0|

DEBUG|2014.03.11 10:59:37.232|dodeca.service.timed|5|1|c89086d0-20c1-4ab7-86eb-b7e192596029|aoi-kevin/kevin|SQLPassthroughDataSet|Thread-26-Trans: Creating ResultSet|0|0|0|

DEBUG|2014.03.11 10:59:37.240|dodeca.service.timed|5|1|c89086d0-20c1-4ab7-86eb-b7e192596029|aoi-kevin/kevin|SQLPassthroughDataSet|Thread-26-Trans: Obtained JDBC connection|0|0|9|

DEBUG|2014.03.11 10:59:37.240|dodeca.service.timed|5|1|c89086d0-20c1-4ab7-86eb-b7e192596029|aoi-kevin/kevin|SQLPassthroughDataSet|Thread-26-Trans: SQL = SELECT SUPPLIER.SUPPLIER_ALIAS AS S, CONVERT(char(10), SALES.TRANSDATE, 101) AS D, MARKET.STATE AS T, PRODUCT.SKU_ALIAS AS P, MEASURES.CHILD AS M, SCENARIO.SCENARIO AS E, SALES.AMOUNT AS A FROM SCENARIO INNER JOIN MEASURES INNER JOIN PRODUCT INNER JOIN MARKET INNER JOIN SALES INNER JOIN SUPPLIER ON SALES.SUPPLIERID = SUPPLIER.SUPPLIERID ON MARKET.STATEID = SALES.STATEID ON PRODUCT.PRODUCTID = SALES.PRODUCTID ON MEASURES.MEASURESID = SALES.MEASURESID ON SCENARIO.SCENARIOID = SALES.SCENARIOID|0|0|0|

DEBUG|2014.03.11 10:59:37.241|dodeca.service.timed|5|1|c89086d0-20c1-4ab7-86eb-b7e192596029|aoi-kevin/kevin|SQLPassthroughDataSet|Thread-26-Trans: Statement prepared|0|0|1|

DEBUG|2014.03.11 10:59:37.825|dodeca.service.timed|5|1|c89086d0-20c1-4ab7-86eb-b7e192596029|aoi-kevin/kevin|SQLPassthroughDataSet|Thread-26-Trans: Query executed and scrollable resultset returned|0|0|584|

DEBUG|2014.03.11 10:59:37.847|dodeca.service.timed|5|1|c89086d0-20c1-4ab7-86eb-b7e192596029|aoi-kevin/kevin|SQLPassthroughDataSet|Thread-26-Trans: Writing schema to stream|0|0|22|

DEBUG|2014.03.11 10:59:38.613|dodeca.service.timed|5|1|c89086d0-20c1-4ab7-86eb-b7e192596029|aoi-kevin/kevin|SQLPassthroughDataSet|Thread-26-Trans: 49165 data rows written to stream|0|0|766|

DEBUG|2014.03.11 10:59:38.614|dodeca.service.timed|5|1|c89086d0-20c1-4ab7-86eb-b7e192596029|aoi-kevin/kevin|SQLPassthroughDataSet|Thread-26-Trans: RowCounts written to stream|0|0|0|

DEBUG|2014.03.11 10:59:38.614|dodeca.service.timed|5|1|c89086d0-20c1-4ab7-86eb-b7e192596029|aoi-kevin/kevin|SQLPassthroughDataSet|Thread-26-Trans: Closed ResultSet|0|0|1|

DEBUG|2014.03.11 10:59:38.614|dodeca.service.timed|5|1|c89086d0-20c1-4ab7-86eb-b7e192596029|aoi-kevin/kevin|SQLPassthroughDataSet|Thread-26-Trans: setConnectionInUse set to false|0|0|0|

DEBUG|2014.03.11 10:59:38.620|dodeca.service.timed|5|1|c89086d0-20c1-4ab7-86eb-b7e192596029|aoi-kevin/kevin|SQLPassthroughDataSet|Thread-26-Trans: Prepared statement closed|0|0|6|

DEBUG|2014.03.11 10:59:38.620|dodeca.service.timed|5|1|c89086d0-20c1-4ab7-86eb-b7e192596029|aoi-kevin/kevin|SQLPassthroughDataSet|Thread-26-Trans: cleanupConnections complete|0|0|0|

DEBUG|2014.03.11 10:59:38.621|dodeca.service.timed|5|1|c89086d0-20c1-4ab7-86eb-b7e192596029|aoi-kevin/kevin|SQLPassthroughDataSet|Thread-26-Trans: Query execution thread total time|0|0|1390|

DEBUG|2014.03.11 10:59:38.621|dodeca.service.timed|5|1|c89086d0-20c1-4ab7-86eb-b7e192596029|aoi-kevin/kevin|SQLPassthroughDataSet|Query thread Thread-26 joined|0|0|1390|

DEBUG|2014.03.11 10:59:38.621|dodeca.service.timed|5|1|c89086d0-20c1-4ab7-86eb-b7e192596029|aoi-kevin/kevin|SQLPassthroughDataSet|Query thread Thread-26 row counts written to stream|0|0|0|

DEBUG|2014.03.11 10:59:38.622|dodeca.service.timed|5|1|c89086d0-20c1-4ab7-86eb-b7e192596029|aoi-kevin/kevin|SQLPassthroughDataSet|Query thread Thread-26 schema written to stream|0|0|1|

DEBUG|2014.03.11 10:59:38.623|dodeca.service.timed|5|1|c89086d0-20c1-4ab7-86eb-b7e192596029|aoi-kevin/kevin|SQLPassthroughDataSet|Query thread Thread-26 data written to stream|0|0|1|

DEBUG|2014.03.11 10:59:38.625|dodeca.service.timed|5|1|c89086d0-20c1-4ab7-86eb-b7e192596029|aoi-kevin/kevin|SQLPassthroughDataSet|SQLPassthroughDataSet SampleBasic_TransactionBySupplier_All complete|0|0|1400|

INFO|2014.03.11 10:59:38.976|dodeca.service.timed|5|1|c89086d0-20c1-4ab7-86eb-b7e192596029|aoi-kevin/kevin|SQLPassthroughDataSet|Servlet doPost method: post-invoke action - SQLPassthroughDataSet.|0|0|1758|

In the example above, the highlighted entries show the following: the JDBC connection took 9 ms, the query executed in 484 ms, the data was written to a stream/array for processing in 766 ms and the total query thread ran in 1390 ms. The transaction took a total of 1758 ms reading the xml, performing the query, and writing the xml back out to the response. (#1274)

Essbase Member Select Dialog

  • Fixed Issue: When an invalid entry is entered into the search string field, a "Member <string> is not in the dimension" message is displayed, which is appropriate, but any valid entry entered afterwards displays the same message with the original text. (#860)

Essbase Selector Metadata Editor

  • Fixed Issue: When a dimension whose name contains a forward slash, such as DEPT/AREA, is imported as a selector within the Essbase Selector metadata editor, and the selector is subsequently used by a view, an error similar to the following is encountered when the view is opened (#1268):

The view "Input by Product" window cannot be initialized. Unable to setup selectors. Unable to create selector "DEPT\AREA". Unable to get selector definition "DEPT\AREA". Illegal characters in path.

Excel Essbase View

  • Fixed Issue: When a saved Excel Essbase View, which is configured to allow Essbase operations within retrieve ranges, is opened and the user turns off the auto-refresh tool, then selects a different point of view, and builds the view, the retrieve data does not reflect the current selections. (#1266)

Metadata Editors

  • Fixed Issue: When multiple clients are adding or deleting instances of the same type of metadata in the same tenant, and committing the changes, it is possible that the lists that display the metadata items of that type for selection will not reflect the addition or deletion in the other users' environments, although the changes were actually successfully committed to the database. (#1267)

PDF View

The PDF View type now supports the ability to load the PDF from a relational table. A SQL connection ID and a SELECT statement are specified as the SQLConnectionID and SelectSQL properties, respectively. Both of the properties can be tokenized. The PDF must be stored in the relational database as an image. (#1272)

With this addition, the PDF view supports the following sources for the PDF, which are listed in the order of precedence:

  1. SQLConnectionID and SelectSQL

  2. PDFBinaryArtifact

  3. URL

SQLPassthroughDataSet — Concurrent Query Execution

Prior to this release, all the queries defined for a given SQLPassthroughDataSet were processed sequentially on the server. In this release, the ConcurrentQueryExecutionEnabled setting has been added to the SQLPassthroughDataSet properties. This setting controls whether the queries are processed concurrently or sequentially. By default, the setting is False. When a SQLPassthroughDataSet contains multiple queries, we recommend experimenting by setting the value to True to determine whether the concurrent execution results in faster performance. And, we would be very interested to hear about your findings. (#1271)

View Selector Tree and View Selector ExplorerBar

  • Fixed Issue: The application’s HierarchyToRoleMapping setting is used to control which hierarchies are presented in the view selector based on the authenticated user’s roles. This can result in multiple hierarchies being merged into the view selector. The issue occurs after an administrator changes the relative position of items in a hierarchy by dragging and dropping or by using the cut/paste operations, such as changing the order of the views under a given category. When the hierarchy is merged with other hierarchies in the view selector, the order of the items do not reflect the design-time changes made in the Hierarchy Metadata Editor. (#1273)

Workbook Script Editor

  • Fixed Issue: When deleting a Procedure that is associated with an Event Link, the user is prompted to indicate whether to also delete the Event Link that calls the procedure. If the user chooses to have the Event Link deleted, the appropriate entry in the Event Links section is removed, but when the workbook script is committed, the entry returns. (#1269)

Workbook Scripting — Event Links, Functions, Methods

  • Fixed an issue that was introduced in 6.7.0 with the SetProgressText method, Clear overload, which generates the error: "Object reference not set to an instance of an object." (#1270)

  • Fixed issue with the @SVal(), @SDVal(), and @SValCount() functions, which required that the selector ID argument value match the actual selector ID based on a case-sensitive comparison. Resolution: A case-insensitive comparison is now performed to obtain the selector for which the function is evaluated. (#1102)

  • New Method: The Process method supports the ability to start a local process by specifying an application or document name. The document can be of any file type for which the extension has been associated with an application installed on the client system. For an application, command-line arguments may also be specified. (#1265)

    In this example, the Process method is used in the context of the FollowHyperlink event to open Windows Explorer when the hyperlink represents a folder and to open the appropriate application when the hyperlink represents a file.

    image