TopicSubscriptionUtilOOB - com escopo

  • Versão de lançamento: Washingtondc
  • Atualizado 1 de fev. de 2024
  • 7 min. de leitura
  • A inclusão de script TopicSubscriptionUtilOOB fornece métodos para consultar e manipular registros na tabela de assinatura de tópico [sn_api_notif_mgmt_topic_subscription]. Esta classe opera na camada de serviço e interage com a classe DAO (Data Access Object).

    Essas funções são chamadas quando o botão Registrar é selecionado no formulário de Assinatura de tópico. Se você quiser mudar a funcionalidade padrão desta inclusão de script, será necessário substituir as funções contidas nesta inclusão de script na inclusão de script TopicSubscriptionUtil.

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

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

    TopicSubscriptionUtilOOB - executeRegistrationSubflow(cadeia de caracteres topicSubID)

    Aciona um subfluxo de spoke para registrar a assinatura de tópico aprovada em um sistema externo.

    Antes de acionar o fluxo de registro, a função verifica se o registro de assinatura de tópico aprovado contém um URL de retorno de chamada e se o tópico já está registrado. Se essas verificações forem aprovadas, isso acionará um subfluxo de demonstração. Este subfluxo de demonstração é definido como um adaptador no seletor de spoke e executa uma chamada de registro de saída "simulada".

    Esta função é chamada quando um usuário seleciona o botão Registrar no formulário Assinaturas de tópico. O nome do subfluxo de demonstração é definido em Constants.INITIATE_REGISTRATION_PROCESS = "sn_ind_tmf642.initiate_registration_process";

    Você precisa substituir esta função na inclusão de script TopicSubscriptionUtil para definir seu próprio subfluxo personalizado para registrar assinaturas de tópico.

    Nesse subfluxo de registro, você deve criar uma etapa REST, alias de conexão ou outra implementação para chamar um endpoint de registro no sistema externo para registrar um tópico. Este endpoint deve passar o nome do tópico e a URL de retorno de chamada para registrar. Em troca, o endpoint do sistema externo deve retornar o ID de assinatura, se o registro foi bem-sucedido e as informações de registro a serem armazenadas na tabela de assinatura de tópico. Essas informações normalmente incluem o status do registro, a mensagem de registro e os campos de ID de assinatura. Seu subfluxo de registro deve chamar o método updateRegistrationResponse() para armazenar a carga de resposta na tabela de assinatura de tópico.

    Tabela 1. Parâmetros
    Nome Tipo Descrição
    topicSubID Cadeia de caracteres Sys_id do registro de assinatura do tópico a ser registrado.
    Tabela 2. Retorna
    Tipo Descrição
    Nenhum

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

    var TopicSubscriptionUtil= Class.create();  
    
    TopicSubscriptionUtil.prototype =
     Object.extendsObject(TopicSubscriptionUtilOOB, { 
    
      // Define overriding functions here. Pass the topicSubID of the record to be registered for subscription 
      executeRegistrationSubflow: function(topicSubID){ 
        var topicSubGr = new TopicSubscriptionUtil(topicSubID).topicSubscriptionDAO.getGlideRecord(); 
    
        // Customer extensible function to call their defined subflows. Here one can call their own subflow that 
        // will perform registration by giving an endpoint of the external env and parsing and updating the topic Sub 
        // record with Registered information. 
        var registrationFlow = ''; // Pass the subflow name that you want to override here. 
        var inputs = {}; 
        inputs['topic_subscription_rec'] = topicSubGr; 
        try {
          var flowOp = sn_fd.FlowAPI.getRunner().subflow(registrationFlow).inBackground().withInputs(inputs).run(); 
    
        } catch (ex) { 
          gs.addErrorMessage(gs.getMessage(ex + ' Please check the subflow and inputs defined.')); 
    
        } 
      }
      type: TopicSubscriptionUtil 
    });

    TopicSubscriptionUtilOOB – getSubFlowName()

    Retorna o subfluxo a ser usado para o gatilho de subfluxo do seletor de spoke para registrar assinaturas de tópico.

    Normalmente, esta função é chamada a partir da função executeRegistrationSubflow(). Este subfluxo é responsável por entrar em contato com um sistema externo e registrar uma assinatura de tópico. O nome do subfluxo a ser usado é definido em Constants.INITIATE_REGISTRATION_PROCESS.

    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 a implementação de demonstração, este subfluxo é definido como Constants.INITIATE_REGISTRATION_PROCESS = "sn_ind_tmf642.initiate_registration_process";.

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

    var TopicSubscriptionUtil= Class.create();
    TopicSubscriptionUtil.prototype = 
      Object.extendsObject(TopicSubscriptionUtilOOB, { 
    
      // Define overriding functions here. Define a constants and return. 
      // That is your subflow that has the registration process. In current OOB implementation 
      // it’s a spoke selector implementation.
      getSubFlowName: function(){
        var subflowName = '' // Pass your subflow name here
        return subflowName; 
      } 
    
     type: TopicSubscriptionUtil 
    
    });

    TopicSubscriptionUtilOOB - getTopicName(topicSubRefID)

    Retorna o nome do tópico associado ao sys_id aprovado de um registro na tabela Assinatura de tópico [sn_api_notif_mgmt_topic_subscription].

    Tabela 5. Parâmetros
    Nome Tipo Descrição
    topicSubRefID Cadeia de caracteres Sys_id do registro de assinatura de tópico cujo nome de tópico será retornado. Localizado na tabela Assinatura de tópico [sn_api_notif_mgmt_topic_subscription].
    Tabela 6. Retorna
    Tipo Descrição
    Cadeia de caracteres Nome do tópico.

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

    var TopicSubscriptionUtil = Class.create();
    TopicSubscriptionUtil.prototype = 
      Object.extendsObject(TopicSubscriptionUtilOOB, {
    
      // Define overriding functions here. Pass topicSubId or topicId and get topicname from there. 
      getTopicName: function(topicSubRefID){
        var topicSubGr = new TopicSubscriptionUtil(topicSubRefID).topicSubscriptionDAO.getGlideRecord(); 
        var topicRefID = topicSubGr.getValue('topic'); 
        var topicGr = new TopicUtil(topicRefID).topicDAO.getGlideRecord();
        return topicGr.getValue('topic_name');
      } 
    type: TopicSubscriptionUtil 
    }); 

    TopicSubscriptionUtilOOB – getUnregisteredTopicIds()

    Retorna os sys_ids de todos os tópicos não registrados. Tópicos não registrados são aqueles que estão na tabela Tópico [sn_api_notif_mgmt_topic], mas não na tabela Assinatura de tópico [sn_api_notif_mgmt_topic_subscription].

    Tabela 7. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 8. Retorna
    Tipo Descrição
    Matriz Lista de sys_ids dos registros de tópico que ainda não foram registrados.

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

     var TopicSubscriptionUtil= Class.create();
    TopicSubscriptionUtil.prototype = 
      Object.extendsObject(TopicSubscriptionUtilOOB, {
    
      // Define overriding functions here. This method is returning all topic IDs 
      // that are not in the Topic Subscription table. Modify queries here to 
      // return other topics in Topic Subscription table to return either 'Error' or 
      // 'UnRegistered' status topics. 
    
      getUnregisteredTopicIds: function(){ 
        var topicIds = []; 
        var topicSubscriptionGr = TopicSubscriptionDAO.getInSubscriptionTopic(); 
        if (!gs.nil(topicSubscriptionGr)) {
          while (topicSubscriptionGr.next()) { 
            topicIds.push(topicSubscriptionGr.getValue('topic'));
          }
        } 
    
        var unregisteredTopicGr = TopicDAO.getUnregisteredTopic(topicIds); 
        if (!gs.nil(unregisteredTopicGr)) { 
          var unregisterTopicIds = []; 
          while (unregisteredTopicGr.next()) { 
            unregisterTopicIds.push(unregisteredTopicGr.getValue('sys_id')); 
          } 
        } 
    
        return unregisterTopicIds;
      } 
    
      type: TopicSubscriptionUtil 
    });

    TopicSubscriptionUtilOOB - updateRegistrationResponse(objeto RegistrationDetails)

    Atualiza o registro de assinatura de tópico na tabela Assinatura de tópico [sn_api_notif_mgmt_topic_subscription] com os valores da resposta do registro simulado de uma chamada de endpoint de registro de tópico de saída.

    Você pode substituir esta função na inclusão de script TopicSubscriptionUtil para modificar as informações armazenadas no registro de assinatura de tópico associado. Para obter mais informações sobre como executar o subfluxo que retorna os detalhes do registro, consulte executeRegistrationSubflow().

    Tabela 9. Parâmetros
    Nome Tipo Descrição
    Detalhes do registro​ Objeto Para a implementação de demonstração, esta é uma resposta fictícia retornada pela chamada de API de registro de demonstração.

    Se você substituir esta função, a carga de resposta deverá conter pelo menos os seguintes campos de assinatura de tópico:

    • registro_status
    • registro_mensagem
    • subscription_id
    Tabela 10. Retorna
    Tipo Descrição
    Erro Se a chamada for bem-sucedida, nada será retornado. Se ocorreu um erro, ele retorna:
    • status_reason: retornado de uma chamada de spoke que esclarece o motivo da falha quando status_code = 0.
    • errormessage: mensagem de erro que descreve a falha quando status_code não é 0 ou 1, como: "Saída do tipo de solicitação de spoke não definida, verifique o fluxo do adaptador de solicitação".

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

    var TopicSubscriptionUtil= Class.create();
    TopicSubscriptionUtil.prototype = 
      Object.extendsObject(TopicSubscriptionUtilOOB, { 
    
    // Define overriding functions here. Modify this method to parse the registration details 
    // output from a spoke selector flow. You can pass different parameters from the registration response 
    // and map them to the fields in the Topic Subscription table. 
    
      updateRegistrationResponse: function(registrationDetails){
        var reqTypeId = Constants.TOPIC_SUB_REQUEST_TYPE;
        var outputMap = new sn_appss.IntegrationRequestConfigAPI().outputJSONToMap(reqTypeId, registrationDetails.result); 
        var updateTopicSubObj = new sn_tmt_core.BaseObject();
        if (Constants.REGISTRATION_RESPONSE_SUCCESS_CODES.indexOf(responseCode) != -1) {
          updateTopicSubObj.setValue('registration_status', Constants.REGISTRATION_STATUS.REGISTERED); 
          updateTopicSubObj.setValue('registration_message', outputMap.response_body.message);
          updateTopicSubObj.setValue('subscription_id', outputMap.response_body.result.id); 
        }
      } 
      type: TopicSubscriptionUtil 
    
    });

    TopicSubscriptionUtilOOB - updateTopicSubscriptionRec(Object topicSubObj)

    Armazena o registro de assinatura de tópico atual na tabela Assinatura de tópico [sn_api_notif_mgmt_topic_subscription] usando a inserção do DAO.

    Normalmente, você chamará esta função na função updateRegistrationResponse().

    Tabela 11. Parâmetros
    Nome Tipo Descrição
    topicSubObj Objeto Campos a serem atualizados no registro de assinatura de tópico associado. Esta é a carga retornada pelo subfluxo de registro.

    Por exemplo:

    "topicSubObj": {
      "registration_message": "String",
      "registration_status": "String",
      "subscription_id": "String"
    }

    Para obter mais informações, consulte executeRegistrationSubflow().

    Tabela 12. Retorna
    Tipo Descrição
    Cadeia de caracteres Sys_id do registro de assinatura do tópico que foi atualizado.

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

    var TopicSubscriptionUtil= Class.create();
    TopicSubscriptionUtil.prototype = 
      Object.extendsObject(TopicSubscriptionUtilOOB, { 
    
    // Define overriding functions here. Pass a topic subscription record object that contains
    // the values to update in a record.
    
      updateTopicSubRec: function(topicSubObj){
        return this.topicSubscriptionDAO.updateTopicSubscription(topicSubObj); 
      } 
    
    type: TopicSubscriptionUtil 
    
    });

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

    if (!gs.nil(outputMap) && outputMap.status_code == '1') {
      var responseCode = outputMap.response_body.code;
      var topicSubID = registrationDetails.topicSubID;
      var topicSubGr = new TopicSubscriptionUtil(topicSubID).topicSubscriptionDAO.getGlideRecord();
      var updateTopicSubObj = new sn_tmt_core.BaseObject();
      if (Constants.REGISTRATION_RESPONSE_SUCCESS_CODES.indexOf(responseCode) != -1) {
        updateTopicSubObj.setValue('registration_status', Constants.REGISTRATION_STATUS.REGISTERED);
        updateTopicSubObj.setValue('registration_message', outputMap.response_body.message);
        updateTopicSubObj.setValue('subscription_id', outputMap.response_body.result.id);
      } else {
        updateTopicSubObj.setValue('registration_status', Constants.REGISTRATION_STATUS.ERROR);
        updateTopicSubObj.setValue('registration_message', outputMap.response_body.message);
      }
        new TopicSubscriptionUtil(topicSubGr).updateTopicSubscriptionRec(updateTopicSubObj);
        return '';
    } else if (!gs.nil(outputMap) && outputMap.status_code == '0') {
      return outputMap.status_reason;
    } else {
      var errorMsg = 'Spoke Request Type output not set, please check request adapter flow';
      return errorMsg;
    }