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 スクリプトインクルードでこのメソッドを上書きする必要があります。
| 名前 | タイプ | 説明 |
|---|---|---|
| topicObject | オブジェクト | イベント管理トピックオープン 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 スクリプトインクルードでこのメソッドを上書きする必要があります。
| 名前 | タイプ | 説明 |
|---|---|---|
| topicObject | オブジェクト | イベント管理トピックオープン API エンドポイントに渡されるトピックペイロードオブジェクト。 たとえば、次のようになります。 このオブジェクトのスキーマは、 sn_api_notif_mgmtにあるConstants.SCHEMA.CREATE_TOPIC_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, アレイの警告)
イベント管理トピックオープン API - POST /sn_api_notif_mgmt/topic エンドポイント呼び出しへの応答を生成して返します。
イベント管理トピックオープン API - POST /sn_api_notif_mgmt/topic エンドポイントによって返される応答オブジェクトをカスタマイズする場合は、TopicAPIUtils スクリプトインクルードでこのメソッドを上書きする必要があります。
| 名前 | タイプ | 説明 |
|---|---|---|
| topicObject | オブジェクト | イベント管理トピックオープン API エンドポイントに渡されるトピックペイロードオブジェクト。 たとえば、次のようになります。 このオブジェクトのスキーマは、 sn_api_notif_mgmtにあるConstants.SCHEMA.CREATE_TOPIC_SCHEMA で定義されているものと一致する必要があります 。定数 スクリプトインクルード。 |
| topicSysId | 文字列 | イベント管理トピックオープン 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要求の基本的な処理をカスタマイズする必要がある場合は、このメソッドを上書きします。それ以外の場合は、個々のヘルパーメソッドを上書きします。
| 名前 | タイプ | 説明 |
|---|---|---|
| topicObject | オブジェクト | イベント管理トピックオープン 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 スクリプトインクルードでこのメソッドを上書きします。
| 名前 | タイプ | 説明 |
|---|---|---|
| topicObject | オブジェクト | イベント管理トピックオープン API エンドポイントに渡されるトピックペイロードオブジェクト。 たとえば、次のようになります。 このオブジェクトのスキーマは、 sn_api_notif_mgmtにあるConstants.SCHEMA.CREATE_TOPIC_SCHEMA で定義されているものと一致する必要があります 。定数 スクリプトインクルード。 |
| topicSysId | 文字列 | イベント管理トピックオープン 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、アレイの詳細)
イベント管理トピックオープン API エンドポイントペイロードで渡されたトピック名、ヘッダークエリ、コンテンツクエリ、および名前空間の組み合わせが一意であるかどうかを検証します。
エンドポイントは、この属性の組み合わせを使用して、トピックが現在トピック [sn_api_notif_mgmt_topic] テーブルに存在するかどうかを判断します。
検証プロセスを変更する場合は、 TopicAPIUtils スクリプトインクルードでこのメソッドを上書きする必要があります。
| 名前 | タイプ | 説明 |
|---|---|---|
| topicObject | オブジェクト | イベント管理トピックオープン API エンドポイントに渡されるトピックペイロードオブジェクト。 たとえば、次のようになります。 このオブジェクトのスキーマは、 sn_api_notif_mgmtにあるConstants.SCHEMA.CREATE_TOPIC_SCHEMA で定義されているものと一致する必要があります 。定数 スクリプトインクルード。 |
| details | アレイ | メソッドが「警告」のレベルで問題が発生した場合に、 イベント管理トピックオープン 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 フィールドにマッピングされます。
| 名前 | タイプ | 説明 |
|---|---|---|
| topicObject | オブジェクト | イベント管理トピックオープン API エンドポイントに渡されるトピックペイロードオブジェクト。 たとえば、次のようになります。 このオブジェクトのスキーマは、 sn_api_notif_mgmtにあるConstants.SCHEMA.CREATE_TOPIC_SCHEMA で定義されているものと一致する必要があります 。定数 スクリプトインクルード。 |
| details | アレイ | メソッドが「エラー」のレベルで問題が発生した場合に、 イベント管理トピックオープン 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;
},