Exago Logo
Search
Generic filters
Exact matches only

Custom Functions

This article applies to the Admin Console > TreeData.png Extensions TreeFunction.png Functions settings.


Exago comes with a number of functions that can be used to make formulas in the Formula Editor. Administrators may create additional custom functions using high level coding languages which will be accessible to end-users of the Report Designer. Functions can be added to a preexisting folder or a function can be put into a new custom folder.

Custom Functions can be written in C#, VB.NET, or JavaScript (Windows only). Functions can take as many input arguments as needed.

Functions can get and set elements of the current session state of Exago such as Parameter values. See SessionInfo for more information.

Create, Edit, Delete, Restore Custom Functions

  • To add a new custom function click TreeData.png Extensions > TreeFunction.png Functions in the Main Menu and either:
    • click the Add + icon at the top of the main menu
    • right-click and select + Add from the context menu
  • To edit a function either:
    • double click it
    • select it and click the Edit pencil icon at the top of the main menu
    • right-click it and select pencil Edit from the context menu
  • To delete an object either:
    • select it and click the Delete AdminDelete.png icon at the top of the main menu
    • right-click it and select X Delete from the context menu
  • To restore the default custom functions that come with the application either:
    • right-click TreeData.png Extensions > TreeFunction.png Functions in the Main Menu and select RefreshSmall.png Restore All Formula Functions from the context menu
    • General > TreeGeneralNode.png Filter Settings > Restore All Default Formula Functions and click on the Refresh.png Restore button.
  • To save changes and new functions click the Apply or Okay buttons

Custom Function Properties

Each Custom Function has the following properties.

Name

A name for the function that will be displayed to the end users. Required.

Description

A description of the function that will be displayed to the end users.

Note

To support multi-language functionality, you can supply an Id from a language file instead of a static string. For more information, see Multi-Language Support.

Minimum Number of Arguments pre-v2017.2

The minimum number of values that an end user must enter in the function separated by commas.

Maximum Number of Arguments pre-v2017.2

The maximum number of values that an end user may enter in the function separated by commas.

Note

Arguments are passed to the code as an array of generic objects, accessed as args[ ].

Category

A way of grouping similar functions. You can assign custom functions to an existing Exago category or create a new category.

To create a new category:

  1. For all applicable language files, add a new language translation ID for the new category name. The element ID must begin with FormulaEditor and end with Node. For example:
     <element id="FormulaEditorVeryCoolFunctionsNode">Very Cool Functions</element>
  2. Select Other from the Category dropdown list.
  3. An input field entitled Specific Category Name will appear. Enter the language file ID created in step 1.

The language filed ID is provided in the Specify Category Name (Optional) field


Formula Editor dialog showing the custom category name Very Cool Functions

Important

Providing a static text string that does not match a language file ID for the Specify Category Name (Optional) field is not valid.

Return Type v2018.2.6+

A return type must be specified for each Custom Function. This field can be defined as a String, Integer, Decimal, or Date, and determines the expected return type of each function.

Prevent In-Database Grouping When Included in Detail Section v2019.1.5+

You may use this flag to specify whether this function has side-effects and should disqualify including reports from aggregating in the database (thus skipping the function when in a suppressed Detail section). For example, most functions that build or manipulate memory storage with Get/SetStoredValue should have this flag set to true.

Language

The high-level language of the code for the function. Can be C# or VB.NET, or JavaScript (Windows only).

References

A semicolon-separated list of any DLLs that need to be referenced by the Custom Function. The DLLs must be present in the bin folder of the Exago Web Application, Scheduler Services, and the Web Service API if applicable. This folder can be found in the installation directory of the respective component.

Tip

System.dll does not need to be listed as a reference as it is already available.

Namespaces

A semicolon-separate list of any namespaces that need to be referenced by the Custom Function.

Program Code

The program code for your Custom Function. Press the green check mark to verify the code executes properly. Required.

Note

To use a .NET Assembly for custom functions, first add it to the applicable bin folders. Then add the assembly as a reference in the Custom Code window, and invoke the method, e.g., return Extensions.Functions.DayBefore(args);.

Arguments

Starting with version v2017.2 there are several enhancements to the way function arguments are implemented and used.

Click Edit Argument Info to show a dialog for managing arguments. Then click Add Argument for each argument the function will have. Arguments have the following properties:

Name

The name of the argument, which will appear as a placeholder in the function parentheses and in the function’s description tooltip.

Description

A description for what the argument is used for. You should mention the expected data type, if it is not obvious. This will appear in a tooltip when the placeholder name is selected.

Can also be a language file ID.

Optional

Whether this argument is required or optional. Optional arguments are surrounded by brackets [ ] in the function’s description tooltip.

Variable Argument Count

If selected, the last argument in the list accepts more than one value. Variable arguments are followed by an ellipsis (…) in the function’s description tooltip.

Exago Session Info

Custom Functions can access the Exago session state through a “sessionInfo” object. Access to sessionInfo allows powerful new capabilities such as the ability to persist values across function invocations, allowing each invocation to be aware of previous calls and behave accordingly.

Note

sessionInfo can also be accessed in Server Events, Action Events, and Assembly Data Sources.

Properties

PageInfo

This is the parent of all information in the current session. Included is the active Report and SetupData objects.

Note

Since the Report and SetupData objects are accessed frequently, direct pointers are included for these objects.

Report

An object that contains all of the report’s Data Object, sort, filter, and layout information.

SetupData

An object that contains all of the session’s configuration setting including Filters, Parameters, Data Objects, Joins, Roles, etc.

CompanyId

A direct pointer to the companyId Parameter value.

UserId

A direct pointer to the userId Parameter value.

Methods

GetReportExecuteHtml(string reportName)

A method that executes the specified report and returns its html output. This could be used to embed a report within a cell of another report.

Note

The reportName is relative to the session’s report path.

GetParameter(string parameterName)

A method that returns the specified Parameter Object. ‘GetParameter’ first looks in the Report Parameter collection, parameters being utilized by the report, and then in the Config Parameter collection, as well as other parameters such as hidden parameters or multi-tenant values.

GetReportParameter(string parameterName)

A method that returns the specified Parameter object that is utilized by the report being executed.

GetConfigParameter(string parameterName)

A method that returns the parameter object stored in the default configuration.

WriteLog(string text)

A method that writes the specified text to the Exago log file.

Note

The following methods utilize Stored Values which are objects that can be created and set by custom functions during report execution to pass data between custom function calls. Stored Values only exist for the duration of report execution.

GetStoredValue(string valueName, [object initialValue = null])

A method that retrieves a Stored Value. If a there is no Stored Value with the specified valueName, then one will be created with the specified initialValue.

SetStoredValue(string valueName, object newValue)

A method that sets the value of a Stored Value. Passing ‘null’ to newValue will delete the Stored Value.

Calling Exago Functions

Cases may arise where you want to call an existing function within your Custom Function. Using the class CellFormula and returning the method CellFormula.Evaluate().

Default Custom Functions v2017.2+

Exago BI ships with several built-in custom functions in v2017.2+. These are functions that are common in many reporting environments, but the manner in which they work may be different depending on locality, time zone, or other factors. For this reason, these functions have been exposed in the Admin Console so that administrators may change how they work.

Note

If these functions are unavailable, such after an upgrade, in the Admin Console navigate to General > Filter Settings > Restore All Default Formula Functions and click on the Refresh.png Restore button.

The following custom functions ship with Exago BI:

MonthName

Description Given a date value, returns the name of the month of that date. The month name is retrieved from the active language dictionary. For example, given the date “01/01/2017”, MonthName() will return “January” in an English-speaking environment, and “Enero” in a Spanish-speaking environment.
Arguments
  • inputDateOrNumber: A formatted date string, a Date or DateTime value, or an integer value. Required.
References
  • mscorlib.dll
Example These examples are in an English-speaking environment:
MonthName("02/29/2020")
February

MonthName(3)
March

MonthName(1989-07-06 22:19:21)
July

QuarterName

Description Given a date value, returns the fiscal quarter of the date, as “Q1”, “Q2”, “Q3”, or “Q4”. By default, Q1 encompasses January 01 – March 31, Q2 encompasses April 01 – June 30, Q3 encompasses July 01 – Sept 30, and Q4 encompasses Oct 01 – Dec 31. But since different countries or financial landscapes may use different systems of quarters, the behavior of the function is exposed and customizable.
Arguments
  • inputDate: A formatted date string, Date value, or DateTime value. Required.
Example QuarterName("02/29/2020")
Q1

QuarterName(1989-07-06 22:19:21)
Q3

QuarterNumber

Description Given a date value, returns the fiscal quarter of the date, as “1”, “2”, “3”, or “4”. By default, Q1 encompasses January 01 – March 31, Q2 encompasses April 01 – June 30, Q3 encompasses July 01 – Sept 30, and Q4 encompasses Oct 01 – Dec 31. But since different countries or financial landscapes may use different systems of quarters, the behavior of the function is exposed and customizable.
Arguments
  • inputDate: A formatted date string, Date value, or DateTime value. Required.
Example QuarterNumber("02/29/2020")
1

QuarterNumber(1989-07-06 22:19:21)
3

Was this article helpful?
0 out of 5 stars
5 Stars 0%
4 Stars 0%
3 Stars 0%
2 Stars 0%
1 Stars 0%
How can we improve this article?
Please submit the reason for your vote so that we can improve the article.
Table of Contents