TopicSubscriptionUtilOOB: Bereichsbezogen
Die Skripteinbindung TopicSubscriptionUtilOOB bietet Methoden zum Abfragen und Bearbeiten von Datensätzen in der Tabelle „Themenabonnement“ [sn_api_notif_mgmt_topic_subscription]. Diese Klasse wird auf der Serviceebene ausgeführt und interagiert mit der DAO-Klasse (Data Access Object).
Diese Funktionen werden aufgerufen, wenn im Formular „Themenabonnement“ die Schaltfläche Registrieren ausgewählt wird. Wenn Sie die Standardfunktionalität dieser Skripteinbindung ändern möchten, müssen Sie die in dieser Skripteinbindung enthaltenen Funktionen in der Skripteinbindung TopicSubscriptionUtil überschreiben.
Beide Skripteinbindungen werden im Namespace sn_api_notif_mgmt ausgeführt.
Weitere Informationen zu Themenabonnements finden Sie unter Handling the external events using Telecommunications API notification.
TopicSubscriptionUtilOOB – executeRegistrationSubflow(String topicSubID)
Löst einen Spoke-Subflow aus, um das übergebene Themenabonnement in einem externen System zu registrieren.
Vor dem Auslösen des Registrierungs-Flows prüft die Funktion, ob der übergebene Themenabonnement-Datensatz eine Rückruf-URL enthält und ob das Thema bereits registriert ist. Wenn diese Prüfungen bestanden werden, wird ein Demo-Subflow ausgelöst. Dieser Demo-Subflow ist als Adapter in der Spoke-Auswahl definiert und führt einen ausgehenden „Mock“-Registrierungsaufruf durch.
Diese Funktion wird aufgerufen, wenn ein Benutzer im Formular „Themenabonnements“ die Schaltfläche Registrieren auswählt. Der Name des Demo-Subflows ist definiert in Konstanten.INITIATE_REGISTRATION_PROCESS = "sn_ind_tmf642.initiate_registration_process";
Sie müssen diese Funktion in der Skripteinbindung TopicSubscriptionUtil überschreiben, um einen eigenen anwenderdefinierten Subflow zum Registrieren von Themenabonnements zu definieren.
Innerhalb dieses Registrierungs-Subflows müssen Sie einen REST-Schritt, einen Verbindungsalias oder eine andere Implementierung erstellen, um einen Registrierungsendpunkt im externen System aufzurufen und ein Thema zu registrieren. Dieser Endpunkt muss den Themennamen und die Rückruf-URL zur Registrierung übergeben. Im Gegenzug sollte der externe Systemendpunkt die Abonnement-ID zurückgeben, ob die Registrierung erfolgreich war, und die Registrierungsinformationen, die in der Themenabonnementtabelle gespeichert werden sollen. Diese Informationen umfassen normalerweise die Felder Registrierungsstatus, Registrierungsnachricht und Abonnement-ID. Ihr Registrierungs-Subflow sollte dann die Methode updateRegistrationResponse() aufrufen, um die Nutzlast der Antwort in der Tabelle „Themenabonnement“ zu speichern.
| Name | Typ | Beschreibung |
|---|---|---|
| topicSubID | Zeichenfolge | Sys_id des zu registrierenden Themenabonnement-Datensatzes. |
| Typ | Beschreibung |
|---|---|
| Keine |
Das folgende Codebeispiel zeigt, wie diese Funktion überschrieben wird.
var TopicSubscriptionUtil= Class.create();
TopicSubscriptionUtil.prototype =
Object.extendsObject(TopicSubscriptionUtilOOB, {
// Define overriding functions here. Pass the topicSubID of the record to be registered for subscription
executeRegistrationSubflow: function(topicSubID){
var topicSubGr = new TopicSubscriptionUtil(topicSubID).topicSubscriptionDAO.getGlideRecord();
// Customer extensible function to call their defined subflows. Here one can call their own subflow that
// will perform registration by giving an endpoint of the external env and parsing and updating the topic Sub
// record with Registered information.
var registrationFlow = ''; // Pass the subflow name that you want to override here.
var inputs = {};
inputs['topic_subscription_rec'] = topicSubGr;
try {
var flowOp = sn_fd.FlowAPI.getRunner().subflow(registrationFlow).inBackground().withInputs(inputs).run();
} catch (ex) {
gs.addErrorMessage(gs.getMessage(ex + ' Please check the subflow and inputs defined.'));
}
}
type: TopicSubscriptionUtil
});
TopicSubscriptionUtilOOB – getSubFlowName()
Gibt den Subflow zurück, der für den Subflow-Auslöser der Spoke-Auswahl zum Registrieren von Themenabonnements verwendet werden soll.
Normalerweise wird diese Funktion von der Funktion executeRegistrationSubflow() aus aufgerufen. Dieser Subflow ist für die Kontaktaufnahme mit einem externen System und die Registrierung eines Themenabonnements verantwortlich. Der Name des zu verwendenden Subflows ist in Konstanten.INITIATE_REGISTRATION_PROCESSdefiniert.
Sie können diese Funktionalität so ändern, dass sie den Namen Ihres eigenen Subflows enthält, indem Sie den Namen des Subflows, der in der Skripteinbindung sn_api_notif_mgmt.Constants ausgeführt werden soll, überschreiben.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Zeichenfolge | Name des zu verwendenden Subflows. Für die Demoimplementierung ist dieser Subflow wie folgt definiert: Konstanten.INITIATE_REGISTRATION_PROCESS = "sn_ind_tmf642.initiate_registration_process";. |
Das folgende Codebeispiel zeigt, wie diese Funktion überschrieben wird.
var TopicSubscriptionUtil= Class.create();
TopicSubscriptionUtil.prototype =
Object.extendsObject(TopicSubscriptionUtilOOB, {
// Define overriding functions here. Define a constants and return.
// That is your subflow that has the registration process. In current OOB implementation
// it’s a spoke selector implementation.
getSubFlowName: function(){
var subflowName = '' // Pass your subflow name here
return subflowName;
}
type: TopicSubscriptionUtil
});
TopicSubscriptionUtilOOB – getTopicName(topicSubRefID)
Gibt den Namen des Themas zurück, das der übergebenen sys_id eines Datensatzes in der Tabelle „Themenabonnement“ [sn_api_notif_mgmt_topic_subscription] zugeordnet ist.
| Name | Typ | Beschreibung |
|---|---|---|
| topicSubRefID | Zeichenfolge | Sys_id des Themenabonnement-Datensatzes, dessen Themenname zurückgegeben werden soll. Befindet sich in der Tabelle „Themenabonnement“ [sn_api_notif_mgmt_topic_subscription]. |
| Typ | Beschreibung |
|---|---|
| Zeichenfolge | Themenname. |
Das folgende Codebeispiel zeigt, wie diese Funktion überschrieben wird.
var TopicSubscriptionUtil = Class.create();
TopicSubscriptionUtil.prototype =
Object.extendsObject(TopicSubscriptionUtilOOB, {
// Define overriding functions here. Pass topicSubId or topicId and get topicname from there.
getTopicName: function(topicSubRefID){
var topicSubGr = new TopicSubscriptionUtil(topicSubRefID).topicSubscriptionDAO.getGlideRecord();
var topicRefID = topicSubGr.getValue('topic');
var topicGr = new TopicUtil(topicRefID).topicDAO.getGlideRecord();
return topicGr.getValue('topic_name');
}
type: TopicSubscriptionUtil
});
TopicSubscriptionUtilOOB – getUnregisteredTopicIds()
Gibt die sys_ids aller nicht registrierten Themen zurück. Nicht registrierte Themen sind Themen, die sich in der Tabelle „Thema“ [sn_api_notif_mgmt_topic], aber nicht in der Tabelle „Themenabonnement“ [sn_api_notif_mgmt_topic_subscription] befinden.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Array | Liste der sys_ids der Themendatensätze, die noch nicht registriert wurden. |
Das folgende Codebeispiel zeigt diese Funktion aktualisieren.
var TopicSubscriptionUtil= Class.create();
TopicSubscriptionUtil.prototype =
Object.extendsObject(TopicSubscriptionUtilOOB, {
// Define overriding functions here. This method is returning all topic IDs
// that are not in the Topic Subscription table. Modify queries here to
// return other topics in Topic Subscription table to return either 'Error' or
// 'UnRegistered' status topics.
getUnregisteredTopicIds: function(){
var topicIds = [];
var topicSubscriptionGr = TopicSubscriptionDAO.getInSubscriptionTopic();
if (!gs.nil(topicSubscriptionGr)) {
while (topicSubscriptionGr.next()) {
topicIds.push(topicSubscriptionGr.getValue('topic'));
}
}
var unregisteredTopicGr = TopicDAO.getUnregisteredTopic(topicIds);
if (!gs.nil(unregisteredTopicGr)) {
var unregisterTopicIds = [];
while (unregisteredTopicGr.next()) {
unregisterTopicIds.push(unregisteredTopicGr.getValue('sys_id'));
}
}
return unregisterTopicIds;
}
type: TopicSubscriptionUtil
});
TopicSubscriptionUtilOOB – updateRegistrationResponse(Object certificationDetails)
Aktualisiert den Themenabonnement-Datensatz in der Tabelle „Themenabonnement“ [sn_api_notif_mgmt_topic_subscription] mit den Werten aus der Pseudo-Registrierungsantwort eines ausgehenden Endpunktaufrufs für die Themenregistrierung.
Sie können diese Funktion in der Skripteinbindung TopicSubscriptionUtil überschreiben, um die Informationen zu ändern, die im zugehörigen Abonnementdatensatz des Themas gespeichert sind. Weitere Informationen zum Ausführen des Subflows, der die Registrierungsdetails zurückgibt, finden Sie unter executeRegistrationSubflow().
| Name | Typ | Beschreibung |
|---|---|---|
| Registrierungsdetails | Objekt | Für die Demo-Implementierung ist dies eine Mock-Antwort, die vom Aufruf der Demo-Registrierungs-API zurückgegeben wird. Wenn Sie diese Funktion überschreiben, muss die Nutzlast der Antwort mindestens die folgenden Themenabonnementfelder enthalten:
|
| Typ | Beschreibung |
|---|---|
| Fehler | Wenn der Aufruf erfolgreich ist, wird nichts zurückgegeben. Wenn ein Fehler aufgetreten ist, wird Folgendes zurückgegeben:
|
Das folgende Codebeispiel zeigt, wie diese Funktion aktualisiert wird.
var TopicSubscriptionUtil= Class.create();
TopicSubscriptionUtil.prototype =
Object.extendsObject(TopicSubscriptionUtilOOB, {
// Define overriding functions here. Modify this method to parse the registration details
// output from a spoke selector flow. You can pass different parameters from the registration response
// and map them to the fields in the Topic Subscription table.
updateRegistrationResponse: function(registrationDetails){
var reqTypeId = Constants.TOPIC_SUB_REQUEST_TYPE;
var outputMap = new sn_appss.IntegrationRequestConfigAPI().outputJSONToMap(reqTypeId, registrationDetails.result);
var updateTopicSubObj = new sn_tmt_core.BaseObject();
if (Constants.REGISTRATION_RESPONSE_SUCCESS_CODES.indexOf(responseCode) != -1) {
updateTopicSubObj.setValue('registration_status', Constants.REGISTRATION_STATUS.REGISTERED);
updateTopicSubObj.setValue('registration_message', outputMap.response_body.message);
updateTopicSubObj.setValue('subscription_id', outputMap.response_body.result.id);
}
}
type: TopicSubscriptionUtil
});
TopicSubscriptionUtilOOB - updateTopicSubscriptionRec(Object topicSubObj)
Speichert den aktuellen Themenabonnementdatensatz mithilfe der DAO-Einfügung in der Tabelle „Themenabonnement“ [sn_api_notif_mgmt_topic_subscription].
Normalerweise rufen Sie diese Funktion innerhalb der Funktion updateRegistrationResponse() auf.
| Name | Typ | Beschreibung |
|---|---|---|
| topicSubObj | Objekt | Felder, die im zugehörigen Abonnementdatensatz des Themas aktualisiert werden sollen. Dies ist die vom Registrierungs-Subflow zurückgegebene Nutzlast. Beispiel: Weitere Informationen finden Sie unter executeRegistrationSubflow(). |
| Typ | Beschreibung |
|---|---|
| Zeichenfolge | Sys_id des Themenabonnement-Datensatzes, der aktualisiert wurde. |
Das folgende Codebeispiel zeigt, wie diese Funktion aktualisiert wird.
var TopicSubscriptionUtil= Class.create();
TopicSubscriptionUtil.prototype =
Object.extendsObject(TopicSubscriptionUtilOOB, {
// Define overriding functions here. Pass a topic subscription record object that contains
// the values to update in a record.
updateTopicSubRec: function(topicSubObj){
return this.topicSubscriptionDAO.updateTopicSubscription(topicSubObj);
}
type: TopicSubscriptionUtil
});
Das folgende Codebeispiel zeigt, wie diese Funktion aufgerufen wird.
if (!gs.nil(outputMap) && outputMap.status_code == '1') {
var responseCode = outputMap.response_body.code;
var topicSubID = registrationDetails.topicSubID;
var topicSubGr = new TopicSubscriptionUtil(topicSubID).topicSubscriptionDAO.getGlideRecord();
var updateTopicSubObj = new sn_tmt_core.BaseObject();
if (Constants.REGISTRATION_RESPONSE_SUCCESS_CODES.indexOf(responseCode) != -1) {
updateTopicSubObj.setValue('registration_status', Constants.REGISTRATION_STATUS.REGISTERED);
updateTopicSubObj.setValue('registration_message', outputMap.response_body.message);
updateTopicSubObj.setValue('subscription_id', outputMap.response_body.result.id);
} else {
updateTopicSubObj.setValue('registration_status', Constants.REGISTRATION_STATUS.ERROR);
updateTopicSubObj.setValue('registration_message', outputMap.response_body.message);
}
new TopicSubscriptionUtil(topicSubGr).updateTopicSubscriptionRec(updateTopicSubObj);
return '';
} else if (!gs.nil(outputMap) && outputMap.status_code == '0') {
return outputMap.status_reason;
} else {
var errorMsg = 'Spoke Request Type output not set, please check request adapter flow';
return errorMsg;
}