Dodeca Version 7.7.0

July 11, 2019 - Build 6870

This version of the Dodeca 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 2017 (, NetAdvantage 2011, Volume 1 (11.1.20111.2042), Aspose.Cells*, Syncfusion Essential Studio, and GdPicture.NET 11.0.6.

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 are supported and tested on Java 1.5. The Dodeca-Essbase service for all Essbase versions and higher is supported and tested on Java 1.6. Both services are known to run on Java 1.7, 1.8, 1.9, and 1.10.

*Upgraded from Aspose.Cells to Aspose.Cells

The Dodeca-Essbase services built for the Provider Services and patchsets have been removed from the Applied OLAP website. This is due to an issue in both updates with MDX queries with Dimension Properties executed from JAPI not returning correct results. Oracle is recommending that customers on Provider Services or should upgrade to or higher.

The release notes for this version contain the following sections:

Accelerator Utility

  • Fixed Issue - When used on a computer with the .NET Framework version 4.0 or higher installed, the accelerator utility registered the Dodeca assemblies into the .NET 2.0 assembly and native image caches. Since the release, this caused Dodeca to run without acceleration when a .NET Framework version 4.0 or higher was installed. This did not produce further issues, but acceleration did not result in the expected performance benefits. #2147

Application - Session Timeout

  • Enhancement - Support has been added for optionally allowing the current user to reauthenticate and continue the session after an inactivity or scheduled timeout occurs. When the application’s AllowReauthenticateAndContinue property is set to True and an authentication service that requires credentials is configured, the user will be prompted with an opportunity to reauthenticate and continue the session. When this property is set to True, the MessageTextForClosingSession property should be updated to inform the user that she or he must reauthenticate to continue and that cancelling will terminate the application. #2116


Application - Startup

  • Enhancement - When a required startup parameter is missing, (i.e., Tenant or Application for a ClickOnce deployment), optionally show a launch dialog rather than displaying an error. This is particularly useful when a new Dodeca user accesses a deployment URL in an unsupported browser (or a supported browser without a ClickOnce extension) and the startup parameters are lost.

    7 7 Application Startup 2202 dodecarelease

    This functionality is enabled by default. To disable this functionality, the PromptWhenMissingParameters key can be set to false in the AppliedOLAP.Dodeca.SmartClient.exe.config. #2202

      <!-- Indicates whether to prompt the user when the application is missing required
      startup parameters. -->
      <add key="PromptWhenMissingParameters" value="false"/>

Application Tokens

In this version, support has been added for populating Application Tokens from a SQLPassthroughDataSet at startup. This functionality is governed by the Application’s ApplicationTokensSQLPassthroughDataSetID property, which specifies the SQLPassthroughDataSet that should be executed at launch.

If specified, the ApplicationTokensSQLPassthroughDataSetID defines the query or queries used to obtain the application tokens for the current application, optionally using any of the following variables to return columns containing token names and values:

Token Description


The tenant of the current application.


The current application ID.


The URL of the current Dodeca servlet.


The User ID of the current user, as represented in the User Manager.


The Authenticated Username of the current user, if an authentication service is leveraged.

The first column returned by the SQLPassthroughDataSet's SelectSQL statement or statements represents token names. The second column represents token values. #1585

Authentication Services - EssbaseSimpleAuthentication

  • Fixed Issue - When authenticating against the EssbaseSimpleAuthenticationService, the AuthenticatedUsername is not assigned to the current user, and it does not get written to the USERS table. #2222

Authentication Services - LDAP Authentication Services

  • Enhancement - When authenticating against Active Directory, an LDAPReturnGroupCommonNames property has been added. This property controls whether to return the group common names as opposed to the relative distinguished names that Dodeca has returned in previous releases. This is useful in general, but it is particularly useful when switching between Essbase authentication via Shared Services and the upstream Active Directory server directly, since the same roles will be obtained by Dodeca from both authentication services. Additionally, an LDAPReturnGroupFilter property has been added to support only returning roles under a given directory in the tree. #2207

Authentication Services - SQLSimpleAuthentication

A new authentication service is provided in this version. The SQLSimpleAuthentication authentication service leverages newly introduced SQLLoginDialog to provide a simple, role-less authentication service that prompts the user for valid SQL credentials against a specified connection upon application startup. This functionality can be used in conjunction with an SQLConnectionID that contains a valid credential-set for scheduled report generation. #2237

ClickOnce Prep Utility

  • Fixed Issue - When generating a ClickOnce manifest directly for an IPv6 address rather than a hostname or FQDN, the ClickOnce deployment provider is represented incorrectly. This issue does not affect deployments accessed over IPv6 when a hostname or FQDN was specified in the ClickOnce Prep Utility. #2221

  • Enhancement - When generating a Dodeca servlet in an environment without Internet access, display only a single prompt to indicate that the timestampUrl could not be accessed and that the deployment’s signature could not be timestamped. When a certificate is generated dynamically, this information is indicated in the output log, but a prompt is not displayed. #2162

Essbase Date Measures

  • Fixed Issue – When a date measure value is retrieved from Essbase into a worksheet, then modified and sent to Essbase, the updated value can subsequently be retrieved from Essbase. However, if a date measure value retrieved from Essbase is not modified, but is included in a send operation along with Essbase values, which have been modified, the value of the date measure is changed to January 1, 1970. #2253

Essbase Audit Logging

  • Fixed Issue – Nulls are inserted into the DATA_AUDIT_LOG_DATAPOINTS table when enabling the view’s UseMemberNamesAndAliasesForRowDimensions property and both the member name and alias are included in the send range. #2144

Essbase Excel View — Export View to Excel / Import View from Excel

  • Fixed Issue – When an Essbase Excel view is exported to Excel and any of the view’s selector token values exceeds 255 characters, an “Invalid defined name” error occurs when the view is imported from Excel. #2195

Essbase Options Dialog

  • Fixed Issue - When the user is allowed to set the Alias Table in the Essbase Options dialog, the alias table presented as the default for a given connection is not the most recent alias table selected for the connection. #2285

Essbase Selector Tree

  • Fixed Issue – When the Essbase member hierarchy represented by the selector tree is an alternate hierarchy of shared members and the associated selector list’s SelectorListProperties.DefaultSelectionPolicy is LastUsedItem, the default selection is not restored. This is an issue when the selector is configured for single and for multiple selections. #2208

Essbase Selectors - Tokens

Support has been added for optionally populating both Member Name and Alias tokens for a given selector/selector list. This is governed by the TokenForMemberNameAndAlias boolean property, which is configured in the Selector List. This property is False by default, due to some performance considerations associated with getting the member info of default selections when the view is opened.

The default selector token will be assigned on the basis of the UseAliases setting of an Essbase view or the configuration of an Essbase selector as defined by a view’s SelectorConfiguration, and additional tokens will be generated for the selected member name(s) and alias(es). The additional tokens are defined as follows:

Selector Token Member Name Token Member Alias Token










If the selector token ends with a non-alphanumeric character, ".Name" and ".Alias" are inserted before the final character. If the selector token ends with an alphanumeric character, ".Name" and ".Alias" are appended. This configuration option requires additional information about members to be obtained before opening and/or building a view with default selections, so caution should be used when there is the potential for a user to select a large number of items. #2075

Essbase Service

  • The Dodeca version has been added to the information displayed when the dodeca-essbase servlet URL is typed into a web browser window. This can be done to verify the service is running and to view the configuration and logging configuration settings. #2213


Excel Undo and Redo Enhancement

The ability to undo and redo an Excel operation using the Ctrl+Z and Ctrl+Y shortcut keys has always been supported for several of the Excel operations, such as editing, pasting values into or clearing a cell; however, many Excel operations could not be undone, such as inserting or deleting a row. And, Undo and Redo tools for Excel operations have not been available.

With the 7.7 release, the undo and redo functionality for Excel operations has been extended to include previously unsupported operations. The Excel operations can be undone and redone through the use of the shortcut keys as well as new toolbar buttons. #2028

The Undo/Redo toolbar and tools are available in the view template designer toolbar.


When added to a view’s toolbars configuration, the Excel undo/redo tools are available to end users.

The Undo and Redo tools are a combination of a button and a drop down, which displays the list of operations that can be undone and redone. The tool tip displays the most recent operation that will be undone or redone by clicking the button.


How to add the Undo/Redo toolbar to an existing toolbars configuration:

  1. From the Toolbars Configuration Metadata Editor, select the toolbars configuration.

  2. Open the Toolbars Designer.

  3. Click the Import Standard Tools and Toolbars button at the lower left.

  4. In the Import Tools and Toolbars Wizard, check Excel UndoRedo.

  5. Click Next, then Next, then Finish.

  6. Close the Toolbars Designer.

  7. The toolbar is displayed in the Toolbars Preview, and can be moved to another location by dragging and dropping.

  8. Commit the modified toolbars configuration.

PDF Support

  • Fixed Issue - When converting an Excel view to PDF, if the view contains a chart with an overlaid Series, the Series plot points can be rendered misaligned. This issue has been addressed by updating the Aspose.Cells library to version #2283

Print Tools

  • Enhancement - In this release, printing from a workbook view now queues in the background and does not lock the user interface while the job is spooling. In prior releases, the user interface could become locked for a significant period of time under certain networking and driver configurations. Additionally, printing is now a cancelable background operation that can be controlled via the status bar’s Cancel button. #2165

    Printing in Background
  • Enhancement - Print tools are now configurable with respect to showing the Print Settings dialog that allows the user to choose a printer and configure the printer settings. In previous releases, the location of the tool dictated whether a print dialog was shown. The newly added PrintBehavior property is optional; valid PrintBehavior options are listed below. #2169

    • Quick - The printjob will be sent to the default printer without displaying a dialog.

    • WithDialog - The user will be prompted to select a printer before printing.

    • Unspecified - The default behavior of the tool will apply, where a dialog is shown if the tool is located on a Main toolbar, and a dialog will not be shown if the tool is located on a standard toolbar.

Request and Response XML Logging

For both client and server-side request/response logging, the log file naming convention has been updated to include the tenant. This allows requests and responses from different tenants to be more easily differentiated. This is particularly useful when reviewing server-side logs. #1561

The updated log file format is as follows:


A log file for a SelectorListQueryDetails request might be as follows:


Selectors with Dockable Controls

  • Fixed Issue for SelectorListBox, SQLSelectorTreeView, EssbaseSelectorListBox, and EssbaseSelectorTreeView - The view’s SelectorControlDisplayMode property controls whether the view’s selectors are displayed as a modal dialog, docked control, or locked docked control. When set to "locked docked control", the user is prevented from moving the control to a different location or floating the control. The issue that has been addressed is that when the title bar of the dockable control pane is double-clicked, the control pane becomes a floating control. #2203

  • Fixed Issue - When the a view’s SelectorDockedControlGroupStyle is set to SlidingHeaders, a previously opened selector control can re-open automatically after being closed by the user. #2293

Send To Mail Recipient Tools

  • Fixed Issue - When Dodeca runs as a 64-bit process, as it does when using a .NET 4.6.2 release, an error similar to the following error could occur when attempting to send e-mail via the Send To Mail Recipient (As Excel Attachment) or Send To Mail Recipient (As PDF Attachment) tools: Unable to send mail. Arithmetic operation resulted in an overflow. #2276

SQL Connections

  • Enhancement – Added support for prompting end-users to provide SQL credentials when the Username and Password are not configured on a SQL Connection object and a JNDI DataSource is not defined. This capability is intended to behave similarly to the Essbase Login dialog, which allows an end-user to provide credentials which are cached for the duration of the session and subsequently reused. The caption of the displayed SQL Login dialog is controlled via the tokenizable LoginDialogCaption property. #2124


SQLPassthroughDataSet - Columns Editor

  • Fixed Issue - When removing a copied column (or any copied item in any of the various list forms throughout the product) with the Remove button, the original column could be removed instead of the copy. #2155

  • Enhancement – Added an Insert button to support inserting a new column at the currently selected index, rather than at the end of the list. This is useful when dealing with a large number of columns. #1736


SQLPassthroughDataSet - Identify Table Columns

  • Fixed Issue - When using the SQLPassthroughDataSet Identify Table Columns functionality against a Microsoft SQL Server database, tables with non-dbo schemas were not returned correctly, and generated default statements did not use the appropriate schema for the selected table. #2112

  • Enhancement - Added support for identifying tables and columns of PostgreSQL databases. PostgreSQL can also now be specified as a SQL Connection Database type from the SQL Connections Metadata Editor. #2236

  • Enhancement - Added support for auto-completing table names as the user types into the Table Name combo editor. #2246

SQLPassthroughDataSet - Queries

  • Fixed Issue - When using the SQLStandardizationPolicy FullStandardization for a SQLPassthroughDataSet query, literals and identifiers containing contiguous spaces or commas could become corrupted. In this release, the FullStandardization policy has been updated to preserve literals and identifiers, along with the additional enhancement below. To use the previous implementation of FullStandardization, the SQLStandardizationPolicy can be switched to FullStandardizationClassic. #1760

  • Enhancement - When using the SQLStandardizationPolicy FullStandardization for a SQLPassthroughDataSet query, the use of line comments is now supported. In previous versions of Dodeca, line comments needed to be removed or converted to block comments in order for the query to execute correctly. #2022

User Manager

  • Fixed Issue - When utilizing a DB2 database, under some circumstances, the list of users cannot be retrieved and the following error is displayed: Unable to execute user query. Unable to deserialize UserQuery result. Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints. #2282

User Roles Editor

  • Fixed Issue - After deleting a role from the list in the User Roles Editor, attempting to add an additional role before committing the deletion resulted in the following error: Deleted row information cannot be accessed through the row. #2270

View (Excel and Essbase) Template Designer

  • Added support for the ability to open the view associated with the template using the Open View tool. #1505

  • The view’s culture, based on the CulturePolicy and CultureName properties, is now reflected in the View Template Designer. #1436

  • The Essbase View Template Designer has been modified to not automatically connect to Essbase, since doing so could result in inadvertently initiating a zoom operation by double-clicking a cell. #1491

  • The Essbase View Template Designer has been modified to not automatically retrieve data after the Member Selection dialog is closed. #1450

View Selectors

  • Fixed Issue for ViewSelectorTree - When there is only a single root node, the Find dialog fails to locate a node that appears in the tree above the currently selected node. #2291

  • Enhancement - Added support for displaying multiple View Hierarchies in a View Selector via HierarchyToRoleMapping entries, whether or not an authentication service is utilized for the application. By simply specifying a Hierarchy ID and leaving the Role empty, all users of an application will see the specified hierarchy or hierarchies. #2292

WebBrowser Views

  • Enhancement - Added support for performing a POST operation against the configured URL and rendering the response in a browser view. This capability can be used to post data to any web service, but one of the primary motivations for this enhancement is that it provides the ability to drill through to Drillbridge reports from Workbook Script in the context of an Excel-type view. #2254

    To support this functionality, two new Workbook Script functions, @UrlEncode() and @UrlDecode() have been added, along with three new Web Browser View properties:

    Property Description


    A data string that will be posted to the specified URL before rendering the response in the browser.


    Primarily used for specifying the "Content-Type" header of the PostData. In addition to the "Content-Type" header, additional HTTP headers may be sent with the initial web request.


    The encoding utilized when sending any PostData content.

  • Enhancement - When opening the current URL of a Web Browser View with the Open in New Browser tool, ensure that the page is opened in user’s default web browser. In previous releases, the page was opened in Internet Explorer, regardless of the user’s default browser. #2256

    If the prior behavior of opening the current page in Internet Explorer is desired, the Open in New Browser tool can be replaced with the newly added Open in Internet Explorer tool.

Workbook Script Debugger

  • On the Breakpoints tab in the Workbook Debugger, to visually distinguish between enabled and disabled methods, a disabled method is now displayed with a gray background in the list of methods for the current procedure #2196

  • The Evaluate as Address button on the Breakpoints and Formula Evaluator tabs does not evaluate the formula when the view’s culture uses a non-comma character as the List Separator. #2286


Workbook Script Editor

  • Fixed Issue: When attempting to cut multiple rows, the client can become frozen if the first selected row is the active row. #2296

  • Enhancement: The ability to navigate directly from an event link to the associated procedure is now supported by the following keyboard and mouse operations: #1141

    • Double-click on the event name or procedure in the Event Links section.

    • With the event link selected, use the Ctrl+G shortcut key.

    • With the event link selected, click the Go to Procedure from the context menu.

  • Enhancement: The Workbook Script Editor now supports the ability to navigate from a method argument value that represents a metadata ID directly to the metadata instance in the appropriate Metadata Editor.

    The navigation is initiated by selecting the method argument, which represents the metadata ID, and clicking the Edit <Metadata ID> button from the toolbar or the context menu. The appropriate editor is opened or activated and the metadata instance is automatically selected. #2086

  • Enhancement: The ability to copy and paste an entire workbook script as text is now supported. With this capability, a workbook script can be viewed as text in any text editor, edited, and then pasted back into the WBS Editor. #2093

    The original Copy and Paste buttons in the Procedures toolbar have been changed to a button and drop-down menu combination tool. Clicking the button copies or pastes the selected text or element. Clicking the menu shows the Copy script, Copy verbose buttons or the Paste script , depending on the tool.


    As an example, this excerpt of Workbook Script text is taken from the Dodeca Sample application’s "Dynamic Input" Workbook Script using Copy script.

  • Enhancement: In previous versions, clicking the Method Arguments column header automatically sorts the arguments in ascending order alphabetically. Clicking again sorts the arguments in descending order. The only way to restore the original default order is to close and reopen the editor.

    In the 7.7 release, the first click sorts in ascending order, the second click sorts in descending order, an the third click restores the original order. #2252

  • In the release, the Find/Replace dialog was revamped to provide a more user-friendly and robust capability. The release included additional fixes and enhancements, and this release includes further improvements, including the addition of Bookmark All and Clear Bookmarks functionality. #2176, #2158

  • Enhancement: The height of the Help pane in the Workbook Script Editor Help pane height is retained when the editor is closed and restored when the editor is reopened. The height is persisted across sessions. #2094

  • Enhancement: A new button on the Procedures toolbar and context menu has been added to provide the ability to expand or collapse all procedures and their methods. #1374

  • Formula Editor Enhancement - The position of the splitter between the function description pane and the formula pane is now retained when the dialog is closed and restored when the dialog is reopened. The position is persisted across sessions. #2085

  • Fixed Issue: The user is allowed to paste a value into an Event Link, Method, or Argument Name column. #2181

  • Fixed Issue: Under certain conditions, the following message can be displayed when attempting to copy the text from a cell and pasting into another cell: The clipboard contains a WorkbookScript object. Paste the WorkbookScript text into the active cell?. In the 7.7 release, the user is not required to approve the paste operation #2093

  • Fixed Issue: When the Formula Editor is closed by clicking Cancel or by clicking the X, the pencil icon is displayed to the left of the argument name, which incorrectly indicates the cell value has been edited. #2093

Workbook Scripting Functions

  • New Function: The DataCacheToString function returns a string of values from a column in the specified DataCache. #2159

    @DCString(<DataCacheName>, [ColumnIndex], [StringDelimiter], [StringDelimiterEscapeChar],[ValueDelimiter])
    • DataCacheName - The name of the DataCache.

    • ColumnIndex - (Optional) The default is "1". The column number from which the string is constructed.

    • StringDelimiter - (Optional) The default is none. The character to use to enclose each value in the resulting string, such as a single-quote or double-quote.

    • StringDelimiterEscapeChar - (Optional) The default is StringDelimiter. Each occurrence of StringDelimiter within the delimited string will be prepended with the StringDelimiterEscapeChar.

    • ValueDelimiter - (Optional) The default is a comma ",". The character (or string) to use to separate each value.

  • New Function: The DefinedNames function returns a delimited list of defined names based on a specified scope. #2274

    @DefinedNames(<MatchPattern>, [<Scope>], [<ReturnFormat>])
    • MatchPattern - Enter a regex pattern to match or leave blank to return all defined names. Refer to

    • Scope - (Optional) The default is "CurrentWorksheet". Valid values include: "W[orkbook]", "A[llWorksheets]", or "C[urrentWorksheet]". The argument is case-insensitive.

    • ReturnFormat - (Optional) The default is "Simple". The argument is case-insensitive.

      • "S[imple]" - Returns a comma-delimited list of unique defined names.

      • "D[etailed]" - Returns a row-and-column delimited list of:

        • Unique-Key - If Scope is Workbook or CurrentWorksheet, the key is the range name; otherwise, the key is !.

        • DefinedName - The actual defined name.

        • Scope - If Scope is Workbook, the key is "Workbook"; otherwise, the key is the name of the sheet that the range refers to.

        • RefersTo - What the defined name refers to.

  • New Function: The IsMember function returns whether the specified member exists. #2271

    @IsMember(<MemberName>, [<ConnectionID>], [AliasTable])
    • MemberName - The member specified can be an alias or a member name.

    • ConnectionID - (Optional) The default is the view’s Essbase connection. The ID of the Essbase connection.

    • AliasTable - (Optional) The default is the view’s alias table. The alias table to use.

  • New Function: The MemberAttributeValue function returns value of the specified member attribute. #1663

    @MbrAttrVal(<MemberName>, <Attribute>, [<AliasTable>], [<ConnectionID>], [<DefaultValue="">])
    • MemberName - The member specified can be an alias or a member name.

    • Attribute - The attribute for which the value is returned.

    • AliasTable - (Optional) The default is the view’s alias table. The alias table to use.

    • ConnectionID - (Optional) The default is the view’s connection. The ID of the Essbase connection.

    • DefaultValue - (Optional) The default is an empty string. The value returned by the function if the attribute is not associated with the member.

  • New Function: The MemberFormula function returns the formula of the specified Essbase member. #2107

    @MbrFormula(<MemberName>, [<AliasTable>], [<ConnectionID>], [<DefaultValue="">])
    • MemberName - The member specified can be an alias or a member name.

    • AliasTable - (Optional) The default is the view’s alias table. The alias table to use.

    • ConnectionID - (Optional) The default is the view’s Essbase connection. The ID of the Essbase connection.

    • DefaultValue - (Optional) The default is an empty string. The value returned by the function if a formula does not exist for the member.

  • New Function: The Path function returns results of Path related operations. #2262

    @Path(<Operation>, [<Argument1>], [<Argument2>])
    • Operation - The path operation. The argument value is case-insensitive.

      Replace characters that are not valid in file names with the specified character:

      @Path(CleanFileName, <file-name>, <replace-with-character>)

      Replace characters that are not valid in file paths with the specified character:

      @Path(CleanPath, <path>, <replace-with-character>)

      Combines two strings into a path:

      @Path(Combine, <path1>, <path2>)

      Combines two strings into a path:

      @Path(Combine, <path1>, <path2>)

      Changes the extension of the specified path:

      @Path(ChangeExtension, <path>, <extension>)

      Returns the directory name from the specified path:

      @Path(GetDirectoryName, <path>)

      Returns the extension of the specified path:

      @Path(GetExtension, <path>)

      Returns the filename with the extension of the specified path:

      @Path(GetFileName, <path>)

      Returns the absolute path of the specified path:

      @Path(GetFullPath, <path>)

      Returns the root directory information of the specified path:

      @Path(GetPathRoot, <path>)

      Returns a random folder or filename:


      Creates a uniquely named, zero-byte temporary file on disk and returns the full path of that file:


      Returns the path of the temporary folder of the current user:


      Determines whether a path includes a file name extension:

      @Path(HasExtension, <path>)

      Gets a value indicating whether the specified path string contains a root:

      @Path(IsPathRooted, <path>)

      Returns the filename without the extension of the specified path:

      @Path(RemoveExtension, <path>)
    • Argument1 - Depends on whether the Operation requires an argument.

    • Argument2 - Depends on whether the Operation requires a second argument.

  • New Function: The ServerTime function returns the current date/time from the Dodeca server as an Excel date/time value. #2157

    • TimeZone - (Optional) The time zone for which the date/time is adjusted. The default return value is the server’s date/time.

  • New Function: The SheetExists function returns TRUE if the specified worksheet exists. #2216

    • SheetName - The name of the worksheet.

  • New Function: The ToolValue function returns the value of a toolbar tool. #1390

    @ToolValue(<ToolKey>, [<DefaultValue>])
    • ToolKey - The key of the tool for which the value is returned.

    • DefaultValue - (Optional) The default is an empty string. The value returned by the function if the tool has no value.

  • New Function: The UniqueValues function returns a delimited list of the unique values found in a given list. #1572

    @UniqueValues(<List>, [<ListDelimiter>], [<ResultDelimiter>])
    • List - A delimited list of values.

    • ListDelimiter - (Optional) The default is a comma ",". The delimiter of the list.

    • ResultDelimiter - (Optional) The default is the ListDelimiter. The delimiter to use to build the result.

    Related Usage

    To get the unique values within a range, a formula similar to the following can be used:


  • New Function: The UrlDecode function returns a decoded representation of a given URL-encoded string. #2255

    • EncodedString - The URL-encoded string to decode.

  • New Function: The UrlEncode function returns a URL-encoded representation of a given string; typically used for the CallWebService method or Web Browser view’s PostData property. #2255

    • String - The string to URL-encode.

    See also: WebBrowser Views

  • New Function Argument: An optional parameter, Transpose, has been added to the DelimitedStringFromRangeValues function to allow the row and column positions to be swapped. #2238

    @StringFromRange(Range, [ColumnDelimiter], [RowDelimiter], [Transpose])
    • Range - The address of the range from which the string is constructed.

    • ColumnDelimiter - (Optional) The default column delimiter is a semi-colon ";". The character to use to delimit columns.

    • RowDelimiter - (Optional) The default row delimiter is the vertical bar "|". The character to use to delimit rows.

    • Transpose - (Optional) If TRUE, the row and column positions are swapped.

  • Fixed Issue with the DelimitedStringFromRangeValues and StringFromRange functions when used in conjunction with the PromptForInput method’s DropDown overload. When the function is used as the DropDownList argument value to represent the display/data value pairs presented by the dropdown list, which requires \n as the row delimiter, the dropdown list only displays a single value. #2215

Workbook Scripting Methods

  • The handling of the MethodCondition and CellCondition method arguments has been revised. If the argument value is the literal "false", or a case-insensitive equivalent, the method is skipped and no other arguments are evaluated.

    This avoids the potential of the method failing when the MethodCondition or CellCondition is explicitly set to "false", and the intention is for the method to not execute, but other argument values are invalid. #2092

  • New Method Argument: A SortOrder argument has been added to the following methods and functions to provide the ability to specify one or more columns by which to sort a data cache: BuildRangeFromScript.DataCache and ForEach.DataCache method overloads, and the DataCacheContents and DataCacheToString functions. #1672

    Example: Col1
    Example: Col1, Col3
    Example: Col2 DESC, Col1 ASC
  • New Method Arguments: All methods that prompt the user for a file path, now support a ResultPropertyName and a FullFilePathPropertyName argument, which captures whether or not the user cancelled the prompt and the full path of the selected file, respectively. These properties were added to the following methods: ExportToExcel, SaveWorkbook, SaveWorkbookAsCsv, SaveWorkbookAsPdf, UpdateBinaryArtifact. #2251

  • New Method Overload: A FromFile overload has been added to the CopyRange and CopyWorksheet methods. The overload supports copying a specified range from an Excel file into the view. For the CopyRange method, the overload also supports copying from a delimited file (.csv) into the view. 2250

  • Corrected Method Documentation: The SetTextAlignment method’s HorizontalAlignment argument documentation incorrectly included RightIndent and LeftIndent as options, which are not supported. #2248

  • New Method: The BinaryArtifactOperations method supports the following overloads:

    • ImportRange – Copy a specified range from a BinaryArtifact into the current view.

    • ImportSheet – Import a specified worksheet from a BinaryArtifact into the current view.

    • ImportWorkbook – Import all sheets from a specified BinaryArtifact into the current view.

    • CreateFromFile – Create a BinaryArtifact from a specified file.

    • CreateFromSheet – Create a BinaryArtifact from a specified worksheet of the current view.

    • CreateFromWorkbook – Create a BinaryArtifact from the workbook of the current view.

    • Delete – Delete a specified BinaryArtifact. #1738

  • New Method: The EssbaseRunMaxL method runs a MaxL script on the Essbase server. #1659

    Method Arguments
    • ScriptText: The text of the script to run on the server, where the ScriptText is written to a file and the file is executed using the command-line.

    • ContinueOnError: Controls whether script execution continues after an error is encountered.

    • ConnectionID: The ID of the Essbase connection that contains the credentials to be used by script. For an Essbase view, the ConnectionID is optional. If not specified, the view’s EssbaseConnectionID is used. For a non-Essbase view, the ConnectionID must be specified.

    • MessagesSheetName: (Optional) If specified, a worksheet will be added to the current view with the messages produced by the MaxL script execution.

    • ResultsSheetName: (Optional) If specified, a worksheet will be added to the current view with the results of the MaxL script. If the script contains more than one MaxL statement, then a sequentially numbered sheet will be added for each statement.

    • ResultsDataCacheName: (Optional) If specified, a DataCache will be added to the current view with the results of the MaxL script. If the script contains more than one statement, then a sequentially numbered DataCache will be added for each statement.

    • StatementMessagesDataCacheName: (Optional) If specified, a DataCache will be added to the current view with the messages returned by each statement in the MaxL script. If the script contains more than one statement then a sequentially numbered DataCache will be added for each statement.

    • ErrorPropertyName: (Optional) The name of the workbook script property that receives the error message if the MaxL script returns an exception.

  • New Method Overloads: The ShowMessageBox method has two new overloads, which are YesNo and YesNoCancel. These overloads allow for a workbook script to show an enhanced message box, which is also used throughout the client. For example, the Yes/No/Cancel message box is displayed when the user has modified an editable SQL View and attempts to close the view without saving the changes:


    As an example, the following workbook script could be used to display a message box with the same captions and messages.

    An ampersand (&) can be specified to the left of the character in a caption that represents the mnemonic character. The mnemonic character is displayed with an underscore when the user presses the Alt key and indicates which key to press in conjunction with the Alt key to simulate clicking the button.

    Including the button options for the General overload, the responses that return TRUE include Ignore, None, OK, Retry, and Yes. All other responses return FALSE.

    When the PropertyDataType is string, the possible values returned as the PropertyName include None, OK, Cancel, Abort, Retry, Ignore, Yes, and No. For an integer, the values include None: 0, OK: 1, Cancel: 2, Abort: 3, Retry: 4, Ignore: 5, Yes: 6, and No: 7.

  • New Method Argument: The EssbaseRunCalc method now supports a RuntimeSubVars argument, which allows the method to be used to run calculations that use the runtime variables functionality introduced in Essbase The argument value should be specified as a delimited string of dimension and member pairs, as in the following example. #1683

  • New Method Argument: An InsertPolicy argument has been added to methods that copy a range. Prior to this release, these methods only performed an overlay of the CopyToRange. #2268

    The following methods/overloads are affected:

    Method Overload








    FromFile (New Overload)

    The InsertPolicy includes the following: Rows, Columns, RowsAndColumns, ShiftCellsRight, ShiftCellsDown

  • New Method Arguments: The SetTool method now supports the following arguments: Caption, ToolTipText, ToolTipTitle, and DisplayStyle, which controls whether or not the caption is displayed. #1890

  • Fixed Issue with BuildRangeFromScript Method: When the Insert argument is TRUE, the BuildRowsOrColumns argument is set to Columns, and the StartCell argument references a non-blank column, the first column of the insert range is overwritten, which also leaves a blank column to the right of the insert range.

    Similarly, when the BuildRowsOrColumns argument is set to Rows, and the StartCell argument references a non-blank row, the first row of the insert range is not pushed down and the values in the overlapping cells of the first row of the insert range are overwritten.

    To illustrate the issue, using this as the view’s template:


    The workbook script creates a data cache containing 5 rows, and then calls BuildRangeFromScript to insert rows starting at C1.


    With the Insert argument set to TRUE, the first template row is not pushed down, and the values in C1:F1 are overwritten.


    To correct the behavior, the new DoInsert argument is set to TRUE instead of the Insert argument.


    When the BuildRowsOrColumns is set to Columns and the Insert argument set to TRUE, the first column in the insert range, which contains the "BLUE" values, is overwritten and there is a blank column to the right of the insert range.


    Again, the behavior is corrected by setting the new DoInsert argument to TRUE instead of the Insert argument.


    This was probably an issue with the original implementation, which workbook script developers have likely accommodated, so to address the issue without disrupting existing workbook scripts, a new method argument, DoInsert, has been introduced. #1691

    It is highly recommended that workbook script developers consider changing (and retesting) existing workbook scripts to use the DoInsert argument instead of the Insert argument where the issue described above is a potential as well as in any new workbook scripts.
  • Fixed Issue with OpenView Method: In the release, an issue was addressed with the opened view’s AfterBuild workbook script procedure not executing when the Close argument is set to True. Another related issue has been addressed, which can be encountered when calling OpenView in a report generator workbook script. When the workbook script opens an Essbase view after opening a SQL view, the procedure that called the ForEach method does not resume. #2188

  • Fixed Issue with RenameWorksheet Method: For an Essbase Excel view, which has the DataCellDoubleClickPolicy set to AddSheetForDrillthrough, and also has a workbook script, which calls RenameWorksheet to rename a drill-through sheet, the user is then unable to perform Essbase operations on the drill-through sheet. No error is displayed when an operation is attempted, it simply does not perform the operation. #2204

  • Fixed Issue with SendEmail Method’s General Overload: When Dodeca runs as a 64-bit process, which it does when using a .NET 4.6.2 release, an error similar to the following error could occur: Unable to send mail. Arithmetic operation resulted in an overflow. #2276

  • Fixed Issue with SendEmail Method’s ServletSMTP Overload: When using the FromDisplayName argument, an e-mail is delivered, but the FromDisplayName is not honored and the sender is displayed as the From address. #2257

  • Color Index Method Arguments: In Excel, a valid color index is 1 to 56. In a workbook script, a valid color index is 0 to 55; however, in previous releases, the dropdown list of valid values for a method argument, which represents a color index, included values 1 to 56, but setting the value 56 resulted in the following error: Color index must be between 0 and 55. And, there was no way to specify the first Excel color index.

    To address the issue without breaking existing workbook scripts, the dropdown list of valid color index values now includes 0 to 55, and the specified argument value represents the intended Excel color index minus 1.

    The following methods support color index method arguments: SetBorders, SetChart, SetColor, SetConditionalFormat, SetFill, SetFont, SetImage, SetShape, SetTextBox, and SetWorksheetOptions. #1769

Workbook Scripting - WorkbookScriptToolController

  • Enhancement: When using tools with a WorkbookScriptToolController, tool settings such as Visible and Enabled that have not been mapped to workbook script properties can now be configured in the Toolbars Designer or via the SetTool workbook script method. In previous Dodeca versions, using the Toolbars Designer or SetTool method to configure unmapped tool properties resulted in the settings being reverted to the default value (True) whenever the tool refreshed. #2111