Intents
Overview
Available since Glue42 Enterprise 3.9
The Intents API is accessible through the glue.intents
object.
See the JavaScript Intents example on GitHub.
Finding Intents
To find all registered Intents, use the all()
method:
const allIntents = await glue.intents.all();
To get a collection of all Intents that fit certain criteria, use the find()
method:
// The `find()` method returns an array of `Intent` objects.
const intents = await glue.intents.find("ShowChart");
const showChartIntent = intents[0];
The find()
method accepts a string or an IntentFilter
object as an optional argument. The IntentFilter
has the following optional properties:
Property | Type | Description |
---|---|---|
name |
string |
Name of the Intent for which to search. |
contextType |
string |
The type of pre-defined data structure with which the Intent handler works. |
resultType |
string |
The type of pre-defined data structure which the Intent handler returns. |
If no filter is supplied, find()
returns all registered Intents.
Raising Intents
To raise an Intent, use the raise()
method:
await glue.intents.raise("ShowChart");
The raise()
method accepts an Intent name as a string or an IntentRequest
object as a required argument. The only required property of the IntentRequest
object is intent
which must specify the name of the Intent to be raised.
The IntentRequest
object has the following properties:
Property | Type | Description |
---|---|---|
context |
object |
Context data that will be provided to the Intent handler. |
handlers |
object[] |
Collection of Intent handlers that can be presented to the user via an Intents Resolver UI. If there isn't an Intents Resolver app available (or if the list consists of only one handler), the first member of the collection will be used as an Intent handler. |
intent |
string |
Name of the Intent to raise. |
options |
object |
ApplicationStartOptions object that will be passed to a newly started app instance, if such is to be used as an Intent handler. |
target |
"startNew" | "reuse" | { app?: string; instance?: string } |
Target for the raised Intent. Use "startNew" to start a new instance of the first available Intent handler. Use "reuse" to reuse the first available running instance of an Intent handler. Will fall back to "startNew" if there are no running instances available. Use an object with optional app and instance properties to target specific apps or app instances. The app property accepts an app name, the instance property - an ID of a running app instance. Provide a value for the app property to start a new instance of a specific Intent handler app. Provide a value for the instance property to reuse a specific running instance of an Intent handler. If both app and instance are set, instance will take precedence. |
timeout |
number |
Interval in milliseconds to wait for the raise() method to resolve when raising an Intent. Defaults to 90000 . |
waitUserResponseIndefinitely |
boolean |
If true , the framework will wait for the user to choose a handler for the raised Intent from the Intents Resolver UI before starting the timeout specified in the timeout property of the Intent request. Otherwise, the timeout will start when the raise() method is invoked. Defaults to false . |
Targeting Intent Handlers
To target which apps or running instances will handle a raised Intent, you can use the handlers
and/or target
properties of the IntentRequest
object.
- using the
target
property:
The target
property allows you to specify whether a new instance of an Intent handler app is to be started, or an already running instance is to be reused for handling the Intent.
The following example demonstrates using the target
property of the IntentRequest
object:
const intents = await glue.intents.find("ShowChart");
const showChartIntent = intents[0];
const intentHandler = showChartIntent.handlers[0];
const intentRequest = {
intent: "ShowChart",
target: { app: intentHandler.applicationName }
};
await glue.intents.raise(intentRequest);
The target
property of the IntentRequest
object accepts the following values:
Value | Description |
---|---|
"startNew" |
Will start a new instance of the first available Intent handler. |
"reuse" |
Will reuse the first available running instance of an Intent handler or will fall back to "startNew" if there are no running instances available. |
{ app?: string, instance?: string } |
An object with optional app and instance properties. The app property accepts an app name, the instance property - an ID of a running app instance. Provide a value for the app property to start a new instance of a specific Intent handler app. The app name is available in the applicationName property of the IntentHandler object. Provide a value for the instance property to reuse a specific running instance of an Intent handler. The ID of an Intent handler instance is available in the instanceId property of the IntentHandler object. If both app and instance are set, instance will take precedence. Using this targeting option gives you full control over the choice of an appropriate Intent handler. |
The default value for the target
property is "startNew"
when the Intent has been defined in an app configuration. If the Intent has been registered dynamically, the default value is "reuse"
.
To determine whether an Intent handler is an app or an already running instance, use the type
property of the IntentHandler
object, which will be set to "app"
or "instance"
respectively.
Note that in order for the running Intent handler instance to be registered as type "instance"
, the app must use the register()
method in its code to handle context updates (see Handling Context Updates) or to register an Intent at runtime (see Registering Intents at Runtime). Otherwise, the running Intent handler instance will be of type "app"
.
- using the
handlers
property:
The handlers
property allows you to pass directly an array of IntentHandler
objects to be used for handling the Intent and provides more flexibility when targeting Intent handlers. For instance, you can filter them by context type or result type before attaching them to the Intent request:
const intents = await glue.intents.find("ShowChart");
const showChartIntent = intents[0];
// Filtering the handlers by context type.
const handlers = showChartIntent.handlers.filter(handler => handler.contextTypes.includes("Instrument"));
const intentRequest = {
intent: "ShowChart",
handlers
};
await glue.intents.raise(intentRequest);
- using a combination of both properties:
When using the target
and handlers
properties of the IntentRequest
object in a combination, you must take into consideration that the target
property takes precedence over the handlers
property.
The following table demonstrates what the resulting behavior would be for various combinations between the target
and handlers
properties:
Value/App/Instance for target |
Apps/Instances for handlers |
Targeted Intent Handler |
---|---|---|
undefined |
App-A, App-B | New instance of App-A |
undefined |
App-A, App-B, Instance-A, Instance-B | Reuse Instance-A |
"reuse" |
App-A, App-B | New instance of App-A |
"reuse" |
App-A, App-B, Instance-A, Instance-B | Reuse Instance-A |
"startNew" |
App-A, App-B | New instance of App-A |
"startNew" |
App-A, App-B, Instance-A, Instance-B | New instance of App-A |
{ app: "App-A" } |
App-A, App-B | New instance of App-A |
{ app: "App-A" } |
App-A, App-B, Instance-A, Instance-B | New instance of App-A |
{ app: "App-A" } |
App-B, Instance-A, Instance-B | New instance of App-A |
{ instance: "Instance-B" } |
App-A, App-B, Instance-A, Instance-B | Reuse Instance-B |
{ instance: "Instance-B" } |
App-A, App-B, Instance-A | Reuse Instance-B if such is found within the Glue42 framework and it's registered as an Intent handler, otherwise - throw an error. |
Context
Passing Initial Context
To pass initial context to the Intent handler, use the context
property of the IntentRequest
object. It accepts an IntentContext
object as a value:
const intentRequest = {
intent: "ShowChart",
target: "startNew",
context: {
type: "Instrument",
data: {
// Context for the started app.
RIC: "MSFT"
}
},
// Specify app start options for the Intent handler.
options: {
width: 300,
height: 200
}
};
await glue.intents.raise(intentRequest);
The type
property of the IntentContext
object is required and specifies the structure of the context object. The data
property is the actual data to be passed to the Intent handler.
The options
property of the IntentRequest
object is used to pass custom ApplicationStartOptions
to the Intent handler.
Handling Context Updates
To handle the context data passed when an Intent is raised and targeted at your app, use the register()
method. It has two required parameters - an Intent name and a context handler definition:
// Context handler definition.
function contextHandler (context) {
// Check the context type.
const contextType = context.type;
if (contextType === "Instrument") {
// Extract the context data.
const data = context.data;
// Аpplication specific logic for handling the new context data.
};
};
await glue.intents.register("ShowChart", contextHandler);
Registering Intents at Runtime
To register an Intent at runtime, use the register()
method. Besides an Intent name, this method also accepts an object describing an Intent as a first required parameter:
// Intent definition.
const intent = {
intent: "ShowChart",
contextTypes: ["Instrument"],
displayName: "Fidessa Instrument Chart",
icon: "https://example.com/resources/icon.ico"
};
// Context handler.
function contextHandler (context) {
// Check the context type.
const contextType = context.type;
if (contextType === "Instrument") {
// Extract the context data.
const data = context.data;
// Аpplication specific logic for handling the new context data.
};
};
await glue.intents.register(intent, contextHandler);
Note that when you register an Intent only at runtime (the Intent isn't defined in an app configuration), your app must be running in order to handle the Intent, and it will always be of type "instance"
. If your app isn't running when this Intent is raised, it won't be available as a possible Intent handler.
Reference
For a complete list of the available Intents API methods and properties, see the Intents API Reference Documentation.