TopicSubscriptionUtilOOB - 범위 지정됨

  • 릴리스 버전: Washingtondc
  • 업데이트 날짜 2024년 02월 01일
  • 읽기16분
  • TopicSubscriptionUtilOOB 스크립트 포함은 토픽 구독 [sn_api_notif_mgmt_topic_subscription] 테이블의 레코드를 쿼리하고 조작하는 메서드를 제공합니다. 이 클래스는 서비스 계층에서 작동하며 DAO(데이터 액세스 개체) 클래스와 상호 작용합니다.

    이러한 함수는 주제 구독 양식에서 등록 버튼을 선택할 때 호출됩니다. 이 API의 기본 기능을 변경하려면 TopicSubscriptionUtil 스크립트 포함에 포함된 이 스크립트에 포함된 함수를 재정의해야 합니다.

    두 스크립트 포함은 모두 sn_api_notif_mgmt 네임스페이스에서 실행됩니다.

    주제 구독에 대한 자세한 내용은 을 참조하십시오 .

    TopicSubscriptionUtilOOB - executeRegistrationSubflow(문자열 topicSubID)

    스포크 하위 플로우를 트리거하여 전달된 주제 구독을 외부 시스템에 등록합니다.

    등록 플로우를 트리거하기 전에 함수는 전달된 주제 구독 기록에 콜백 URL이 포함되어 있는지 여부와 주제가 이미 등록되어 있는지 여부를 확인합니다. 이러한 검사를 통과하면 데모 하위 플로우가 트리거됩니다. 이 데모 하위 플로우는 스포크 선택기에서 어댑터로 정의되고 "모의" 아웃바운드 등록 호출을 수행합니다.

    이 함수는 사용자가 주제 구독 양식에서 등록 단추를 선택할 때 호출됩니다. 데모 하위 플로우의 이름은 Constants.INITIATE_REGISTRATION_PROCESS = "sn_ind_tmf642.initiate_registration_process";

    TopicSubscriptionUtil 스크립트 포함에서 이 함수를 재정의하여 주제 구독을 등록하는 사용자 지정 하위 플로우를 정의해야 합니다.

    이 등록 하위 플로우 내에서 주제를 등록하려면 외부 시스템의 등록 엔드포인트를 호출하는 REST 단계, 연결 별칭 또는 기타 구현을 만들어야 합니다. 이 엔드포인트는 등록할 토픽 이름과 콜백 URL을 전달해야 합니다. 그 대가로 외부 시스템 엔드포인트는 구독 ID, 등록 성공 여부 및 토픽 구독 테이블에 저장할 등록 정보를 반환해야 합니다. 이 정보에는 일반적으로 등록 상태, 등록 메시지 및 구독 ID 필드가 포함됩니다. 그러면 등록 하위 플로우가 updateRegistrationResponse() 메서드를 호출하여 주제 구독 테이블에 응답 페이로드를 저장해야 합니다.

    표 1. 매개변수
    이름 유형 설명
    topicSubID 문자열 등록할 토픽 구독 기록의 Sys_id입니다.
    표 2. 반환
    유형 설명
    없음

    다음 코드 예제에서는 이 함수를 재정의하는 방법을 보여 줍니다.

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

    주제 구독을 등록하기 위해 스포크 선택기 하위 플로우 트리거에 사용할 하위 플로우를 반환합니다.

    일반적으로 이 함수는 executeRegistrationSubflow() 함수에서 호출됩니다. 이 하위 플로우는 외부 시스템에 연결하고 주제 구독을 등록하는 작업을 담당합니다. 사용할 하위 플로우의 이름은 Constants.INITIATE_REGISTRATION_PROCESS에 정의되어 있습니다.

    sn_api_notif_mgmt에서 실행할 하위 플로우의 이름을 재정의하면 사용자 고유의 하위 플로우의 이름을 포함하도록 이 기능을 변경할 수 있습니다. 상수 스크립트 포함.

    표 3. 매개변수
    이름 유형 설명
    없음
    표 4. 반환
    유형 설명
    문자열 사용할 하위 플로우의 이름입니다. 데모 구현의 경우 이 하위 플로우는 Constants.INITIATE_REGISTRATION_PROCESS = "sn_ind_tmf642.initiate_registration_process";로 정의됩니다.

    다음 코드 예제에서는 이 함수를 재정의하는 방법을 보여 줍니다.

    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)

    토픽 구독 [sn_api_notif_mgmt_topic_subscription] 테이블에서 전달된 기록 sys_id과 관련된 토픽의 이름을 반환합니다.

    표 5. 매개변수
    이름 유형 설명
    topicSubRefID 문자열 반환할 주제 이름이 포함된 주제 구독 기록의 Sys_id입니다. 주제 구독 [sn_api_notif_mgmt_topic_subscription] 테이블에 있습니다.
    표 6. 반환
    유형 설명
    문자열 주제 이름입니다.

    다음 코드 예제에서는 이 함수를 재정의하는 방법을 보여 줍니다.

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

    등록되지 않은 항목의 sys_ids 반환합니다. 등록되지 않은 주제는 주제 [sn_api_notif_mgmt_topic] 테이블에 있지만 주제 구독 [sn_api_notif_mgmt_topic_subscription] 테이블에는 없는 주제입니다.

    표 7. 매개변수
    이름 유형 설명
    없음
    표 8. 반환
    유형 설명
    배열 아직 등록되지 않은 주제 기록의 sys_ids 목록입니다.

    다음 코드 예제에서는 이 함수를 업데이트하는 방법을 보여 줍니다.

     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(registrationDetails 객체)

    아웃바운드 주제 등록 엔드포인트 호출의 모의 등록 응답 값으로 주제 구독 [sn_api_notif_mgmt_topic_subscription] 테이블의 주제 구독 기록을 업데이트합니다.

    TopicSubscriptionUtil 스크립트 포함에서 이 함수를 재정의하여 연결된 토픽 구독 기록에 저장된 정보를 수정할 수 있습니다. 등록 세부 정보를 반환하는 하위 플로우 실행에 대한 자세한 내용은 executeRegistrationSubflow()를 참조하십시오.

    표 9. 매개변수
    이름 유형 설명
    등록 세부 정보 객체 데모 구현의 경우 데모 등록 API 호출에서 반환되는 모의 응답입니다.

    이 함수를 재정의하는 경우 응답 페이로드에는 최소한 다음 주제 구독 필드가 포함되어야 합니다.

    • registration_status
    • registration_message
    • subscription_id
    표 10. 반환
    유형 설명
    오류 호출이 성공하면 아무 것도 반환되지 않습니다. 오류가 발생하면 다음을 반환합니다.
    • status_reason: status_code = 0일 때 실패 사유를 명확히 하는 스포크 호출에서 반환되었습니다.
    • errormessage: "스포크 요청 유형 출력이 설정되지 않았습니다. 요청 어댑터 플로우를 확인하십시오"와 같이 status_code 0 또는 1이 아닌 경우 실패를 설명하는 오류 메시지입니다.

    다음 코드 예제에서는 이 함수를 업데이트하는 방법을 보여 줍니다.

    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(객체: topicSubObj)

    DAO 삽입을 사용하여 현재 토픽 구독 기록을 토픽 구독 [sn_api_notif_mgmt_topic_subscription] 테이블에 저장합니다.

    일반적으로 updateRegistrationResponse() 함수 내에서 이 함수를 호출합니다.

    표 11. 매개변수
    이름 유형 설명
    토픽서브Obj 객체 연결된 주제 구독 기록에서 업데이트할 필드입니다. 등록 하위 플로우에서 반환하는 페이로드입니다.

    예:

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

    자세한 내용은 executeRegistrationSubflow()를 참조하십시오.

    표 12. 반환
    유형 설명
    문자열 업데이트된 토픽 구독 기록의 Sys_id입니다.

    다음 코드 예제에서는 이 함수를 업데이트하는 방법을 보여 줍니다.

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

    다음 코드 예제에서는 이 함수를 호출하는 방법을 보여 줍니다.

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