Skip to content

Changes in version 2.4

This version introduces four larger changes (trusted documents, context menus, app settings and project resources) and several bugfixes.

There are no breaking changes introduced with this version. Apps compiled with older versions of the IDE should run fine with the new version of the runtime. Also, app compiled with the new version of the IDE should run fine with the previous versions of the runtime. However, upgrading to this version of the runtime is strongly advised given the security considerations covered in the "Trusted documents" section of this document.

Trusted documents

Until now, when opening a workbook, the runtime would check if it contained a workbook app, and would immediately run it if it does. This poses a significant security risk, as the code in the workbook might be malevolent and the user is not even informed that the code is being executed. This was not a priority so far given the modest number of QueryStorm users, but since we now offer a free version, the number of users is growing more rapidly and this has become a priority.

This version prompts the user to confirm that they trust the workbook before allowing it to run.

Trust prompt

Once a workbook app is trusted, the user will not be prompted again for that same workbook app.

Context menus

Context menus can now be defined much more easily compared to using the native Excel API for context menus (i.e. CommandBars). Commands like the ones ones shown in the image below can be defined with just a few lines of code.

Context menu example

To define a context menu, use the "Add->Context command class" item:

Add new context menu

This will scaffold a class that defines a simple context menu command:

Scaffolded context menu

To define the look and feel of the command, use the arguments provided to the base class's constructor. To define the behavior of the command, simply implement the Execute method.

Check out the docs for more in-depth information on context menus.

App settings

Apps can now define settings much more easily simply by creating a class that exposes the configuration properties and decorating the properties with the appropriate attributes.

A new context menu command has been added for creating a settings class:

Add settings class

This creates an example settings class:

1
2
3
4
5
6
7
8
public class Settings1 : ISettings
{
    [Trackable, Editable]
    public int MyProperty1 { get; set; } = 10;

    [Trackable, Editable]
    public string MyProperty2 { get; set; } = "Sample text";
}

The example settings object is displayed like this:

Example settings

For more information on settings, check out the docs.

Function caller information API

The runtime now passes in a new IFunctionContextAccessor interface that lets functions get a reference to the calling workbook.

1
2
3
4
public interface IFunctionContextAccessor
{
    Workbook CallingWorkbook { get; }
}

An example where this interface is used is the Windy.Query function to allow it to see Excel tables from the workbook where the function call originates from.

Previously, functions could use the IWorkbookAccessor for this, but other services relied on that interface behaving differently (i.e. it must return the active workbook for extension apps, owning workbook for workbook apps) so we've now define a separate interface that allows functions to reference the workbook that called them.

Adding resource files

Local files can now be added to a project as resources:

Adding local file

For more information, click here.

Misc

  • Added XML docs for QueryStorm.Apps.dll
  • Added a ResourcesHelper class for reading embedded resources
  • Fixing issue with dialogs not appearing after first workbook is closed
  • Added proxy configuration options in the licensing prompt
  • Fixing various issues related to function parameters and return values
  • Allowing enums as function parameters
  • Allow double-click on warning messages (go to source)
  • Fix completion window location issue when on non-primary display with different DPI