Notifications

52 views

Description

When Flow Designer is used to integrate with external applications, such as sending outbound SOAP/REST calls to a third-party application, user needs to activate IntegrationHub plugin to use the corresponding flow action in Flow Designer. This is documented in below docs link already.
https://docs.servicenow.com/bundle/madrid-servicenow-platform/page/administer/flow-designer/concept/flow-designer.html
=================================
You can expand the Flow Designer solution to integrate with external instances and third-party applications with a separate subscription to IntegrationHub.
=================================

In some cases Flow Designer itself does not make the outbound call directly but user can still observe license error created in the system log asking for IntegrationHub subscription. Below is a sample error message.

Root cause of JavaScriptException: com.glide.sys.OutboundRequestValidator$LicensingError
: com.glide.sys.OutboundRequestValidator$LicensingError: No IntegrationHub plugin is available, external calls from the Flow Designer requires IntegrationHub subscription

In this article, we will see some typical scenarios to show this issue and several solutions to resolve this error.

 

Steps to reproduce:

(All artifacts created are in global application scope)

1.Create an outbound REST message for test. The free 3rd-party "jsonplaceholder" REST service being used will return a simple JSON formatted text message.

2.Create a test flow named as "test_outboundrest" in Flow Designer. This flow only contains two simple actions to output two system log messages. There is no outbound REST logic in it.

3.Create a script include "testOutboundRestMsg" as below. In the intialize function it uses sn_fd_FlowAPI.executeFlow() function to call the flow created in step 2. It has another main function in which it calls another getOutboundRESTrst() function to send the outbound REST request.

4.Run this script include via below the background script

var tstORM = new testOutboundRestMsg();

tstORM.main();

5.Now below license error is output in the system log. It says there is no IntegrationHub plugin available. However, there is no outbound call in the flow.

 

Note 1: The same license error occurs if you create below subflow "test_outboundrestsubflow" and use sn_fd_FlowAPI.executeSubflow() function to call it in the script include.
This is because both executeFlow() and executeSubflow() functions will run flow synchronously in the same transaction.


 

Note 2: In the getOutboundRESTrst() function of the script include, if using executeAsync() function to send the RESTMessageV2 call asynchronously it also does not solve this license error. It seems the REST call is still running in the same transaction with the flow.

Release or Environment

Kingston and above releases

Cause

This is because when using Flow designer, ServiceNow core Java code checks if REST messages are being sent from within the same Java thread as the flow.
If so then Integration Hub plugin should be installed (which costs money) otherwise the REST call would be blocked. This is all hard-coded logic in ServiceNow platform.

Resolution

Solution 1: Call the flow via sn_fd_FlowAPI.startFlow() function in the initialize function of the script include as below, this will make sure the flow is running asynchronously.

Correct REST response and log messages in flow will be output in the system log as below.

For subflow you can use sn_fd_FlowAPI.startSubflow() function to call it asynchronously as below.

Correct REST response and log messages in flow will be output in the system log as below.

 

Solution 2: Move the RESTMessageV2 call from the script include to a separate business rule and it will run in a separate transaction which could solve the license error.

Article Information

Last Updated:2019-10-29 16:14:28
Published:2019-10-29