InVision 2.1 Released

The main focus for this release has been about adding a more flexible authentication model by supporting OpenID Connect and Azure Active Directory in addition to the existing Windows authentication option. This enables us to support most modern authentication options, such as Google, Facebook, Twitter, Azure AD and custom user name / password solutions.
We have also improved Users + Permission Management to make it faster and easier to work with, and additionally, added many new capabilities and features to the platform to increase developer productivity and end user experience.

GETTING the bits
InVision 2.1 Installation Manager
 can be downloaded from \pbsndfile\Installs\D – Software\ProfitBase\Profitbase InVision\2.1\Final or using the command prompt.

MVT and DMT can be downloaded from \pbsndfile\Installs\D – Software\ProfitBase\Profitbase InVision\2.1\Tools

With InVision 2.1, we’re introducting a brand new installation routine that will make it a lot easier to install and manage multiple InVision instances on the same server and update the software. First off, you need to download and install the InVision Installation Manager (from the location above), and then use the Installation Manager to install one or more instances of InVision 2.1. If you need to install or remove an InVision instance at a later point, just launch the Installation Manager again and do it from there.

UPGRADING to InVision 2.1
When upgrading to 2.1 from earlier versions, you need to do a side-by-side install or uninstall the previous version and then install 2.1.

Upgrading an InVision instance that’s in production.

  1. Decide an instance name for the new version. Remember that you must use a different instance name than the existing instance you’re upgrading from.
  2. Open SSMS and backup – restore the existing Solution database as pbInVision_<newInstanceName> and AppFramework database as pbAppFrameworkDB_<newInstanceName>
  3. Using the InVision Installation Manager, install a 2.1 instance side-by-side the existing instance using the instance name you decided on in step 1.
  4. Use mvt to upgrade the Solution database and Solution configuration to the new version. Note that when you’re upgrading from 1.0, this step will require some manual work. You should read this post first.  When upgrading from a 2.0.x version, this step does not require you do to anything more than just running the upgrade.
  5. Start the Designer, go to the Styling editor and recompile all themes.
  6. Schedule a maintenance window with the customer where the solution can be take offline and use DMT to sync input data from the old database to the new.
  7. Go to IIS and swap the Physical Path of the old version (client and designer) to point to the paths of the new version. (Right click Web Application -> Manage Application -> Advanced Settings). The reason for doing this is that the end users shoudn’t have to use a new url after the upgrade.
  8. Open the Web.config in the Designer of the new instance and change the clientWebsiteAddress appConfig setting to point to the new address.

Upgrading an InVision instance that’s that’s not yet in production or just a local dev project
Note! I’m assuming here that you’re upgrading from an 2.0.x version, not 1.0, since there’s probably no one using 1.0 for new projects or local dev work any more.

  1. Uninstall the previous version (do not delete the databases)
  2. Using the InVision Installation Manager, install 2.1 using the same instance name as the previous version had
  3. Run mvt to upgrade the Solution database and Solution configuration to the new version.
  4. Start the designer, go the the Styling editor and recompile all themes

The Designer should no longer be started using the /main sub path. Just use http://<host>/<instanceNameDesigner>



Support for authentication using OpenID Connect and Azure Active Directory
In addition to standard Windows authentication using NTLM or Kerberos, we’ve added support for two more authentication options – OpenID Connect and Azure Active Directory. This enables authentication against any authentication provider such as Google, Facebook, Twitter, Microsoft, custom user name / password stores and Azure Active Directory.

With OpenID Connect, we can now support authentication against providers such as Google, Facebook, Twitter, Microsoft and custom user name / password stores. However, since the different providers have a varying degree of actual support for the OpenID Connect protocol, we’ve build an extensible autentication server, call PAS (Profitbase Authentication Server) on top of the IdentityServer3 framework that handles the authentication process with the different authentication providers. InVision talks to this authentication server using the OpenID Connect standard protocol, which in turn talks to the various authentication providers to do the actual user authentication before authentication information is returned to InVision. In projects where you need to use something else than Windows or Azure Active Directory, you can install and configure PAS to use whichever authentication provider you need.

As with Windows authentication, we’ve integrated support for Azure Active Directory (AAD) authentication directly into InVision, meaning you don’t need to install PAS to use it. AAD authentication is enabled in the Web.config-file and configured in the IdenityConfig.json-file.

The details about how to set up the different authentication options are described in the technical documentation.

Changed UI and policy for specifying Users and Permissions
In order to make it easier to manage permissions to resources such as Workbooks, Workbook Pages and Dimensions, we have made changes to how users and permissions are configured and managed. The changes makes the process of defining user groups and managing permissions much more intutive, and it gets a lot easier to get an overview of which user (groups) have access to a resource.

  • Users / User Groups, Solution Object Permissions and Data Access Permissions are now configured in seperate screens instead of in the context of a User Group.
  • You can now search / filter the User Groups list, which makes it much more easy to manage user groups
  • Permissions are now granted in the context of a resource, for example a Workbook, instead of in the context of a User Group.
  • Unlike before, when a user is created, no permissions are granted. Permissions must be granted explicitly to a resource. (Like before, permissions set on a higher level are inherited by descendants)
  • You can now view the effective permissions for both Solution Objects and Data (dimension members) at any level

(click to view animation)

Added support for auto recompile of Ranked Input Settings
This feature is enabled by default (even for Solutions upgraded from earlier versions), and makes Setting tables with Ranked Input columns automatically recompile when the Ranked Input source dimension(s) are updated.
In order for this feature to work properly, the Solution Model Graph must be up to date, meaning it must be compiled after the Ranked Input Setting has been saved.
This feature eliminates the need for running the recompile manually, however you should still consider running manual recompilation for Settings with multiple Ranked Input columns if a single recompile takes a long time. The reason for this is that when there’s multiple Ranked Input columns (using different source dimensions), a recompile will occur for each dimension as it is is updated.

Multiple new Workflow features

  • Changed so that archiving operations executed when no iteration has been started will be ignored instead or failing with an error. This makes it easier to configure Workflow related tasks without having to worry about state.
  • Added support for specifying Execution Modes Always, On Start and On Restart for Data Flows in Action activities. This feature will enable you to conditionally execute business logic in a startup activity based on whether a new iteration is started, or an active iteration is restarted.
  • Added support for resetting the “Go To On First Save” state tracking for the currently active Workflow Iteration. The state tracking system will monitor when a user saves data for a resource + data context for the first time during a Workflow Iteration or when the state is explicitly changed by a user. Prior to this change, an iteration could not have a multi stage startup where management could first edit or prepare data before the actual input process began without raising the state changed flag, thus preventing the Go To On First Save behavior for triggering later on. This feature enables such scenarios by adding a Data Flow Item task which can be run in an Action activity (Data Flow) after the initial preparation of the iteration has been completed.

Spreadsheet Quick Edit Dialog Window
From Workbooks, you can now launch a standalone, built-in dialog window for editing data for Setting tables by calling the new function OpenSpreadsheetEditor in an ExecuteExpression action. The OpenSpreadsheetEditor accepts the object id of a Setting table as its first argument. You can also specify the desired width and height of the dialog window. This feature enables editing data in Setting tables directly from a Resource Selector (Scenario configurator) by clicking the table name or dynamically open any Setting table for editing from a Report, Worksheet, Script callback, etc.

Added dynamic styling support for Workbook components
Button and Label now supports the ExecuteExpression action. This allows calling functions for dynamic stylingfor example if you want to change the style of a save button when a Worksheet has unsaved data.

  • AddCssClass(“class name(s)”) will add css classes to the element (if they are not already present
  • RemoveCssClass(“class name(s)”will remove css classes from the element (if they exist)
  • ToggleCssClass(“class name(s)”, conditionwill add or remove css classes to the element depending on the truthiness of the condition. If no condition is specified, the css classes will be added if they do not exist, and removed if they exist.

The gif below shows how dynamic styling is used to apply a css animation to a button and display a label when a Worksheet is edited.DynamicStyling_2_1

Other important new features

  • Added “Delete – Checked” to Solution Explorer context menu. This option will search for other Solution objects associated with the object being deleted before giving you a choice whether to continue or not.
  • Contents of Ranked Input Setting tables are now included in template exports. Note that you should not export Ranked Input Setting tables that contains rows with settings for specific dimension members.
  • Added support for getting the name of the column(s) that the selected filter item(s) originates from using the new Filter(“group”,”name”).SelectedValue.ColumnName property
  • Worksheet, Setting and Setting List now supports displaying a “dirty indicator” in the title section when changes have not been saved. This option is enabled by default.
  • Added support for specifying Distinct option for Setting Filters. This makes it easier to use a filtering source where the filter column does not contain unique values. Earlier, you had to create a wrapper view for this scenario. This option is enabled by default.
  • Improved performance for Transaction Pipeline execution (Cell Adapter, Distributer, Spawner)
  • Worksheet dimension column names are no longer prefixed with the dimension id. This eliminates the problem with having to manually rename the column reference when the Worksheet is deployed from a template.
    When upgrading from a previous version (1.0-2.0.1), running the upgrade tool (MVT) will modify the Worksheet configuration by removing the dimension id prefix and update any references to the column(s) accordingly.
  • New built-in Data Flow Task : Model Tasks / Compile Solution. You can run this task in Data Flows that reload dimensions to ensure that the Solution Model Graph is up to date when one or more of the dimensions are used by Ranked Input Settings.
  • Added support for Custom Query for Settings
  • Diagnostics and logging
    • You can now enable Data Flow Item Tasks to emit information to the log about execution time
    • New set of Data Flow Item task functions for custom logging
  • Added performance tuning options to Transaction Pipeline, Simulation DFI Task and DFI Output component.
    • You can now specify a Delete Batch Size for Transaction Pipeline outputs that makes the Transaction Pipeline delete old transactions in smaller batches rather than in a single large batch. This can reduce the chance of getting lock escalations on the target database table, which prevents other processes accessing the table. The delete batch size can be overridden in the TransactionPipeline Data Flow Item task.
    • You can now specify an Output Batch Size for Transaction Pipeline outputs that makes the Transaction Pipeline write rows to the database in smaller batches. As with the Delete Batch Size, this can reduce the chance of getting lock escalations on the target database table.
    • DFI Task Profitbase.InVision.Simulation.DeleteFromTargetTable now accepts a deleteBatchSize argument that makes simulation engines delete old rows in batches.
    • Financial simulation data flows now accepts an Output Batch Size argument which makes the financial simulation engines save rows in smaller baches.


  • Checkbox toggling in Setting Lists TOC now works in IE
  • Fixed issue when browsing data from views having a mix of tables with and without primary keys returned only a partial result set.
  • Fixed bug where changes made to the Filters configuration for Settings were not saved
  • Fixed bug where Settings having multiple filters returned an incorrect result when Wildcard mode was enabled
  • Fixed bug where deleting a Store Column with comments enabled did not delete the associated comment column.
  • Changed behavior so that reading from an Archive Data Store for a Workflow version which has not been archived, will not fail because no Time Frame information exists.
  • Fixed bug in the Eaze parser which caused formulas with function calls ending with two closing parenthesis to produce incorrect results
  • Fixed bug where adding multiple users to a User Group caused an error message to be displayed, even though the operation succeeded.


  • The Designer should no longer be started using the /main path. Just use http://<host>/<instanceNameDesigner>
  • The syntax for accessing Time Frame Column date information in Worksheet Eaze formulas has changed from $[column_name.Date] to @Property[column_name.Date], because $[…] is not valid Eaze syntax for variables or objects. ($[column_name.Date] was the syntax used in InVision 1.0, before Eaze was introduced).
    Note that the mvt tool will automatically convert from the old to the new syntax when doing an upgrade.

Version 2.0, 2.0.1 and 2.1 has brought a lot of new features, and we have many new features planned for future versions. However, we also need to start moving the InVision Designer off of the Silverlight platform, and that’s what we’ll be starting working on now. This does not mean that there won’t be coming new 2.x versions with new features, it just means that each 2.x release will contain fewer new features, since porting the software to a new platform will require a lot of resources. With the designer ported to a new platform, we’ll have an even better product with new capabilities and possibilities.

-The InVision Team