TopicAPIUtilsOOB - com escopo
A inclusão de script TopicAPIUtilsOOB fornece métodos que são usados ao processar o endpoint da API aberta do tópico de gestão de eventos.
Se você quiser mudar a funcionalidade padrão da API Aberto do tópico de gestão de eventos, será necessário substituir as funções contidas nesta inclusão de script na inclusão de script TopicAPIUtils.
Esta inclusão de script é executada no namespace sn_api_notif_mgmt e requer a função sn_api_notif_mgmt.event_mgmt_integration.
TopicAPIUtilsOOB - createTopicHelper(Object topicObject, avisos de matriz)
Insere as informações passadas no endpoint de API aberta do tópico Gestão de eventos - POST /sn_api_notif_mgmt/topic na tabela Tópico [sn_api_notif_mgmt_topic].
Se você quiser modificar este processo de inserção, será necessário substituir este método na inclusão de script TopicAPIUtils.
| Nome | Tipo | Descrição |
|---|---|---|
| topicObject | Objeto | Objeto de carga do tópico passado para o endpoint API aberta do tópico de gestão de eventos. Por exemplo: O esquema deste objeto deve corresponder ao que está definido em Constants.SCHEMA.CREATE_TOPIC_SCHEMA localizado na inclusão de script sn_api_notif_mgmt.Constants. |
| warnings | Matriz | Mensagens de aviso a serem retornadas na resposta do endpoint API aberta do tópico de gestão de eventos se o método encontrar um problema no nível de "aviso". Este parâmetro permite adicionar mensagens de aviso personalizadas à implementação deste endpoint. Se não houver mensagens de aviso adicionais, você deverá passar uma matriz vazia. |
| Tipo | Descrição |
|---|---|
| Objeto | Objeto de resposta.Para obter detalhes sobre esses parâmetros, consulte os resultados retornados para Tópico de gestão de eventos aberto - POST /sn_api_notif_mgmt/topic. |
O exemplo de código a seguir mostra como chamar este método.
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()
Retorna o esquema definido para a carga usada pelo endpoint de API aberta do tópico de gestão de eventos - POST /sn_api_notif_mgmt/topic para validar a carga do tópico.
CREATE_TOPIC_SCHEMA: "{
\"title\":\"Topic\",
\"type\":\"object\",
\"properties\":{
\"name\":{
\"type\":\"string\"
},
\"contentQuery\":{
\"type\":\"string\"
},
\"headerQuery\":{
\"type\":\"string\"
},
\"namespace\":{
\"type\":\"string\"
}
},
\"required\":[\"name\"]
}"| Nome | Tipo | Descrição |
|---|---|---|
| Nenhum |
| Tipo | Descrição |
|---|---|
| Cadeia de caracteres | Esquema da API aberta do tópico da Gestão de eventos - Carga de endpoint do POST /sn_api_notif_mgmt/topic. Use este esquema para validar o esquema passado para o endpoint usando o método TopicAPIUtilsOOB - isValidCreateTopicPayload(Object topicObject, esquema de cadeia de caracteres, avisos de matriz). |
O exemplo de código a seguir mostra como chamar este método.
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, esquema de cadeia de caracteres, avisos de matriz)
Valida a carga passada para o endpoint de API aberta do tópico de gestão de eventos - POST /sn_api_notif_mgmt/topic. Essa validação é realizada no corpo da solicitação e no esquema.
Se você quiser modificar o processo de validação da carga útil, será necessário substituir este método na inclusão de script TopicAPIUtils.
| Nome | Tipo | Descrição |
|---|---|---|
| topicObject | Objeto | Objeto de carga do tópico passado para o endpoint API aberta do tópico de gestão de eventos. Por exemplo: O esquema deste objeto deve corresponder ao que está definido em Constants.SCHEMA.CREATE_TOPIC_SCHEMA localizado na inclusão de script sn_api_notif_mgmt.Constants. |
| esquema | Cadeia de caracteres | Esquema a ser usado para validar a carga do tópico. Use o método TopicAPIUtilsOOB – getCreateTopicSchema() para obter este esquema. |
| warnings | Matriz | Mensagens de aviso a serem retornadas na resposta do endpoint API aberta do tópico de gestão de eventos se o método encontrar um problema no nível de "aviso". Este parâmetro permite adicionar mensagens de aviso personalizadas à implementação deste endpoint. Se não houver mensagens de aviso adicionais, você deverá passar uma matriz vazia. |
| Tipo | Descrição |
|---|---|
| Booliano | Sinalizador que indica se a carga passada no parâmetro topicObject passou nas validações do esquema e do corpo da solicitação. Valores válidos:
|
O exemplo de código a seguir mostra como chamar este método.
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, Avisos de matriz)
Gera e retorna a resposta para uma chamada de endpoint de API aberta de tópico de gestão de eventos - POST /sn_api_notif_mgmt/topic.
Se você quiser personalizar o objeto de resposta retornado pelo endpoint de API aberta do tópico de gestão de eventos - POST /sn_api_notif_mgmt/topic, será necessário substituir este método na inclusão de script TopicAPIUtils.
| Nome | Tipo | Descrição |
|---|---|---|
| topicObject | Objeto | Objeto de carga do tópico passado para o endpoint API aberta do tópico de gestão de eventos. Por exemplo: O esquema deste objeto deve corresponder ao que está definido em Constants.SCHEMA.CREATE_TOPIC_SCHEMA localizado na inclusão de script sn_api_notif_mgmt.Constants. |
| topicSysId | Cadeia de caracteres | Sys_id do tópico criado como parte da API aberta do tópico da Gestão de eventos - POST /sn_api_notif_mgmt/topic. Localizado na tabela Tópico [sn_api_notif_mgmt_topic]. |
| warnings | Matriz | Mensagens de aviso a serem retornadas na resposta do endpoint API aberta do tópico de gestão de eventos se o método encontrar um problema no nível de "aviso". Este parâmetro permite adicionar mensagens de aviso personalizadas à implementação deste endpoint. Se não houver mensagens de aviso adicionais, você deverá passar uma matriz vazia. |
| Tipo | Descrição |
|---|---|
| Objeto | Objeto de resposta do endpoint. Por exemplo: |
O exemplo de código a seguir mostra como chamar este método.
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)
Processa a solicitação feita pelo endpoint da API aberta do tópico de gestão de eventos.
Este método invoca os métodos auxiliares necessários para inserção de dados, validação de esquema, validação de corpo de solicitação e orquestração de resposta. Substitua este método se precisar personalizar o processamento fundamental da solicitação Tópico de gestão de eventos aberto - POST /sn_api_notif_mgmt/topic. Caso contrário, substitua os métodos auxiliares individuais.
| Nome | Tipo | Descrição |
|---|---|---|
| topicObject | Objeto | Objeto de carga do tópico passado para o endpoint API aberta do tópico de gestão de eventos. Por exemplo: O esquema deste objeto deve corresponder ao que está definido em Constants.SCHEMA.CREATE_TOPIC_SCHEMA localizado na inclusão de script sn_api_notif_mgmt.Constants. |
| Tipo | Descrição |
|---|---|
| Objeto | Objeto de resposta do endpoint. Por exemplo: |
O exemplo de código a seguir mostra como chamar este método.
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)
Fornece a capacidade de adicionar dados personalizados ao objeto de resposta retornado para o endpoint de API aberta do tópico de gestão de eventos - POST /sn_api_notif_mgmt/topic.
Para personalizar este objeto de resposta, substitua este método na inclusão de script TopicAPIUtils.
| Nome | Tipo | Descrição |
|---|---|---|
| topicObject | Objeto | Objeto de carga do tópico passado para o endpoint API aberta do tópico de gestão de eventos. Por exemplo: O esquema deste objeto deve corresponder ao que está definido em Constants.SCHEMA.CREATE_TOPIC_SCHEMA localizado na inclusão de script sn_api_notif_mgmt.Constants. |
| topicSysId | Cadeia de caracteres | Sys_id do tópico criado como parte da API aberta do tópico da Gestão de eventos - POST /sn_api_notif_mgmt/topic. Localizado na tabela Tópico [sn_api_notif_mgmt_topic]. Você pode adicionar informações deste registro ao objeto de resposta do tópico. |
| Tipo | Descrição |
|---|---|
| Objeto | Objeto de resposta do endpoint transformado. Este objeto deve ser compatível com TMF688. Por exemplo: |
O exemplo de código a seguir mostra como chamar este método.
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;
}
},
O exemplo de código a seguir mostra o código para substituir a funcionalidade padrão deste método.
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, Detalhes da matriz)
Valida se a combinação de nome do tópico, consulta de cabeçalho, consulta de conteúdo e namespace passada na carga do endpoint da API aberta do tópico de gestão de eventos é exclusiva.
O endpoint usa essas combinações de atributo para determinar se o tópico existe atualmente na tabela Tópico [sn_api_notif_mgmt_topic].
Se você quiser modificar o processo de validação, precisará substituir este método na inclusão de script TopicAPIUtils.
| Nome | Tipo | Descrição |
|---|---|---|
| topicObject | Objeto | Objeto de carga do tópico passado para o endpoint API aberta do tópico de gestão de eventos. Por exemplo: O esquema deste objeto deve corresponder ao que está definido em Constants.SCHEMA.CREATE_TOPIC_SCHEMA localizado na inclusão de script sn_api_notif_mgmt.Constants. |
| detalhes | Matriz | Mensagens de aviso a serem retornadas na resposta do endpoint API aberta do tópico de gestão de eventos se o método encontrar um problema no nível de "aviso". Este parâmetro permite adicionar mensagens de aviso personalizadas à implementação deste endpoint. Se não houver mensagens de aviso adicionais, você deverá passar uma matriz vazia. |
| Tipo | Descrição |
|---|---|
| Booliano | Sinalizador que indica se a combinação de nome do tópico, consulta de cabeçalho, consulta de conteúdo e namespace passada no parâmetro topicObject é exclusiva. Valores válidos:
|
O exemplo de código a seguir mostra como chamar este método.
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, Detalhes da matriz)
Valida o ID externo do tópico passado no corpo da solicitação do endpoint da API de abertura de tópicos da Gestão de eventos.
Na implementação base, isso valida somente que o ID externo não está vazio. Se você quiser modificar o processo de validação do ID externo do tópico, será necessário substituir este método na inclusão de script TopicAPIUtils. O ID externo aprovado é mapeado para o campo topic_id na tabela Tópico [sn_api_notif_mgmt_topic].
| Nome | Tipo | Descrição |
|---|---|---|
| topicObject | Objeto | Objeto de carga do tópico passado para o endpoint API aberta do tópico de gestão de eventos. Por exemplo: O esquema deste objeto deve corresponder ao que está definido em Constants.SCHEMA.CREATE_TOPIC_SCHEMA localizado na inclusão de script sn_api_notif_mgmt.Constants. |
| detalhes | Matriz | Mensagens de erro/detalhes a serem retornadas na resposta do endpoint API aberta do tópico de gestão de eventos se o método encontrar um problema no nível de "erro". Este parâmetro permite adicionar mensagens de erro personalizadas à implementação deste endpoint. Se não houver mensagens de erro adicionais, você deverá passar uma matriz vazia. |
| Tipo | Descrição |
|---|---|
| Booliano | Sinalizador que indica se o ID externo passado no parâmetro topicObject é válido. Valores válidos:
|
O exemplo de código a seguir mostra como chamar este método.
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;
},