TopicAPIUtilsOOB - com escopo

  • Versão de lançamento: Washingtondc
  • Atualizado 1 de fev. de 2024
  • 11 min. de leitura
  • A inclusão de script TopicAPIUtilsOOB fornece métodos que são usados ao processar o endpoint da API de abertura do tópico da Gestão de eventos.

    Se você quiser mudar a funcionalidade padrão da API Aberta do tópico da Gestão de eventos, será necessário substituir as funções contidas nesta inclusão de script na inclusão de script TopicAPIUtils.

    Esta API é executada no namespace sn_api_notif_mgmt e requer a função sn_api_notif_mgmt.event_mgmt_integration.

    TopicAPIUtilsOOB - createTopicHelper(objeto topicObject, avisos de matriz)

    Insere as informações passadas no endpoint da API aberta do tópico da 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.

    Tabela 1. Parâmetros
    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:
    {
      "name": "HighPriorityTroubleTicket",
      "headerQuery": "eventType=TroubleTicketStatusChangeEvent,TroubleTicketAttributeChangeEvent",
      "contentQuery": "troubleTicket.ticketType=incident&troubleTicket.severity=1",
      "externalId": "ext001",
      "namespace": "telecomEvents"
    }

    O esquema deste objeto deve corresponder ao definido em Constants.SCHEMA.CREATE_TOPIC_SCHEMA localizado na inclusão de script sn_api_notif_mgmt.Constants.

    alertas 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.

    Tabela 2. Retorna
    Tipo Descrição
    Objeto Objeto de resposta.
    {
      "contentQuery": "String",
      "eventType": "String",
      "externalId": "String",
      "headerQuery": "String",
      "id": "String",
      "name": "String"
    }

    Para obter detalhes sobre esses parâmetros, consulte os resultados retornados para Tópico de 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 pela API aberta do tópico da Gestão de eventos - POST /sn_api_notif_mgmt/topic endpoint para validar a carga do tópico.

    Se você quiser personalizar o esquema da carga do tópico, será necessário substituir o esquema de carga padrão, Constants.SCHEMA, localizado na inclusão de script sn_api_notif_mgmt.Constants. O valor padrão deste esquema é:
    CREATE_TOPIC_SCHEMA: "{
      \"title\":\"Topic\",
      \"type\":\"object\",
      \"properties\":{
        \"name\":{
          \"type\":\"string\"
        },
        \"contentQuery\":{
          \"type\":\"string\"
        },
        \"headerQuery\":{
          \"type\":\"string\"
        },
        \"namespace\":{
          \"type\":\"string\"
        }
      },
      \"required\":[\"name\"]
    }"
    Tabela 3. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 4. Retorna
    Tipo Descrição
    Cadeia de caracteres Esquema da API aberta do tópico da Gestão de eventos - POST /sn_api_notif_mgmt/topic endpoint payload. Use este esquema para validar o esquema passado para o endpoint usando o método TopicAPIUtilsOOB - isValidCreateTopicPayload(objeto 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(objeto topicObject, esquema de cadeia de caracteres, avisos de matriz)

    Valida a carga passada para o endpoint da API aberta do tópico da 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.

    Tabela 5. Parâmetros
    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:
    {
      "name": "HighPriorityTroubleTicket",
      "headerQuery": "eventType=TroubleTicketStatusChangeEvent,TroubleTicketAttributeChangeEvent",
      "contentQuery": "troubleTicket.ticketType=incident&troubleTicket.severity=1",
      "externalId": "ext001",
      "namespace": "telecomEvents"
    }

    O esquema deste objeto deve corresponder ao 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.
    alertas 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.

    Tabela 6. Retorna
    Tipo Descrição
    Booliano Sinalizador que indica se a carga passada no parâmetro topicObject passou no esquema e nas validações do corpo da solicitação.
    Valores válidos:
    • verdadeiro: a carga é válida.
    • false: a carga é inválida.

    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 pela API aberta do tópico da Gestão de eventos - POST /sn_api_notif_mgmt/topic endpoint, será necessário substituir este método na inclusão de script TopicAPIUtils.

    Tabela 7. Parâmetros
    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:
    {
      "name": "HighPriorityTroubleTicket",
      "headerQuery": "eventType=TroubleTicketStatusChangeEvent,TroubleTicketAttributeChangeEvent",
      "contentQuery": "troubleTicket.ticketType=incident&troubleTicket.severity=1",
      "externalId": "ext001",
      "namespace": "telecomEvents"
    }

    O esquema deste objeto deve corresponder ao 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].
    alertas 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.

    Tabela 8. Retorna
    Tipo Descrição
    Objeto Objeto de resposta do endpoint.
    Por exemplo:
    
    {
      "externalId": "ext001",
      "name": "HighPriorityTroubleTicket",
      "headerQuery": "eventType=TroubleTicketStatusChangeEvent,TroubleTicketAttributeChangeEvent",
      "contentQuery": "troubleTicket.ticketType=incident&troubleTicket.severity=1",
      "namespace": "telecomEvents",
      "id": "7ee9850443c3f550461f99612bb8f223"
    }

    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 da Gestão de eventos.

    Este método invoca os métodos de ajuda necessários para inserção de dados, validação de esquema, validação de corpo da solicitação e orquestração de resposta. Substitua este método se você precisar personalizar o processamento fundamental da solicitação Tópico de gestão de eventos em aberto - POST /sn_api_notif_mgmt/topic. Caso contrário, substitua os métodos de ajuda individuais.

    Tabela 9. Parâmetros
    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:
    {
      "name": "HighPriorityTroubleTicket",
      "headerQuery": "eventType=TroubleTicketStatusChangeEvent,TroubleTicketAttributeChangeEvent",
      "contentQuery": "troubleTicket.ticketType=incident&troubleTicket.severity=1",
      "externalId": "ext001",
      "namespace": "telecomEvents"
    }

    O esquema deste objeto deve corresponder ao definido em Constants.SCHEMA.CREATE_TOPIC_SCHEMA localizado na inclusão de script sn_api_notif_mgmt.Constants.

    Tabela 10. Retorna
    Tipo Descrição
    Objeto Objeto de resposta do endpoint.
    Por exemplo:
    
    {
      "externalId": "ext001",
      "name": "HighPriorityTroubleTicket",
      "headerQuery": "eventType=TroubleTicketStatusChangeEvent,TroubleTicketAttributeChangeEvent",
      "contentQuery": "troubleTicket.ticketType=incident&troubleTicket.severity=1",
      "namespace": "telecomEvents",
      "id": "7ee9850443c3f550461f99612bb8f223"
    }

    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 endpoint da API aberta do tópico da 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.

    Tabela 11. Parâmetros
    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:
    {
      "name": "HighPriorityTroubleTicket",
      "headerQuery": "eventType=TroubleTicketStatusChangeEvent,TroubleTicketAttributeChangeEvent",
      "contentQuery": "troubleTicket.ticketType=incident&troubleTicket.severity=1",
      "externalId": "ext001",
      "namespace": "telecomEvents"
    }

    O esquema deste objeto deve corresponder ao 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.
    Tabela 12. Retorna
    Tipo Descrição
    Objeto Objeto de resposta do endpoint transformado. Este objeto deve ser compatível com TMF688.
    Por exemplo:
    
    {
      "externalId": "ext001",
      "name": "HighPriorityTroubleTicket",
      "headerQuery": "eventType=TroubleTicketStatusChangeEvent,TroubleTicketAttributeChangeEvent",
      "contentQuery": "troubleTicket.ticketType=incident&troubleTicket.severity=1",
      "namespace": "telecomEvents",
      "id": "7ee9850443c3f550461f99612bb8f223"
    }

    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 - identifyTopicAttributes(objeto 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 de abertura de tópicos da 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, será necessário substituir este método na inclusão de script TopicAPIUtils.

    Tabela 13. Parâmetros
    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:
    {
      "name": "HighPriorityTroubleTicket",
      "headerQuery": "eventType=TroubleTicketStatusChangeEvent,TroubleTicketAttributeChangeEvent",
      "contentQuery": "troubleTicket.ticketType=incident&troubleTicket.severity=1",
      "externalId": "ext001",
      "namespace": "telecomEvents"
    }

    O esquema deste objeto deve corresponder ao 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.

    Tabela 14. Retorna
    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:
    • verdadeiro: a combinação de parâmetros é exclusiva.
    • falso: a combinação de parâmetros não é exclusiva.

    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 - ValidationTopicExternalId(objeto 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 de base, isso valida apenas 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 passado é mapeado para o campo topic_id na tabela Tópico [sn_api_notif_mgmt_topic].

    Tabela 15. Parâmetros
    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:
    {
      "name": "HighPriorityTroubleTicket",
      "headerQuery": "eventType=TroubleTicketStatusChangeEvent,TroubleTicketAttributeChangeEvent",
      "contentQuery": "troubleTicket.ticketType=incident&troubleTicket.severity=1",
      "externalId": "ext001",
      "namespace": "telecomEvents"
    }

    O esquema deste objeto deve corresponder ao 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.

    Tabela 16. Retorna
    Tipo Descrição
    Booliano Sinalizador que indica se o ID externo passado no parâmetro topicObject é válido.
    Valores válidos:
    • verdadeiro: o ID externo é válido.
    • falso: o ID externo é inválido.

    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;
      },