TopicUtilOOB - com escopo

  • Versão de lançamento: Washingtondc
  • Atualizado 1 de fev. de 2024
  • 6 min. de leitura
  • O script include TopicUtilOOB contém funções que permitem consultar e manipular registros na tabela Tópico [sn_api_notif_mgmt_topic]. Esta classe opera na camada de serviço que interage com a classe DAO (Data Access Object).

    Essas funções são chamadas quando o botão Obter tópicos é selecionado no formulário Tópicos. Se você quiser mudar a funcionalidade padrão desta inclusão de script, deverá substituir as funções contidas nesta inclusão de script na inclusão de script TopicUtil.

    Ambos os script includes são executados no namespace sn_api_notif_mgmt.

    Para obter informações adicionais sobre tópicos, consulte Handling the external events using Telecommunications API notification.

    TopicUtilOOB - createTopic(Object topicObj)

    Cria um registro na tabela Tópico [sn_api_notif_mgmt_topic] usando a inserção do DAO.

    Normalmente, você chamará essa função na função identifyAndInsertTopic que também executa várias validações no conteúdo.

    Tabela 1. Parâmetros
    Nome Tipo Descrição
    topicObj Objeto Objeto que contém os campos a serem armazenados no registro do tópico. Para a implementação de base, o objeto tem o seguinte formato. Se você modificar ou estender a tabela Tópicos, este objeto deve refletir essa estrutura. Certifique-se de incluir todos os campos obrigatórios.
    "topicObj": {
      "content_query": "String";
      "description": "String";
      "header_query": "String";
      "namespace": "String";
      "topic_id": "String";
      "topic_name": "String";
      "type": "String";
    }
    Tabela 2. Retorna
    Tipo Descrição
    Cadeia de caracteres Sys_id do registro do tópico criado.

    O exemplo de código a seguir mostra como chamar esta função.

    validateAndInsertTopics: function(topicsResponse) {
      if (!gs.nil(topicsResponse)) {
        var topicsArr = topicsResponse.response;
        for (var i = 0; i < topicsArr.length; i++) {
          var name = topicsArr[i].name;
          var headerQuery = topicsArr[i].headerQuery;
          var contentQuery = topicsArr[i].contentQuery;
          var namespace = topicsArr[i].namespace;
          var id = topicsArr[i].id;
          var description = topicsArr[i].description;
          var topicGr = TopicDAO.getTopicByNameHeaderContentNamespace(name, headerQuery, contentQuery, namespace,'');
          if (topicGr && !topicGr.hasNext()) {
            var topicObj = new sn_tmt_core.BaseObject();
            topicObj.setValue('topic_name', name);
            topicObj.setValue('header_query', headerQuery);
            topicObj.setValue('content_query', contentQuery);
            topicObj.setValue('namespace', namespace);
            topicObj.setValue('description', description);
            topicObj.setValue('topic_id', id);
            topicObj.setValue('type', Constants.TYPE_INGRESS);
            this.createTopic(topicObj);
          }
        }
      }
    }

    O exemplo de código a seguir mostra como substituir esta função.

    var TopicUtil = Class.create();
    TopicUtil.prototype = 
      Object.extendsObject(TopicUtilOOB, { 
    
      // Define overriding functions here. Pass a topic record object with 
      // values for a single Topic table record.
    
      createTopic: function(topicObj){ 
        return this.topicDAO.create(topicObj); 
      } 
    
      type: TopicUtil 
    
    });

    TopicUtilOOB – getSubFlowName()

    Retorna o nome do subfluxo a ser chamado para obter tópicos de um sistema externo.

    Normalmente, esta função é chamada a partir da função triggerSubflow(). Este subfluxo é responsável por entrar em contato com um sistema externo e obter todos os registros de tópico que precisam ser inseridos na tabela Tópicos [sn_api_notif_mgmt_topic].

    O nome do subfluxo é definido em Constants.GET_TOPICS_SUBFLOW. Para a implementação de demonstração, este subfluxo é sn_ind_tmf642.event_alarm_notifications_api e gera uma resposta "simulada" (não chama um sistema externo) para mostrar o processamento de ponta a ponta.

    Você pode mudar esta funcionalidade para incluir o nome do seu próprio subfluxo substituindo o nome do subfluxo a ser executado no script include sn_api_notif_mgmt.Constants.

    Tabela 3. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 4. Retorna
    Tipo Descrição
    Cadeia de caracteres Nome do subfluxo a ser usado para obter tópicos de um sistema externo.

    O exemplo de código a seguir mostra como substituir esta função.

    var TopicUtil= Class.create();  
    TopicUtil.prototype = 
      Object.extendsObject(TopicUtilOOB, { 
    
      // Define overriding function here. In TopicUtilOOB it returns the flow name of a GET outbound API call that mocks the GET call.
      // Override this function to return a flow that returns topics from an external system. 
    
      getSubflowName: function(){ 
        return <flow_name>; // Return the name here
      } 
    
      type: TopicUtil 
    
    });

    TopicUtilOOB - triggerSubflow()

    Aciona o subfluxo responsável por obter registros de tópico de um sistema externo.

    Esta função é chamada quando o usuário seleciona o botão Obter tópicos no formulário de tópicos.

    O nome do subfluxo que é acionado é definido em Constants.GET_TOPICS_SUBFLOW. Para a implementação de demonstração, este subfluxo é sn_ind_tmf642.event_alarm_notifications_api e gera uma resposta "simulada" (não chama um sistema externo) para mostrar o processamento de ponta a ponta.

    Você precisa mudar este funcional para incluir o nome do seu próprio subfluxo, substituindo o nome do subfluxo a ser executado no script include sn_api_notif_mgmt.Constants.

    No subfluxo, você deve criar uma etapa REST, um alias de conexão ou outra implementação para fornecer um URL de endpoint que recupera tópicos de sua rede externa. Quando os tópicos são retornados por esse subfluxo, você chama a função identifyAndInsertTopics para verificar a carga do tópico passada de volta e inserir/atualizar os registros na tabela Tópico.

    Tabela 5. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 6. Retorna
    Tipo Descrição
    Nenhum

    O exemplo de código a seguir mostra como substituir esta função.

    var TopicUtil = Class.create();
    TopicUtil.prototype = 
      Object.extendsObject(TopicUtilOOB, { 
    
      // Define overriding functions here. Override this function to call your own GET API outbound call subflow.
      triggerSubflow: function(){
        var result =''; // Pass the subflow here 
    
        try {
          var flowOp = sn_fd.FlowAPI.getRunner().subflow(result).inBackground().withInputs().run();
          if (flowOp) { 
            gs.addInfoMessage(gs.getMessage('Please refresh the list to see new Topics.'));
          } 
        } catch (ex) {
          gs.addInfoMessage(gs.getMessage(ex + ' Please check if the trigger is defined and passed correctly')); 
        }
      } 
    
      type: TopicUtil 
    
    });

    TopicUtilOOB - ValidationAndInsertTopics(tópicos de matrizResponse)

    Valida a carga de registro do tópico passada e insere registros na tabela Tópico [sn_api_notif_mgmt_topic} que contém esses dados.

    A carga de tópicos passada é obtida do "endpoint da API GET" usado para recuperar tópicos de um sistema externo. Para obter mais informações sobre como acionar essa GET API, consulte triggerSubflow().

    Você pode mudar esta funcionalidade para incluir suas próprias regras de validação e campos de registro de tópico, substituindo esta função na inclusão de script TopicUtil.

    Tabela 7. Parâmetros
    Nome Tipo Descrição
    tópicosResposta Matriz de objetos Carga de registro de tópico retornada pelo sistema externo por meio do endpoint da API GET no subfluxo. Esta carga deve corresponder à estrutura da tabela Tópicos [sn_api_notif_mgmt_topic]. Cada objeto na matriz é um tópico separado. Por exemplo, na implementação de demonstração, é:
    "topicResponse": [
      {
        "name": "String";
        "header_query": "String";
        "content_query": "String";
        "namespace": "String";
        "id": "String";
        "description": "String"
      },
      {
        "name": "String";
        "header_query": "String";
        "content_query": "String";
        "namespace": "String";
        "id": "String";
        "description": "String"
      }
    ]
    Tabela 8. Retorna
    Tipo Descrição
    Nenhum

    O exemplo de código a seguir mostra como substituir esta função.

    var TopicUtil= Class.create();  
    TopicUtil.prototype = 
      Object.extendsObject(TopicUtilOOB, { 
    
      // Define overriding functions here. Override this function to include custom 
      // validations on topic payload parameters and insert the record into the Topics table. 
    
      validateInsertTopics: function(topicsResponse){ 
    
        // Provide validation on the passed payload. 
        this.createTopic(topicObj);
      } 
    
    type: TopicUtil 
    
    });

    TopicUtilOOB -verifyTopics(cadeia de caracteres topicname, cadeia de caracteres headerQuery, cadeia de caracteres contentQuery, namespace da cadeia de caracteres, cadeia de caracteres beforeSysId)

    Determina se algum outro registro de tópico na tabela Tópico [sn_api_notif_mgmt_topic] contém a combinação especificada de campos como sua chave composta, indicando um tópico duplicado.

    Tabela 9. Parâmetros
    Nome Tipo Descrição
    nome do tópico Cadeia de caracteres Nome do tópico.
    headerQuery Cadeia de caracteres Filtro a ser aplicado ao conteúdo das propriedades do cabeçalho do evento. Esta consulta define o tipo de eventos a serem escutados para o tópico associado. Você pode passar este parâmetro como uma consulta aninhada.

    Por exemplo: "headerQuery": "eventType=AlarmCreateNotification&domain=Paris",

    Para obter informações adicionais, consulte o Guia do usuário da API de gestão de eventos TMF688.

    ContentQuery Cadeia de caracteres Filtro a ser aplicado ao conteúdo do evento. Esta consulta é um filtro de evento mais profundo usado para encontrar informações como a severidade do evento ou a causa provável. Você pode passar este parâmetro como uma consulta aninhada.

    Por exemplo: "contentQuery": "event.alarm.perceivedSeverity=CRITICAL",

    Para obter informações adicionais, consulte o Guia do usuário da API de gestão de eventos TMF688.

    namespace Cadeia de caracteres Namespace no qual reside o tópico associado. Os tópicos não podem ser duplicados em um domínio, mas podem estar contidos em vários domínios.
    SYSIDanterior Cadeia de caracteres Opcional. Sys_id do tópico a ser atualizado. Passe este valor somente ao atualizar um tópico existente.
    Tabela 10. Retorna
    Tipo Descrição
    Booliano

    Sinalizador que indica se outro registro na tabela Tópico contém a combinação de campos especificada.

    Valores possíveis:
    • verdadeiro: outro registro na tabela Tópico contém a combinação de campos.
    • falso: nenhum outro registro na tabela de tópicos contém a combinação de campos.

    O exemplo de código a seguir mostra como substituir esta função.

    
    var TopicUtil= Class.create();
    TopicUtil.prototype = 
      Object.extendsObject(TopicUtilOOB, {
    
      // Define overriding functions here. Override this function to provide custom validations on 
      // the passed parameters and to verify whether an insert is possible or not. 
    
      verifyTopics: function(topicname, headerQuery, contentQuery, namespace, previousSysId) { 
    
        // Write modified code here to get any combination of records present in the current Topic table. 
        // In the current implementation, the function checks if there is a duplicate topic record that contains the
        // passed parameters. 
    
      },
    
    type: TopicUtil 
    
    });