TopicAPIUtilsOOB – Umfang
Die TopicAPIUtilsOOB Die Skripteinbindung stellt Methoden bereit, die bei der Verarbeitung von verwendet werden Ereignismanagement-Thema – API öffnen Endpunkt.
Wenn Sie die Standardfunktionalität von ändern möchten Ereignismanagement-Thema – API öffnen , Sie müssen die Funktionen in dieser Skripteinbindung in überschreiben TopicAPIUtils Skripteinbindung.
Diese Skripteinbindung wird in ausgeführt sn_api_notif_mgmt Namespace und erfordert die Rolle sn_api_notif_mgmt.event_mgmt_Integration.
TopicAPIUtilsOOB – createTopicHelper(Object topicObject, Array-Warnungen)
Fügt die in übergebenen Informationen ein Ereignismanagement-Thema – API öffnen – POST /sn_api_notif_mgmt/topic Endpunkt in der Tabelle „Thema“ [sn_api_notif_mgmt_topic].
Wenn Sie diesen Einfügeprozess ändern möchten, müssen Sie diese Methode in überschreiben TopicAPIUtils Skripteinbindung.
| Name | Typ | Beschreibung |
|---|---|---|
| TopicObject | Objekt | Thema-Nutzlastobjekt an übergeben Ereignismanagement-Thema – API öffnen Endpunkt. Zum Beispiel: Das Schema dieses Objekts muss mit dem übereinstimmen, was in definiert ist KONSTANTS.SCHEMA.CREATE_TOPIC_SCHEMA Befindet sich in sn_api_notif_mgmt.Konstanten Skripteinbindung. |
| Warnungen | Array | Warnmeldungen, die in zurückgegeben werden sollen Ereignismanagement-Thema – API öffnen Endpunktantwort, wenn die Methode auf ein Problem auf der Ebene „Warnung“ stößt. Mit diesem Parameter können Sie Ihrer Implementierung dieses Endpunkts anwenderdefinierte Warnmeldungen hinzufügen. Wenn keine zusätzlichen Warnmeldungen vorhanden sind, müssen Sie ein leeres Array übergeben. |
| Typ | Beschreibung |
|---|---|
| Objekt | Antwortobjekt.Details zu diesen Parametern finden Sie in den Rückgabeergebnissen für Ereignismanagement-Thema offen – POST /sn_api_notif_mgmt/topic. |
Das folgende Codebeispiel zeigt, wie diese Methode aufgerufen wird.
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()
Gibt das definierte Schema für die von verwendete Nutzlast zurück Ereignismanagement-Thema – API öffnen – POST /sn_api_notif_mgmt/topic Endpunkt zum Validieren der Themennutzlast.
CREATE_TOPIC_SCHEMA: "{
\"title\":\"Topic\",
\"type\":\"object\",
\"properties\":{
\"name\":{
\"type\":\"string\"
},
\"contentQuery\":{
\"type\":\"string\"
},
\"headerQuery\":{
\"type\":\"string\"
},
\"namespace\":{
\"type\":\"string\"
}
},
\"required\":[\"name\"]
}"| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Zeichenfolge | Schema für Ereignismanagement-Thema – API öffnen – POST /sn_api_notif_mgmt/topic Endpunktnutzlast. Verwenden Sie dieses Schema, um das mit an den Endpunkt übergebene Schema zu validieren TopicAPIUtilsOOB – isValidCreateTopicPayload(Objekt-topicObject, Zeichenfolgenschema, Array-Warnungen) Methode. |
Das folgende Codebeispiel zeigt, wie diese Methode aufgerufen wird.
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(Objekt-topicObject, Zeichenfolgenschema, Array-Warnungen)
Validiert die Nutzlast, die an übergeben wurde Ereignismanagement-Thema – API öffnen – POST /sn_api_notif_mgmt/topic Endpunkt. Diese Validierung wird für den Anforderungstext und das Schema durchgeführt.
Wenn Sie den Validierungsprozess für die Nutzlast ändern möchten, müssen Sie diese Methode in überschreiben TopicAPIUtils Skripteinbindung.
| Name | Typ | Beschreibung |
|---|---|---|
| TopicObject | Objekt | Thema-Nutzlastobjekt an übergeben Ereignismanagement-Thema – API öffnen Endpunkt. Zum Beispiel: Das Schema dieses Objekts muss mit dem übereinstimmen, was in definiert ist KONSTANTS.SCHEMA.CREATE_TOPIC_SCHEMA Befindet sich in sn_api_notif_mgmt.Konstanten Skripteinbindung. |
| Schema | Zeichenfolge | Schema, das zum Validieren der Themennutzlast verwendet werden soll. Verwenden Sie TopicAPIUtilsOOB – getCreateTopicSchema() Methode zum Abrufen dieses Schemas. |
| Warnungen | Array | Warnmeldungen, die in zurückgegeben werden sollen Ereignismanagement-Thema – API öffnen Endpunktantwort, wenn die Methode auf ein Problem auf der Ebene „Warnung“ stößt. Mit diesem Parameter können Sie Ihrer Implementierung dieses Endpunkts anwenderdefinierte Warnmeldungen hinzufügen. Wenn keine zusätzlichen Warnmeldungen vorhanden sind, müssen Sie ein leeres Array übergeben. |
| Typ | Beschreibung |
|---|---|
| Boolean | Kennzeichnung, die angibt, ob die Nutzlast in übergeben wurde topicObjectParameter hat die Validierungen von Schema und Anforderungstext übergeben. Gültige Werte:
|
Das folgende Codebeispiel zeigt, wie diese Methode aufgerufen wird.
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 – preareCreateTopicResponse(Object topicObject, String topicSysId, Array-Warnungen)
Generiert die Antwort und gibt sie an zurück Ereignismanagement-Thema – API öffnen – POST /sn_api_notif_mgmt/topic Endpunktaufruf.
Wenn Sie das vom zurückgegebene Antwortobjekt anpassen möchten Ereignismanagement-Thema – API öffnen – POST /sn_api_notif_mgmt/topic Endpunkt, Sie müssen diese Methode in überschreiben TopicAPIUtils Skripteinbindung.
| Name | Typ | Beschreibung |
|---|---|---|
| TopicObject | Objekt | Thema-Nutzlastobjekt an übergeben Ereignismanagement-Thema – API öffnen Endpunkt. Zum Beispiel: Das Schema dieses Objekts muss mit dem übereinstimmen, was in definiert ist KONSTANTS.SCHEMA.CREATE_TOPIC_SCHEMA Befindet sich in sn_api_notif_mgmt.Konstanten Skripteinbindung. |
| TopicSysId | Zeichenfolge | SYS_ID des Themas, das als Teil von erstellt wurde Ereignismanagement-Thema – API öffnen – POST /sn_api_notif_mgmt/topic Rufen Sie an. Tabelle: Thema [sn_api_notif_mgmt_topic] |
| Warnungen | Array | Warnmeldungen, die in zurückgegeben werden sollen Ereignismanagement-Thema – API öffnen Endpunktantwort, wenn die Methode auf ein Problem auf der Ebene „Warnung“ stößt. Mit diesem Parameter können Sie Ihrer Implementierung dieses Endpunkts anwenderdefinierte Warnmeldungen hinzufügen. Wenn keine zusätzlichen Warnmeldungen vorhanden sind, müssen Sie ein leeres Array übergeben. |
| Typ | Beschreibung |
|---|---|
| Objekt | Endpunkt-Antwortobjekt. Zum Beispiel: |
Das folgende Codebeispiel zeigt, wie diese Methode aufgerufen wird.
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)
Verarbeitet die Anforderung von Ereignismanagement-Thema – API öffnen Endpunkt.
Diese Methode ruft die Hilfsmethoden auf, die für die Dateneinfügung, die Schemavalidierung, die Validierung des Anforderungstexts und die Antwortorchestration erforderlich sind. Überschreiben Sie diese Methode, wenn Sie die grundlegende Verarbeitung von anpassen müssen Ereignismanagement-Thema offen – POST /sn_api_notif_mgmt/topic Anforderung. Andernfalls überschreiben Sie die einzelnen Hilfsmethoden.
| Name | Typ | Beschreibung |
|---|---|---|
| TopicObject | Objekt | Thema-Nutzlastobjekt an übergeben Ereignismanagement-Thema – API öffnen Endpunkt. Zum Beispiel: Das Schema dieses Objekts muss mit dem übereinstimmen, was in definiert ist KONSTANTS.SCHEMA.CREATE_TOPIC_SCHEMA Befindet sich in sn_api_notif_mgmt.Konstanten Skripteinbindung. |
| Typ | Beschreibung |
|---|---|
| Objekt | Endpunkt-Antwortobjekt. Zum Beispiel: |
Das folgende Codebeispiel zeigt, wie diese Methode aufgerufen wird.
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)
Bietet die Möglichkeit, dem an zurückgegebenen Antwortobjekt anwenderdefinierte Daten hinzuzufügen Ereignismanagement-Thema – API öffnen – POST /sn_api_notif_mgmt/topic Endpunkt.
Um dieses Antwortobjekt anzupassen, überschreiben Sie diese Methode in TopicAPIUtils Skripteinbindung.
| Name | Typ | Beschreibung |
|---|---|---|
| TopicObject | Objekt | Thema-Nutzlastobjekt an übergeben Ereignismanagement-Thema – API öffnen Endpunkt. Zum Beispiel: Das Schema dieses Objekts muss mit dem übereinstimmen, was in definiert ist KONSTANTS.SCHEMA.CREATE_TOPIC_SCHEMA Befindet sich in sn_api_notif_mgmt.Konstanten Skripteinbindung. |
| TopicSysId | Zeichenfolge | SYS_ID des Themas, das als Teil von erstellt wurde Ereignismanagement-Thema – API öffnen – POST /sn_api_notif_mgmt/topic Rufen Sie an. Sie können dem Themenantwortobjekt Informationen aus diesem Datensatz hinzufügen. Tabelle: Thema [sn_api_notif_mgmt_topic] |
| Typ | Beschreibung |
|---|---|
| Objekt | Transformiertes Endpunkt-Antwortobjekt. Dieses Objekt muss TMF688-konform sein. Zum Beispiel: |
Das folgende Codebeispiel zeigt, wie diese Methode aufgerufen wird.
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;
}
},
Das folgende Codebeispiel zeigt den Code zum Überschreiben der Standardfunktionalität dieser Methode.
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 (Objekt topicObject, Array-Details)
Validiert, ob die Kombination aus Themenname, Header-Abfrage, Content-query und Namespace in übergeben wurde Ereignismanagement-Thema – API öffnen Endpunktnutzlast ist eindeutig.
Der Endpunkt verwendet diese Attributkombinationen, um zu bestimmen, ob das Thema derzeit in der Tabelle „Thema“ [sn_api_notif_mgmt_topic] vorhanden ist.
Wenn Sie den Validierungsprozess ändern möchten, müssen Sie diese Methode in überschreiben TopicAPIUtils Skripteinbindung.
| Name | Typ | Beschreibung |
|---|---|---|
| TopicObject | Objekt | Thema-Nutzlastobjekt an übergeben Ereignismanagement-Thema – API öffnen Endpunkt. Zum Beispiel: Das Schema dieses Objekts muss mit dem übereinstimmen, was in definiert ist KONSTANTS.SCHEMA.CREATE_TOPIC_SCHEMA Befindet sich in sn_api_notif_mgmt.Konstanten Skripteinbindung. |
| details | Array | Warnmeldungen, die in zurückgegeben werden sollen Ereignismanagement-Thema – API öffnen Endpunktantwort, wenn die Methode auf ein Problem auf der Ebene „Warnung“ stößt. Mit diesem Parameter können Sie Ihrer Implementierung dieses Endpunkts anwenderdefinierte Warnmeldungen hinzufügen. Wenn keine zusätzlichen Warnmeldungen vorhanden sind, müssen Sie ein leeres Array übergeben. |
| Typ | Beschreibung |
|---|---|
| Boolean | Kennzeichnung, die angibt, ob die Kombination aus Themenname, Header-Abfrage, Content-query und Namespace in übergeben wurde topicObjectParameter ist eindeutig. Gültige Werte:
|
Das folgende Codebeispiel zeigt, wie diese Methode aufgerufen wird.
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(Objekt topicObject, Array-Details)
Validiert die externe Thema-ID, die im Anforderungstext von übergeben wurde Ereignismanagement-Thema – API öffnen Endpunkt.
In der Basisimplementierung wird dadurch nur validiert, dass die externe ID nicht leer ist. Wenn Sie den Validierungsprozess für die externe ID des Themas ändern möchten, müssen Sie diese Methode in überschreiben TopicAPIUtils Skripteinbindung. Die übergebene externe ID wird dem Feld topic_ID in der Tabelle „Thema“ [sn_api_notif_mgmt_topic] zugeordnet.
| Name | Typ | Beschreibung |
|---|---|---|
| TopicObject | Objekt | Thema-Nutzlastobjekt an übergeben Ereignismanagement-Thema – API öffnen Endpunkt. Zum Beispiel: Das Schema dieses Objekts muss mit dem übereinstimmen, was in definiert ist KONSTANTS.SCHEMA.CREATE_TOPIC_SCHEMA Befindet sich in sn_api_notif_mgmt.Konstanten Skripteinbindung. |
| details | Array | Fehler-/Detailnachrichten, die in zurückgegeben werden sollen Ereignismanagement-Thema – API öffnen Endpunktantwort, wenn die Methode auf ein Problem auf der Ebene „Fehler“ stößt. Mit diesem Parameter können Sie Ihrer Implementierung dieses Endpunkts anwenderdefinierte Fehlermeldungen hinzufügen. Wenn keine zusätzlichen Fehlermeldungen vorhanden sind, müssen Sie ein leeres Array übergeben. |
| Typ | Beschreibung |
|---|---|
| Boolean | Kennzeichnung, die angibt, ob die externe ID in übergeben wurde topicObjectParameter ist gültig. Gültige Werte:
|
Das folgende Codebeispiel zeigt, wie diese Methode aufgerufen wird.
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;
},