API IBQConfigBase : incluse dans le périmètre
Include de script qui doit être étendu pour Gestion des ventes et des commandes que le suivi des demandes assure le suivi des demandes. Cet include de script fournit des méthodes pouvant être remplacées qui définissent le mode d’exécution des demandes.
Le module d’extension Core d’API de ventes et de services (com.sn_tmt_core) doit être activé pour que l’include de script IBQConfigBase soit disponible dans une instance. Cet include de script appartient à l’espace de noms sn_tmt_core et requiert le rôle administrateur.
Extension de l’API IBQConfigBase
Définissez un include de script avec les méthodes remplaçables de l’API IBQConfigBase.
- Créez un include de script. Le nom doit commencer par IBQConfig, par exemple, IBQConfigQuoteToOrderFlowSNC.
- Étendez l’API IBQConfigBase .Par exemple :
IBQConfigQuoteToOrderFlowSNC.prototype = Object.extendsObject(sn_tmt_core.IBQConfigBase, { ... }); - Remplacez toutes les méthodes nécessaires fournies par l’API IBQConfigBase .Par exemple :
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; } - Créez une nouvelle entrée de métadonnées dans la table Configuration de la demande entrante [sn_tmt_core_inbound_queue_config] pour définir la manière dont une demande doit être traitée.
- Liez l’include de script créé au champ configuration_api de l’enregistrement de métadonnées pour utiliser la logique personnalisée définie lors du traitement de la demande. L’include de script est référencé dans le champ configuration_api lors de la création des métadonnées de configuration des demandes entrantes.
Cas d’utilisation : 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(Objet ibqParams)
Crée un enregistrement parent qui est ajouté au record_id de l’enregistrement de demande entrante [sn_tmt_core_inbound_queue_list] avant de traiter la demande.
La création d’un enregistrement parent avant le traitement est idéale pour un traitement asynchrone et vous permet d’ajouter à votre include de script des activités qui peuvent être exécutées pendant le traitement. Par exemple, afficher un message à l’écran.
| Nom | Type | Description |
|---|---|---|
| ibqParams | Objet | Objet JSON contenant les détails de l’enregistrement de demande entrante à créer. |
| compte | Chaîne | Facultatif. Informations sur le compte associé à l’enregistrement. Table : compte [customer_account] |
| consommateur | Chaîne | Facultatif. Informations sur le consommateur associé à l’enregistrement. Table : Consommateur [csm_consumer] |
| contact | Chaîne | Facultatif. Informations sur le contact associé à l’enregistrement. Table : Contact [customer_contact] |
| charge utile | Objet | Facultatif. Objet JSON nécessaire pour traiter la demande à l’aide de l’API PrimitiveUtil(). Pour plus d’informations sur l’utilisation, consultez LeadToCashCore. |
| chargeutile.additionalParams | Objet | Facultatif. Paramètres supplémentaires à utiliser. |
| chargeutile.additionalParams.action | Chaîne | Facultatif. Spécifie le type d’action déclarative en cours d’exécution. Pour plus d'informations, consultez Customer Life Cycle Management Workflows. Valeurs possibles :
|
| payload.additionalParams.actionReason | Chaîne | Facultatif. Propriété utilisée dans les flux utilisant des actions déclaratives. Motif de l’action. |
| payload.additionalParams.endDate | Chaîne | Facultatif. Date de fin requise pour exécuter des flux à l’aide d’actions déclaratives. Format : aaaa-MM-jj HH :mm :ss |
| chargeutile.additionalParams.skipLines | Booléen | Facultatif. Marqueur indiquant s’il faut extraire des éléments de ligne pour l’entité spécifiée. Valeurs valides :
|
| payload.additionalParams.startDate | Chaîne | Facultatif. Date de début d’exécution des flux à l’aide d’actions déclaratives. Format : aaaa-MM-jj HH :mm :ss |
| charge.contexte utile | Objet | Facultatif. Options de paramètres supplémentaires pour l’affichage des valeurs d’attribut et pour l’appel de plus d’une instance à la fois. |
| charge.contexte.isMultiSelect | Booléen | Facultatif. Marqueur indiquant s’il faut transmettre plusieurs entités comme entrée pour créer l’instance. Valeurs valides :
|
| payload.context.sourceToTargetConfigID | Chaîne | Facultatif. ID de configuration du mappage pour le mappage de la source à la cible. Table : Mappage d’entité prospect-espèces [sn_l2c_core_entity_mapping] |
| payload.inputParams | Objet | Facultatif. Cet objet est un espace réservé pour tous les paramètres d’entrée requis pour invoquer l’utilisation d’un flux spécifique. |
| charge.source utile | Tableau | Facultatif. Objet JSON contenant les détails de l’entité source à partir de laquelle récupérer les données. |
| charge.source.headerId | Chaîne | Facultatif. En-tête sys_id de l’entité source à partir de laquelle récupérer les données.
|
| charge.source.lineIds | Tableau | Facultatif. Tableau contenant le ou les sys_id d’éléments de ligne source d’une entité à partir desquels récupérer les données d’entité. Requis si vous ne fournissez pas l’ID d’en-tête et si la structure de l’entité commence par des éléments de ligne tels que le produit vendu. |
| chargeutile.cible | Tableau | Facultatif. Objet JSON contenant les détails de l’entité cible. |
| charge.cible.headerId | Chaîne | Facultatif. En-tête sys_id de l’entité cible à partir de laquelle récupérer les données. Requis si vous ne fournissez pas le lineIds paramètre. Saisissez null si vous ne transmettez aucune sys_ids d’en-tête. |
| charge.cible.lineIds | Tableau | Facultatif. Tableau contenant le ou les sys_id d’éléments de ligne cibles d’une entité à partir de laquelle récupérer les données d’entité. Requis si vous ne fournissez pas d’ID d’en-tête et si la structure de l’entité commence par des éléments de ligne tels que le produit vendu. |
| record_id | Chaîne | Facultatif. Sys_id de l’enregistrement cible, s’il existe déjà. |
| requested_flow | Chaîne | Facultatif. ID de configuration du mappage pour le mappage de la source à la cible. Cette propriété est requise pour les flux utilisant Entity configuration and mapping. Table : Mappage d’entité prospect-espèces [sn_l2c_core_entity_mapping] |
| source_record_ids | Tableau | Tableau contenant les sys_ids des enregistrements sources. |
| source_table | Chaîne | Nom de la table qui contient l’enregistrement source du flux. |
| Table | Chaîne | Nom de la table qui contient l’enregistrement cible du flux. |
| Type | Description |
|---|---|
| Objet JSON | Objet JSON contenant l’ID d’en-tête de l’enregistrement cible créé.
|
| ID d’en-tête | Sys_id de l’en-tête de l’enregistrement cible créé. Cette valeur est utilisée pour remplir record_id champ lors de la création de l’enregistrement de la demande entrante. |
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(Objet ibqParams)
Détermine si un flux doit s’exécuter en mode synchrone ou asynchrone.
| Nom | Type | Description |
|---|---|---|
| ibqParams | Objet | Objet JSON contenant les détails de l’enregistrement de demande entrante à créer. |
| compte | Chaîne | Facultatif. Informations sur le compte associé à l’enregistrement. Table : compte [customer_account] |
| consommateur | Chaîne | Facultatif. Informations sur le consommateur associé à l’enregistrement. Table : Consommateur [csm_consumer] |
| contact | Chaîne | Facultatif. Informations sur le contact associé à l’enregistrement. Table : Contact [customer_contact] |
| charge utile | Objet | Facultatif. Objet JSON nécessaire pour traiter la demande à l’aide de l’API PrimitiveUtil(). Pour plus d’informations sur l’utilisation, consultez LeadToCashCore. |
| chargeutile.additionalParams | Objet | Facultatif. Paramètres supplémentaires à utiliser. |
| chargeutile.additionalParams.action | Chaîne | Facultatif. Spécifie le type d’action déclarative en cours d’exécution. Pour plus d'informations, consultez Customer Life Cycle Management Workflows. Valeurs possibles :
|
| payload.additionalParams.actionReason | Chaîne | Facultatif. Propriété utilisée dans les flux utilisant des actions déclaratives. Motif de l’action. |
| payload.additionalParams.endDate | Chaîne | Facultatif. Date de fin requise pour exécuter des flux à l’aide d’actions déclaratives. Format : aaaa-MM-jj HH :mm :ss |
| chargeutile.additionalParams.skipLines | Booléen | Facultatif. Marqueur indiquant s’il faut extraire des éléments de ligne pour l’entité spécifiée. Valeurs valides :
|
| payload.additionalParams.startDate | Chaîne | Facultatif. Date de début d’exécution des flux à l’aide d’actions déclaratives. Format : aaaa-MM-jj HH :mm :ss |
| charge.contexte utile | Objet | Facultatif. Options de paramètres supplémentaires pour l’affichage des valeurs d’attribut et pour l’appel de plus d’une instance à la fois. |
| charge.contexte.isMultiSelect | Booléen | Facultatif. Marqueur indiquant s’il faut transmettre plusieurs entités comme entrée pour créer l’instance. Valeurs valides :
|
| payload.context.sourceToTargetConfigID | Chaîne | Facultatif. ID de configuration du mappage pour le mappage de la source à la cible. Table : Mappage d’entité prospect-espèces [sn_l2c_core_entity_mapping] |
| payload.inputParams | Objet | Facultatif. Cet objet est un espace réservé pour tous les paramètres d’entrée requis pour invoquer l’utilisation d’un flux spécifique. |
| charge.source utile | Tableau | Facultatif. Objet JSON contenant les détails de l’entité source à partir de laquelle récupérer les données. |
| charge.source.headerId | Chaîne | Facultatif. En-tête sys_id de l’entité source à partir de laquelle récupérer les données.
|
| charge.source.lineIds | Tableau | Facultatif. Tableau contenant le ou les sys_id d’éléments de ligne source d’une entité à partir desquels récupérer les données d’entité. Requis si vous ne fournissez pas l’ID d’en-tête et si la structure de l’entité commence par des éléments de ligne tels que le produit vendu. |
| chargeutile.cible | Tableau | Facultatif. Objet JSON contenant les détails de l’entité cible. |
| charge.cible.headerId | Chaîne | Facultatif. En-tête sys_id de l’entité cible à partir de laquelle récupérer les données. Requis si vous ne fournissez pas le lineIds paramètre. Saisissez null si vous ne transmettez aucune sys_ids d’en-tête. |
| charge.cible.lineIds | Tableau | Facultatif. Tableau contenant le ou les sys_id d’éléments de ligne cibles d’une entité à partir de laquelle récupérer les données d’entité. Requis si vous ne fournissez pas d’ID d’en-tête et si la structure de l’entité commence par des éléments de ligne tels que le produit vendu. |
| record_id | Chaîne | Facultatif. Sys_id de l’enregistrement cible, s’il existe déjà. |
| requested_flow | Chaîne | Facultatif. ID de configuration du mappage pour le mappage de la source à la cible. Cette propriété est requise pour les flux utilisant Entity configuration and mapping. Table : Mappage d’entité prospect-espèces [sn_l2c_core_entity_mapping] |
| source_record_ids | Tableau | Tableau contenant les sys_ids des enregistrements sources. |
| source_table | Chaîne | Nom de la table qui contient l’enregistrement source du flux. |
| Table | Chaîne | Nom de la table qui contient l’enregistrement cible du flux. |
| Type | Description |
|---|---|
| Chaîne | Informations sur le mode d’exécution à utiliser pour exécuter la demande. Valeurs possibles :
|
asynchrone.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)
Définit la logique de traitement d’un enregistrement de demande entrante.
| Nom | Type | Description |
|---|---|---|
| ibqGr | GlideRecord | Référence GlideRecord à l’enregistrement de demande entrante qui a déclenché le flux. Table : demande entrante [sn_tmt_core_inbound_queue] |
| Type | Description |
|---|---|
| Objet | Objet JSON contenant les détails de traitement de l’enregistrement de demande entrante. |
| erreur | Valeur indiquant l’erreur rencontrée lors du traitement de la demande. Type de données : chaîne |
| réponse | Objet JSON contenant la réponse de traitement de l’enregistrement de demande entrante. Pour les flux créés par l’API PrimitiveUtil Lead to Cash Core, cette sortie peut être fournie à l’aide de la méthode commitInstance( ). Type de données : objet |
| statut | Valeur indiquant l’état du traitement de la demande. Valeurs possibles :
Type de données : chaîne |
| target | Facultatif. Sys_id de l’enregistrement cible à utiliser pour un traitement ultérieur, tel que la confirmation de l’interface utilisateur. La cible peut être créée pendant le flux ou transmise comme entrée à la ibqParams méthode generateParentRecord() selon les besoins. Type de données : chaîne |
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"
}