December 1, 2010
This version uses SpreadsheetGear 2010 (6.0.3.158) and NetAdvantage
2010, Volume 2 (10.2.20102.1004).
The release notes for this build contain the following sections:
Application
Commentary
Dodeca Metadata Service
Essbase Views
Excel Essbase View
Relational
Selectors
Workbook Script Debugger
Workbook Scripting
The appropriate version(s) of the dodeca-essbase service included in
the installation should also be deployed when upgrading to a new release
of the Dodeca Framework.
Application
- Password Property — Modified to encrypt the application password. For
an existing application that is already assigned a password, the
unencrypted password will continue to work, and will continue to be
stored in clear text in the metadata. To encrypt an existing password,
select the application in the Application Metadata Editor and change any
property value in order to enable the Commit button (you can then change
the property value back to the original value), and then commit the
metadata. (#909)
Commentary
- Fixed Issue: When a CommentRange is configured with the following
settings: CommitPolicy is OnCellInput, the InCellDisplayPolicy is
not None, and the EditPolicy is EditInCell or EditInBoth, and the
Comments Explorer is open, the Modified By and Date Modified values
remain blank after the comment is automatically saved. (#893, #898)
- Fixed Issue: When a comment is deleted in the Comments Explorer, the
Save Comments tool in the view’s toolbar does not become enabled. (#899)
- Fixed Issue: When one or more comments are deleted from the Comments
Explorer and the deletions are saved, the "Unsaved Comment Changes"
prompt is still displayed when the view is rebuilt or closed. (#900)
- Fixed Issue: For the generic Excel and SQLExcel view types, entering a
comment into a cell generated the error
"WorkbookViewControlImplementation.GetCellValue is not implemented."
Entering a comment into the Comments Explorer generated the error
"WorkbookViewControlImplementation.SetCellValue is not implemented."
(#901)
Dodeca Metadata Service
- Fixed potential security issue with Dodeca GET services exposed: The
GET methods exposed on the dodeca metadata service could inappropriately
expose system user names and the table structure DDL.
Resolution: The issue was resolved by setting those GET methods to be
disabled in the resource\dodeca.get.method.mappings.properties file.
These services can be enabled by editing the file manually in the
dodeca-metadata.jar file inside the WAR file before deployment. (#915)
Essbase Views
- Fixed Issue: In an Adhoc view (and a drillthrough sheet in an Excel
Essbase view), when the user pastes members and data into the view and
the pasted range contains more rows and/or columns than the existing
retrieved range, the following error is generated after a send operation
is completed: "Unable to perform Essbase update operation. Value does
not fall within the expected range."
To address this issue, the framework now clears the memory-resident
information about the retrieved members and data when the size of the
send range is different than the size of the retrieve range. (For an
Adhoc view, the "used range" is used as the retrieve range and send
range.) As a result, the tools that perform the various Essbase-related
operations are not able to detect whether a selected cell is a member
cell or a data cell, so these tools may not function as expected until
after a retrieve is performed. (#902)
Excel Essbase View
- Fixed Issue: An error similar to the following occurs when the
retrieve range origin is not A1 and no rows are returned from a retrieve
operation: Unable to retrieve the view data. Unable to retrieve active
sheet "My Sheet". Unable to retrieve range "'My
Sheet'!Ess.Retrieve.Range.1". Unable to retrieve range "'My
Sheet'!Ess.Retrieve.Range.1" on sheet "My Sheet". Unable to perform
Essbase post-retrieve event processing. Unable to add name to worksheet.
Specified argument was out of the range of valid values. Parameter name:
Column must be between 0 and 16383. (#913)
This fix also required a change to the dodeca-essbase service to correct
an issue with how row header ranges are computed. (#914)
Relational
- ORACLE Databases Only: When a SQLPassthroughDataSet query is used to
insert rows into an Oracle database table and the primary key value
needs to be automatically incremented, the primary key column must be
configured in the database to automatically generate the value. This is
done by adding a TRIGGER object that calls a SEQUENCE and places the
next value into the record before the insert is completed. (Refer to the
Oracle database documentation for how to setup a sequence and trigger.)
Oracle handles generated keys differently than other databases. When a
row is inserted, the generated keys functionality in JDBC returns a
result set that contains a single column and value. The column/value is
called ROWID and is a unique value that can be used to retrieve the data
from the database.
On the client, in the query’s DataTableInfo Columns definitions, a ROWID
column should be added with the JDBCType set to VARCHAR. The INSERT
statement should define a post-Insert SELECT statement that retrieves
the ROWID and any database-level default values for the row using the
ROWID as the criterion.
To recap and summarize the steps:
In the Oracle database:
Add a SEQUENCE object to the database to provide auto-incrementing
numbers
Add a TRIGGER object that reads the SEQUENCE and fills in the KEY value
automatically.
In the SQLPassthroughDataSet on the client:
Add a ROWID parameter to the columns in the query’s DataTableInfo.
Append a post-insert SELECT to the query’s InsertSQL property.
Contact support@appliedolap.com if you need assistance with this
configuration.
Modified to detect when a view is configured with multiple
SQLPassthroughDataSetRange instances that are assigned the same
SQLPassthroughDataSet. The following error is generated: "The
SQLPassthroughDataSetRange "MyDataSetRange" and "MyOtherDataSetRange"
are both assigned the SQLPassthroughDataSetID
"<MySqlPassthroughDataSet>". The same SQLPassthroughDataSetID cannot be
assigned to multiple SQLPassthroughDataSetRange instances." (#890)
Selector Metadata Editor (and Essbase Selector Metadata Editor)
- The default Single-Select Tool Tip is now set to "Select a <Source>"
instead of "Select a(n) <Source>". (#917)
- The default Multiple-Select Tool Tip is now set to "Select one or more
<Source>" instead of "Select one or more <Source>(s)". (#917)
- Fixed Issue: The default Token Range Name is an invalid range name
when the Source contains blanks.
Resolution: The default Token Range Name now contains an underscore
character in place of each blank in the Source. For example, if the
Source is "My Source", the default Token Range Name is
"Token.Range.My_Source". (#918)
- In the Essbase Selector Metadata Editor, when a new selector is
committed and the "Automatically Add Selector List" option is enabled,
the selector list’s default NullSelectionText is set to "Select a
<Dimension>" instead of "Select a(n) <Dimension>". (#919)
Workbook Script Debugger
- Added a "Debug Mode" combobox tool, which allows debugging to be
turned off from within the debugger by selecting the "Off" option. When
the procedure resumes, such as when the Continue button is clicked, the
procedure contines to execute, but the debugger does not open for any
other procedures within the script. Once turned off, debugging cannot be
resumed for the current instance of the view. (#904)
Workbook Script Editor
- The EventLink information provided within the Workbook Script Editor
now includes a list and description of the event’s properties. Event
properties provide context-specific information related to the event.
For example, the BeforeRangeRetrieve event supports a RangeName and
a SheetName property. An event property value is obtained within the
context of the event by using the @EPVal(<PropertyName>) function. The
event property values can be used, as appropriate, within the workbook
script logic. (#905)
Workbook Scripting
- New EventLink: ListDataValidationCellChanged occurs after a cell
that has list style data validation is changed. Any change to the cell,
including the value, format, etc., raises the event. Note that the
RangeChanged event is also raised and occurs after the
ListDataValidationCellChanged event. (#906)
- New Function: CascadeSheetCount, @CascadeSheetCount(), computes and
returns the number of sheets that will be generated in a cascaded view
based on the current selections in selectors that are designated as
CascadeSources. (#892)
This function can be used, for example, to limit the number of cascade
sheets that are allowed within a view. The following script uses the
[T.CascadeSheetLimit] token, which can be defined by the view or
application, to set the number of allowed sheets.
The LimitCascadeSheets procedure implements the following logic:
- If the [T.CascadeSheetLimit] token is not defined, the procedure is
exited and the number of sheets is not limited. Note: This method uses
the new TokenExists function.
- The CascadeSheetLimit property is added and assigned the value of
the [T.CascadeSheetLimit] token, or if the token value is null, a
default of 10.
- If the number of sheets computed by the CascadeSheetCount function
is less than or equal to the limit, the procedure is exited; else, the
procedure continues to the CancelEvent method, which cancels the build
processing by cancelling the BeforeBuild event.
- The progress text in the status bar is cleared, and the warning icon
is displayed along with a message that informs the user of the
limitation.
- New Function: Checksum, @Checksum(Range), returns an SHA-1 hash of
the cell values within the specified range, which can be specified as a
defined name or as an address. The function can be used to determine
whether there are changes within a range. The range can contain
discontiguous areas. When specifying a range address, discontiguous
areas should be delimited by commas. (#912)
- New Function: SelectorValueCount, @SValCount(SelectorID), returns
the count of selected items for the specified selector. (#891)
- New Function: PropertyExists, @PropertyExists(PropertyName), returns
True/False indicating whether a workbook script property with the
specified PropertyName exists. (#895)
- New Function: TokenExists, @TokenExists(TokenName, [UseTargetView]),
returns True/False indicating whether a token with the specified
TokenName exists. The optional UseTargetView indicates whether the
target view’s tokens should be used when determining the existence of
the token. The UseTargetView argument is only applicable within the
context of the BeforeOpenViewForDataCells and
BeforeOpenViewForMemberCells event links. (#894)
- Modified the TokenValue function, @TVal(TokenName, [UseTargetView]),
to throw an exception if no TokenName argument is specified, or if the
specifed TokenName value is not the name of an existing token. (#907)
- Modified ForEach Method: Added an ExitLoopCondition argument for
both the NumberToNumber and DataCache overloads. If specified, the
value is evaluated before each iteration of the ForEach loop. If the
value resolves to True, the loop is exited.
The value of the property specified as the PropertyName is set before
the ExitLoopCondition is evaluated, which allows the "next iteration"
value to be used within the ExitLoopCondition expression. (The
PropertyName property is assigned the current number for the
NumberToNumber overload and the current data cache item value for the
DataCache overload.) (#908)
- Added SendEmail method overload: The new SMTP overload supports
the ability to send an email message via SMTP. The General overload
sends an email message using the Windows Simple MAPI, and supports the
ability to optionally display the default email client dialog. The SMTP
overload is recommended except in the case where the user needs to be
able to specify send options. (#897)
- Fixed Issue: When the OpenView method is called from the
CellDoubleClick event, the source view is reactivated after the target
view is opened. (#889)
- Fixed Issue: The BuildRangeFromScript method’s MemberQuery overload
returns an extra character at the end of the member names. (#896)
Dodeca Framework