FlowAPI: Bereichsbezogen, Global
Die FlowAPI Stellt Methoden zum Ausführen von Aktionen, Flows oder Subflows in serverseitigen Skripts mit blockierenden oder nicht blockierenden Methoden bereit.
Zugriff FlowAPI Methoden in globalen und bereichsbezogenen Skripts mit verwenden sn_fd Namespace. Erstellen Sie Anrufe für Ihre Flows mit Code-Fragment Aktion in Workflow-Studio Oder verwenden Sie die hier beschriebenen Methoden, um Skripts manuell zu aktualisieren.
FlowAPI – Abbrechen (ZeichenfolgenkontextId, Zeichenfolgengrund)
Bricht einen angehaltenen oder ausgeführten Flow, Subflow oder eine Aktion ab.
| Name | Typ | Beschreibung |
|---|---|---|
| contextId | Zeichenfolge | SYS_ID des Ausführungsdetaildatensatzes für den Flow, den Subflow oder die Aktion. Greifen Sie auf die Ausführungsdetails zu, indem Sie in zur Registerkarte Flow-Ausführungen navigieren Workflow-Studio, Oder übergeben Sie die sys_ID des Kontextdatensatzes, der von zurückgegeben wird StartFlow() , StartSubflow() , Oder StartAction() Methoden. Hinweis: Es kann eine kleine Verzögerung beim Abbrechen geben, wenn der Zielkontext auf einem anderen Knoten der Instanz ausgeführt wird. Kontexte, die auf demselben Knoten ausgeführt werden, werden sofort abgebrochen. Kontexte, die auf einem anderen Knoten ausgeführt werden, müssen zuerst warten, bis der Abbruch an den entsprechenden Knoten weitergeleitet wird. |
| Grund | Zeichenfolge | Optional. Grund für den Abbruch des Flows, Subflows oder der Aktion. Wird in angezeigt Nachricht Feld der Tabelle „Flow Engine-Protokolleinträge“ [sys_Flow_log]. |
| Typ | Beschreibung |
|---|---|
| void |
In diesem Beispiel wird der Rückgabewert von verwendet StartFlow() Methode zum Abbrechen von Flows mit langer Laufzeit.
(function() {
var now_GR = new GlideRecord('incident');
now_GR.addQuery('number', 'INC0000050');
now_GR.query();
now_GR.next();
try {
var inputs = {};
inputs['current'] = now_GR; // GlideRecord of table:
inputs['table_name'] = 'incident';
// Starts the flow asynchronously.
var result = sn_fd.FlowAPI.getRunner()
.flow('global.myFlow')
.inBackground()
.withInputs(inputs)
.run();
var contextId = result.getContextId();
var dateRun = result.getDate();
var domainUsed = result.getDomainId();
var flowName = result.getFlowObjectName();
var flowObjectType = result.getFlowObjectType();
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
// Call the cancel() method using the context Id returned from the startFlow() method
sn_fd.FlowAPI.cancel(contextId, 'Flow took too long to execute.');
In diesem Beispiel werden alle Flows mit dem Namen Test-Flow abgebrochen.
var now_GR = new GlideRecord("sys_flow_context");
now_GR.addQuery("name", "Test Flow");
now_GR.query();
while (now_GR.next()) {
sn_fd.FlowAPI.cancel(now_GR.getUniqueValue(), 'Canceling Test Flows');
}
FlowAPI – executeAction(String name, Map inputs, Number timeout)
Führt eine Aktion aus einem serverseitigen Skript synchron aus.
| Name | Typ | Beschreibung |
|---|---|---|
| Name | Zeichenfolge | Der Bereich und der Name der auszuführenden Aktion, z. B. global.action_name. |
| inputs | Karte | Name-Wert-Paare, die Aktionseingaben definieren. Verwenden Sie den Eingabenamen, nicht die Eingabebezeichnung. |
| Zeitüberschreitung | Anzahl | Optional. Zeitüberschreitung in Millisekunden. Dieser Wert überschreibt die von angegebene Standardzeitüberschreitung von 30 Sekunden com.glide.hub.flow_api.default_execution_timeSystemeigenschaft. Nach Ablauf der Zeitüberschreitung wird eine Ausnahme ausgelöst. |
| Typ | Beschreibung |
|---|---|
| Objekt | Die Aktionsausgaben. |
In diesem Beispiel verwendet das Skript sn_fd.FlowAPI.ExecuteAction Zum Ausführen einer Aktion namens actionforpassword2test im globalen Bereich. Eine Variable mit dem Namen „inputs“ enthält die Eingänge für die Aktion. In diesem Fall einen Namen und ein Passwort. Die Ausgaben für die Aktion werden in der Variablen „outputs“ gespeichert, die in diesem Fall ein verschlüsseltes Passwortobjekt ist. Der Code ist in einer try/catch-Anweisung eingeschlossen, um alle Fehler zu erfassen, die bei der Ausführung des Flow auftreten können.
(function() {
try {
var inputs = {};
inputs['name'] = ; // String
inputs['password2'] = ; // Password (2 Way Encrypted)
// Execute Synchronously: Run in foreground. Code snippet has access to outputs.
// var timeout = ; //timeout in ms
//sn_fd.FlowAPI.executeAction('global.actionforpassword2test', inputs, timeout)
var outputs = sn_fd.FlowAPI.executeAction('global.actionforpassword2test', inputs);
// Get Outputs:
// Note: outputs can only be retrieved when executing synchronously.
var output = outputs['output']; // Password (2 Way Encrypted)
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI – executeActionQuick (Zeichenfolgenname, Zuordnungseingaben, Zeitüberschreitung bei Anzahl)
Führen Sie eine Aktion aus einem serverseitigen Skript synchron aus der aktuellen Anwendersitzung aus, ohne Ausführungsdetails oder andere zugehörige Datensätze zu erstellen. Verbessern Sie die Leistung, indem Sie den Overhead bei der Datensatzführung vermeiden. Verwenden Sie diese API, um die Geschwindigkeit der Verarbeitung mit hohem Volumen, z. B. mehrere Ausführungen pro Sekunde, in einer Produktionsumgebung zu erhöhen.
- Berichterstellung und Datensätze generiert
- Diese Methode erstellt keine Ausführungsdetails und Kontextdatensätze, unabhängig von Workflow-Studio Einstellungen.
- Warten Sie auf Support
- Diese Methode unterstützt nicht das Anhalten der Aktion zum Warten auf Bedingungen. Schritte, die für Wartebedingungen anhalten, z. B. „Genehmigung anfordern“ oder „Warten auf Bedingung“, werden nicht unterstützt.
- MID-Server-Unterstützung
- Diese Methode unterstützt nicht das Anhalten einer Aktion zur Ausführung von einem MID-Server.
| Name | Typ | Beschreibung |
|---|---|---|
| Name | Zeichenfolge | Umfang und interner Name der auszuführenden Aktion. Beispiel: Global.action_Name . Suchen Sie nach Interner Name Feld in der Liste von Workflow-Studio Aktionen. |
| inputs | Karte | Name-Wert-Paare, die Aktionseingaben definieren. Sie finden die verfügbaren Aktionseingaben und erforderlichen Datentypen unter Eingaben in der Aktionsstruktur. Verwenden Sie den Eingabenamen, nicht die Eingabebezeichnung. Beispiel: {'table':'Incident','sys_ID':'a39d8e3cf0212300964feeefe80ff0ed'} . |
| Zeitüberschreitung | Anzahl | Optional. Zeitüberschreitung in Millisekunden. Dieser Wert überschreibt die von angegebene Standardzeitüberschreitung von 30 Sekunden com.glide.hub.flow_api.default_execution_timeSystemeigenschaft. Nach Ablauf der Zeitüberschreitung wird eine Ausnahme ausgelöst. |
| Typ | Beschreibung |
|---|---|
| Objekt | Objekt mit Ausgaben, die durch die Aktion definiert sind. Sie finden die Ausgaben für die Aktion unter Ausgaben In der Aktionsstruktur. |
(function() {
try {
var grIncident = new GlideRecord('incident');
grIncident.get('57af7aec73d423002728660c4cf6a71c');
var inputs = {};
inputs['variable'] = grIncident;
var outputs = sn_fd.FlowAPI.executeActionQuick('global.update_record_test', inputs);
// Get Outputs:
// Note: outputs can only be retrieved when executing synchronously.
var output1 = outputs['output1'];
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI – executeDataStreamAction (Zeichenfolgenname, Zuordnungseingaben, Zahlenzeitüberschreitung)
Führt eine Datenstromaktion synchron von einem serverseitigen Skript aus und gibt ein ScriptableDataStream-Objekt zurück.
Weitere Informationen zu Datenstromaktionen finden Sie unter Datenstromaktionen und Paginierung .
Versuchen/fangen Blockieren, um Fehler zu erfassen. Fügen Sie immer ein ein Endlich Anweisung, die mit endet Schließen () Methode aus der SkriptableDataStream Klasse zum Schließen des Datenstroms und zur Vermeidung von Leistungsproblemen. | Name | Typ | Beschreibung |
|---|---|---|
| Name | Zeichenfolge | Umfang und Name der auszuführenden Datenstromaktion. Beispiel: Global.Data_Stream_action_Name . |
| inputs | Karte | Name-Wert-Paare, die Aktionseingaben definieren. Verwenden Sie den Eingabenamen, nicht die Eingabebezeichnung. Wenn die Aktion keine Eingaben enthält, schließen Sie diesen Parameter nicht ein. |
| Zeitüberschreitung | Anzahl | Optional. Zeit, bis die Aktion abläuft. Nach Ablauf der Zeitüberschreitung wird eine Ausnahme ausgelöst. Die Zeitüberschreitung gilt nur für ExecuteDataStreamAction Methode, nicht zu Methoden in SkriptableDataStream Klasse. Standard: 30000, angegeben durch com.glide.hub.flow_api.default_execution_timeSystemeigenschaft Einheit: Millisekunden |
| Typ | Beschreibung |
|---|---|
| SkriptableDataStream | Ein Objekt, das zum Iterieren von Elementen im Datenstrom verwendet wird. Verwenden Sie die Methoden in SkriptableDataStream Klasse, die mit diesem Objekt interagiert werden soll. Siehe ScriptableDataStream-API . |
In diesem Beispiel wird für jedes im Datenstrom zurückgegebene Element ein Incident-Datensatz erstellt.
(function() {
try {
// Execute Data Stream Action.
var stream = sn_fd.FlowAPI.executeDataStreamAction('x_my_scope.data_stream_name');
// Process each item in the data stream
while (stream.hasNext()) {
// Get a single item from the data stream.
var item = stream.next();
// Use the item.
var now_GR = new GlideRecord('incident');
now_GR.setValue('number',item.id);
now_GR.setValue('short_description',item.name);
now_GR.insert();
// By default, this code snippet will terminate after 10 items.
// Remove or modify this limit after testing your code.
if (stream.getItemIndex() >= 9) {
break;
}
}
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
} finally {
stream.close();
}
})();
FlowAPI – executeFlow(String name, Map inputs, Number timeout)
Führt einen Flow aus einem serverseitigen Skript synchron aus.
| Name | Typ | Beschreibung |
|---|---|---|
| Name | Zeichenfolge | Der Bereich und der Name des auszuführenden Flow, z. B. global.flow_name. |
| inputs | Karte | Name-Wert-Paare, die Auslösereingaben definieren. Verwenden Sie den Eingabenamen, nicht die Eingabebezeichnung. |
| Zeitüberschreitung | Anzahl | Optional. Zeitüberschreitung in Millisekunden. Dieser Wert überschreibt die von angegebene Standardzeitüberschreitung von 30 Sekunden com.glide.hub.flow_api.default_execution_timeSystemeigenschaft. Nach Ablauf der Zeitüberschreitung wird eine Ausnahme ausgelöst. |
| Typ | Beschreibung |
|---|---|
| Keine | Der normale Vorgang erzeugt keinen Rückgabewert. |
| Ausnahme | Die API löst eine Ausnahme aus, wenn ein synchron aufgerufener Flow angehalten wird. Die aktuelle Ausführung befindet sich im Status „Warten“ . In den meisten Fällen wird die Ausnahme entfernt, wenn der Flow fortgesetzt wird. Die API kann jedoch einen Flow, der an einen MID-Server gesendet wurde, nicht fortsetzen. |
Dieses Beispiel verwendet „sn_fd.FlowAPI.executeFlow“, um einen globalen Flow mit dem Namen „test_flow“ auszuführen. Dieser Flow wird normalerweise ausgelöst, wenn ein Datensatz in der Incident-Tabelle aktualisiert wird. Da Sie den Flow von einem Skript aus aktivieren, müssen Sie diese Informationen angeben. Der Code erstellt eine Variable „inputs“, die den aktuellen Datensatz und die Tabelle für den Datensatz enthält. Der Code ist in einer try/catch-Anweisung eingeschlossen, um alle Fehler zu erfassen, die bei der Ausführung des Flow auftreten können.
(function() {
try {
var inputs = {};
inputs['current'] = ; // GlideRecord of table:
inputs['table_name'] = 'incident';
// Execute Synchronously: Run in foreground.
// var timeout = ; //timeout in ms
//sn_fd.FlowAPI.executeFlow('global.test_flow', inputs, timeout)
sn_fd.FlowAPI.executeFlow('global.test_flow', inputs);
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI – executeFlowQuick(Zeichenfolgenname, Zuordnungseingaben, Zeitüberschreitung bei Anzahl)
Führt einen Flow, Subflow, eine Aktion oder eine Datenstromaktion aus einem serverseitigen Skript synchron oder asynchron aus, ohne Ausführungsdetails oder andere zugehörige Datensätze zu erstellen. Verbessert die Leistung durch Eliminierung des Aufzeichnungsaufwands. Verwenden Sie diese API, um die Geschwindigkeit der Verarbeitung mit hohem Volumen, z. B. mehrere Ausführungen pro Sekunde, in einer Produktionsumgebung zu erhöhen.
- Berichterstellung und Datensätze generiert
- Diese Methode erstellt keine Ausführungsdetails und Kontextdatensätze, unabhängig von Workflow-Studio Einstellungen.
- Als Anwender ausführen
- Diese Methode führt den Flow als Anwender aus, der die Sitzung initiiert. Das Festlegen des Flows, der als Systemanwender ausgeführt werden soll, oder das Angeben der Identität eines Anwenders wird nicht unterstützt.
- Warten Sie auf Support
- Diese Methode unterstützt nicht das Anhalten des Flows, um auf Bedingungen zu warten. Aktionen oder Flow-Logik, die für Wartebedingungen anhalten, z. B. „Genehmigung anfordern“, „auf Bedingung warten“ oder „Warten für eine Dauer“, werden nicht unterstützt.
- MID-Server-Unterstützung
- Diese Methode unterstützt nicht das Anhalten eines Flows zur Ausführung von einem MID-Server.
| Name | Typ | Beschreibung |
|---|---|---|
| Name | Zeichenfolge | Umfang und interner Name des auszuführenden Flows. Beispiel: Global.Flow_Name . Suchen Sie nach Interner Name Feld in der Liste von Workflow-Studio Flows. |
| inputs | Karte | Name-Wert-Paare, die Auslösereingaben definieren. Sie finden die verfügbaren Auslösereingaben und erforderlichen Datentypen im Abschnitt „Auslöser“ des Flows. Verwenden Sie den Eingabenamen, nicht die Eingabebezeichnung. Beispiel: {'table':'Incident','sys_ID':'a39d8e3cf0212300964feeefe80ff0ed'} . |
| Zeitüberschreitung | Anzahl | Optional. Zeitüberschreitung in Millisekunden. Dieser Wert überschreibt die von angegebene Standardzeitüberschreitung von 30 Sekunden com.glide.hub.flow_api.default_execution_timeSystemeigenschaft. Nach Ablauf der Zeitüberschreitung wird eine Ausnahme ausgelöst. |
| Typ | Beschreibung |
|---|---|
| void |
(function() {
try {
var grIncident = new GlideRecord('incident');
grIncident.get('ed92e8d173d023002728660c4cf6a7bc');
var inputs = {};
inputs['current'] = grIncident;
inputs['table_name'] = 'incident';
sn_fd.FlowAPI.executeFlowQuick('global.test_quick_flow', inputs);
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI – executeSubflow(Zeichenfolge „name“, Zuordnung „inputs“, Zahl „timeout“)
Führt einen Subflow aus einem serverseitigen Skript synchron aus.
| Name | Typ | Beschreibung |
|---|---|---|
| Name | Zeichenfolge | Der Bereich und der Name des auszuführenden Subflow, z. B. global.subflow_name. |
| inputs | Zuordnung | Name-Wert-Paare, die Subflow-Eingaben definieren. Verwenden Sie den Eingabenamen, nicht die Eingabebezeichnung. |
| Zeitüberschreitung | Anzahl | Optional. Zeitüberschreitung in Millisekunden. Dieser Wert überschreibt die von angegebene Standardzeitüberschreitung von 30 Sekunden com.glide.hub.flow_api.default_execution_timeSystemeigenschaft. Nach Ablauf der Zeitüberschreitung wird eine Ausnahme ausgelöst. |
| Typ | Beschreibung |
|---|---|
| Objekt | Objekt, das die Subflow-Ausgaben enthält. |
| Ausnahme | Die API löst eine Ausnahme aus, wenn ein synchron aufgerufener Flow angehalten wird. Die aktuelle Ausführung befindet sich im Status „Warten“ . In den meisten Fällen wird die Ausnahme entfernt, wenn der Flow fortgesetzt wird. Die API kann jedoch einen Flow, der an einen MID-Server gesendet wurde, nicht fortsetzen. |
In diesem Beispiel verwendet das Skript „sn_fd.FlowAPI.executeSubflow“, um einen Subflow mit dem Namen „subflowTest“ im globalen Bereich auszuführen. Eine Variable mit dem Namen „input“ enthält die Eingaben für den Subflow. In diesem Fall einen Namen und ein Passwort. Der Code ist in einer try/catch-Anweisung eingeschlossen, um alle Fehler zu erfassen, die bei der Ausführung des Flow auftreten können.
(function() {
try {
var inputs = {};
inputs['name'] = ; // String
inputs['password2'] = ; // Password (2 Way Encrypted)
// Execute Synchronously: Run in foreground.
// var timeout = ; //timeout in ms
//sn_fd.FlowAPI.executeSubflow('global.subflowTest', inputs, timeout)
var outputs = sn_fd.FlowAPI.executeSubflow('global.subflowTest', inputs);
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI – executeSubflowQuick (Zeichenfolgenname, Zuordnungseingaben, Zahlenzeitüberschreitung)
Führen Sie einen Subflow aus einem serverseitigen Skript synchron aus der aktuellen Anwendersitzung aus, ohne Ausführungsdetails oder andere zugehörige Datensätze zu erstellen. Verbessern Sie die Leistung, indem Sie den Overhead bei der Datensatzführung vermeiden. Verwenden Sie diese API, um die Geschwindigkeit der Verarbeitung mit hohem Volumen, z. B. mehrere Ausführungen pro Sekunde, in einer Produktionsumgebung zu erhöhen.
- Berichterstellung und Datensätze generiert
- Diese Methode erstellt keine Ausführungsdetails und Kontextdatensätze, unabhängig von Workflow-Studio Einstellungen.
- Als Anwender ausführen
- Diese Methode führt den Flow als Anwender aus, der die Sitzung initiiert. Das Festlegen des Flows, der als Systemanwender ausgeführt werden soll, oder das Angeben der Identität eines Anwenders wird nicht unterstützt.
- Warten Sie auf Support
- Diese Methode unterstützt nicht das Anhalten des Flows, um auf Bedingungen zu warten. Aktionen oder Flow-Logik, die für Wartebedingungen anhalten, z. B. „Genehmigung anfordern“, „auf Bedingung warten“ oder „Warten für eine Dauer“, werden nicht unterstützt.
- MID-Server-Unterstützung
- Diese Methode unterstützt nicht das Anhalten eines Flows zur Ausführung von einem MID-Server.
| Name | Typ | Beschreibung |
|---|---|---|
| Name | Zeichenfolge | Umfang und interner Name des auszuführenden Subflows. Beispiel: Global.Subflow_Name . Suchen Sie nach Interner Name Feld in der Liste von Workflow-Studio Subflows. |
| inputs | Zuordnung | Name-Wert-Paare, die Subflow-Eingaben definieren. Sie finden die verfügbaren Subflow-Eingaben und erforderlichen Datentypen unter Eingaben im Subflow. Verwenden Sie den Eingabenamen, nicht die Eingabebezeichnung. Beispiel: {'table':'Incident','sys_ID':'a39d8e3cf0212300964feeefe80ff0ed'} . |
| Zeitüberschreitung | Anzahl | Optional. Zeitüberschreitung in Millisekunden. Dieser Wert überschreibt die von angegebene Standardzeitüberschreitung von 30 Sekunden com.glide.hub.flow_api.default_execution_timeSystemeigenschaft. Nach Ablauf der Zeitüberschreitung wird eine Ausnahme ausgelöst. |
| Typ | Beschreibung |
|---|---|
| Objekt | Objekt mit Ausgaben, die vom Subflow definiert sind. Sie finden die Ausgaben für den Subflow unter Subflow-Eingaben Und -Ausgaben In der Subflow-Gliederung. |
(function() {
try {
var grIncident = new GlideRecord('incident');
grIncident.get('57af7aec73d423002728660c4cf6a71c');
var inputs = {};
inputs['variable'] = grIncident;
var outputs = sn_fd.FlowAPI.executeSubflowQuick('global.test_quick_run_subflow', inputs);
// Get Outputs:
// Note: outputs can only be retrieved when executing synchronously.
var output1 = outputs['output1'];
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI – getErrorMessage(Zeichenfolge contextId)
Gibt die Fehlermeldungen zurück, die von einem Flow, Subflow oder einer Aktion erzeugt werden. Diese Methode kann keine Nachrichten von Flows, Subflows oder Aktionen zurückgeben, die mit der API „Quick()“ ausgeführt werden.
| Name | Typ | Beschreibung |
|---|---|---|
| contextId | Zeichenfolge | Die sys_ID des Flows, Subflows oder der Aktion, deren Fehlermeldungen Sie abrufen möchten. |
| Typ | Beschreibung |
|---|---|
| Zeichenfolge | Die letzte Ausführung des Vorgangs und die von ihm erstellte Fehlermeldung. |
Dieses Beispiel startet einen globalen Subflow namens Test_error_Subflow und gibt alle von ihm erstellten Fehlermeldungen zurück. Normalerweise führt ein einzelnes Skript nicht gleichzeitig einen Flow aus und ruft dann seine Fehlermeldungen ab. Normalerweise entweder ein anderes Skript oder Workflow-Studio Hätte den Flow bereits ausgeführt. Der Code ist in einer try/catch-Anweisung eingeschlossen, um alle Fehler zu erfassen, die bei der Ausführung des Flow auftreten können.
(function() {
try {
// Gather inputs to call flow
var inputs = {};
inputs['ah_task'] = myTaskRecord; // GlideRecord of table: task
inputs['ah_comment'] ='Test Comment' ; // String
// Call flow with known errors
var contextId = sn_fd.FlowAPI.startSubflow('global.test_error_subflow', inputs);
// Get flow error message
var errormsg = sn_fd.FlowAPI.getErrorMessage(contextId);
return errormsg;
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
Ausgabe:
Operation (test_error_flow.574033f6db6811102166e2291396199f.274073f6db6811102166e22913961908.0be0d916c31332002841b63b12d3ae13) failed with error: com.snc.process_flow.exception.OpException: Value of field record is not a GlideRecord
at com.snc.process_flow.operation.FieldValue.getGlideRecord(FieldValue.java:145)
at com.snc.process_flow.operation.CRUDOperation.getInputValidGlideRecord(CRUDOperation.java:54)
at com.snc.process_flow.operation.RecordDeleteOperation.run(RecordDeleteOperation.java:26)
at com.snc.process_flow.engine.Operation.execute(Operation.java:212)
at com.snc.process_flow.engine.restricted_caller_access.ExecuteWithCallerAccessTracking.executeWithMetaStack(ExecuteWithCallerAccessTracking.java:31)
at com.snc.process_flow.engine.ProcessEngine.executeOps(ProcessEngine.java:570)
at com.snc.process_flow.engine.ProcessEngine.runInternal(ProcessEngine.java:476)
at com.snc.process_flow.engine.ProcessEngine.run(ProcessEngine.java:462)
at com.snc.process_flow.engine.ProcessAutomation.run(ProcessAutomation.java:86)
at com.snc.process_flow.engine.GlideProcessAutomation.runSync(GlideProcessAutomation.java:155)
at com.snc.process_flow.engine.GlideProcessAutomation.runWithDomain(GlideProcessAutomation.java:270)
at com.snc.process_flow.engine.GlideProcessAutomation.lambda$runAsUserSync$1(GlideProcessAutomation.java:237)
at com.snc.process_flow.engine.PFSessionClone.run(PFSessionClone.java:70)
at com.snc.process_flow.engine.GlidePFSession.runPlanAsUserSession(GlidePFSession.java:42)
at com.snc.process_flow.engine.GlideProcessAutomation.runAsUserSync(GlideProcessAutomation.java:235)
at com.snc.process_flow.engine.GlideProcessAutomation.messageFlow(GlideProcessAutomation.java:330)
at com.snc.process_flow.engine.GlideProcessAutomation.messageFlow(GlideProcessAutomation.java:309)
at com.snc.process_flow.engine.ProcessHubEventHandler.doSendMessage(ProcessHubEventHandler.java:475)
at com.snc.process_flow.engine.ProcessHubEventHandler.process(ProcessHubEventHandler.java:119)
at com.snc.process_flow.engine.ProcessHubEventHandler.process(ProcessHubEventHandler.java:91)
at com.snc.process_flow.engine.FlowEventManager.processEvents(FlowEventManager.java:122)
at com.glide.job.EventHandlerJob.execute(EventHandlerJob.java:38)
at com.glide.schedule.JobExecutor.lambda$executeJob$0(JobExecutor.java:129)
at com.snc.db.data_replicate.replicator.DataReplicationAdvisors.runInOriginatorContext(DataReplicationAdvisors.java:73)
at com.glide.schedule.JobExecutor.lambda$inDataReplicationContext$2(JobExecutor.java:159)
at com.glide.schedule.JobExecutor.executeJob(JobExecutor.java:132)
at com.glide.schedule.JobExecutor.execute(JobExecutor.java:116)
at com.glide.schedule_v2.SchedulerWorkerThread.executeJob(SchedulerWorkerThread.java:338)
at com.glide.schedule_v2.SchedulerWorkerThread.lambda$process$0(SchedulerWorkerThread.java:220)
at com.glide.worker.TransactionalWorkerThread.executeInTransaction(TransactionalWorkerThread.java:35)
at com.glide.schedule_v2.SchedulerWorkerThread.process(SchedulerWorkerThread.java:220)
at com.glide.schedule_v2.SchedulerWorkerThread.run(SchedulerWorkerThread.java:101)
FlowAPI – getFlowStages(Zeichenfolge scopedFlowName)
Gibt eine JSON-Zeichenfolge zurück, die die Liste der Flow-Phasen enthält.
| Name | Typ | Beschreibung |
|---|---|---|
| Scope-FlowName | Zeichenfolge | Der Anwendungsbereich und der Name des Flows, dessen Phasen Sie abrufen möchten. |
| Typ | Beschreibung |
|---|---|
| Zeichenfolge | JSON-formatierte Zeichenfolge, die die Phasen des Flows nach ihren Phasendatensatzwerten auflistet. |
Dieses Beispiel zeigt das Abrufen der Phasen für den Flow „Servicekatalog-Elementanforderung“.
(function() {
try {
// Name of flow with stages
var flowName = "service_catalog_item_request";
// Get flow stages
var flowStages = sn_fd.FlowAPI.getFlowStages(flowName);
//Print JSON as info message
gs.info(flowStages);
return flowStages;
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
Ausgabe:
Die JSON-Zeichenfolge enthält Name-Wert-Paare für ein Phasenfeld. Weitere Informationen finden Sie unter .
[
{
"label": "Manager Approval",
"value": "manager_approval",
"type": "standard",
"duration": "1970-01-03 00:00:00",
"states": {
"pending": "Pending - has not started",
"inprogress": "In progress",
"skipped": "Skipped",
"complete": "Completed",
"error": "Error"
},
"flow": "30f3d26187e92300e0ef0cf888cb0b91",
"alwaysShow": true,
"order": 0
},
{
"label": "Set current stage state to: [Error]",
"value": "Set current stage state to: [Error]",
"type": "error",
"duration": "1970-01-01 00:00:00",
"states": {
"pending": "Pending - has not started",
"inprogress": "In progress",
"skipped": "Skipped",
"complete": "Completed",
"error": "Error"
},
"flow": "30f3d26187e92300e0ef0cf888cb0b91",
"alwaysShow": false,
"order": 0
},
{
"label": "Dept. Head Approval",
"value": "Dept. Head Approval",
"type": "standard",
"duration": "1970-01-03 00:00:00",
"states": {
"pending": "Pending - has not started",
"inprogress": "In progress",
"skipped": "Skipped",
"complete": "Completed",
"error": "Error"
},
"flow": "30f3d26187e92300e0ef0cf888cb0b91",
"alwaysShow": true,
"order": 1
},
{
"label": "CIO Approval",
"value": "CIO Approval",
"type": "standard",
"duration": "1970-01-03 00:00:00",
"states": {
"pending": "Pending - has not started",
"inprogress": "In progress",
"skipped": "Skipped",
"complete": "Completed",
"error": "Error"
},
"flow": "30f3d26187e92300e0ef0cf888cb0b91",
"alwaysShow": true,
"order": 2
},
{
"label": "Order Fulfillment",
"value": "Order Fulfillment",
"type": "standard",
"duration": "1970-01-05 00:00:00",
"states": {
"pending": "Pending - has not started",
"inprogress": "In progress",
"skipped": "Skipped",
"complete": "Completed",
"error": "Error"
},
"flow": "30f3d26187e92300e0ef0cf888cb0b91",
"alwaysShow": true,
"order": 3
},
{
"label": "Backordered",
"value": "Backordered",
"type": "standard",
"duration": "1970-01-15 00:00:00",
"states": {
"pending": "Pending - has not started",
"inprogress": "In progress",
"skipped": "Skipped",
"complete": "Completed",
"error": "Error"
},
"flow": "30f3d26187e92300e0ef0cf888cb0b91",
"alwaysShow": true,
"order": 4
},
{
"label": "Deployment",
"value": "Deployment",
"type": "standard",
"duration": "1970-01-02 00:00:00",
"states": {
"pending": "Pending - has not started",
"inprogress": "In progress",
"skipped": "Skipped",
"complete": "Completed",
"error": "Error"
},
"flow": "30f3d26187e92300e0ef0cf888cb0b91",
"alwaysShow": true,
"order": 5
},
{
"label": "Request Cancelled",
"value": "Request Cancelled",
"type": "standard",
"duration": "1970-01-01 00:00:00",
"states": {
"pending": "Pending - has not started",
"inprogress": "In progress",
"skipped": "Skipped",
"complete": "Completed",
"error": "Error"
},
"flow": "30f3d26187e92300e0ef0cf888cb0b91",
"alwaysShow": true,
"order": 6
},
{
"label": "Completed",
"value": "complete",
"type": "standard",
"duration": "1970-01-01 00:00:00",
"states": {
"pending": "Pending - has not started",
"inprogress": "In progress",
"skipped": "Skipped",
"complete": "Completed",
"error": "Error"
},
"flow": "30f3d26187e92300e0ef0cf888cb0b91",
"alwaysShow": true,
"order": 7
}
]
FlowAPI – getOutputs(Zeichenfolge contextId)
Gibt die Ausgaben einer abgeschlossenen Aktion oder eines abgeschlossenen Subflows zurück.
| Name | Typ | Beschreibung |
|---|---|---|
| contextId | Zeichenfolge | Die sys_ID der Aktion oder des Subflows, deren Ausgaben Sie abrufen möchten. |
| Typ | Beschreibung |
|---|---|
| Objekt | Objekt, das die Aktionen- oder Subflow-Ausgaben enthält. |
Dieses Beispiel startet einen globalen Subflow namens Test_Subflow, wartet, bis der Flow abgeschlossen ist, und ruft dann seine Ausgabewerte ab. Normalerweise führt ein einzelnes Skript nicht gleichzeitig einen Flow aus und ruft dann seine Ausgabewerte ab. Da ein Flow möglicherweise nicht vor abgeschlossen wird GetOutputs() Anruf, in diesem Beispiel wird eine Wartezeit verwendet. Normalerweise entweder ein anderes Skript oder Workflow-Studio Hätte den Flow bereits ausgeführt. Der Code ist in einer try/catch-Anweisung eingeschlossen, um alle Fehler zu erfassen, die bei der Ausführung des Flow auftreten können.
(function() {
try {
// Gather inputs to call flow
var inputs = {};
inputs['ah_task'] = myTaskRecord; // GlideRecord of table: task
inputs['ah_comment'] ='Test Comment' ; // String
// Call flow
var contextId = sn_fd.FlowAPI.startSubflow('global.test_subflow', inputs);
// Wait for the flow to finish running
// Get flow outputs
var outputs = sn_fd.FlowAPI.getOutputs(contextId);
var output1 = outputs['output1'];
return output1;
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI – getRunner()
Gibt einen zurück ScriptableFlowRunner builder-Objekt für einen Flow oder eine Aktion, den Sie ausführen möchten.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| ScriptableFlowRunner | Builder-Objekt, das zum Ausführen von verwendet wird Workflow-Studio Aktion, Flow oder Subflow. |
In diesem Beispiel wird ein Flow synchron ausgeführt.
(function() {
try {
var inputs = {};
inputs['sys_id'] = '57af7aec73d423002728660c4cf6a71c'; // Pass the record's sys_id in as input.
var result = sn_fd.FlowAPI.getRunner() // Create a ScriptableFlowRunner builder object.
.action('global.markapproved') // Run the global scope action named markapproved.
.inForeground()
.inDomain('TOP/ACME') // Run the action from the TOP/ACME domain.
.withInputs(inputs)
.run(); // Run the action and return a FlowRunnerResult object.
var contextId = result.getContextId(); // Retrieve the context ID from the result
var dateRun = result.getDate();
var domainUsed = result.getDomainId(); // Retrieve the Domain ID from the result.
var flowName = result.getFlowObjectName();
var flowObjectType = result.getFlowObjectType();
var outputs = result.getOutputs(); // Retrieve any outputs from the action execution.
var newApprovalStatus = outputs['approval']; // Echo back the approval status for verification.
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI – getStatus(Zeichenfolge contextId)
Gibt den Status eines Flows, Subflows oder einer Aktion zurück.
| Name | Typ | Beschreibung |
|---|---|---|
| contextId | Zeichenfolge | Die sys_ID des Flows, Subflows oder der Aktion, deren Status Sie abrufen möchten. |
| Parameter | Typ | Beschreibung |
|---|---|---|
| <Object> | Objekt | Objekt, das den aktuellen Status des Flows, Subflows oder der Aktion als Name-Wert-Paare enthält. |
| <Object>.HasLookupError | Boolean | Kennzeichnung, die angibt, ob beim Suchen des Kontextstatus des Flows, Subflows oder der Aktion ein Problem aufgetreten ist. |
| <Object>.Fehlernachricht | Zeichenfolge | Fehlermeldung, die vom Kontextsuchvorgang zurückgegeben wird. Dieser Parameter ist ungültig, wenn hasLookupErrorIst „falsch“. |
| <Object>.ContextStatus | Objekt | Objekt mit Statusdetails zum abgefragten Flow, Subflow oder Aktion. |
| <Object>.ContextStatus.Status | Zeichenfolge | Status des Flows, Subflows oder Aktionskontexts. Einige Statuswerte enthalten zusätzliche Informationen in zugehörigen Parametern.
|
| <Object>.ContextStatus.Fehlerstatus | Zeichenfolge | Flow-Abgeschlossenstatus, der durch die Flow-Fehlerbehandlung erzeugt wird. Die API generiert diesen Parameter nur, wenn sich der Flow, der Subflow oder die Aktion im Status „ABGESCHLOSSEN“ befinden.
|
| <Object>.ContextStatus.Nachricht | Zeichenfolge | Fehlermeldung, die vom Flow, Subflow oder der Aktion zurückgegeben wird. Die API generiert diesen Parameter nur, wenn sich der Flow, der Subflow oder die Aktion im FEHLERSTATUS befinden. |
| <Object>.contextStatus.canceledReason | Zeichenfolge | Abbruchnachricht, die vom Flow, Subflow oder der Aktion zurückgegeben wird. Die API generiert diesen Parameter nur, wenn sich der Flow, der Subflow oder die Aktion im Status „ABGEBROCHEN“ befindet. |
| <Object>.ContextStatus.isRunOnMid | Boolean | Kennzeichnung, die angibt, ob der Flow, Subflow oder die Aktion in einer MID-Server-Umgebung ausgeführt wird. Die API generiert diesen Parameter nur, wenn sich der Flow, der Subflow oder die Aktion im Status IN_PROGRESS befinden. |
| <Object>.ContextStatus.Warten auf | Array | Liste der Elemente, auf die der aktuelle Flow, Subflow oder die aktuelle Aktion wartet. Die API generiert diesen Parameter nur, wenn sich der Flow, der Subflow oder die Aktion im Status „WARTEN“ befinden. |
| <Object>.ContextStatus.Warten auf.Bestellung | Zeichenfolge | Flow-Schrittnummer des Elements, das das Warten des Flows verursacht. Wenn die Warteaktion eine anwenderdefinierte Aktion innerhalb eines Flows ist, enthält die Reihenfolge auch einen Punkt und die Aktionsschrittnummer der anwenderdefinierten Aktion, auf die der Flow wartet. |
| <Object>.ContextStatus.wartingOn.stepType | Zeichenfolge | Typ der Aktion oder des Flow-Schritts, der dazu führt, dass der Flow, der Subflow oder die Aktion warten. Die API generiert diesen Parameter nur, wenn sich der Flow, der Subflow oder die Aktion im Status „WARTEN“ befinden. Hier sind einige häufige Beispiele.
|
| <Object>.ContextStatus.Warten auf.Tabelle | Zeichenfolge | Tabellenname, der den Datensatz enthält, auf den der Flow, Subflow oder die Aktion wartet. Die API generiert diesen Parameter nur, wenn sich der Flow, der Subflow oder die Aktion im Status „WARTEN“ befindet und der stepType „WAIT_FOR_CONDITION“, „WAIT_FOR_CONDITION_WITH_TIMEOUT“, „ASK_FOR_APPROVAL“ oder „CREATE_TASK_WITH_WAIT“ ist. |
| <Object>.ContextStatus.Warten auf.Bedingung | Zeichenfolge | Abfragebedingung des Datensatzes, auf den der Flow, Subflow oder die Aktion wartet. Die API generiert diesen Parameter nur, wenn sich der Flow, der Subflow oder die Aktion im Status „WARTEN“ befinden und eine Bedingung vorhanden ist, die erfüllt sein muss, um die Ausführung fortzusetzen. |
| <Object>.ContextStatus.Warten On.endTime | Ganzzahl | Endzeit, auf die der Flow, Subflow oder die Aktion wartet. Die API generiert diesen Parameter nur, wenn sich der Flow, der Subflow oder die Aktion im Status „WARTEN“ befindet und der stepType „WAIT_FOR_CONDITION_WITH_TIMEOUT“, „TIMER“ oder „SLA_TIMER“ ist. |
| <Object>.ContextStatus.WaitingOn.ApprovalRule | Zeichenfolge | Genehmigungsregel, auf die der Flow, Subflow oder die Aktion wartet. Die API generiert diesen Parameter nur, wenn sich der Flow, der Subflow oder die Aktion im Status „WARTEN“ befinden und der stepType ASK_FOR_APPROVAL ist. |
| <Object>.ContextStatus.wartingOn.contextId | Zeichenfolge | Die sys_ID des Subflows, auf den der Flow oder Subflow wartet. Die API generiert diesen Parameter nur, wenn sich der Flow oder Subflow im Status „WARTEN“ befindet und der stepType SUBFLOW ist. |
In diesem Beispiel wird ein Flow ausgeführt, der Folgendes in paralleler Flow-Logik enthält. Normalerweise führt ein einzelnes Skript nicht gleichzeitig einen Flow aus und ruft dann seine Fehlermeldungen ab. Normalerweise entweder ein anderes Skript oder Workflow-Studio Hätte den Flow bereits ausgeführt.
(function() {
try {
var result = sn_fd.FlowAPI.getRunner() // Create a ScriptableFlowRunner builder object.
.flow('global.test_do_in_parallel') // Run the global scope flow named do_in_parallel.
.run(); // Run the flow and return a FlowRunnerResult object.
var contextId = result.getContextId(); // Retrieve the context ID from the result
var flowStatus = sn_fd.FlowAPI
.getStatus(contextId); // Retrieve any outputs from the flow execution.
JSON.stringfy(flowStatus); // Convert object to string
return flowStatus;
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
{
"hasLookupError": false,
"errorMessage": "",
"contextStatus": {
"state": "WAITING",
"waitingOn": [
{
"order":"1",
"stepType": "TIMER",
"endTime": 1713627497643
},
{
"order":"5",
"stepType": "WAIT_FOR_CONDITION_WITH_TIMEOUT",
"table": "incident",
"condition": "sys_id=10e8b43243200210338774d6ebb8f22d^short_description=112",
"endTime": 1713645497800
}
]
}
}FlowAPI – hasApprovals(Zeichenfolge scopedFlowName)
Überprüft, ob ein Flow innerhalb eines bestimmten Umfangs Aktionen zur Anforderung einer Genehmigung enthält.
Die HasApprovals() Die Methode bestimmt, ob ein Flow innerhalb eines bestimmten Umfangs Aktionen zum Anfordern einer Genehmigung enthält. Mit dieser Methode wird auch überprüft, ob Aktionen zur Anforderung einer Genehmigung innerhalb des Flows unter „wenn“-Flow-Logikblöcken verschachtelt sind. Weitere Informationen finden Sie unter Aktionen „um Genehmigung bitten“ .
| Name | Typ | Beschreibung |
|---|---|---|
| Scope-FlowName | Zeichenfolge | Umfang und interner Name des auszuführenden Flows. Beispiel: Global.Flow_Name . Suchen Sie nach Interner Name Feld in der Liste von Workflow-Studio Flows. |
| Typ | Beschreibung |
|---|---|
| Zeichenfolge | Gibt einen der folgenden Zeichenfolgenwerte zurück:
|
Im folgenden Beispiel wird überprüft, ob Example_Flow Flow innerhalb von Global Der Umfang enthält alle Aktionen zur Anforderung einer Genehmigung und protokolliert das Ergebnis.
(function() {
try {
var result = sn_fd.FlowAPI.hasApprovals('global.example_flow');
gs.log('Result: ' + result);
}
catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI – restartFlowFromContext(String ContextId, Map providedInputs)
Startet einen Flow, Subflow oder eine Aktion neu, die im Hintergrund ausgeführt wurde. Sie können neue Eingaben bereitstellen oder auslassen, um die zuvor bereitgestellten Eingaben wiederzuverwenden.
| Name | Typ | Beschreibung |
|---|---|---|
| contextId | Zeichenfolge | Die sys_ID des Flows, Subflows oder der Aktion, die Sie neu starten möchten. Dieser Flow, Subflow oder diese Aktion muss im Hintergrund ausgeführt werden und einen zugehörigen sysevent-Datensatz haben. |
| BereitgestelltEingaben | Objekt | Optional. Zuordnungsobjekt, das die Name-Wert-Paare enthält, die Ersatzeingaben für den Flow, den Subflow oder die Aktion definieren. Wenn Sie diesen Parameter auslassen oder einen Nullwert angeben, wird der Flow, der Subflow oder die Aktion mit den zuvor angegebenen Eingaben ausgeführt. |
| Typ | Beschreibung |
|---|---|
| SkriptableFlowRunnerResultScoped | Objekt, das die Ausführungsdetails von enthält Workflow-Studio Aktion, Flow oder Subflow. |
Startet einen Beispiel-Flow neu, der einen datensatzbasierten Auslöser in der Incident-Tabelle hat. Der ursprüngliche Flow verwendete Beispiel-Incident INC0008112 als Eingabe. Wenn der Flow neu gestartet wird, wird stattdessen ein Beispiel-Incident INC0008111 als Eingabe verwendet.
(function() {
try {
var flowContextID = '4216396ffd7d11107edcf07204c30fd5'; // sys_id of sys_flow_context record
var oldIncidentRecord = '552c48888c033300964f4932b03eb092'; // sys_id of INC0008112
var newIncidentRecord = 'a83820b58f723300e7e16c7827bdeed2'; // sys_id of INC0008111
var inputs = {};
var gr = new GlideRecord('incident'); // Create new incident object
gr.get(newIncidentRecord); // Get GlideRecord object for INC0008111
inputs['current'] = gr; // Set new Incident record as input
inputs['table_name'] = 'incident'; // Set table name to Incident
var result = sn_fd.FlowAPI.getRunner() // Create a ScriptableFlowRunner builder object.
.restartFlowFromContext(flowContextID, inputs); // Restart flow with new inputs.
var contextId = result.getContextId(); // Retrieve the context ID from the result
var dateRun = result.getDate();
gs.info(contextId + ' ' + dateRun);
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI – scheduleCancel(ZeichenfolgenkontextId, Zeichenfolgengrund, Ganzzahl delaySeconds)
Planen Sie ein Systemereignis in der Flow-Engine-Warteschlange, um einen Flow im Status „in Bearbeitung“, „vermutlich unterbrochen“ oder „Warten“ nach einer Verzögerung abzubrechen.
| Name | Typ | Beschreibung |
|---|---|---|
| contextId | Zeichenfolge | SYS_ID des Ausführungsdetaildatensatzes für den Flow, den Subflow oder die Aktion. Der Ziel-Flow, der Subflow oder die Aktion müssen sich im Status „in Bearbeitung“, „vermutlich unterbrochen“ oder „Warten“ befinden. Greifen Sie auf die Ausführungsdetails zu, indem Sie in zur Registerkarte Flow-Ausführungen navigieren Workflow-Studio, Oder übergeben Sie die sys_ID des Kontextdatensatzes, der von der Methode zurückgegeben wird. Hinweis: Es kann eine kleine Verzögerung beim Abbrechen geben, wenn der Zielkontext auf einem anderen Knoten der Instanz ausgeführt wird. Kontexte, die auf demselben Knoten ausgeführt werden, werden sofort abgebrochen. Kontexte, die auf einem anderen Knoten ausgeführt werden, müssen zuerst warten, bis der Abbruch an den entsprechenden Knoten weitergeleitet wird. |
| Grund | Zeichenfolge | Grund für den Abbruch des Flows, Subflows oder der Aktion. Wird in angezeigt Nachricht Feld der Tabelle „Flow Engine-Protokolleinträge“ [sys_Flow_log]. |
| DelaySeconds | Ganzzahl | Optional. Anzahl der Sekunden, die gewartet werden soll, bevor ein Abbruchereignis in der Flow Engine-Warteschlange verarbeitet wird. Wenn Sie diesen Parameter auslassen, verwendet die Methode den Standardwert 1 Sekunde. Sie können diesen Parameter verwenden, um die Leistungsauswirkungen zu vermeiden, die durch die Planung des Abbruchs von Tausenden von Flow-Kontexten gleichzeitig entstehen. Anstatt alle Abbrüche gleichzeitig auszuführen, planen Sie einen Batch von Flow-Abbrüchen mit einer Verzögerung. Alternativ können Sie die Verzögerung als Zeitüberschreitungswert für einen asynchronen Flow verwenden. |
| Typ | Beschreibung |
|---|---|
| Keine |
In diesem Beispiel wird der Rückgabewert von verwendet StartFlow() Methode zum Planen des Abbruchs von Flows mit langer Laufzeit.
(function() {
var now_GR = new GlideRecord('incident');
now_GR.addQuery('number', 'INC0000050');
now_GR.query();
now_GR.next();
try {
var inputs = {};
inputs['current'] = now_GR; // GlideRecord of table:
inputs['table_name'] = 'incident';
// Starts the flow asynchronously.
var contextId = sn_fd.FlowAPI.startFlow('global.myFlow', inputs);
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
// Call the scheduleCancel() method using the context Id returned from the startFlow() method
sn_fd.FlowAPI.scheduleCancel(contextId, 'Flow took too long to execute.', 60);
In diesem Beispiel wird der Abbruch aller Flows mit dem Namen „Test-Flow“ geplant.
var now_GR = new GlideRecord("sys_flow_context");
now_GR.addQuery("name", "Test Flow");
now_GR.query();
while (now_GR.next()) {
sn_fd.FlowAPI.scheduleCancel(now_GR.getUniqueValue(), 'Canceling Test Flows', 60);
}
In diesem Beispiel wird der Parameter „delaySeconds“ verwendet, um Flow-Abbruchaufträge in Batches auszuführen. Verwenden Sie Batches, um Tausende von Flow-Kontexten abzubrechen.
var delaySeconds = 1;
for (var i; i < sys_flow_context.length; ++i) {
if (i % 100 === 0) {
delaySeconds = delaySeconds + 60;
}
var contextId = sys_flow_context[i];
var reason = "Example reason";
sn_fd.FlowAPI.scheduleCancel(contextId, reason, delaySeconds);
}
FlowAPI – sendMessage(String contextSysID, String Message, Zeichenfolgennutzlast)
Senden Sie eine bestimmte Nachricht und Nutzlastantwort an einen Flow, der angehalten wird und auf eine Nachricht wartet.
| Name | Typ | Beschreibung |
|---|---|---|
| ContextSysID | Zeichenfolge | Der sys_ID-Wert des Flows oder Subflows, der angehalten wird und wartet, bis eine bestimmte Nachricht fortgesetzt wird. Der Flow oder Subflow muss eine Aktion Warten auf Nachricht enthalten. Weitere Informationen finden Sie unter Wait For Message action. |
| Nachricht | Zeichenfolge | Die Textzeichenfolge, die an den wartenden Flow oder Subflow gesendet werden soll. Wenn dieser Nachrichtenwert mit dem Nachrichtenwert übereinstimmt, der in der Aktion auf Nachricht warten aufgeführt ist, wird der Flow oder Subflow fortgesetzt. Weitere Informationen finden Sie unter Wait For Message action. |
| Nutzlast | Zeichenfolge | Der Ausgabewert der Textzeichenfolge, der an den wartenden Flow gesendet werden soll. Der Flow oder Subflow kann die Nutzlast als Eingabe verwenden, wenn sie fortgesetzt wird. Sie können beispielsweise einen Grund angeben, warum ein Datensatz erneut geöffnet wurde oder dass eine neue Genehmigung erforderlich war. |
| Typ | Beschreibung |
|---|---|
| Keine |
In diesem Beispiel wird die Nachricht gesendet Flow Fortsetzen Um einen angehaltenen Flow neu zu starten. Der angehaltene Flow kann dann den Nutzlastwert als Daten an anderer Stelle im Flow verwenden.
(function() {
try {
// var change = '154a6320db9b12102166e229139619fc'; // Example sys_id of change record
var pausedFlowId = '6e9bab60949b1210dda11cd237cd955d'; // Example sys_id of a paused flow
var resumeMessage = 'Resume Flow'; // Message that paused flow is waiting for
var payload = 'Resubmitted for approval'; // Data to send back to flow
var result = sn_fd.FlowAPI
.sendMessage(pausedFlowId, resumeMessage, payload); // Send a message to the paused flow
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
Ausgabe:
[0:00:00.074] Script completed in scope global: script
Script execution history and recovery available here
Operation Table Row Count
delete sys_flow_runtime_state_chunk 1
insert sys_flow_runtime_state_chunk 1
update sys_flow_context 1
record-watcher asynchronous tracking complete - time: 3 ms. Executed responders: 1
record-watcher asynchronous tracking complete - time: 3 ms. Executed responders: 1
record-watcher asynchronous tracking complete - time: 3 ms. Executed responders: 1
FlowAPI – setEncryptedOutput(Zeichenfolge „password“)
Erstellt Passwort2-Werte innerhalb eines Skriptschritts.
Ermitteln Sie einen verschlüsselten password2-Wert, der von einem GlideRecord zurückgegeben wird. Dadurch kann das System den Wert als maskiertes Passwort anstelle einer verschlüsselten Zeichenfolge anzeigen.
| Name | Typ | Beschreibung |
|---|---|---|
| Passwort | Zeichenfolge | Verschlüsselter password2-Wert. |
| Typ | Beschreibung |
|---|---|
| Zeichenfolge | Verschlüsselter password2-Wert, der von der Engine als Passwortwert erkannt wird. |
In diesem Beispiel wird der Wert eines password2-Felds aus einem Benutzerdatensatz zurückgegeben und in einer Variablen gespeichert. Diese Variable wird an die Methode „setEncryptedOutput“ übergeben, die mit „sn_fd.GlideActionUtil.setEncryptedOutput“ angerufen wird. Die Instanz erkennt den zurückgegebenen Wert als Passwort.
(function execute(inputs, outputs) {
// ...code...
var now_GR = new GlideRecord('sys_user');
now_GR.addQuery('first_name' , 'Abel');
now_GR.query();
now_GR.next();
var pwVal = now_GR.getValue('pw2');
outputs['usedSetEncrypted'] = sn_fd.GlideActionUtil.setEncryptedOutput(pwVal);
outputs['justSetDirectly'] = pwVal;
})(inputs, outputs);
FlowAPI – startAction(String name, Map inputs)
Führt eine Aktion aus einem serverseitigen Skript asynchron aus.
| Name | Typ | Beschreibung |
|---|---|---|
| Name | Zeichenfolge | Der Bereich und der Name der auszuführenden Aktion, z. B. global.action_name. |
| inputs | Karte | Name-Wert-Paare, die Aktionseingaben definieren. Verwenden Sie den Eingabenamen, nicht die Eingabebezeichnung. |
| Typ | Beschreibung |
|---|---|
| Zeichenfolge | SYS-ID des Kontextdatensatzes für die Aktion. Greifen Sie auf den Kontextdatensatz zu, indem Sie in zur Registerkarte Flow-Ausführungen navigieren Workflow-Studio, Wählen Sie eine Flow-Ausführung aus, und klicken Sie auf Öffnen Sie Den Kontextdatensatz . |
Dieses Beispiel verwendet „sn_fd.FlowAPI.startAction“, um eine Aktion mit dem Namen „add_comment“ in dem Bereich „sn_itsm_spoke“ auszuführen. Das inputs-Objekt enthält einen Zieldatensatz und einen Kommentar, der diesem Datensatz hinzugefügt werden soll. Der Code ist in einer try/catch-Anweisung eingeschlossen, um alle Fehler zu erfassen, die bei der Ausführung des Flow auftreten können.
(function() {
try {
var inputs = {};
inputs['ah_task'] = myTaskRecord; // GlideRecord of table: task
inputs['ah_comment'] ='Test Comment' ; // String
var contextId = sn_fd.FlowAPI.startAction('sn_itsm_spoke.add_comment', inputs);
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI – startActionQuick(Zeichenfolgenname, Zuordnungseingaben)
Führt eine Aktion aus einem serverseitigen Skript asynchron aus, ohne Ausführungsdetails oder andere zugehörige Datensätze zu erstellen. Verbessern Sie die Leistung, indem Sie den Overhead bei der Datensatzführung vermeiden. Verwenden Sie diese API, um die Geschwindigkeit der Verarbeitung mit hohem Volumen, z. B. mehrere Ausführungen pro Sekunde, in einer Produktionsumgebung zu erhöhen.
- Berichterstellung und Datensätze generiert
- Diese Methode erstellt keine Ausführungsdetails und Kontextdatensätze, unabhängig von Workflow-Studio Einstellungen.
- Warten Sie auf Support
- Diese Methode unterstützt nicht das Anhalten der Aktion zum Warten auf Bedingungen. Schritte, die für Wartebedingungen anhalten, z. B. „Genehmigung anfordern“ oder „Warten auf Bedingung“, werden nicht unterstützt.
- MID-Server-Unterstützung
- Diese Methode unterstützt nicht das Anhalten einer Aktion zur Ausführung von einem MID-Server.
| Name | Typ | Beschreibung |
|---|---|---|
| Name | Zeichenfolge | Umfang und interner Name der auszuführenden Aktion. Beispiel: Global.action_Name . Suchen Sie nach Interner Name Feld in der Liste von Workflow-Studio Aktionen. |
| inputs | Karte | Name-Wert-Paare, die Aktionseingaben definieren. Sie finden die verfügbaren Aktionseingaben und erforderlichen Datentypen unter Eingaben in der Aktionsstruktur. Verwenden Sie den Eingabenamen, nicht die Eingabebezeichnung. Beispiel: {'table':'Incident','sys_ID':'a39d8e3cf0212300964feeefe80ff0ed'} . |
| Typ | Beschreibung |
|---|---|
| void |
(function() {
try {
var grIncident = new GlideRecord('incident');
grIncident.get('57af7aec73d423002728660c4cf6a71c');
var inputs = {};
inputs['variable'] = grIncident;
sn_fd.FlowAPI.startActionQuick('global.update_record_test', inputs);
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI – startFlow(String name, Map inputs)
Führt einen Flow aus einem serverseitigen Skript aus.
| Name | Typ | Beschreibung |
|---|---|---|
| Name | Zeichenfolge | Der Bereich und der Name des auszuführenden Flow, z. B. global.flow_name. |
| inputs | Karte | Name-Wert-Paare, die Auslösereingaben definieren. Verwenden Sie den Eingabenamen, nicht die Eingabebezeichnung. |
| Typ | Beschreibung |
|---|---|
| Zeichenfolge | SYS-ID des Kontextdatensatzes für den Flow. Greifen Sie auf den Kontextdatensatz zu, indem Sie in zur Registerkarte Flow-Ausführungen navigieren Workflow-Studio, Wählen Sie eine Flow-Ausführung aus, und klicken Sie auf Öffnen Sie Den Kontextdatensatz . |
Dieses Beispiel verwendet „sn_fd.FlowAPI.startFlow“, um einen globalen Flow mit dem Namen „test_flow“ auszuführen. Der Code erstellt eine Variable „inputs“, die Eingaben enthält, die für den Flow erforderlich sind. In diesem Fall den aktuellen Datensatz und die Tabelle für den Datensatz. Der Code ist in einer try/catch-Anweisung eingeschlossen, um alle Fehler zu erfassen, die bei der Ausführung des Flow auftreten können.
(function() {
var now_GR = new GlideRecord('incident');
now_GR.addQuery('number', 'INC0009009');
now_GR.query();
now_GR.next();
try {
var inputs = {};
inputs['current'] = now_GR; // GlideRecord of table: Incident
inputs['table_name'] = 'incident';
var contextId = sn_fd.FlowAPI.startFlow('global.test_flow', inputs);
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI – startFlowQuick(Zeichenfolgenname, Zuordnungseingaben)
Führt einen Flow aus einem serverseitigen Skript asynchron aus, ohne Ausführungsdetails oder andere zugehörige Datensätze zu erstellen. Verbessern Sie die Leistung, indem Sie den Overhead bei der Datensatzführung vermeiden. Verwenden Sie diese API, um die Geschwindigkeit der Verarbeitung mit hohem Volumen, z. B. mehrere Ausführungen pro Sekunde, in einer Produktionsumgebung zu erhöhen.
- Berichterstellung und Datensätze generiert
- Diese Methode erstellt keine Ausführungsdetails und Kontextdatensätze, unabhängig von Workflow-Studio Einstellungen.
- Als Systemanwender ausführen
- Diese Methode führt den Flow als Systemanwender aus. Das Festlegen des Flows, der als Anwender ausgeführt werden soll, der die Sitzung initiiert, oder das Annehmen der Identität eines Anwenders wird nicht unterstützt.
- Warten Sie auf Support
- Diese Methode unterstützt nicht das Anhalten des Flows, um auf Bedingungen zu warten. Aktionen oder Flow-Logik, die für Wartebedingungen anhalten, z. B. „Genehmigung anfordern“, „auf Bedingung warten“ oder „Warten für eine Dauer“, werden nicht unterstützt.
- MID-Server-Unterstützung
- Diese Methode unterstützt nicht das Anhalten eines Flows zur Ausführung von einem MID-Server.
| Name | Typ | Beschreibung |
|---|---|---|
| Name | Zeichenfolge | Umfang und interner Name des auszuführenden Flows. Beispiel: Global.Flow_Name . Suchen Sie nach Interner Name Feld in der Liste von Workflow-Studio Flows. |
| inputs | Karte | Name-Wert-Paare, die Auslösereingaben definieren. Sie finden die verfügbaren Auslösereingaben und erforderlichen Datentypen im Abschnitt „Auslöser“ des Flows. Verwenden Sie den Eingabenamen, nicht die Eingabebezeichnung. Beispiel: {'table':'Incident','sys_ID':'a39d8e3cf0212300964feeefe80ff0ed'} . |
| Typ | Beschreibung |
|---|---|
| void |
(function() {
try {
var grIncident = new GlideRecord('incident');
grIncident.get('ed92e8d173d023002728660c4cf6a7bc');
var inputs = {};
inputs['current'] = grIncident;
inputs['table_name'] = 'incident';
sn_fd.FlowAPI.startFlowQuick('global.test_quick_flow', inputs);
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI – startSubflow(String name, Map input)
Führt einen Subflow aus einem serverseitigen Skript aus.
| Name | Typ | Beschreibung |
|---|---|---|
| Name | Zeichenfolge | Der Bereich und der Name des auszuführenden Subflow, z. B. global.subflow_name. |
| inputs | Zuordnung | Name-Wert-Paare, die Subflow-Eingaben definieren. Verwenden Sie den Eingabenamen, nicht die Eingabebezeichnung. |
| Typ | Beschreibung |
|---|---|
| Zeichenfolge | SYS-ID des Kontextdatensatzes für den Subflow. Greifen Sie auf den Kontextdatensatz zu, indem Sie in zur Registerkarte Flow-Ausführungen navigieren Workflow-Studio, Wählen Sie eine Flow-Ausführung aus, und klicken Sie auf Öffnen Sie Den Kontextdatensatz . |
In diesem Beispiel wird verwendet sn_fd.FlowAPI.startSubflow Zum Ausführen eines globalen Flows namens Test_Subflow. Der Code ist in einer try/catch-Anweisung eingeschlossen, um alle Fehler zu erfassen, die bei der Ausführung des Flow auftreten können.
(function() {
try {
var inputs = {};
inputs['ah_task'] = myTaskRecord; // GlideRecord of table: task
inputs['ah_comment'] ='Test Comment' ; // String
var contextId = sn_fd.FlowAPI.startSubflow('global.test_subflow', inputs);
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI – startSubflowQuick(Zeichenfolgenname, Zuordnungseingaben)
Führt einen Subflow aus einem serverseitigen Skript asynchron aus, ohne Ausführungsdetails oder andere zugehörige Datensätze zu erstellen. Verbessern Sie die Leistung, indem Sie den Overhead bei der Datensatzführung vermeiden. Verwenden Sie diese API, um die Geschwindigkeit der Verarbeitung mit hohem Volumen, z. B. mehrere Ausführungen pro Sekunde, in einer Produktionsumgebung zu erhöhen.
- Berichterstellung und Datensätze generiert
- Diese Methode erstellt keine Ausführungsdetails und Kontextdatensätze, unabhängig von Workflow-Studio Einstellungen.
- Als Systemanwender ausführen
- Diese Methode führt den Flow als Systemanwender aus. Das Festlegen des Flows, der als Anwender ausgeführt werden soll, der die Sitzung initiiert, oder das Annehmen der Identität eines Anwenders wird nicht unterstützt.
- Warten Sie auf Support
- Diese Methode unterstützt nicht das Anhalten des Flows, um auf Bedingungen zu warten. Aktionen oder Flow-Logik, die für Wartebedingungen anhalten, z. B. „Genehmigung anfordern“, „auf Bedingung warten“ oder „Warten für eine Dauer“, werden nicht unterstützt.
- MID-Server-Unterstützung
- Diese Methode unterstützt nicht das Anhalten eines Flows zur Ausführung von einem MID-Server.
| Name | Typ | Beschreibung |
|---|---|---|
| Name | Zeichenfolge | Umfang und interner Name des auszuführenden Subflows. Beispiel: Global.Subflow_Name . Suchen Sie nach Interner Name Feld in der Liste von Workflow-Studio Subflows. |
| inputs | Zuordnung | Name-Wert-Paare, die Subflow-Eingaben definieren. Sie finden die verfügbaren Subflow-Eingaben und erforderlichen Datentypen unter Eingaben im Subflow. Verwenden Sie den Eingabenamen, nicht die Eingabebezeichnung. Beispiel: {'table':'Incident','sys_ID':'a39d8e3cf0212300964feeefe80ff0ed'} . |
| Typ | Beschreibung |
|---|---|
| void |
(function() {
try {
var grIncident = new GlideRecord('incident');
grIncident.get('57af7aec73d423002728660c4cf6a71c');
var inputs = {};
inputs['variable'] = grIncident;
sn_fd.FlowAPI.startSubflowQuick('global.test_quick_run_subflow', inputs);
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();