TopicSubscriptionUtilOOB : inclus dans le périmètre

  • Rversion finale: Washingtondc
  • Mis à jour 1 févr. 2024
  • 7 minutes de lecture
  • Le script include TopicSubscriptionUtilOOB fournit des méthodes pour interroger et manipuler les enregistrements dans la table Abonnement à une rubrique [sn_api_notif_mgmt_topic_subscription]. Cette classe fonctionne au niveau de la couche de service et interagit avec la classe d’objet d’accès aux données (DAO).

    Ces fonctions sont appelées lorsque le bouton S’inscrire est sélectionné sur le formulaire d’abonnement à une rubrique. Si vous souhaitez modifier la fonctionnalité par défaut de ce script include, vous devez remplacer les fonctions contenues dans ce script include dans le script include TopicSubscriptionUtil .

    Les deux script includes s’exécutent dans l’espace de noms sn_api_notif_mgmt .

    Pour plus d’informations sur les abonnements à des rubriques, reportez-vous à Handling the external events using Telecommunications API notification.

    TopicSubscriptionUtilOOB : executeRegistrationSubflow(String topicSubID)

    Déclenche un flux secondaire de spoke pour enregistrer l’abonnement à la rubrique transmis sur un système externe.

    Avant de déclencher le flux d’inscription, la fonction vérifie si l’enregistrement d’abonnement à une rubrique transmis contient une URL de rappel et si la rubrique est déjà inscrite. Si ces vérifications réussissent, un flux secondaire de démonstration est déclenché. Ce flux secondaire de démonstration est défini comme un adaptateur dans le sélecteur de spoke et effectue un appel d’enregistrement sortant « simulé ».

    Cette fonction est appelée lorsqu’un utilisateur sélectionne le bouton S’inscrire dans le formulaire Abonnements à des rubriques. Le nom du flux secondaire de démonstration est défini dans Constants.INITIATE_REGISTRATION_PROCESS = « sn_ind_tmf642.initiate_registration_process » ;

    Vous devez remplacer cette fonction dans le script include TopicSubscriptionUtil pour définir votre propre flux secondaire personnalisé afin d’enregistrer les abonnements à des rubriques.

    Dans ce flux secondaire d’inscription, vous devez créer une étape REST, un alias de connexion ou une autre implémentation pour appeler un point de terminaison d’inscription sur le système externe afin d’enregistrer une rubrique. Ce point de terminaison doit transmettre le nom de la rubrique et l’URL de rappel pour s’inscrire. En retour, le point de terminaison du système externe doit renvoyer l’ID d’abonnement, si l’inscription a réussi et les informations d’inscription à stocker dans la table Abonnement à une rubrique. Ces informations comprennent généralement les champs État de l’inscription, Message de l’inscription et ID d’abonnement. Votre flux secondaire d’inscription doit ensuite appeler la méthode updateRegistrationResponse() pour stocker la charge utile de la réponse dans la table d’abonnement de rubrique.

    Tableau 1. Paramètres
    Nom Type Description
    topicSubID Chaîne Sys_id de l’enregistrement d’abonnement à la rubrique à enregistrer.
    Tableau 2. Renvoie
    Type Description
    Néant

    L’exemple de code suivant montre comment remplacer cette fonction.

    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()

    Renvoie le flux secondaire à utiliser pour le déclencheur de flux secondaire du sélecteur de spoke afin d’enregistrer les abonnements à une rubrique.

    En règle générale, cette fonction est appelée à partir de la fonction executeRegistrationSubflow(). Ce flux secondaire est chargé de contacter un système externe et d’enregistrer un abonnement à une rubrique. Le nom du flux secondaire à utiliser est défini dans Constants.INITIATE_REGISTRATION_PROCESS.

    Vous pouvez modifier cette fonctionnalité pour inclure le nom de votre propre flux secondaire en remplaçant le nom du flux secondaire à exécuter dans le sn_api_notif_mgmt. Constantes du script include.

    Tableau 3. Paramètres
    Nom Type Description
    Aucun
    Tableau 4. Renvoie
    Type Description
    Chaîne Nom du flux secondaire à utiliser. Pour l’implémentation de démonstration, ce flux secondaire est défini comme suit : Constants.INITIATE_REGISTRATION_PROCESS = « sn_ind_tmf642.initiate_registration_process » ;

    L’exemple de code suivant montre comment remplacer cette fonction.

    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)

    Renvoie le nom de la rubrique associée à la sys_id transmise d’un enregistrement dans la table Abonnement à la rubrique [sn_api_notif_mgmt_topic_subscription].

    Tableau 5. Paramètres
    Nom Type Description
    topicSubRefID Chaîne Sys_id de l’enregistrement d’abonnement à une rubrique dont le nom de la rubrique doit être renvoyé. Situé dans la table Abonnement à la rubrique [sn_api_notif_mgmt_topic_subscription].
    Tableau 6. Renvoie
    Type Description
    Chaîne Nom de la rubrique.

    L’exemple de code suivant montre comment remplacer cette fonction.

    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()

    Renvoie l’sys_ids de toutes les rubriques non enregistrées. Les rubriques non inscrites sont les rubriques qui se trouvent dans la table Rubrique [sn_api_notif_mgmt_topic], mais pas dans la table Abonnement à la rubrique [sn_api_notif_mgmt_topic_subscription].

    Tableau 7. Paramètres
    Nom Type Description
    Aucun
    Tableau 8. Renvoie
    Type Description
    Tableau Liste des enregistrements de sys_ids de rubrique qui n’ont pas encore été enregistrés.

    L’exemple de code suivant montre la mise à jour de cette fonction.

     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(Object registrationDetails)

    Met à jour l’enregistrement d’abonnement à une rubrique dans la table Abonnement à une rubrique [sn_api_notif_mgmt_topic_subscription] avec les valeurs de la réponse d’inscription fictive d’un appel de point de terminaison d’inscription de rubrique sortant.

    Vous pouvez remplacer cette fonction dans le script include TopicSubscriptionUtil pour modifier les informations stockées dans l’enregistrement d’abonnement à la rubrique associé. Pour plus d’informations sur l’exécution du flux secondaire qui renvoie les détails de l’enregistrement, consultez executeRegistrationSubflow().

    Tableau 9. Paramètres
    Nom Type Description
    registrationDetails Objet Pour l’implémentation de démonstration, il s’agit d’une réponse fictive renvoyée par l’appel d’API d’inscription de démonstration.

    Si vous remplacez cette fonction, la charge utile de la réponse doit contenir au moins les champs d’abonnement à la rubrique suivants :

    • registration_status
    • registration_message
    • subscription_id
    Tableau 10. Renvoie
    Type Description
    Erreur Si l’appel aboutit, rien n’est retourné. Si une erreur s’est produite, elle renvoie :
    • status_reason : retour d’un appel de spoke clarifiant le motif de l’échec quand status_code = 0.
    • errormessage : message d’erreur qui décrit l’échec lorsque status_code n’est pas 0 ou 1, par exemple : « Sortie du type de demande de spoke non définie, veuillez vérifier le flux d’adaptateur de demande ».

    L’exemple de code suivant montre comment mettre à jour cette fonction.

    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)

    Stocke l’enregistrement d’abonnement à la rubrique actuel dans la table Abonnement à la rubrique [sn_api_notif_mgmt_topic_subscription] à l’aide de l’insertion DAO.

    En règle générale, vous appellerez cette fonction dans la fonction updateRegistrationResponse().

    Tableau 11. Paramètres
    Nom Type Description
    topicSubObj Objet Champs à mettre à jour dans l’enregistrement d’abonnement à la rubrique associée. Il s’agit de la charge utile renvoyée par le flux secondaire d’inscription.

    Par exemple :

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

    Pour plus d’informations, consultez executeRegistrationSubflow().

    Tableau 12. Renvoie
    Type Description
    Chaîne Sys_id de l’enregistrement d’abonnement à la rubrique qui a été mis à jour.

    L’exemple de code suivant montre comment mettre à jour cette fonction.

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

    L’exemple de code suivant montre comment appeler cette fonction.

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