TopicAPIUtilsOOB - スコープ指定
TopicAPIUtilsOOB スクリプトインクルードは、Event Management トピックオープン API エンドポイントを処理するときに使用されるメソッドを提供します。
Event Management トピックオープン API のデフォルト機能を変更する場合は、TopicAPIUtils スクリプトインクルードでこのスクリプトインクルードに含まれる関数を上書きする必要があります。
この API は sn-api-notif-mgmt 名前空間で実行され、sn_api_notif_mgmt.event_mgmt_integration ロールが必要です。
TopicAPIUtilsOOB - createTopicHelper(オブジェクト topicObject, アレイ warnings)
Event Management トピックオープン API - POST /sn_api_notif_mgmt/topic エンドポイントに渡された情報をトピック [sn_api_notif_mgmt_topic] テーブルに挿入します。
この挿入プロセスを変更する場合は、 TopicAPIUtils スクリプトインクルードでこのメソッドを上書きする必要があります。
| 名前 | タイプ | 説明 |
|---|---|---|
| トピックオブジェクト | オブジェクト | エンドポイントに渡される Event Management トピックオープン API トピックペイロードオブジェクト。 たとえば、次のようになります。 このオブジェクトのスキーマは 、sn_api_notif_mgmtにあるConstants.SCHEMA.CREATE_TOPIC_SCHEMA で定義されているものと一致する必要があります 。定数スクリプトイン クルード。 |
| 警告 | アレイ | メソッドで「警告」レベルの問題が発生した場合にエンドポイント応答で Event Management トピックオープン 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 トピックオープン 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 トピックオープン API - POST /sn_api_notif_mgmt/topic エンドポイントペイロードのスキーマ。このスキーマを使用して、メソッドを使用してエンドポイントに渡され TopicAPIUtilsOOB - isValidCreateTopicPayload(オブジェクト topicObject, 文字列 schema, アレイ warnings) るスキーマを検証します。 |
次のコード例は、このメソッドを呼び出す方法を示しています。
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, 文字列 schema, アレイ warnings)
Event Management トピックオープン API - POST /sn_api_notif_mgmt/topic エンドポイントに渡されるペイロードを検証します。この検証は、要求本文とスキーマで実行されます。
ペイロードの検証プロセスを変更する場合は、 TopicAPIUtils スクリプトインクルードでこのメソッドを上書きする必要があります。
| 名前 | タイプ | 説明 |
|---|---|---|
| トピックオブジェクト | オブジェクト | エンドポイントに渡される Event Management トピックオープン API トピックペイロードオブジェクト。 たとえば、次のようになります。 このオブジェクトのスキーマは 、sn_api_notif_mgmtにあるConstants.SCHEMA.CREATE_TOPIC_SCHEMA で定義されているものと一致する必要があります 。定数スクリプトイン クルード。 |
| schema | 文字列 | トピックペイロードを検証するために使用するスキーマ。TopicAPIUtilsOOB - getCreateTopicSchema()このメソッドを使用して、このスキーマを取得します。 |
| 警告 | アレイ | メソッドで「警告」レベルの問題が発生した場合にエンドポイント応答で Event Management トピックオープン 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)
Event Management トピックオープン API - POST /sn_api_notif_mgmt/topic エンドポイント呼び出しへの応答を生成して返します。
Event Management トピックオープン API - POST /sn_api_notif_mgmt/topic エンドポイントによって返される応答オブジェクトをカスタマイズする場合は、TopicAPIUtils スクリプトインクルードでこのメソッドを上書きする必要があります。
| 名前 | タイプ | 説明 |
|---|---|---|
| トピックオブジェクト | オブジェクト | エンドポイントに渡される Event Management トピックオープン 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 トピックオープン 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)
Event Management トピックオープン API エンドポイントによって作成された要求を処理します。
このメソッドは、データ挿入、スキーマ検証、要求本文の検証、および応答オーケストレーションに必要なヘルパーメソッドを呼び出します。要求の基本的な処理をカスタマイズする必要がある場合は、 Event Management トピックオープン - POST /sn_api_notif_mgmt/topic このメソッドを上書きします。それ以外の場合は、個々のヘルパー メソッドをオーバーライドします。
| 名前 | タイプ | 説明 |
|---|---|---|
| トピックオブジェクト | オブジェクト | エンドポイントに渡される Event Management トピックオープン 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 トピックオープン API - POST /sn_api_notif_mgmt/topic エンドポイントに返される応答オブジェクトにカスタムデータを追加する機能を提供します。
この応答オブジェクトをカスタマイズするには、 TopicAPIUtils スクリプトインクルードでこのメソッドを上書きします。
| 名前 | タイプ | 説明 |
|---|---|---|
| トピックオブジェクト | オブジェクト | エンドポイントに渡される Event Management トピックオープン 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, アレイ details)
Event Management トピックオープン API エンドポイントペイロードで渡されたトピック名、ヘッダークエリ、コンテンツクエリ、および名前空間の組み合わせが一意かどうかを検証します。
エンドポイントは、この属性の組み合わせを使用して、トピックがトピック [sn_api_notif_mgmt_topic] テーブルに現在存在するかどうかを判断します。
検証プロセスを変更する場合は、 TopicAPIUtils スクリプトインクルードでこのメソッドを上書きする必要があります。
| 名前 | タイプ | 説明 |
|---|---|---|
| トピックオブジェクト | オブジェクト | エンドポイントに渡される Event Management トピックオープン API トピックペイロードオブジェクト。 たとえば、次のようになります。 このオブジェクトのスキーマは 、sn_api_notif_mgmtにあるConstants.SCHEMA.CREATE_TOPIC_SCHEMA で定義されているものと一致する必要があります 。定数スクリプトイン クルード。 |
| details | アレイ | メソッドで「警告」レベルの問題が発生した場合にエンドポイント応答で Event Management トピックオープン 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)
Event Management トピックオープン API エンドポイントの要求本文で渡されたトピック外部 ID を検証します。
基本実装では、これは外部 ID が空でないことを確認するだけです。トピック外部 ID の検証プロセスを変更する場合は、 TopicAPIUtils スクリプトインクルードでこのメソッドを上書きする必要があります。渡された外部 ID は、トピック [sn_api_notif_mgmt_topic] テーブルのtopic_idフィールドにマッピングされます。
| 名前 | タイプ | 説明 |
|---|---|---|
| トピックオブジェクト | オブジェクト | エンドポイントに渡される Event Management トピックオープン API トピックペイロードオブジェクト。 たとえば、次のようになります。 このオブジェクトのスキーマは 、sn_api_notif_mgmtにあるConstants.SCHEMA.CREATE_TOPIC_SCHEMA で定義されているものと一致する必要があります 。定数スクリプトイン クルード。 |
| details | アレイ | メソッドで「エラー」のレベルの問題が発生した場合にエンドポイント応答で Event Management トピックオープン 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;
},