TopicAPIUtilsOOB : inclus dans le périmètre
L’include de script TopicAPIUtilsOOB fournit des méthodes qui sont utilisées lors du traitement du point de terminaison de l’API Open Topic de Gestion des événements .
Si vous souhaitez modifier la fonctionnalité par défaut de l’API ouverte de la rubrique Gestion des événements, vous devez remplacer les fonctions contenues dans cet include de script dans l’include de script TopicAPIUtils .
Cet include de script s’exécute dans l’espace de noms sn_api_notif_mgmt et nécessite le rôle sn_api_notif_mgmt.event_mgmt_integration.
TopicAPIUtilsOOB : createTopicHelper(Objet, topicObject, tableau d’avertissements)
Insère les informations transmises dans le point de terminaison Rubrique Gestion des événements Ouvrir API - POST /sn_api_notif_mgmt/topic dans la table Rubrique [sn_api_notif_mgmt_topic].
Si vous souhaitez modifier ce processus d’insertion, vous devez remplacer cette méthode dans l’include de script TopicAPIUtils .
| Nom | Type | Description |
|---|---|---|
| Objet sujet | Objet | Objet de charge utile de rubrique transmis au point de API ouverte de la rubrique Gestion des événements terminaison. Par exemple : Le schéma de cet objet doit correspondre à ce qui est défini dans Constants.SCHEMA.CREATE_TOPIC_SCHEMA situé dans le sn_api_notif_mgmt. Include de script des constantes . |
| avertissements | Tableau | Messages d’avertissement à renvoyer dans la réponse du API ouverte de la rubrique Gestion des événements point de terminaison si la méthode rencontre un problème au niveau de « avertissement ». Ce paramètre vous permet d’ajouter des messages d’avertissement personnalisés à votre implémentation de ce point de terminaison. S’il n’y a pas de messages d’avertissement supplémentaires, vous devez transmettre un tableau vide. |
| Type | Description |
|---|---|
| Objet | Objet de réponse.Pour plus de détails sur ces paramètres, consultez les résultats de retour de Rubrique Gestion des événements ouverte : POST /sn_api_notif_mgmt/rubrique. |
L’exemple de code suivant montre comment appeler cette méthode.
processTopicCreation: function(topicObject) {
try {
var warnings = [];
var schema = this.getCreateTopicSchema();
if (!this.isValidCreateTopicPayload(topicObject, schema, warnings)) {
this._logger.logDebug("Create Topic : validation failed");
return this.response;
}
this.createTopicHelper(topicObject, warnings);
this._logger.logDebug("Create Topic: Topic created succesfully");
} catch (ex) {
this._logger.logErr("Create Topic : Process aborted, error is: " + ex);
var errorObj = this.apiCoreUtil.getErrorObj(sn_tmt_core.Constants.ERROR_CODES.INTERNAL_ERROR, Constants.MESSAGES.TOPIC_CREATE_ERROR, Constants.MESSAGES.TOPIC_CREATE_ERROR);
var details = [];
details.push(this.apiCoreUtil.getErrorDetailsObj(ex.message + '', ''));
errorObj.details = details;
this.response.details = errorObj;
}
return this.response;
},
TopicAPIUtilsOOB : getCreateTopicSchema()
Renvoie le schéma défini pour la charge utile utilisée par la rubrique Gestion des événements Ouvrir l’API : point de terminaison POST /sn_api_notif_mgmt/topic pour valider la charge utile de la rubrique.
CREATE_TOPIC_SCHEMA: "{
\"title\":\"Topic\",
\"type\":\"object\",
\"properties\":{
\"name\":{
\"type\":\"string\"
},
\"contentQuery\":{
\"type\":\"string\"
},
\"headerQuery\":{
\"type\":\"string\"
},
\"namespace\":{
\"type\":\"string\"
}
},
\"required\":[\"name\"]
}"| Nom | Type | Description |
|---|---|---|
| Aucun |
| Type | Description |
|---|---|
| Chaîne | Schéma pour l’API ouverte de rubrique Gestion des événements : charge utile du point de terminaison POST /sn_api_notif_mgmt/topic . Utilisez ce schéma pour valider le schéma transmis au point de terminaison à l’aide de la TopicAPIUtilsOOB : isValidCreateTopicPayload(Objet topicObject, schéma de chaîne, avertissements de tableau) méthode. |
L’exemple de code suivant montre comment appeler cette méthode.
processTopicCreation: function(topicObject) {
try {
var warnings = [];
var schema = this.getCreateTopicSchema();
if (!this.isValidCreateTopicPayload(topicObject, schema, warnings)) {
this._logger.logDebug("Create Topic : validation failed");
return this.response;
}
this.createTopicHelper(topicObject, warnings);
this._logger.logDebug("Create Topic: Topic created succesfully");
} catch (ex) {
this._logger.logErr("Create Topic : Process aborted, error is: " + ex);
var errorObj = this.apiCoreUtil.getErrorObj(sn_tmt_core.Constants.ERROR_CODES.INTERNAL_ERROR, Constants.MESSAGES.TOPIC_CREATE_ERROR, Constants.MESSAGES.TOPIC_CREATE_ERROR);
var details = [];
details.push(this.apiCoreUtil.getErrorDetailsObj(ex.message + '', ''));
errorObj.details = details;
this.response.details = errorObj;
}
return this.response;
},
TopicAPIUtilsOOB : isValidCreateTopicPayload(Objet topicObject, schéma de chaîne, avertissements de tableau)
Valide la charge utile transmise dans l’API ouverte de rubrique Gestion des événements : point de terminaison POST /sn_api_notif_mgmt/topic . Cette validation est effectuée sur le corps de la demande et le schéma.
Si vous souhaitez modifier le processus de validation de la charge utile, vous devez remplacer cette méthode dans l’include de script TopicAPIUtils .
| Nom | Type | Description |
|---|---|---|
| Objet sujet | Objet | Objet de charge utile de rubrique transmis au point de API ouverte de la rubrique Gestion des événements terminaison. Par exemple : Le schéma de cet objet doit correspondre à ce qui est défini dans Constants.SCHEMA.CREATE_TOPIC_SCHEMA situé dans le sn_api_notif_mgmt. Include de script des constantes . |
| Schéma | Chaîne | Schéma à utiliser pour valider la charge utile de la rubrique. Utilisez la TopicAPIUtilsOOB : getCreateTopicSchema() méthode pour obtenir ce schéma. |
| avertissements | Tableau | Messages d’avertissement à renvoyer dans la réponse du API ouverte de la rubrique Gestion des événements point de terminaison si la méthode rencontre un problème au niveau de « avertissement ». Ce paramètre vous permet d’ajouter des messages d’avertissement personnalisés à votre implémentation de ce point de terminaison. S’il n’y a pas de messages d’avertissement supplémentaires, vous devez transmettre un tableau vide. |
| Type | Description |
|---|---|
| Booléen | Marqueur indiquant si la charge utile transmise dans le topicObject paramètre a passé les validations de schéma et de corps de demande. Valeurs valides :
|
L’exemple de code suivant montre comment appeler cette méthode.
processTopicCreation: function(topicObject) {
try {
var warnings = [];
var schema = this.getCreateTopicSchema();
if (!this.isValidCreateTopicPayload(topicObject, schema, warnings)) {
this._logger.logDebug("Create Topic : validation failed");
return this.response;
}
this.createTopicHelper(topicObject, warnings);
this._logger.logDebug("Create Topic: Topic created succesfully");
} catch (ex) {
this._logger.logErr("Create Topic : Process aborted, error is: " + ex);
var errorObj = this.apiCoreUtil.getErrorObj(sn_tmt_core.Constants.ERROR_CODES.INTERNAL_ERROR, Constants.MESSAGES.TOPIC_CREATE_ERROR, Constants.MESSAGES.TOPIC_CREATE_ERROR);
var details = [];
details.push(this.apiCoreUtil.getErrorDetailsObj(ex.message + '', ''));
errorObj.details = details;
this.response.details = errorObj;
}
return this.response;
},
TopicAPIUtilsOOB : prepareCreateTopicResponse(Object topicObject, String topicSysId, avertissements de tableau)
Génère et renvoie la réponse à un appel de point de terminaison POST /sn_api_notif_mgmt/topic Topic Open API et renvoie la réponse à ce sujet.
Si vous souhaitez personnaliser l’objet de réponse renvoyé par l’API ouverte de rubrique Gestion des événements : point de terminaison POST /sn_api_notif_mgmt/topic , vous devez remplacer cette méthode dans l’include de script TopicAPIUtils .
| Nom | Type | Description |
|---|---|---|
| Objet sujet | Objet | Objet de charge utile de rubrique transmis au point de API ouverte de la rubrique Gestion des événements terminaison. Par exemple : Le schéma de cet objet doit correspondre à ce qui est défini dans Constants.SCHEMA.CREATE_TOPIC_SCHEMA situé dans le sn_api_notif_mgmt. Include de script des constantes . |
| topicSysId | Chaîne | Sys_id de la rubrique créée dans le cadre de l’appel Gestion des événements Topic Open API - POST /sn_api_notif_mgmt/topic . Table : Rubrique [sn_api_notif_mgmt_topic] |
| avertissements | Tableau | Messages d’avertissement à renvoyer dans la réponse du API ouverte de la rubrique Gestion des événements point de terminaison si la méthode rencontre un problème au niveau de « avertissement ». Ce paramètre vous permet d’ajouter des messages d’avertissement personnalisés à votre implémentation de ce point de terminaison. S’il n’y a pas de messages d’avertissement supplémentaires, vous devez transmettre un tableau vide. |
| Type | Description |
|---|---|
| Objet | Objet de réponse du point de terminaison. Par exemple : |
L’exemple de code suivant montre comment appeler cette méthode.
createTopicHelper: function(topicObject, warnings) {
var topicObj = new sn_tmt_core.BaseObject();
topicObj.setValue('topic_name', topicObject.name);
if (!gs.nil(topicObject.headerQuery))
topicObj.setValue('header_query', topicObject.headerQuery);
if (!gs.nil(topicObject.contentQuery))
topicObj.setValue('content_query', topicObject.contentQuery);
if (!gs.nil(topicObject.namespace))
topicObj.setValue('namespace', topicObject.namespace);
if (!gs.nil(topicObject.externalId))
topicObj.setValue('topic_id', topicObject.externalId);
topicObj.setValue('type', "egress");
topicObj.setValue('user_created', false);
new TopicUtil().createTopic(topicObj);
// If topic external id is passed by external system, add it in topic id field. This will act as an external id for us.
var topicGr = TopicDAO.getTopicByNameHeaderContentNamespace(topicObject.name, topicObject.headerQuery, topicObject.contentQuery, topicObject.namespace, '');
if (topicGr && topicGr.next())
var newTopicSysId = topicGr.getValue('sys_id');
this.prepareCreateTopicResponse(topicObject, newTopicSysId, warnings);
return this.response;
},
TopicAPIUtilsOOB : processTopicCreation(Objet topicObject)
Traite la demande effectuée par le point de terminaison d’API Ouvert la rubrique Gestion des événements .
Cette méthode invoque les méthodes d’assistance nécessaires à l’insertion de données, à la validation de schéma, à la validation du corps de la demande et à l’orchestration des réponses. Remplacez cette méthode si vous devez personnaliser le traitement fondamental de la Rubrique Gestion des événements ouverte : POST /sn_api_notif_mgmt/rubrique demande. Sinon, remplacez les méthodes d’aide individuelles.
| Nom | Type | Description |
|---|---|---|
| Objet sujet | Objet | Objet de charge utile de rubrique transmis au point de API ouverte de la rubrique Gestion des événements terminaison. Par exemple : Le schéma de cet objet doit correspondre à ce qui est défini dans Constants.SCHEMA.CREATE_TOPIC_SCHEMA situé dans le sn_api_notif_mgmt. Include de script des constantes . |
| Type | Description |
|---|---|
| Objet | Objet de réponse du point de terminaison. Par exemple : |
L’exemple de code suivant montre comment appeler cette méthode.
try {
var topicAPIUtils = new TopicAPIUtils();
var apiResponse = topicAPIUtils.processTopicCreation(request.body.data);
response.setStatus(apiResponse.status);
return tsmOpenAPIUtil.responseBuilder(response, apiResponse.details);
}
TopicAPIUtilsOOB : transformCreateTopicResponse(Object, topicObject, String, topicSysId)
Fournit la possibilité d’ajouter des données personnalisées à l’objet de réponse renvoyé à l’API ouverte de rubrique Gestion des événements : point de terminaison POST /sn_api_notif_mgmt/topic .
Pour personnaliser cet objet de réponse, remplacez cette méthode dans l’include de script TopicAPIUtils .
| Nom | Type | Description |
|---|---|---|
| Objet sujet | Objet | Objet de charge utile de rubrique transmis au point de API ouverte de la rubrique Gestion des événements terminaison. Par exemple : Le schéma de cet objet doit correspondre à ce qui est défini dans Constants.SCHEMA.CREATE_TOPIC_SCHEMA situé dans le sn_api_notif_mgmt. Include de script des constantes . |
| topicSysId | Chaîne | Sys_id de la rubrique créée dans le cadre de l’appel Gestion des événements Topic Open API - POST /sn_api_notif_mgmt/topic . Vous pouvez ajouter les informations de cet enregistrement à l’objet de réponse de la rubrique. Table : Rubrique [sn_api_notif_mgmt_topic] |
| Type | Description |
|---|---|
| Objet | Objet de réponse de point de terminaison transformé. Cet objet doit être conforme à la norme TMF688. Par exemple : |
L’exemple de code suivant montre comment appeler cette méthode.
prepareCreateTopicResponse: function(topicObject, topicSysId, warnings) {
if (!gs.nil(topicSysId)) {
topicObject.id = topicSysId;
this.response.status = sn_tmt_core.Constants.STATUS_CODES.CREATED;
topicObject = this.transformCreateTopicResponse(topicObject, topicSysId); // Customize response payload as per requirement.
this.response.details = topicObject;
if (!gs.nil(warnings) && warnings.length > 0) {
this.response.details.warnings = warnings;
}
} else {
var errorObj = this.apiCoreUtil.getErrorObj(sn_tmt_core.Constants.ERROR_CODES.INTERNAL_ERROR, Constants.MESSAGES.CREATE_TOPIC_ERROR, Constants.MESSAGES.CREATE_TOPIC_ERROR);
var details = [];
details.push(this.apiCoreUtil.getErrorDetailsObj(Constants.MESSAGES.CREATE_TOPIC_ERROR, ''));
errorObj.details = details;
this.response.details = errorObj;
}
},
L’exemple de code suivant montre le code pour remplacer la fonctionnalité par défaut de cette méthode.
transformCreateTopicResponse: function(topicObject, topicSysId) {
new sn_tmt_core.BaseAPIUtil().removeNulls(topicObject);
// Add custom attributes to the topicObject
topicObject.origin = “ServiceNow”,
topicObject.ServiceId= “service001”,
return topicObject;
},
TopicAPIUtilsOOB : validateTopicAttributes(Object, topicObject, détails du tableau)
Valide si la combinaison nom de rubrique, requête d’en-tête, requête de contenu et espace de noms transmise dans la charge utile du point de terminaison de l’API ouverte de la rubrique Gestion des événements est unique.
Le point de terminaison utilise ces combinaisons d’attributs pour déterminer si la rubrique existe actuellement dans la table Rubrique [sn_api_notif_mgmt_topic].
Si vous souhaitez modifier le processus de validation, vous devez remplacer cette méthode dans l’include de script TopicAPIUtils .
| Nom | Type | Description |
|---|---|---|
| Objet sujet | Objet | Objet de charge utile de rubrique transmis au point de API ouverte de la rubrique Gestion des événements terminaison. Par exemple : Le schéma de cet objet doit correspondre à ce qui est défini dans Constants.SCHEMA.CREATE_TOPIC_SCHEMA situé dans le sn_api_notif_mgmt. Include de script des constantes . |
| Détails | Tableau | Messages d’avertissement à renvoyer dans la réponse du API ouverte de la rubrique Gestion des événements point de terminaison si la méthode rencontre un problème au niveau de « avertissement ». Ce paramètre vous permet d’ajouter des messages d’avertissement personnalisés à votre implémentation de ce point de terminaison. S’il n’y a pas de messages d’avertissement supplémentaires, vous devez transmettre un tableau vide. |
| Type | Description |
|---|---|
| Booléen | Marqueur indiquant si la combinaison nom de rubrique, requête d’en-tête, requête de contenu et espace de noms transmise dans le topicObject paramètre est unique. Valeurs valides :
|
L’exemple de code suivant montre comment appeler cette méthode.
isValidCreateTopicPayload: function(topicObject, schema, warnings) {
var isValidPayload = true;
var details = [];
var validationResults = this.jsonSchemaValidation.validateJSON(topicObject, schema, ''); // Schema validation
var errorObj = this.apiCoreUtil.getErrorObj(sn_tmt_core.Constants.ERROR_CODES.MISSING_BODY_FIELD, sn_tmt_core.Constants.MESSAGES.MISSING_BODY_FIELD, sn_tmt_core.Constants.MESSAGES.MISSING_BODY_FIELD);
if (validationResults.length > 0) {
if (validationResults[0].message == Constants.PAYLOAD_MISSING) {
this._logger.logDebug("isValidCreateTopicPayload: Missing request body, invalid payload");
errorObj = this.apiCoreUtil.getErrorObj(sn_tmt_core.Constants.ERROR_CODES.MISSING_BODY, sn_tmt_core.Constants.MESSAGES.MISSING_BODY, sn_tmt_core.Constants.MESSAGES.MISSING_BODY);
details.push(this.apiCoreUtil.getErrorDetailsObj(sn_tmt_core.Constants.MESSAGES.MISSING_BODY, ''));
errorObj.details = details;
this.response.details = errorObj;
return false;
} else {
for (var i = 0; i < validationResults.length; i++) {
var missingFieldMsg = sn_tmt_core.Constants.MESSAGES.MISSING_FIELD_KEY;
var message = validationResults[i].message;
var errorMessage = '';
if (message.indexOf('missing') != -1) {
var newMessage = this.apiCoreUtil.constructErrorMsg(message, validationResults[i].dataPath);
errorMessage = missingFieldMsg.replace(/\$key/g, newMessage);
} else {
errorMessage = message;
}
details.push(this.apiCoreUtil.getErrorDetailsObj(errorMessage, validationResults[i].dataPath));
}
}
isValidPayload = false;
}
var isValidTopicExternalId = this.validateTopicExternalId(topicObject, details);
var isValidTopicAttributes = this.validatateTopicAttributes(topicObject, details);
isValidPayload = isValidPayload && isValidTopicExternalId && isValidTopicAttributes;
if (!isValidPayload) {
errorObj.details = details;
this.response.details = errorObj;
}
return isValidPayload;
},
TopicAPIUtilsOOB : validateTopicExternalId(Objet, topicObject, détails du tableau)
Valide l’ID externe de la rubrique transmis dans le corps de la demande du point de terminaison d’API ouverte de rubrique Gestion des événements .
Dans l’implémentation de base, cela valide uniquement que l’ID externe n’est pas vide. Si vous souhaitez modifier le processus de validation de l’ID externe de la rubrique, vous devez remplacer cette méthode dans l’include de script TopicAPIUtils . L’ID externe transmis est mappé au champ topic_id dans la table Rubrique [sn_api_notif_mgmt_topic].
| Nom | Type | Description |
|---|---|---|
| Objet sujet | Objet | Objet de charge utile de rubrique transmis au point de API ouverte de la rubrique Gestion des événements terminaison. Par exemple : Le schéma de cet objet doit correspondre à ce qui est défini dans Constants.SCHEMA.CREATE_TOPIC_SCHEMA situé dans le sn_api_notif_mgmt. Include de script des constantes . |
| Détails | Tableau | Messages d’erreur/de détail à renvoyer dans la réponse du API ouverte de la rubrique Gestion des événements point de terminaison si la méthode rencontre un problème au niveau de l’erreur. Ce paramètre vous permet d’ajouter des messages d’erreur personnalisés à votre implémentation de ce point de terminaison. S’il n’y a pas de message d’erreur supplémentaire, vous devez transmettre un tableau vide. |
| Type | Description |
|---|---|
| Booléen | Marqueur indiquant si l’ID externe transmis dans le topicObject paramètre est valide. Valeurs valides :
|
L’exemple de code suivant montre comment appeler cette méthode.
isValidCreateTopicPayload: function(topicObject, schema, warnings) {
var isValidPayload = true;
var details = [];
var validationResults = this.jsonSchemaValidation.validateJSON(topicObject, schema, ''); // Schema validation
var errorObj = this.apiCoreUtil.getErrorObj(sn_tmt_core.Constants.ERROR_CODES.MISSING_BODY_FIELD, sn_tmt_core.Constants.MESSAGES.MISSING_BODY_FIELD, sn_tmt_core.Constants.MESSAGES.MISSING_BODY_FIELD);
if (validationResults.length > 0) {
if (validationResults[0].message == Constants.PAYLOAD_MISSING) {
this._logger.logDebug("isValidCreateTopicPayload: Missing request body, invalid payload");
errorObj = this.apiCoreUtil.getErrorObj(sn_tmt_core.Constants.ERROR_CODES.MISSING_BODY, sn_tmt_core.Constants.MESSAGES.MISSING_BODY, sn_tmt_core.Constants.MESSAGES.MISSING_BODY);
details.push(this.apiCoreUtil.getErrorDetailsObj(sn_tmt_core.Constants.MESSAGES.MISSING_BODY, ''));
errorObj.details = details;
this.response.details = errorObj;
return false;
} else {
for (var i = 0; i < validationResults.length; i++) {
var missingFieldMsg = sn_tmt_core.Constants.MESSAGES.MISSING_FIELD_KEY;
var message = validationResults[i].message;
var errorMessage = '';
if (message.indexOf('missing') != -1) {
var newMessage = this.apiCoreUtil.constructErrorMsg(message, validationResults[i].dataPath);
errorMessage = missingFieldMsg.replace(/\$key/g, newMessage);
} else {
errorMessage = message;
}
details.push(this.apiCoreUtil.getErrorDetailsObj(errorMessage, validationResults[i].dataPath));
}
}
isValidPayload = false;
}
var isValidTopicExternalId = this.validateTopicExternalId(topicObject, details);
var isValidTopicAttributes = this.validatateTopicAttributes(topicObject, details);
isValidPayload = isValidPayload && isValidTopicExternalId && isValidTopicAttributes;
if (!isValidPayload) {
errorObj.details = details;
this.response.details = errorObj;
}
return isValidPayload;
},