TopicAPIUtilsOOB - Com escopo
. TopicAPIUtilsOOB a inclusão de script fornece métodos que são usados ao processar o. API aberta de tópico da Gestão de eventos endpoint.
Se você quiser mudar a funcionalidade padrão de API aberta de tópico da Gestão de eventos , você precisa substituir as funções contidas nesta inclusão de script no TopicAPIUtis inclusão de script.
Esta inclusão de script é executada no sn_api_notif_mgmt namespace e requer a função sn_api_notif_mgmt.event_mgmt_integration.
TopicAPIUtilsOOB - createTopicHelper(Object topicObject, Array warnings)
Insere as informações passadas no API aberta de tópico da Gestão de eventos - POST /sn_api_notif_mgmt/topic Endpoint na tabela Tópico [sn_api_notif_mgmt_topic].
Se você quiser modificar este processo de inserção, precisará substituir este método no TopicAPIUtis inclusão de script.
| Nome | Tipo | Descrição |
|---|---|---|
| TopicObject | Objeto | Objeto de carga do tópico passado para API aberta de tópico da Gestão de eventos endpoint. Por exemplo: O esquema deste objeto deve corresponder ao que está definido em CONSTANTS.SCHEMA.CREATE_TOPIC_SCHEMA localizado em sn_api_notif_mgmt.Constants inclusão de script. |
| warnings | Matriz | Mensagens de aviso a serem retornadas no API aberta de tópico da Gestão de eventos resposta do endpoint 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ê deve passar uma matriz vazia. |
| Tipo | Descrição |
|---|---|
| Objeto | Objeto de resposta.Para obter detalhes sobre esses parâmetros, consulte os resultados de retorno de Tópico da Gestão de eventos em 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 API aberta de tópico da Gestão de eventos - POST /sn_api_notif_mgmt/topic endpoint 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 para API aberta de tópico da Gestão de eventos - POST /sn_api_notif_mgmt/topic carga do endpoint. Use este esquema para validar o esquema passado para o endpoint usando TopicAPIUtilsOOB - isValidCreateTopicPayload(Object topicObject, esquema de cadeia de caracteres, avisos de matriz) método. |
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 API aberta de tópico da Gestão de eventos - POST /sn_api_notif_mgmt/topic endpoint. Esta validação é realizada no corpo da solicitação e no esquema.
Se você quiser modificar o processo de validação da carga, será necessário substituir este método no TopicAPIUtis inclusão de script.
| Nome | Tipo | Descrição |
|---|---|---|
| TopicObject | Objeto | Objeto de carga do tópico passado para API aberta de tópico da Gestão de eventos endpoint. Por exemplo: O esquema deste objeto deve corresponder ao que está definido em CONSTANTS.SCHEMA.CREATE_TOPIC_SCHEMA localizado em sn_api_notif_mgmt.Constants inclusão de script. |
| esquema | Cadeia de caracteres | Esquema a ser usado para validar a carga do tópico. Use TopicAPIUtilsOOB - getCreateTopicSchema() método para obter este esquema. |
| warnings | Matriz | Mensagens de aviso a serem retornadas no API aberta de tópico da Gestão de eventos resposta do endpoint 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ê deve passar uma matriz vazia. |
| Tipo | Descrição |
|---|---|
| Booliano | Sinalizador que indica se a carga passou no topicObjecto parâmetro foi aprovado no esquema e as validações 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, Array warnings)
Gera e retorna a resposta para um API aberta de tópico da Gestão de eventos - POST /sn_api_notif_mgmt/topic chamada de endpoint.
Se você quiser personalizar o objeto de resposta retornado pelo API aberta de tópico da Gestão de eventos - POST /sn_api_notif_mgmt/topic endpoint, você precisa substituir este método no TopicAPIUtis inclusão de script.
| Nome | Tipo | Descrição |
|---|---|---|
| TopicObject | Objeto | Objeto de carga do tópico passado para API aberta de tópico da Gestão de eventos endpoint. Por exemplo: O esquema deste objeto deve corresponder ao que está definido em CONSTANTS.SCHEMA.CREATE_TOPIC_SCHEMA localizado em sn_api_notif_mgmt.Constants inclusão de script. |
| TopicSySID | Cadeia de caracteres | Sys_id do tópico criado como parte do API aberta de tópico da Gestão de eventos - POST /sn_api_notif_mgmt/topic chamada. Tabela: Tópico [sn_api_notif_mgmt_topic] |
| warnings | Matriz | Mensagens de aviso a serem retornadas no API aberta de tópico da Gestão de eventos resposta do endpoint 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ê deve 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 API aberta de tópico da Gestão de eventos endpoint.
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 você precisar personalizar o processamento fundamental do Tópico da Gestão de eventos em aberto - POST /sn_api_notif_mgmt/topic solicitação. Caso contrário, substitua os métodos auxiliares individuais.
| Nome | Tipo | Descrição |
|---|---|---|
| TopicObject | Objeto | Objeto de carga do tópico passado para API aberta de tópico da Gestão de eventos endpoint. Por exemplo: O esquema deste objeto deve corresponder ao que está definido em CONSTANTS.SCHEMA.CREATE_TOPIC_SCHEMA localizado em sn_api_notif_mgmt.Constants inclusão de script. |
| 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 ao API aberta de tópico da Gestão de eventos - POST /sn_api_notif_mgmt/topic endpoint.
Para personalizar este objeto de resposta, substitua este método no TopicAPIUtis inclusão de script.
| Nome | Tipo | Descrição |
|---|---|---|
| TopicObject | Objeto | Objeto de carga do tópico passado para API aberta de tópico da Gestão de eventos endpoint. Por exemplo: O esquema deste objeto deve corresponder ao que está definido em CONSTANTS.SCHEMA.CREATE_TOPIC_SCHEMA localizado em sn_api_notif_mgmt.Constants inclusão de script. |
| TopicSySID | Cadeia de caracteres | Sys_id do tópico criado como parte do API aberta de tópico da Gestão de eventos - POST /sn_api_notif_mgmt/topic chamada. Você pode adicionar informações deste registro ao objeto de resposta do tópico. Tabela: Tópico [sn_api_notif_mgmt_topic] |
| 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 foi aprovada no API aberta de tópico da Gestão de eventos a carga do endpoint é exclusiva.
O endpoint usa essas combinações de atributos 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 no TopicAPIUtis inclusão de script.
| Nome | Tipo | Descrição |
|---|---|---|
| TopicObject | Objeto | Objeto de carga do tópico passado para API aberta de tópico da Gestão de eventos endpoint. Por exemplo: O esquema deste objeto deve corresponder ao que está definido em CONSTANTS.SCHEMA.CREATE_TOPIC_SCHEMA localizado em sn_api_notif_mgmt.Constants inclusão de script. |
| detalhes | Matriz | Mensagens de aviso a serem retornadas no API aberta de tópico da Gestão de eventos resposta do endpoint 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ê deve 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 foi aprovada em topicObjecto parâmetro é exclusivo. 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 API aberta de tópico da Gestão de eventos endpoint.
Na implementação de 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 no TopicAPIUtis inclusão de script. 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 API aberta de tópico da Gestão de eventos endpoint. Por exemplo: O esquema deste objeto deve corresponder ao que está definido em CONSTANTS.SCHEMA.CREATE_TOPIC_SCHEMA localizado em sn_api_notif_mgmt.Constants inclusão de script. |
| detalhes | Matriz | Mensagens de erro/detalhe a serem retornadas em API aberta de tópico da Gestão de eventos resposta do endpoint 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ê deve passar uma matriz vazia. |
| Tipo | Descrição |
|---|---|
| Booliano | Sinalizador que indica se o ID externo foi aprovado em topicObjecto parâmetro é 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;
},