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
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
Essbase Selector Metadata Editor
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
Metadata Editors
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:
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
Workbook Script Editor
Workbook Scripting — Event Links, Functions, Methods
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.