TopicAPIUtilsOOB : inclus dans le périmètre
Le script include TopicAPIUtilsOOB fournit les méthodes utilisées lors du traitement du point de terminaison de l’API ouverte de rubrique Gestion des événements .
Si vous souhaitez modifier la fonctionnalité par défaut de l’API Event Management Topic Open, vous devez remplacer les fonctions contenues dans ce script include dans le script include TopicAPIUtils .
Cette API s’exécute dans l’espace de noms sn_api_notif_mgmt et requiert le rôle sn_api_notif_mgmt.event_mgmt_integration.
TopicAPIUtilsOOB : createTopicHelper(Object topicObject, Array warnings)
Insère les informations transmises dans le point de terminaison Event Management Topic Open 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 le script include TopicAPIUtils .
| Nom | Type | Description |
|---|---|---|
| Objet de rubrique | Objet | Objet de charge utile de rubrique transmis au point de Rubrique Gestion des événements API ouverte 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. Constantes du script include. |
| avertissements | Tableau | Messages d’avertissement à renvoyer dans la réponse du Rubrique Gestion des événements API ouverte point de terminaison si la méthode rencontre un problème de niveau « 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 d’informations 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 l’API ouverte de rubrique Gestion des événements : point de terminaison POST /sn_api_notif_mgmt/rubrique 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/rubrique . Utilisez ce schéma pour valider le schéma transmis au point de terminaison à l’aide de la TopicAPIUtilsOOB : isValidCreateTopicPayload(Object topicObject, String schema, Array warnings) 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(Object topicObject, String schema, Array warnings)
Valide la charge utile transmise dans l’API ouverte de rubrique Gestion des événements : point de terminaison POST /sn_api_notif_mgmt/rubrique . Cette validation est effectuée sur le corps de la requête et le schéma.
Si vous souhaitez modifier le processus de validation de la charge utile, vous devez remplacer cette méthode dans le script include TopicAPIUtils .
| Nom | Type | Description |
|---|---|---|
| Objet de rubrique | Objet | Objet de charge utile de rubrique transmis au point de Rubrique Gestion des événements API ouverte 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. Constantes du script include. |
| 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 Rubrique Gestion des événements API ouverte point de terminaison si la méthode rencontre un problème de niveau « 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 réussi les validations de schéma et de corps de la 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, Array warnings)
Génère et renvoie la réponse à un appel de point de terminaison POST /sn_api_notif_mgmt/rubrique de la rubrique Gestion des événements.
Si vous souhaitez personnaliser l’objet de réponse renvoyé par le point de terminaison Event Management Topic Open API - POST /sn_api_notif_mgmt/rubrique , vous devez remplacer cette méthode dans le script include TopicAPIUtils .
| Nom | Type | Description |
|---|---|---|
| Objet de rubrique | Objet | Objet de charge utile de rubrique transmis au point de Rubrique Gestion des événements API ouverte 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. Constantes du script include. |
| topicSysId (en anglais seulement) | Chaîne | Sys_id de la rubrique créée dans le cadre de l’appel API ouverte de rubrique Gestion des événements : POST /sn_api_notif_mgmt/rubrique . Situé dans la table Rubrique [sn_api_notif_mgmt_topic]. |
| avertissements | Tableau | Messages d’avertissement à renvoyer dans la réponse du Rubrique Gestion des événements API ouverte point de terminaison si la méthode rencontre un problème de niveau « 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(Object topicObject)
Traite la demande faite par le point de terminaison de l’API ouverte de rubrique Gestion des événements .
Cette méthode appelle les méthodes d’assistance nécessaires pour l’insertion de données, la validation du 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’assistance individuelles.
| Nom | Type | Description |
|---|---|---|
| Objet de rubrique | Objet | Objet de charge utile de rubrique transmis au point de Rubrique Gestion des événements API ouverte 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. Constantes du script include. |
| 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)
Offre la possibilité d’ajouter des données personnalisées à l’objet de réponse renvoyé au point de terminaison Event Management Topic Open API - POST /sn_api_notif_mgmt/rubrique .
Pour personnaliser cet objet de réponse, remplacez cette méthode dans le script include TopicAPIUtils .
| Nom | Type | Description |
|---|---|---|
| Objet de rubrique | Objet | Objet de charge utile de rubrique transmis au point de Rubrique Gestion des événements API ouverte 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. Constantes du script include. |
| topicSysId (en anglais seulement) | Chaîne | Sys_id de la rubrique créée dans le cadre de l’appel API ouverte de rubrique Gestion des événements : POST /sn_api_notif_mgmt/rubrique . Situé dans la table Rubrique [sn_api_notif_mgmt_topic]. Vous pouvez ajouter des informations à partir de cet enregistrement à l’objet de réponse de la rubrique. |
| 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, Array details)
Valide si la combinaison de nom de rubrique, de requête d’en-tête, de requête de contenu et d’espace de noms transmise dans la charge utile du point de terminaison de l’API ouverte de 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 le script include TopicAPIUtils .
| Nom | Type | Description |
|---|---|---|
| Objet de rubrique | Objet | Objet de charge utile de rubrique transmis au point de Rubrique Gestion des événements API ouverte 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. Constantes du script include. |
| Détails | Tableau | Messages d’avertissement à renvoyer dans la réponse du Rubrique Gestion des événements API ouverte point de terminaison si la méthode rencontre un problème de niveau « 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 de nom de rubrique, de requête d’en-tête, de requête de contenu et d’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(Object topicObject, Array details)
Valide l’ID externe de rubrique transmis dans le corps de la demande du point de terminaison de l’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 le script include TopicAPIUtils . L’ID externe transmis est mappé au champ topic_id dans la table Rubrique [sn_api_notif_mgmt_topic].
| Nom | Type | Description |
|---|---|---|
| Objet de rubrique | Objet | Objet de charge utile de rubrique transmis au point de Rubrique Gestion des événements API ouverte 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. Constantes du script include. |
| Détails | Tableau | Messages d’erreur/de détail à renvoyer dans la réponse de point Rubrique Gestion des événements API ouverte de terminaison si la méthode rencontre un problème de niveau « 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 messages d’erreur supplémentaires, 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;
},