IBQConfigBase API - Scoped
Script include that must be extended for Sales Customer Relationship Management Request Tracker to track the requests. This script include provides overridable methods that define how requests should be executed.
The Sales and Service API Core (com.sn_tmt_core) plugin must be activated for IBQConfigBase script include to be available in an instance. This script include belongs to the sn_tmt_core
namespace and requires the admin role.
Extending the IBQConfigBase API
Define a script include with the overridable methods of the IBQConfigBase API.
- Create a script include. The name must start with IBQConfig, for example, IBQConfigQuoteToOrderFlowSNC.
- Extend the IBQConfigBase API.For example:
IBQConfigQuoteToOrderFlowSNC.prototype = Object.extendsObject(sn_tmt_core.IBQConfigBase, { ... }); - Override any necessary methods provided by the IBQConfigBase API.For example:
getRunMode: function(inboundQueueParams) { return this.quoteUtil.getQuoteSize(inboundQueueParams.source_record_ids, this.threshold); }, generateParentRecord: function(inboundQueueParams, additionalParams, context) { var result = ""; var entityMappingGr = this.getMapingConfigIdFromSysId(inboundQueueParams.requested_flow); var sourceToTargetConfigID = entityMappingGr.getValue("mapping_config_id"); var sourceHeaderId = inboundQueueParams.source_record_ids; if (gs.nil(inboundQueueParams.requested_flow)) throw "sourceToTargetConfigID cannot be null"; if (gs.nil(inboundQueueParams.source_record_ids)) throw "source record id cannot be null"; var util = new sn_l2c_core.PrimitiveUtil(); if (gs.nil(additionalParams)) additionalParams = {}; additionalParams[this.SKIP_LINES_KEY] = "true"; }, processInboundQueueRequest: function(inboundQueueGR) { gs.info("processRequest inboundQueueGR " + JSON.stringify(inboundQueueGR)); var result = this.quoteUtil.createOrderFromQuoteUsingMetadata(inboundQueueGR.getValue('source_record_ids'), 'sn_l2c_quote_to_order', null, null, inboundQueueGR.getValue('record_id')); return result; } - Create a new metadata entry in Inbound Request Configuration [sn_tmt_core_inbound_queue_config] table to define how a request should be processed.
- Link the script include created to the configuration_api field of metadata record to use the custom logic defined while processing the request. The script include is referenced in the configuration_api field while creating Inbound Request Configuration metadata.
Use case: IBQConfigQuoteToOrderFlow
var IBQConfigQuoteToOrderFlowSNC = Class.create();
IBQConfigQuoteToOrderFlowSNC.prototype = Object.extendsObject(sn_tmt_core.IBQConfigBase, {
initialize: function() {
this.quoteUtil = new sn_quote_mgmt.OrderIntegration();
this.SKIP_LINES_KEY = "skipLines";
this.threshold = 15;
},
getRunMode: function(inboundQueueParams) {
return this.quoteUtil.getQuoteSize(inboundQueueParams.source_record_ids, this.threshold);
},
generateParentRecord: function(inboundQueueParams, additionalParams, context) {
var result = "";
var entityMappingGr = this.getMapingConfigIdFromSysId(inboundQueueParams.requested_flow);
var sourceToTargetConfigID = entityMappingGr.getValue("mapping_config_id");
var sourceHeaderId = inboundQueueParams.source_record_ids;
if (gs.nil(inboundQueueParams.requested_flow))
throw "sourceToTargetConfigID cannot be null";
if (gs.nil(inboundQueueParams.source_record_ids))
throw "source record id cannot be null";
var util = new sn_l2c_core.PrimitiveUtil();
if (gs.nil(additionalParams))
additionalParams = {};
additionalParams[this.SKIP_LINES_KEY] = "true";
// additional parameters are retrieved using the PrimitiveUtil() utility methods provided by the Lead to Cash Core application
var service = util.getPrimitivesEPService(sourceToTargetConfigID, context);
var isEmpty = false;
if (service) {
var createInstanceOutput = service.createInstance(sourceHeaderId, null, false, additionalParams);
if (gs.nil(sourceHeaderId))
isEmpty = this.__isEmpty(createInstanceOutput.lineItems);
else
isEmpty = this.__isEmpty(createInstanceOutput);
if (!isEmpty) {
var effectOutput = service.effect(createInstanceOutput, null, additionalParams);
if (!this.__isEmpty(effectOutput)) {
var commitOutput = service.commitInstance(effectOutput, additionalParams);
return commitOutput;
}
}
}
return result;
},
processInboundQueueRequest: function(inboundQueueGR) {
gs.info("processRequest inboundQueueGR " + JSON.stringify(inboundQueueGR));
var result = this.quoteUtil.createOrderFromQuoteUsingMetadata(inboundQueueGR.getValue('source_record_ids'), 'sn_l2c_quote_to_order', null, null, inboundQueueGR.getValue('record_id'));
return result;
},
__isEmpty: function(sourceObj) {
if (gs.nil(sourceObj))
return true;
return Object.keys(sourceObj).length === 0;
},
getMapingConfigIdFromSysId(requestedFlow) {
var gr = new GlideRecord("sn_l2c_core_entity_mapping");
gr.addQuery("sys_id", requestedFlow);
gr.query();
if (gr.next()) {
gs.info("mapping id received to corresponding requestedFlow");
return gr;
}
},
type: 'IBQConfigQuoteToOrderFlowSNC'
});IBQConfigBase – generateParentRecord(Object ibqParams)
Creates a parent record which gets added to the record_id of the Inbound Request [sn_tmt_core_inbound_queue_list] record before processing the request.
Having a parent record created before processing is ideal for asynchronous processing and allows you to add activities to your script include that can be performed while processing. For example, displaying a message on the screen.
| Name | Type | Description |
|---|---|---|
| ibqParams | Object | JSON object containing the details of Inbound Request record to be created. |
| account | String | Optional. Information about the account associated with the record. Table: Account [customer_account] |
| consumer | String | Optional. Information about the consumer associated with the record. Table: Consumer [csm_consumer] |
| contact | String | Optional. Information about the contact associated with the record. Table: Contact [customer_contact] |
| payload | Object | Optional. JSON object needed to process the request using the PrimitiveUtil() API. For usage information, see LeadToCashCore. |
| payload.additionalParams | Object | Optional. Additional parameters to use. |
| payload.additionalParams.action | String | Optional. Specifies the type of declarative action being executed. For more information, see Customer Life Cycle Management Workflows. Possible values:
|
| payload.additionalParams.actionReason | String | Optional. Property used in flows using declarative actions. Reason for the action. |
| payload.additionalParams.endDate | String | Optional. End date required to execute flows using declarative actions. Format: yyyy-MM-dd HH:mm:ss |
| payload.additionalParams.skipLines | Boolean | Optional. Flag that indicates whether to fetch line items for the specified entity. Valid values:
|
| payload.additionalParams.startDate | String | Optional. Start date to execute flows using declarative actions. Format: yyyy-MM-dd HH:mm:ss |
| payload.context | Object | Optional. Additional parameter options for displaying attribute values and for invoking more than one instance at a time. |
| payload.context.isMultiSelect | Boolean | Optional. Flag that indicates whether to pass multiple entities as input to create the instance. Valid values:
|
| payload.context.sourceToTargetConfigID | String | Optional. Mapping configuration ID for the source-to-target mapping. Table: Lead To Cash Entity Mapping [sn_l2c_core_entity_mapping] |
| payload.inputParams | Object | Optional. This object is a placeholder for any input parameters required to invoke the usage of a specific flow. |
| payload.source | Array | Optional. JSON object containing details of the source entity to retrieve data from. |
| payload.source.headerId | String | Optional. Header sys_id of source entity to retrieve data from.
|
| payload.source.lineIds | Array | Optional. Array containing source line item sys_id(s) of an entity to retrieve entity data from. Required if you don't provide the header ID, and if the entity structure starts with line items such as sold product. |
| payload.target | Array | Optional. JSON object containing details of the target entity. |
| payload.target.headerId | String | Optional. Header sys_id of target entity to retrieve data from. Required if you don't provide the lineIds parameter. Pass null if you aren't passing any header sys_ids. |
| payload.target.lineIds | Array | Optional. Array containing target line item sys_id(s) of an entity to retrieve entity data from. Required if you don't provide header ID and if the entity structure starts with line items such as sold product. |
| record_id | String | Optional. Sys_id of the target record if already present. |
| requested_flow | String | Optional. Mapping configuration ID for source-to-target mapping. This property is required for flows using Entity configuration and mapping. Table: Lead To Cash Entity Mapping [sn_l2c_core_entity_mapping] |
| source_record_ids | Array | Array containing the sys_ids of the source records. |
| source_table | String | Name of the table that contains the source record of the flow. |
| table | String | Name of the table that contains the target record of the flow. |
| Type | Description |
|---|---|
| JSON object | A JSON object containing header ID of the target record created.
|
| headerID | Sys_id of the header of the target record created. This value is used to populate record_id field while creating the Inbound Request record. |
var ibqParams = {
"source_record_ids": "f83e29574df02210f877142d1adc9531",
"requested_flow": "0feb6d9da36271105c24939ef31e61dc",
"initiated_by": "admin",
"source_table": "sn_quote_mgmt_core_quote",
"table": "sn_ind_tmt_orm_order",
"payload": {}
};
var service = new sn_quote_mgmt.IBQConfigQuoteToOrderFlow();
var parentRecord = service.generateParentRecord(ibqParams);
gs.info("Parent record = "+JSON.stringify(parentRecord));
Parent record = {"headerID":"d11bd507dc6c6a10f877720033b5d0b9", ...} IBQConfigBase – getRunMode(Object ibqParams)
Determines whether a flow should run in sync or async mode.
| Name | Type | Description |
|---|---|---|
| ibqParams | Object | JSON object containing the details of Inbound Request record to be created. |
| account | String | Optional. Information about the account associated with the record. Table: Account [customer_account] |
| consumer | String | Optional. Information about the consumer associated with the record. Table: Consumer [csm_consumer] |
| contact | String | Optional. Information about the contact associated with the record. Table: Contact [customer_contact] |
| payload | Object | Optional. JSON object needed to process the request using the PrimitiveUtil() API. For usage information, see LeadToCashCore. |
| payload.additionalParams | Object | Optional. Additional parameters to use. |
| payload.additionalParams.action | String | Optional. Specifies the type of declarative action being executed. For more information, see Customer Life Cycle Management Workflows. Possible values:
|
| payload.additionalParams.actionReason | String | Optional. Property used in flows using declarative actions. Reason for the action. |
| payload.additionalParams.endDate | String | Optional. End date required to execute flows using declarative actions. Format: yyyy-MM-dd HH:mm:ss |
| payload.additionalParams.skipLines | Boolean | Optional. Flag that indicates whether to fetch line items for the specified entity. Valid values:
|
| payload.additionalParams.startDate | String | Optional. Start date to execute flows using declarative actions. Format: yyyy-MM-dd HH:mm:ss |
| payload.context | Object | Optional. Additional parameter options for displaying attribute values and for invoking more than one instance at a time. |
| payload.context.isMultiSelect | Boolean | Optional. Flag that indicates whether to pass multiple entities as input to create the instance. Valid values:
|
| payload.context.sourceToTargetConfigID | String | Optional. Mapping configuration ID for the source-to-target mapping. Table: Lead To Cash Entity Mapping [sn_l2c_core_entity_mapping] |
| payload.inputParams | Object | Optional. This object is a placeholder for any input parameters required to invoke the usage of a specific flow. |
| payload.source | Array | Optional. JSON object containing details of the source entity to retrieve data from. |
| payload.source.headerId | String | Optional. Header sys_id of source entity to retrieve data from.
|
| payload.source.lineIds | Array | Optional. Array containing source line item sys_id(s) of an entity to retrieve entity data from. Required if you don't provide the header ID, and if the entity structure starts with line items such as sold product. |
| payload.target | Array | Optional. JSON object containing details of the target entity. |
| payload.target.headerId | String | Optional. Header sys_id of target entity to retrieve data from. Required if you don't provide the lineIds parameter. Pass null if you aren't passing any header sys_ids. |
| payload.target.lineIds | Array | Optional. Array containing target line item sys_id(s) of an entity to retrieve entity data from. Required if you don't provide header ID and if the entity structure starts with line items such as sold product. |
| record_id | String | Optional. Sys_id of the target record if already present. |
| requested_flow | String | Optional. Mapping configuration ID for source-to-target mapping. This property is required for flows using Entity configuration and mapping. Table: Lead To Cash Entity Mapping [sn_l2c_core_entity_mapping] |
| source_record_ids | Array | Array containing the sys_ids of the source records. |
| source_table | String | Name of the table that contains the source record of the flow. |
| table | String | Name of the table that contains the target record of the flow. |
| Type | Description |
|---|---|
| String | Information about the run mode to be used to execute the request. Possible values:
|
async.var ibqParams = {
"source_record_ids": "04ba9004f11f3110f8777d7194f166f6",
"requested_flow": "0feb6d9da36271105c24939ef31e61dc",
"initiated_by": "admin",
"source_table": "sn_quote_mgmt_core_quote",
"table": "sn_ind_tmt_orm_order",
"payload": {}
};
var service = new sn_quote_mgmt.IBQConfigQouteToOrderFlow();
var runMode = service.getRunMode(ibqParams);
gs.info("RunMode = "+JSON.stringify(runMode));
RunMode = "async"var ibqParams = {
"source_record_ids": "0b0f5cc8f11f3110f8777d7194f16610",
"requested_flow": "0feb6d9da36271105c24939ef31e61dc",
"initiated_by": "admin",
"source_table": "sn_quote_mgmt_core_quote",
"table": "sn_ind_tmt_orm_order",
"payload": {}
};
var service = new sn_quote_mgmt.IBQConfigQouteToOrderFlow();
var runMode = service.getRunMode(ibqParams);
gs.info("RunMode = "+JSON.stringify(runMode));
RunMode = "sync"IBQConfigBase – processInboundQueueRequest(GlideRecord ibqGr)
Defines the logic for processing an inbound request record.
| Name | Type | Description |
|---|---|---|
| ibqGr | GlideRecord | GlideRecord reference to the Inbound Request record that has triggered the flow. Table: Inbound Request [sn_tmt_core_inbound_queue] |
| Type | Description |
|---|---|
| Object | A JSON object containing the processing details of the Inbound Request record. |
| error | Value indicating the error encountered while processing the request. Data type: String |
| response | A JSON object containing the response of processing the Inbound Request record. For flows created by the Lead to Cash Core PrimitiveUtil API, this output can be provided using the commitInstance() method. Data type: Object |
| status | Value indicating the status of the request processing. Possible values:
Data type: String |
| target | Optional. Sys_id of the target record to be used for further processing, such as UI acknowledgment. The target can either be created during the flow or can be passed as input to the ibqParams of the
generateParentRecord() method depending on the requirement. Data type: String |
var gr = new GlideRecord('sn_tmt_core_inbound_queue');
gr.get('c48ea9974df02210f877142d1adc951a');
var service = new sn_quote_mgmt.IBQConfigQuoteToOrderFlow();
var processRequest = service.processInboundQueueRequest(gr);
gs.info("processRequest = "+JSON.stringify(processRequest));
processRequest = {
"response": {
"status": "success",
"error": "",
"message": "Commit operation successfully processed.",
"displayMessage": "Commit operation successfully processed.",
"dataObject": {
"sys_id": "a6f4568bdce0aa10f877720033b5d069",
"table": "sn_ind_tmt_orm_order",
"attributes": {
"account": {
"value": "9e2fd2ee11b43110f877366201dea674"
},
"quote": {
"value": "c8841a4bdce0aa10f877720033b5d0f8"
}
},
"_glide_action": "UPDATE",
"_source_object": {
"sys_id": "c8841a4bdce0aa10f877720033b5d0f8",
"table": "sn_quote_mgmt_core_quote"
},
"lineItems": [
{
"sys_id": "-1",
"table": "sn_ind_tmt_orm_order_line_item",
"attributes": {
"short_description": {
"value": "Home Automation Bundle"
},
"account": {
"value": "9e2fd2ee11b43110f877366201dea674"
}
},
"_glide_action": "INSERT",
"_source_object": {
"sys_id": "afc4528bdce0aa10f877720033b5d0d0",
"table": "sn_quote_mgmt_core_quote_line_item"
},
"characteristics": [],
"lineItems": [
{
"sys_id": "-1",
"table": "sn_ind_tmt_orm_order_line_item",
"attributes": {
"short_description": {
"value": "Door Sensor"
},
"account": {
"value": "9e2fd2ee11b43110f877366201dea674"
}
},
"_glide_action": "INSERT",
"_source_object": {
"sys_id": "77c4528bdce0aa10f877720033b5d0d5",
"table": "sn_quote_mgmt_core_quote_line_item"
},
"characteristics": [],
"lineItems": [],
"pricingAdjustments": [
{
"sys_id": "-1",
"table": "sn_ind_tmt_orm_pricing_adjustment",
"attributes": {
"name": {
"value": "door sensor bundle discount"
}
},
"_glide_action": "INSERT",
"_source_object": {
"sys_id": "f3c4928bdce0aa10f877720033b5d02f",
"table": "sn_quote_mgmt_core_pricing_adjustment"
},
"_commitObjectInfo": {
"sys_id": "e6955acbdce0aa10f877720033b5d082",
"status": "success"
}
}
],
"coveredProducts": [],
"attributeAdjustment": [],
"_commitObjectInfo": {
"sys_id": "26955acbdce0aa10f877720033b5d07d",
"status": "success"
}
}
],
"pricingAdjustments": [],
"coveredProducts": [],
"attributeAdjustment": [],
"_commitObjectInfo": {
"sys_id": "22955acbdce0aa10f877720033b5d078",
"status": "success"
}
}
],
"_commitObjectInfo": {
"status": "success"
}
},
"headerID": "a6f4568bdce0aa10f877720033b5d069",
"rootLineIDs": [
"22955acbdce0aa10f877720033b5d078"
]
},
"status": "success",
"error": "",
"target": "a6f4568bdce0aa10f877720033b5d069"
}