TopicUtilOOB - com escopo

  • Versão de lançamento: Xanadu
  • Atualizado 1 de ago. de 2024
  • 6 min. de leitura
  • A inclusão de script 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 Objeto de acesso a dados (DAO).

    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.

    Ambas as inclusões de script são executadas 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á esta função na função validAndInsertTopic, 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 base, o objeto tem o seguinte formato. Se você modificar ou estender a tabela Tópicos, este objeto deverá 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 essa 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 contatar 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 essa funcionalidade para incluir o nome do seu próprio subfluxo substituindo o nome do subfluxo a ser executado na inclusão de script 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 essa 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 – gatilhoSubfluxo()

    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 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 na inclusão de script sn_api_notif_mgmt.Constants.

    No subfluxo, você deve criar uma etapa REST, alias de conexão ou outra implementação para fornecer um URL de endpoint que recupera tópicos da sua rede externa. Quando os tópicos são retornados por esse subfluxo, você chama a função validAndInsertTopics 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(a)

    O exemplo de código a seguir mostra como substituir essa 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 - validarAndInsertTopics(TopicsResponse de matriz)

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

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

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

    Tabela 7. Parâmetros
    Nome Tipo Descrição
    topicResponse Matriz de objetos Carga de registro de tópico retornada pelo sistema externo por meio do endpoint da API GET no subfluxo. Esta carga útil 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, isso é:
    "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(a)

    O exemplo de código a seguir mostra como substituir essa 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 de cadeia de caracteres, cadeia de caracteres anteriorSysId)

    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
    nomedotópico Cadeia de caracteres Nome do tópico.
    cabeçalhoConsulta 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.

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

    Por exemplo: "contentQuery": "event.alarm.perceptedSeverity=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 o tópico associado reside. Os tópicos não podem ser duplicados em um domínio, mas podem estar contidos em vários domínios.
    anteriorSysId 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 Tópico contém a combinação de campos.

    O exemplo de código a seguir mostra como substituir essa 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 
    
    });