TopicSubscriptionUtilOOB : dans le champ d’application

  • Rversion finale: Zurich
  • Mis à jour 31 juil. 2025
  • 7 minutes de lecture
  • L’include de script TopicSubscriptionUtilOOB fournit des méthodes pour interroger et manipuler les enregistrements dans la table Abonnement à la 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 Abonnement à une rubrique. Si vous souhaitez modifier la fonctionnalité par défaut de cet include de script, vous devez remplacer les fonctions contenues dans cet include de script dans l’include de script TopicSubscriptionUtil .

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

    Pour plus d’informations sur les abonnements aux rubriques, reportez-vous à la section External event management via Telecommunications API notifications.

    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 à la rubrique transmis contient une URL de rappel et si la rubrique est déjà enregistrée. 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’inscription sortant « fictif ».

    Cette fonction est appelée lorsqu’un utilisateur sélectionne le bouton S’inscrire dans le formulaire Abonnements à la rubrique. 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 l’include de script TopicSubscriptionUtil pour définir votre propre flux secondaire personnalisé afin d’enregistrer les abonnements à la rubrique.

    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 enregistrer. En retour, le point de terminaison du système externe doit renvoyer l’ID de l’abonnement, si l’inscription a réussi et les informations d’inscription à stocker dans la table Abonnement à la rubrique. Ces informations comprennent généralement les champs État de l’inscription, Message d’inscription et ID d’abonnement. Votre flux secondaire d’inscription doit alors appeler la méthode updateRegistrationResponse() pour stocker la charge utile de la réponse dans la table Abonnement à la 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
    Aucun

    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 aux rubriques.

    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. Include de script des constantes .

    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 la démonstration, ce flux secondaire est défini comme 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 au sys_id transmis 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 à la rubrique dont le nom de rubrique doit être renvoyé.

    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 le sys_ids de toutes les rubriques non enregistrées. Les rubriques non inscrites sont celles 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 sys_ids des enregistrements de rubriques 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 à la rubrique dans la table Abonnement à la 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 l’include de script TopicSubscriptionUtil pour modifier les informations stockées dans l’enregistrement d’abonnement à la rubrique associée. Pour plus d’informations sur l’exécution du flux secondaire qui renvoie les détails de l’inscription, consultez executeRegistrationSubflow().

    Tableau 9. Paramètres
    Nom Type Description
    Détails de l’inscription Objet Pour l’implémentation de la 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 aux rubriques 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 : renvoyé d’un appel de spoke clarifiant la raison de l’échec lorsque status_code = 0.
    • errormessage : message d’erreur qui décrit l’échec lorsque status_code n’est pas 0 ou 1, tel que : « Sortie du type de demande de spoke non définie, veuillez vérifier le flux de l’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(Objet 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;
    }