TopicAPIUtilsOOB - 범위 지정됨
TopicAPIUtilsOOB 스크립트 포함은 Event Management Topic Open API 엔드포인트를 처리할 때 사용되는 메서드를 제공합니다.
Event Management Topic Open API의 기본 기능을 변경하려면 TopicAPIUtils 스크립트 포함에 포함된 이 스크립트에 포함된 함수를 재정의해야 합니다.
이 API는 sn-api-notif-mgmt 네임스페이스에서 실행되며 sn_api_notif_mgmt.event_mgmt_integration 역할이 필요합니다.
TopicAPIUtilsOOB - createTopicHelper(객체: topicObject, 배열 경고)
Event Management Topic Open API - POST /sn_api_notif_mgmt/topic 엔드포인트에 전달된 정보를 Topic [sn_api_notif_mgmt_topic] 테이블에 삽입합니다.
이 삽입 프로세스를 수정하려면 TopicAPIUtils 스크립트 포함에서 이 메서드를 재정의해야 합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| topic객체 | 객체 | 엔드포인트에 전달되는 주제 페이로드 객체입니다 Event Management 주제 Open API . 예: 이 개체의 스키마는 sn_api_notif_mgmt에 있는 Constants.SCHEMA.CREATE_TOPIC_SCHEMA 에 정의된 스키마와 일치해야 합니다 . 상수 스크립트 포함. |
| 경고 | 배열 | 메서드에 "경고" 수준에서 문제가 발생하는 경우 엔드포인트 응답에 반환 Event Management 주제 Open API 할 경고 메시지입니다. 이 매개 변수를 사용하면 이 끝점의 구현에 사용자 지정 경고 메시지를 추가할 수 있습니다. 추가 경고 메시지가 없으면 빈 배열을 전달해야 합니다. |
| 유형 | 설명 |
|---|---|
| 객체 | 응답 객체입니다.이러한 매개 변수에 대한 자세한 내용은 의 반환 결과를 Event Management 주제 열기 - POST /sn_api_notif_mgmt/topic참조하십시오. |
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.
processTopicCreation: function(topicObject) {
try {
var warnings = [];
var schema = this.getCreateTopicSchema();
if (!this.isValidCreateTopicPayload(topicObject, schema, warnings)) {
this._logger.logDebug("Create Topic : validation failed");
return this.response;
}
this.createTopicHelper(topicObject, warnings);
this._logger.logDebug("Create Topic: Topic created succesfully");
} catch (ex) {
this._logger.logErr("Create Topic : Process aborted, error is: " + ex);
var errorObj = this.apiCoreUtil.getErrorObj(sn_tmt_core.Constants.ERROR_CODES.INTERNAL_ERROR, Constants.MESSAGES.TOPIC_CREATE_ERROR, Constants.MESSAGES.TOPIC_CREATE_ERROR);
var details = [];
details.push(this.apiCoreUtil.getErrorDetailsObj(ex.message + '', ''));
errorObj.details = details;
this.response.details = errorObj;
}
return this.response;
},
TopicAPIUtilsOOB - getCreateTopicSchema()
주제 페이로드를 확인하기 위해 Event Management Topic Open API - POST /sn_api_notif_mgmt/topic 엔드포인트에서 사용하는 페이로드에 대해 정의된 스키마를 반환합니다.
CREATE_TOPIC_SCHEMA: "{
\"title\":\"Topic\",
\"type\":\"object\",
\"properties\":{
\"name\":{
\"type\":\"string\"
},
\"contentQuery\":{
\"type\":\"string\"
},
\"headerQuery\":{
\"type\":\"string\"
},
\"namespace\":{
\"type\":\"string\"
}
},
\"required\":[\"name\"]
}"| 이름 | 유형 | 설명 |
|---|---|---|
| 없음 |
| 유형 | 설명 |
|---|---|
| 문자열 | Event Management 주제 Open API - POST /sn_api_notif_mgmt/topic 엔드포인트 페이로드에 대한 스키마입니다. 이 스키마를 사용하여 메서드를 통해 끝점에 전달된 스키마의 유효성을 검사합니다 TopicAPIUtilsOOB - isValidCreateTopicPayload(객체 topicObject, 문자열 스키마, 배열 경고) . |
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.
processTopicCreation: function(topicObject) {
try {
var warnings = [];
var schema = this.getCreateTopicSchema();
if (!this.isValidCreateTopicPayload(topicObject, schema, warnings)) {
this._logger.logDebug("Create Topic : validation failed");
return this.response;
}
this.createTopicHelper(topicObject, warnings);
this._logger.logDebug("Create Topic: Topic created succesfully");
} catch (ex) {
this._logger.logErr("Create Topic : Process aborted, error is: " + ex);
var errorObj = this.apiCoreUtil.getErrorObj(sn_tmt_core.Constants.ERROR_CODES.INTERNAL_ERROR, Constants.MESSAGES.TOPIC_CREATE_ERROR, Constants.MESSAGES.TOPIC_CREATE_ERROR);
var details = [];
details.push(this.apiCoreUtil.getErrorDetailsObj(ex.message + '', ''));
errorObj.details = details;
this.response.details = errorObj;
}
return this.response;
},
TopicAPIUtilsOOB - isValidCreateTopicPayload(객체 topicObject, 문자열 스키마, 배열 경고)
Event Management Topic Open API - POST /sn_api_notif_mgmt/topic 엔드포인트에 전달되는 페이로드의 유효성을 확인합니다. 이 유효성 검사는 요청 본문과 스키마에서 수행됩니다.
페이로드에 대한 유효성 검사 프로세스를 수정하려면 TopicAPIUtils 스크립트 포함에서 이 메서드를 재정의해야 합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| topic객체 | 객체 | 엔드포인트에 전달되는 주제 페이로드 객체입니다 Event Management 주제 Open API . 예: 이 개체의 스키마는 sn_api_notif_mgmt에 있는 Constants.SCHEMA.CREATE_TOPIC_SCHEMA 에 정의된 스키마와 일치해야 합니다 . 상수 스크립트 포함. |
| schema | 문자열 | 주제 페이로드를 확인하는 데 사용할 스키마입니다. TopicAPIUtilsOOB - getCreateTopicSchema() 메서드를 사용하여 이 스키마를 가져옵니다. |
| 경고 | 배열 | 메서드에 "경고" 수준에서 문제가 발생하는 경우 엔드포인트 응답에 반환 Event Management 주제 Open API 할 경고 메시지입니다. 이 매개 변수를 사용하면 이 끝점의 구현에 사용자 지정 경고 메시지를 추가할 수 있습니다. 추가 경고 메시지가 없으면 빈 배열을 전달해야 합니다. |
| 유형 | 설명 |
|---|---|
| 부울 | 매개변수에 전달된 페이로드가 topicObject 스키마 및 요청 본문 유효성 검사를 통과했는지 여부를 나타내는 플래그입니다. 유효한 값은 다음과 같습니다.
|
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.
processTopicCreation: function(topicObject) {
try {
var warnings = [];
var schema = this.getCreateTopicSchema();
if (!this.isValidCreateTopicPayload(topicObject, schema, warnings)) {
this._logger.logDebug("Create Topic : validation failed");
return this.response;
}
this.createTopicHelper(topicObject, warnings);
this._logger.logDebug("Create Topic: Topic created succesfully");
} catch (ex) {
this._logger.logErr("Create Topic : Process aborted, error is: " + ex);
var errorObj = this.apiCoreUtil.getErrorObj(sn_tmt_core.Constants.ERROR_CODES.INTERNAL_ERROR, Constants.MESSAGES.TOPIC_CREATE_ERROR, Constants.MESSAGES.TOPIC_CREATE_ERROR);
var details = [];
details.push(this.apiCoreUtil.getErrorDetailsObj(ex.message + '', ''));
errorObj.details = details;
this.response.details = errorObj;
}
return this.response;
},
TopicAPIUtilsOOB - prepareCreateTopicResponse(객체 topicObject, 문자열 topicSysId, 배열 경고)
Event Management Topic Open API - POST /sn_api_notif_mgmt/topic 엔드포인트 호출에 대한 응답을 생성하고 반환합니다.
Event Management Topic Open API - POST /sn_api_notif_mgmt/topic 엔드포인트에서 반환된 응답 개체를 사용자 지정하려면 TopicAPIUtils 스크립트 포함에서 이 메서드를 재정의해야 합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| topic객체 | 객체 | 엔드포인트에 전달되는 주제 페이로드 객체입니다 Event Management 주제 Open API . 예: 이 개체의 스키마는 sn_api_notif_mgmt에 있는 Constants.SCHEMA.CREATE_TOPIC_SCHEMA 에 정의된 스키마와 일치해야 합니다 . 상수 스크립트 포함. |
| topicSysId | 문자열 | Event Management 주제 오픈 API - POST /sn_api_notif_mgmt/topic 호출의 일부로 작성된 주제의 Sys_id입니다. 주제 [sn_api_notif_mgmt_topic] 테이블에 있습니다. |
| 경고 | 배열 | 메서드에 "경고" 수준에서 문제가 발생하는 경우 엔드포인트 응답에 반환 Event Management 주제 Open API 할 경고 메시지입니다. 이 매개 변수를 사용하면 이 끝점의 구현에 사용자 지정 경고 메시지를 추가할 수 있습니다. 추가 경고 메시지가 없으면 빈 배열을 전달해야 합니다. |
| 유형 | 설명 |
|---|---|
| 객체 | 엔드포인트 응답 객체입니다. 예: |
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.
createTopicHelper: function(topicObject, warnings) {
var topicObj = new sn_tmt_core.BaseObject();
topicObj.setValue('topic_name', topicObject.name);
if (!gs.nil(topicObject.headerQuery))
topicObj.setValue('header_query', topicObject.headerQuery);
if (!gs.nil(topicObject.contentQuery))
topicObj.setValue('content_query', topicObject.contentQuery);
if (!gs.nil(topicObject.namespace))
topicObj.setValue('namespace', topicObject.namespace);
if (!gs.nil(topicObject.externalId))
topicObj.setValue('topic_id', topicObject.externalId);
topicObj.setValue('type', "egress");
topicObj.setValue('user_created', false);
new TopicUtil().createTopic(topicObj);
// If topic external id is passed by external system, add it in topic id field. This will act as an external id for us.
var topicGr = TopicDAO.getTopicByNameHeaderContentNamespace(topicObject.name, topicObject.headerQuery, topicObject.contentQuery, topicObject.namespace, '');
if (topicGr && topicGr.next())
var newTopicSysId = topicGr.getValue('sys_id');
this.prepareCreateTopicResponse(topicObject, newTopicSysId, warnings);
return this.response;
},
TopicAPIUtilsOOB - processTopicCreation(object: topicObject)
Event Management 주제 Open API 엔드포인트에서 제출한 요청을 처리합니다.
이 메서드는 데이터 삽입, 스키마 유효성 검사, 요청 본문 유효성 검사 및 응답 오케스트레이션에 필요한 도우미 메서드를 호출합니다. 요청의 Event Management 주제 열기 - POST /sn_api_notif_mgmt/topic 기본 처리를 사용자 지정해야 하는 경우 이 메서드를 재정의합니다. 그렇지 않으면 개별 도우미 메서드를 재정의합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| topic객체 | 객체 | 엔드포인트에 전달되는 주제 페이로드 객체입니다 Event Management 주제 Open API . 예: 이 개체의 스키마는 sn_api_notif_mgmt에 있는 Constants.SCHEMA.CREATE_TOPIC_SCHEMA 에 정의된 스키마와 일치해야 합니다 . 상수 스크립트 포함. |
| 유형 | 설명 |
|---|---|
| 객체 | 엔드포인트 응답 객체입니다. 예: |
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.
try {
var topicAPIUtils = new TopicAPIUtils();
var apiResponse = topicAPIUtils.processTopicCreation(request.body.data);
response.setStatus(apiResponse.status);
return tsmOpenAPIUtil.responseBuilder(response, apiResponse.details);
}
TopicAPIUtilsOOB - transformCreateTopicResponse(객체: topicObject, 문자열 topicSysId)
Event Management Topic Open API - POST /sn_api_notif_mgmt/topic 엔드포인트에 반환된 응답 객체에 사용자 지정 데이터를 추가하는 기능을 제공합니다.
이 응답 개체를 사용자 지정하려면 TopicAPIUtils 스크립트 포함에서 이 메서드를 재정의합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| topic객체 | 객체 | 엔드포인트에 전달되는 주제 페이로드 객체입니다 Event Management 주제 Open API . 예: 이 개체의 스키마는 sn_api_notif_mgmt에 있는 Constants.SCHEMA.CREATE_TOPIC_SCHEMA 에 정의된 스키마와 일치해야 합니다 . 상수 스크립트 포함. |
| topicSysId | 문자열 | Event Management 주제 오픈 API - POST /sn_api_notif_mgmt/topic 호출의 일부로 작성된 주제의 Sys_id입니다. 주제 [sn_api_notif_mgmt_topic] 테이블에 있습니다. 이 기록의 정보를 주제 응답 객체에 추가할 수 있습니다. |
| 유형 | 설명 |
|---|---|
| 객체 | 변환된 엔드포인트 응답 객체입니다. 이 개체는 TMF688 규격이어야 합니다. 예: |
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.
prepareCreateTopicResponse: function(topicObject, topicSysId, warnings) {
if (!gs.nil(topicSysId)) {
topicObject.id = topicSysId;
this.response.status = sn_tmt_core.Constants.STATUS_CODES.CREATED;
topicObject = this.transformCreateTopicResponse(topicObject, topicSysId); // Customize response payload as per requirement.
this.response.details = topicObject;
if (!gs.nil(warnings) && warnings.length > 0) {
this.response.details.warnings = warnings;
}
} else {
var errorObj = this.apiCoreUtil.getErrorObj(sn_tmt_core.Constants.ERROR_CODES.INTERNAL_ERROR, Constants.MESSAGES.CREATE_TOPIC_ERROR, Constants.MESSAGES.CREATE_TOPIC_ERROR);
var details = [];
details.push(this.apiCoreUtil.getErrorDetailsObj(Constants.MESSAGES.CREATE_TOPIC_ERROR, ''));
errorObj.details = details;
this.response.details = errorObj;
}
},
다음 코드 예제에서는 이 메서드의 기본 기능을 재정의하는 코드를 보여 줍니다.
transformCreateTopicResponse: function(topicObject, topicSysId) {
new sn_tmt_core.BaseAPIUtil().removeNulls(topicObject);
// Add custom attributes to the topicObject
topicObject.origin = “ServiceNow”,
topicObject.ServiceId= “service001”,
return topicObject;
},
TopicAPIUtilsOOB - validateTopicAttributes(객체, topicObject, 배열 상세 정보)
Event Management 주제 Open API 엔드포인트 페이로드에 전달된 주제 이름, 헤더-쿼리, 컨텐츠-쿼리 및 네임스페이스 조합이 고유한지 여부를 확인합니다.
엔드포인트는 이 속성 조합을 사용하여 주제가 현재 주제 [sn_api_notif_mgmt_topic] 테이블에 있는지 여부를 확인합니다.
유효성 검사 프로세스를 수정하려면 TopicAPIUtils 스크립트 포함에서 이 메서드를 재정의해야 합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| topic객체 | 객체 | 엔드포인트에 전달되는 주제 페이로드 객체입니다 Event Management 주제 Open API . 예: 이 개체의 스키마는 sn_api_notif_mgmt에 있는 Constants.SCHEMA.CREATE_TOPIC_SCHEMA 에 정의된 스키마와 일치해야 합니다 . 상수 스크립트 포함. |
| 상세 정보 | 배열 | 메서드에 "경고" 수준에서 문제가 발생하는 경우 엔드포인트 응답에 반환 Event Management 주제 Open API 할 경고 메시지입니다. 이 매개 변수를 사용하면 이 끝점의 구현에 사용자 지정 경고 메시지를 추가할 수 있습니다. 추가 경고 메시지가 없으면 빈 배열을 전달해야 합니다. |
| 유형 | 설명 |
|---|---|
| 부울 | 매개변수에 전달된 주제 이름, 헤더-쿼리, 컨텐츠-쿼리 및 네임스페이스 조합이 고유한지 여부를 나타내는 플래그입니다 topicObject . 유효한 값은 다음과 같습니다.
|
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.
isValidCreateTopicPayload: function(topicObject, schema, warnings) {
var isValidPayload = true;
var details = [];
var validationResults = this.jsonSchemaValidation.validateJSON(topicObject, schema, ''); // Schema validation
var errorObj = this.apiCoreUtil.getErrorObj(sn_tmt_core.Constants.ERROR_CODES.MISSING_BODY_FIELD, sn_tmt_core.Constants.MESSAGES.MISSING_BODY_FIELD, sn_tmt_core.Constants.MESSAGES.MISSING_BODY_FIELD);
if (validationResults.length > 0) {
if (validationResults[0].message == Constants.PAYLOAD_MISSING) {
this._logger.logDebug("isValidCreateTopicPayload: Missing request body, invalid payload");
errorObj = this.apiCoreUtil.getErrorObj(sn_tmt_core.Constants.ERROR_CODES.MISSING_BODY, sn_tmt_core.Constants.MESSAGES.MISSING_BODY, sn_tmt_core.Constants.MESSAGES.MISSING_BODY);
details.push(this.apiCoreUtil.getErrorDetailsObj(sn_tmt_core.Constants.MESSAGES.MISSING_BODY, ''));
errorObj.details = details;
this.response.details = errorObj;
return false;
} else {
for (var i = 0; i < validationResults.length; i++) {
var missingFieldMsg = sn_tmt_core.Constants.MESSAGES.MISSING_FIELD_KEY;
var message = validationResults[i].message;
var errorMessage = '';
if (message.indexOf('missing') != -1) {
var newMessage = this.apiCoreUtil.constructErrorMsg(message, validationResults[i].dataPath);
errorMessage = missingFieldMsg.replace(/\$key/g, newMessage);
} else {
errorMessage = message;
}
details.push(this.apiCoreUtil.getErrorDetailsObj(errorMessage, validationResults[i].dataPath));
}
}
isValidPayload = false;
}
var isValidTopicExternalId = this.validateTopicExternalId(topicObject, details);
var isValidTopicAttributes = this.validatateTopicAttributes(topicObject, details);
isValidPayload = isValidPayload && isValidTopicExternalId && isValidTopicAttributes;
if (!isValidPayload) {
errorObj.details = details;
this.response.details = errorObj;
}
return isValidPayload;
},
TopicAPIUtilsOOB - validateTopicExternalId(객체, topicObject, 배열 상세 정보)
Event Management 주제 오픈 API 엔드포인트의 요청 본문에 전달된 주제 외부 ID의 유효성을 확인합니다.
기본 구현에서 이는 외부 ID가 비어 있지 않은지만 확인합니다. 토픽 외부 ID에 대한 유효성 검사 프로세스를 수정하려면 TopicAPIUtils 스크립트 포함에서 이 메서드를 재정의해야 합니다. 전달된 외부 ID는 주제 [sn_api_notif_mgmt_topic] 테이블의 topic_id 필드에 매핑됩니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| topic객체 | 객체 | 엔드포인트에 전달되는 주제 페이로드 객체입니다 Event Management 주제 Open API . 예: 이 개체의 스키마는 sn_api_notif_mgmt에 있는 Constants.SCHEMA.CREATE_TOPIC_SCHEMA 에 정의된 스키마와 일치해야 합니다 . 상수 스크립트 포함. |
| 상세 정보 | 배열 | 메서드에 Event Management 주제 Open API "오류" 수준에서 문제가 발생하는 경우 엔드포인트 응답에 반환할 오류/세부 정보 메시지입니다. 이 매개 변수를 사용하면 이 끝점의 구현에 사용자 지정 오류 메시지를 추가할 수 있습니다. 추가 오류 메시지가 없는 경우 빈 배열을 전달해야 합니다. |
| 유형 | 설명 |
|---|---|
| 부울 | 매개변수에 topicObject 전달된 외부 ID가 유효한지 여부를 나타내는 플래그입니다. 유효한 값은 다음과 같습니다.
|
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.
isValidCreateTopicPayload: function(topicObject, schema, warnings) {
var isValidPayload = true;
var details = [];
var validationResults = this.jsonSchemaValidation.validateJSON(topicObject, schema, ''); // Schema validation
var errorObj = this.apiCoreUtil.getErrorObj(sn_tmt_core.Constants.ERROR_CODES.MISSING_BODY_FIELD, sn_tmt_core.Constants.MESSAGES.MISSING_BODY_FIELD, sn_tmt_core.Constants.MESSAGES.MISSING_BODY_FIELD);
if (validationResults.length > 0) {
if (validationResults[0].message == Constants.PAYLOAD_MISSING) {
this._logger.logDebug("isValidCreateTopicPayload: Missing request body, invalid payload");
errorObj = this.apiCoreUtil.getErrorObj(sn_tmt_core.Constants.ERROR_CODES.MISSING_BODY, sn_tmt_core.Constants.MESSAGES.MISSING_BODY, sn_tmt_core.Constants.MESSAGES.MISSING_BODY);
details.push(this.apiCoreUtil.getErrorDetailsObj(sn_tmt_core.Constants.MESSAGES.MISSING_BODY, ''));
errorObj.details = details;
this.response.details = errorObj;
return false;
} else {
for (var i = 0; i < validationResults.length; i++) {
var missingFieldMsg = sn_tmt_core.Constants.MESSAGES.MISSING_FIELD_KEY;
var message = validationResults[i].message;
var errorMessage = '';
if (message.indexOf('missing') != -1) {
var newMessage = this.apiCoreUtil.constructErrorMsg(message, validationResults[i].dataPath);
errorMessage = missingFieldMsg.replace(/\$key/g, newMessage);
} else {
errorMessage = message;
}
details.push(this.apiCoreUtil.getErrorDetailsObj(errorMessage, validationResults[i].dataPath));
}
}
isValidPayload = false;
}
var isValidTopicExternalId = this.validateTopicExternalId(topicObject, details);
var isValidTopicAttributes = this.validatateTopicAttributes(topicObject, details);
isValidPayload = isValidPayload && isValidTopicExternalId && isValidTopicAttributes;
if (!isValidPayload) {
errorObj.details = details;
this.response.details = errorObj;
}
return isValidPayload;
},