InVision 2.3.0 Released

A new release of InVision is ready, and it contains some new very useful features and enhancements. Check them out below.

The most powerful new feature added this time is probably the ability to easily embed custom JavaScript computation libraries that can be used in spreadsheet formulas, where each spreadsheet gets its own compute instance. This enables you to write very advanced calculations for spreadsheets.

NEW features

  • You can now trigger the Recalc action on Report Workbook components. This is useful in cases when you create form input screens, and needs to display the calculated result of the form input data in spreadsheet reports.
  • New instruction Debounce(delay : number | boolean) that can (and should) be called in Recalc actions (Worksheet, Reports and Settings) so that the actual recalculation can be debounced / throttled which in turn may improve the responsiveness of the application.
  • Framework support for using custom JavaScript libaries to do all spreadsheet calculations. You can now specify a compute instance configuration along with your formulas. The compute instance configuration specifies a factory function and the resources (for example settings) required by the compute instance to do the calculations.
    You previously had the option of using custom JavaScript functions to do complex computations, but this features had two issues:

    1. Although technically possible, it was not trivial to create a compute instance that was local to the spreadsheet and kept its state between each recalc execution of the row set. This meant that if your calculations depended on other resources, (such as Settings), you would have to recreate the lookup structures for each recalc. This could significantly impact the performance of the whole application and degrade the user experience.
    2. Using other resources in calculations (such as Settings) was cumbersome, because you would have to add them to the Workbook as components and load them (with the correct filtering) before the spreadsheet was loaded and calculated.
  • You can now access the entire collection of rows returned from a Script in a workbook through the @Var[“script name”].ALL_ROWS property. This is useful when you need to do (complex) client side calculations with JavaScript using a data set that is not available through a Setting table or Worksheet currently loaded to the Workbook.
  • For Report and Setting spreadsheets, you can now configure which built-in Context Menu options should be available to the end user.
  • New general purpose Input Workbook Component supporting the following modes (note that not all browsers may support them all)
    • Text
    • Number
    • Email
    • Url
    • Checkbox
    • Date
    • Time
    • Week
    • Month
    • DateTime
  • New File Upload Workbook Component
  • New File Download Workbook Action
  • Support for specifying an ImageUrl property on the Button Workbook Component, so a button can now display text, image and text or just an image.
  • Ability to turn off application dirty state tracking for individual Worbook Components, so that the user won’t get prompted when trying to leave the application (Workbook) when the component has unsaved changes. This feature is especially useful when you’re using a Drop Down form element as a filter, and don’t intend to save the selected value to the database. This feature can be toggled by the Dirty State Tracking property for Form Elements, Worksheets and Settings components in the Workbook designer.
  • Added new Eaze functions GetCallContextRow() and IsSummaryRow(row) that makes it easier to target the native summary row in spreadsheets. A typical use case is when you want to apply a custom style to the summary row.
    SetRowStyle(IsSummaryRow(GetCallContextRow()), "my-summary-row-style");


  • The dialog for adding users from Active Directory has been changed so that the list of users and groups are not loaded until you enter a search criteria (first name, last name etc). This makes finding and adding users to an InVision User Group much faster, because it does not load the entire AD structure upfront.
  • When loading Dimensions and Facts from a Profitbase Studio DW database located on a different SQL Server than the InVision database, InVision will now look for an existing linked server before attempting to create one on its own. InVision will look for a linked server with the same name as the InVision data connection of the dimension or fact. So if you have create a Data Connection named “sqlserver1”, InVision will look for a linked server called “sqlserver1”.
    This feature is important when the Worker service cannot be granted sys admin permissions on the SQL Server, which is required for creating linked servers.
  • Search filters, such as SearchBox and TextBox filters, will now use the column specified as the Description column in the filter definition to match against the filter criteria – if no custom Text Search column is specified.
  • The HasUnsavedData event (Worksheets, Settings and Form Elements) has been renamed to DataModifiedEvent and had its behavior slightly changed. It is now raised every time the user modifies the contents of the spredsheet or form element, instead of just when the state transitioned from non-dirty to dirty. The event argument can now be examined through the @Event.Data.DirtyStateChanged property to determine whether the state transitioned from the non-dirty to dirty state.
  • The default size applied when creating a Page Popup is now 70 percent of the browser window height and width, instead of 700×500 px.
  • In addition to specifying dynamically displayed contents of Label Workbook components using the SetText(…) function in the Text property, you can now also specify it in the UpdateText action using one of the following ways:
    [Label Name].Text = "the text"; 
    // for example 
    LBL_CustomerName.Text = Filter("Filters", "Customers").SelectedValue.Description;


    SetText("the text");
    // for example

FIXED issues

  • Closing a page popup view will now reset the active page info to the currently active normal page, so that functions such as IsHostPageActive(), GetActivePage() and GetActivePageName() returns the expected result.
  • Fixed an issue with rendering of Tree View Filters that caused some dimension members to not be displayed.
  • Fixed an issue with cell calculations and styling for Reports having data sets with equal names.
  • Fixed issue that caused Unbound Columns in Worksheets to cause an error when used in Stacked Headers
  • Fixed issue that caused an error when drag and dropping a column onto the Data Store column list from a store source with transformation enabled.
  • Fixed issue that caused Workbook Pages to not act as checked out when added to Workbooks with concurrency control enabled.

INSTALLING InVision 2.3.0

  1. Download and install the latest version of Profitbase Installation Manager.
  2. Run Profitbase Installation Manager and install a new instance of InVision.

UPGRADING to InVision 2.3.0 from 2.1.x or above
When upgrading to 2.3.0 from 2.1.x, you need to:

  1. Download and install a new version of the Profitbase Installation Manager.
    Note! You should not uninstall the previous version, it will automatically upgrade itself when you run the .exe.
  2. Run Installation Manager, select the installed instance you want to upgrade and hit ‘Upgrade’.

UPGRADING to InVision 2.3.0 from versions prior to 2.1.0
All versions starting from 2.1.0 share the same upgrade routines.
The release notes for version 2.1 contains detalis on how to upgrade from 1.0 and 2.0 to 2.1.x.

– The Cloud and Applications Team