TopicSubscriptionUtilOOB – Scoped
Die Skripteinbindung TopicSubscriptionUtilOOB stellt Methoden zum Abfragen und Bearbeiten von Datensätzen in der Tabelle „Themenabonnement“ [sn_api_notif_mgmt_topic_subscription] bereit. Diese Klasse wird auf der Serviceebene ausgeführt und interagiert mit der Klasse „Data Access Object“ (DAO).
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 überprüft die Funktion, ob der übergebene Themenabonnementdatensatz eine Rückruf-URL enthält und ob das Thema bereits registriert ist. Wenn diese Prüfungen erfolgreich sind, wird ein Demo-Subflow ausgelöst. Dieser Demo-Subflow ist in der Spoke-Auswahl als Adapter definiert und führt einen „falschen“ ausgehenden Registrierungsaufruf durch.
Diese Funktion wird aufgerufen, wenn ein Benutzer im Formular „Themenabonnements“ auf die Schaltfläche Registrieren klickt. Der Name des Demo-Subflows ist definiert in : Constants.INITIATE_REGISTRATION_PROCESS = "sn_ind_tmf642.initiate_registration_process";
Sie müssen diese Funktion in der Skripteinbindung TopicSubscriptionUtil überschreiben, um einen eigenen benutzerdefinierten Subflow zum Registrieren von Themenabonnements zu definieren.
In diesem Registrierungs-Subflow 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 Endpunkt des externen Systems 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 Antwortnutzlast in der Themenabonnementtabelle zu speichern.
| Name | Typ | Beschreibung |
|---|---|---|
| topicSubID | Zeichenfolge | Sys_id des zu registrierenden Themenabonnementdatensatzes. |
| 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 über die Funktion executeRegistrationSubflow() 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 Constants.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 überschreiben, der in der Skripteinbindung sn_api_notif_mgmt.Constants ausgeführt werden soll.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Zeichenfolge | Name des zu verwendenden Subflows. Für die Demo-Implementierung ist dieser Subflow definiert als Constants.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 Themenabonnementdatensatzes, 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 Thementabelle [sn_api_notif_mgmt_topic] befinden, aber nicht in der Themenabonnement-Tabelle [sn_api_notif_mgmt_topic_subscription].
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Array | Liste der sys_ids der Themendatensätze, die noch nicht registriert wurden. |
Das folgende Codebeispiel zeigt, wie Sie 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 registrationDetails)
Aktualisiert den Themenabonnementdatensatz in der Tabelle „Themenabonnement“ [sn_api_notif_mgmt_topic_subscription] mit den Werten aus der Scheinregistrierungsantwort eines ausgehenden Endpunktaufrufs der Themenregistrierung.
Sie können diese Funktion in der Skripteinbindung TopicSubscriptionUtil überschreiben, um die Informationen zu ändern, die im zugehörigen Themenabonnementdatensatz 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 Scheinantwort, die vom API-Aufruf der Demo-Registrierung zurückgegeben wird. Wenn Sie diese Funktion überschreiben, sollte die Payload 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 in der Tabelle „Themenabonnement“ [sn_api_notif_mgmt_topic_subscription] mithilfe der DAO-Einfügung.
Normalerweise rufen Sie diese Funktion innerhalb der Funktion updateRegistrationResponse() auf.
| Name | Typ | Beschreibung |
|---|---|---|
| topicSubObj | Objekt | Felder, die im zugeordneten Themenabonnementdatensatz 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;
}