TopicAPIUtilsOOB :スコープ指定
TopicAPIUtilsOOB スクリプトインクルードは、イベント管理トピックオープン API エンドポイントを処理するときに使用されるメソッドを提供します。
イベント管理トピックオープン API のデフォルト機能を変更する場合は、このスクリプトインクルードに含まれる関数を TopicAPIUtils スクリプトインクルードで上書きする必要があります。
このスクリプトインクルードは sn_api_notif_mgmt 名前空間で実行され、sn_api_notif_mgmt.event_mgmt_integration ロールが必要です。
TopicAPIUtilsOOB - createTopicHelper(オブジェクト、topicObject、配列、警告)
イベント管理トピックオープン API - POST /sn_api_notif_mgmt/topic エンドポイントで渡された情報をトピック [sn_api_notif_mgmt_topic] テーブルに挿入します。
この挿入プロセスを変更する場合は、 TopicAPIUtils スクリプトインクルードでこのメソッドを上書きする必要があります。
| 名前 | タイプ | 説明 |
|---|---|---|
| トピックオブジェクト | オブジェクト | イベント管理トピックオープン APIエンドポイントに渡されるトピックペイロードオブジェクト。 例: このオブジェクトのスキーマは、 sn_api_notif_mgmtにあるConstants.SCHEMA.CREATE_TOPIC_SCHEMA で定義されているものと一致する必要があります 。定数スクリプト インクルード。 |
| warnings | アレイ | メソッドで「警告」レベルの問題が発生した場合に、 イベント管理トピックオープン 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()
トピックペイロードを検証するために イベント管理トピックオープン 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/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, 文字列スキーマ, アレイ警告)
イベント管理トピックオープン API - POST /sn_api_notif_mgmt/topic エンドポイントに渡されたペイロードを検証します。この検証は、要求本文とスキーマに対して実行されます。
ペイロードの検証プロセスを変更する場合は、 TopicAPIUtils スクリプトインクルードでこのメソッドを上書きする必要があります。
| 名前 | タイプ | 説明 |
|---|---|---|
| トピックオブジェクト | オブジェクト | イベント管理トピックオープン APIエンドポイントに渡されるトピックペイロードオブジェクト。 例: このオブジェクトのスキーマは、 sn_api_notif_mgmtにあるConstants.SCHEMA.CREATE_TOPIC_SCHEMA で定義されているものと一致する必要があります 。定数スクリプト インクルード。 |
| schema | 文字列 | トピックペイロードの検証に使用するスキーマ。このスキーマを取得するには、 TopicAPIUtilsOOB:getCreateTopicSchema() メソッドを使用します。 |
| warnings | アレイ | メソッドで「警告」レベルの問題が発生した場合に、 イベント管理トピックオープン 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, 配列 warnings)
イベント管理トピックオープン API - POST /sn_api_notif_mgmt/topic エンドポイント呼び出しへの応答を生成して返します。
イベント管理トピックオープン API - POST /sn_api_notif_mgmt/topic エンドポイントによって返される応答オブジェクトをカスタマイズする場合は、TopicAPIUtils スクリプトインクルードでこのメソッドを上書きする必要があります。
| 名前 | タイプ | 説明 |
|---|---|---|
| トピックオブジェクト | オブジェクト | イベント管理トピックオープン APIエンドポイントに渡されるトピックペイロードオブジェクト。 例: このオブジェクトのスキーマは、 sn_api_notif_mgmtにあるConstants.SCHEMA.CREATE_TOPIC_SCHEMA で定義されているものと一致する必要があります 。定数スクリプト インクルード。 |
| トピック SysID | 文字列 | イベント管理トピックオープン API - POST /sn_api_notif_mgmt/topic 呼び出しの一部として作成されたトピックのSys_id。トピック [sn_api_notif_mgmt_topic] テーブルにあります。 |
| warnings | アレイ | メソッドで「警告」レベルの問題が発生した場合に、 イベント管理トピックオープン 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(オブジェクト topicObject, 文字列 topicSysId)
イベント管理トピックオープン API - POST /sn_api_notif_mgmt/topic エンドポイントに返される応答オブジェクトにカスタムデータを追加する機能を提供します。
この応答オブジェクトをカスタマイズするには、 TopicAPIUtils スクリプトインクルードでこのメソッドを上書きします。
| 名前 | タイプ | 説明 |
|---|---|---|
| トピックオブジェクト | オブジェクト | イベント管理トピックオープン APIエンドポイントに渡されるトピックペイロードオブジェクト。 例: このオブジェクトのスキーマは、 sn_api_notif_mgmtにあるConstants.SCHEMA.CREATE_TOPIC_SCHEMA で定義されているものと一致する必要があります 。定数スクリプト インクルード。 |
| トピック SysID | 文字列 | イベント管理トピックオープン 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、配列 details)
イベント管理トピックオープン 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, 配列 details)
イベント管理トピックオープン 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;
},