TopicAPIUtilsOOB - 범위 지정됨
TopicAPIUtilsOOB 스크립트 포함은 이벤트 관리 주제 개방형 API 엔드포인트를 처리할 때 사용되는 메서드를 제공합니다.
이벤트 관리 주제 개방형 API의 기본 기능을 변경하려면 이 스크립트 포함에 포함된 함수를 TopicAPIUtils 스크립트 포함에서 재정의해야 합니다.
이 스크립트 포함은 sn_api_notif_mgmt 네임스페이스에서 실행되며 sn_api_notif_mgmt.event_mgmt_integration 역할이 필요합니다.
TopicAPIUtilsOOB - createTopicHelper(객체 topicObject, 배열 경고)
이벤트 관리 주제 Open API - POST /sn_api_notif_mgmt/topic 엔드포인트에 전달된 정보를 주제 [sn_api_notif_mgmt_topic] 테이블에 삽입합니다.
이 삽입 프로세스를 수정하려면 TopicAPIUtils 스크립트 포함에서 이 메서드를 재정의해야 합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 주제 객체 | 객체 | 엔드포인트에 전달된 주제 페이로드 객체입니다.이벤트 관리 주제 개방형 API 예: 이 객체의 스키마는 sn_api_notif_mgmt에 있는 Constants.SCHEMA.CREATE_TOPIC_SCHEMA 에 정의된 스키마와 일치해야 합니다 . 상수 스크립트 포함. |
| 경고 | 배열 | 메서드에 "경고" 수준에서 문제가 발생할 경우 엔드포인트 응답에 반환 이벤트 관리 주제 개방형 API 할 경고 메시지입니다. 이 매개변수를 사용하면 이 엔드포인트의 구현에 사용자 지정 경고 메시지를 추가할 수 있습니다. 추가 경고 메시지가 없으면 빈 배열을 전달해야 합니다. |
| 유형 | 설명 |
|---|---|
| 객체 | 응답 객체입니다.이러한 매개변수에 대한 자세한 내용은 의 반환 결과를 이벤트 관리 주제 오픈 - 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()
주제 페이로드를 확인하기 위해 이벤트 관리 주제 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\"]
}"| 이름 | 유형 | 설명 |
|---|---|---|
| 안 함 |
| 유형 | 설명 |
|---|---|
| 문자열 | 이벤트 관리 주제 개방형 API - POST /sn_api_notif_mgmt/주제 엔드포인트 페이로드에 대한 스키마입니다. 이 스키마를 사용하여 메서드를 사용하여 엔드포인트에 전달된 스키마의 유효성을 검사합니다.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, 문자열 스키마, 배열 경고)
이벤트 관리 주제 Open API - POST /sn_api_notif_mgmt/topic 엔드포인트에 전달된 페이로드를 확인합니다. 이 유효성 검사는 요청 본문과 스키마에서 수행됩니다.
페이로드에 대한 확인 프로세스를 수정하려면 TopicAPIUtils 스크립트 포함에서 이 메서드를 재정의해야 합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 주제 객체 | 객체 | 엔드포인트에 전달된 주제 페이로드 객체입니다.이벤트 관리 주제 개방형 API 예: 이 객체의 스키마는 sn_api_notif_mgmt에 있는 Constants.SCHEMA.CREATE_TOPIC_SCHEMA 에 정의된 스키마와 일치해야 합니다 . 상수 스크립트 포함. |
| 스키마 | 문자열 | 주제 페이로드를 확인하는 데 사용할 스키마입니다. 이 메서드를 TopicAPIUtilsOOB - getCreateTopicSchema() 사용하여 이 스키마를 가져옵니다. |
| 경고 | 배열 | 메서드에 "경고" 수준에서 문제가 발생할 경우 엔드포인트 응답에 반환 이벤트 관리 주제 개방형 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(Object topicObject, 문자열 topicSysId, 배열 경고)
이벤트 관리 주제 오픈 API - POST /sn_api_notif_mgmt/주제 엔드포인트 호출에 대한 응답을 생성하고 반환합니다.
이벤트 관리 주제 개방형 API - POST /sn_api_notif_mgmt/topic 엔드포인트에서 반환되는 응답 객체를 사용자 지정하려면 TopicAPIUtils 스크립트 포함에서 이 메서드를 재정의해야 합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 주제 객체 | 객체 | 엔드포인트에 전달된 주제 페이로드 객체입니다.이벤트 관리 주제 개방형 API 예: 이 객체의 스키마는 sn_api_notif_mgmt에 있는 Constants.SCHEMA.CREATE_TOPIC_SCHEMA 에 정의된 스키마와 일치해야 합니다 . 상수 스크립트 포함. |
| topicSysId | 문자열 | 이벤트 관리 주제 개방형 API - POST /sn_api_notif_mgmt/주제 호출의 일부로 작성된 주제의 Sys_id입니다. 테이블: 주제 [sn_api_notif_mgmt_topic] |
| 경고 | 배열 | 메서드에 "경고" 수준에서 문제가 발생할 경우 엔드포인트 응답에 반환 이벤트 관리 주제 개방형 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(객체 topicObject)
이벤트 관리 주제 개방형 API 엔드포인트의 요청을 처리합니다.
이 메서드는 데이터 삽입, 스키마 유효성 검사, 요청 본문 유효성 검사 및 응답 오케스트레이션에 필요한 도우미 메서드를 호출합니다. 요청의 기본 처리를 사용자 지정해야 하는 경우 이 방법을 재정의합니다 이벤트 관리 주제 오픈 - POST /sn_api_notif_mgmt/topic . 그렇지 않으면 개별 도우미 메서드를 재정의합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 주제 객체 | 객체 | 엔드포인트에 전달된 주제 페이로드 객체입니다.이벤트 관리 주제 개방형 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(Object topicObject, String topicSysId)
이벤트 관리 주제 Open API - POST /sn_api_notif_mgmt/topic 엔드포인트에 반환된 응답 객체에 사용자 지정 데이터를 추가하는 기능을 제공합니다.
이 응답 객체를 사용자 지정하려면 TopicAPIUtils 스크립트 포함에서 이 메서드를 재정의합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 주제 객체 | 객체 | 엔드포인트에 전달된 주제 페이로드 객체입니다.이벤트 관리 주제 개방형 API 예: 이 객체의 스키마는 sn_api_notif_mgmt에 있는 Constants.SCHEMA.CREATE_TOPIC_SCHEMA 에 정의된 스키마와 일치해야 합니다 . 상수 스크립트 포함. |
| topicSysId | 문자열 | 이벤트 관리 주제 개방형 API - POST /sn_api_notif_mgmt/주제 호출의 일부로 작성된 주제의 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, 배열 상세 정보)
이벤트 관리 주제 Open API 엔드포인트 페이로드에 전달된 주제 이름, 헤더-쿼리, 컨텐츠-쿼리 및 네임스페이스 조합이 고유한지 확인합니다.
엔드포인트는 이 속성 조합을 사용하여 주제가 현재 주제 [sn_api_notif_mgmt_topic] 테이블에 있는지 확인합니다.
유효성 검사 프로세스를 수정하려면 TopicAPIUtils 스크립트 포함에서 이 메서드를 재정의해야 합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 주제 객체 | 객체 | 엔드포인트에 전달된 주제 페이로드 객체입니다.이벤트 관리 주제 개방형 API 예: 이 객체의 스키마는 sn_api_notif_mgmt에 있는 Constants.SCHEMA.CREATE_TOPIC_SCHEMA 에 정의된 스키마와 일치해야 합니다 . 상수 스크립트 포함. |
| 세부사항 | 배열 | 메서드에 "경고" 수준에서 문제가 발생할 경우 엔드포인트 응답에 반환 이벤트 관리 주제 개방형 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, 배열 상세 정보)
이벤트 관리 주제 오픈 API 엔드포인트의 요청 본문에 전달된 주제 외부 ID를 확인합니다.
기본 구현에서 이것은 외부 ID가 비어 있지 않은지 확인만 합니다. 주제 외부 ID에 대한 확인 프로세스를 수정하려면 TopicAPIUtils 스크립트 포함에서 이 메서드를 재정의해야 합니다. 전달된 외부 ID는 주제 [sn_api_notif_mgmt_topic] 테이블의 topic_id 필드에 매핑됩니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 주제 객체 | 객체 | 엔드포인트에 전달된 주제 페이로드 객체입니다.이벤트 관리 주제 개방형 API 예: 이 객체의 스키마는 sn_api_notif_mgmt에 있는 Constants.SCHEMA.CREATE_TOPIC_SCHEMA 에 정의된 스키마와 일치해야 합니다 . 상수 스크립트 포함. |
| 세부사항 | 배열 | 메서드에 "오류" 수준에서 문제가 발생할 경우 엔드포인트 응답에 반환 이벤트 관리 주제 개방형 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;
},