FlowAPI - スコープ指定、グローバル
FlowAPI は、ブロック方式または非ブロック方式のいずれかを使用して、サーバー側スクリプトでアクション、フロー、またはサブフローを実行するためのメソッドを提供します。
sn_fd 名前空間を使用して、グローバルスクリプトおよびスコープ指定スクリプトの FlowAPI メソッドにアクセスします。ワークフロースタジオのコードスニペットアクションを使用してフローの呼び出しを作成するか、ここで説明する方法を使用してスクリプトを手動で更新します。
FlowAPI - cancel(文字列 contextId, 文字列 reason)
一時停止中または実行中のフロー、サブフロー、またはアクションをキャンセルします。
| 名前 | タイプ | 説明 |
|---|---|---|
| contextId | String | フロー、サブフロー、またはアクションの実行詳細レコードの Sys_id。ワークフロースタジオ の [フロー実行] タブに移動して実行の詳細にアクセスするか、startFlow()、startSubflow()、または startAction() メソッドによって返されたコンテキストレコードの sys_id を渡します。 注: ターゲットコンテキストがインスタンスの別のノードで実行されている場合、キャンセルにわずかな遅延が発生する可能性があります。同じノードで実行されているコンテキストはすぐにキャンセルされます。別のノードで実行されているコンテキストの場合、まずキャンセルが適切なノードに転送されるまで待つ必要があります。 |
| 理由 | 文字列 | オプション。フロー、サブフロー、またはアクションをキャンセルする理由です。フローエンジンのログエントリー [sys_flow_log] テーブルの [メッセージ] フィールドに表示されます。 |
| タイプ | 説明 |
|---|---|
| なし |
この例では、startFlow() メソッドの戻り値を使用して、実行時間の長いフローをキャンセルします。
(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.');
この例は、Test Flow という名前のフローをキャンセルします。
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(文字列 name, マップ inputs, 数値 timeout)
サーバー側スクリプトから同期的にアクションを実行します。
| 名前 | タイプ | 説明 |
|---|---|---|
| name | 文字列 | 実行されるアクションのスコープと名前。global.action_name など。 |
| inputs | マップ | アクションの入力を定義する名前/値ペアです。入力ラベルではなく、入力名を使用します。 |
| timeout | 番号 | オプション。タイムアウト (ミリ秒単位)。この値は、com.glide.hub.flow_api.default_execution_time システムのプロパティで指定されているデフォルトの 30 秒のタイムアウトを上書きします。タイムアウトが期限切れになると、例外がスローされます。 |
| タイプ | 説明 |
|---|---|
| オブジェクト | アクション出力。 |
この例では、スクリプトは sn_fd.FlowAPI.executeAction を使用して、グローバルスコープで actionforpassword2tes というアクションを実行します。変数 inputs には、アクションの入力が含まれます。この場合、名前とパスワードです。アクションの出力は、outputs 変数に格納されます。この場合は暗号化されたパスワードオブジェクトです。コードは try/catch ステートメントでラップされ、フローの実行時に発生するエラーをすべてキャプチャします。
(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(文字列 name, マップ inputs, 数値 timeout)
実行の詳細や他の関連レコードを作成せずに、現在のユーザーセッションでサーバー側スクリプトから同期的にアクションを実行します。レコード保持のオーバーヘッドをなくすことで、パフォーマンスを向上させます。 この API を使用すると、本番環境での大量の処理 (1 秒あたり複数実行など) の速度が向上します。
- レポートと生成されたレコード
- このメソッドは、ワークフロースタジオ 設定に関係なく、実行の詳細とコンテキストレコードを作成しません。
- 待機サポート
- このメソッドは、アクションを一時停止して条件を待機することはサポートしていません。「承認を求める」や「条件待ち」などの待機条件で一時停止するステップはサポートされていません。
- MID サーバーのサポート
- このメソッドは、MID サーバーから実行するアクションの一時停止をサポートしていません。
| 名前 | タイプ | 説明 |
|---|---|---|
| name | 文字列 | 実行するアクションのスコープと内部名です。例えば、global.action_name です。ワークフロースタジオ アクションのリストで [内部名] フィールドを見つけます。 |
| inputs | マップ | アクションの入力を定義する名前/値ペアです。利用可能なアクションの入力と必要なデータタイプは、アクションアウトラインの [入力] で確認できます。入力ラベルではなく、入力名を使用します。例:{'table':'incident','sys_id':'a39d8e3cf0212300964feeefe80ff0ed'} |
| timeout | 番号 | オプション。タイムアウト (ミリ秒単位)。この値は、com.glide.hub.flow_api.default_execution_time システムのプロパティで指定されているデフォルトの 30 秒のタイムアウトを上書きします。タイムアウトが期限切れになると、例外がスローされます。 |
| タイプ | 説明 |
|---|---|
| オブジェクト | アクションによって定義された出力を含むオブジェクトです。アクションの出力は、アクションアウトラインの [出力] で確認できます。 |
(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(文字列 name, マップ inputs, 数値 timeout)
サーバー側スクリプトからデータストリームアクションを同期的に実行し、ScriptableDataStream オブジェクトを返します。
データストリームアクションの詳細については、「 データストリームアクションとページネーション」を参照してください。
try/catch ブロックで囲みます。データストリームを閉じてパフォーマンスの問題を防ぐために、常に、ScriptableDataStream クラスの close() メソッドで終了する finally ステートメントを含めます。| 名前 | タイプ | 説明 |
|---|---|---|
| name | 文字列 | 実行するデータストリームアクションのスコープと名前です。例えば、global.data_stream_action_name です。 |
| inputs | マップ | アクションの入力を定義する名前/値ペアです。入力ラベルではなく、入力名を使用します。アクションに入力がない場合は、このパラメーターを含めないでください。 |
| timeout | 番号 | オプション。アクションがタイムアウトするまでの時間です。タイムアウトが期限切れになると、例外がスローされます。タイムアウトは executeDataStreamAction メソッドのみに適用されます。ScriptableDataStream クラスのメソッドには適用されません。 デフォルト:30,000 (com.glide.hub.flow_api.default_execution_time システムプロパティで指定) 単位:ミリ秒 |
| タイプ | 説明 |
|---|---|
| ScriptableDataStream | データストリーム内のアイテムを反復処理するために使用されるオブジェクトです。ScriptableDataStream クラスのメソッドを使用して、このオブジェクトを操作します。「ScriptableDataStream API」を参照してください。 |
この例は、データストリームで返された各アイテムのインシデントレコードを作成します。
(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(文字列 name, マップ inputs, 数値 timeout)
サーバー側スクリプトから同期的にフローを実行します。
| 名前 | タイプ | 説明 |
|---|---|---|
| name | 文字列 | 実行されるフローのスコープと名前。global.flow_name など。 |
| inputs | マップ | トリガーの入力を定義する名前/値ペアです。入力ラベルではなく、入力名を使用します。 |
| timeout | 番号 | オプション。タイムアウト (ミリ秒単位)。この値は、com.glide.hub.flow_api.default_execution_time システムのプロパティで指定されているデフォルトの 30 秒のタイムアウトを上書きします。タイムアウトが期限切れになると、例外がスローされます。 |
| タイプ | 説明 |
|---|---|
| なし | 通常の操作では、戻り値は生成されません。 |
| 例外 | 同期的に呼び出されたフローが一時停止すると、API が例外をスローします。現在の実行は待機ステータスになります。ほとんどの場合、フローが再開されると例外は削除されます。ただし、API は MID サーバーに送信されたフローを再開できません。 |
この例では、sn_fd.FlowAPI.executeFlow を使用して、test_flow というグローバルフローを実行します。このフローは、通常、インシデントテーブルのレコードが更新されたときに発生します。スクリプトからフローをアクティブ化しているので、この情報を指定する必要があります。このコードは、現在のレコードとそのレコードのテーブルを含む入力変数を作成します。コードは try/catch ステートメントでラップされ、フローの実行時に発生するエラーをすべてキャプチャします。
(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(文字列 name, マップ inputs, 数値 timeout)
実行の詳細やその他の関連レコードを作成せずに、サーバー側のスクリプトから、フロー、サブフロー、アクション、またはデータストリームアクションを同期または非同期で実行します。レコード保持のオーバーヘッドをなくすことで、パフォーマンスを向上させます。 この API を使用すると、本番環境での大量の処理 (1 秒あたり複数実行など) の速度が向上します。
- レポートと生成されたレコード
- このメソッドは、ワークフロースタジオ 設定に関係なく、実行の詳細とコンテキストレコードを作成しません。
- ユーザーとして実行
- このメソッドは、セッションを開始したユーザーとしてフローを実行します。システムユーザーとして実行するようにフローを設定すること、またはユーザーの代理操作を行うことはサポートされていません。
- 待機サポート
- このメソッドは、フローを一時停止して条件を待機することはサポートしていません。「承認を求める」、「条件待ち」、「期間の待機」などの待機条件で一時停止するアクションまたはフローロジックはサポートされていません。
- MID サーバーのサポート
- このメソッドは、MID サーバーから実行するフローの一時停止をサポートしていません。
| 名前 | タイプ | 説明 |
|---|---|---|
| name | 文字列 | 実行するフローのスコープと内部名です。例えば、global.flow_name です。ワークフロースタジオ フローのリストで [内部名] フィールドを見つけます。 |
| inputs | マップ | トリガーの入力を定義する名前/値ペアです。利用可能なトリガーの入力と必要なデータタイプは、フローの [トリガー] セクションで確認できます。入力ラベルではなく、入力名を使用します。例:{'table':'incident','sys_id':'a39d8e3cf0212300964feeefe80ff0ed'} |
| timeout | 番号 | オプション。タイムアウト (ミリ秒単位)。この値は、com.glide.hub.flow_api.default_execution_time システムのプロパティで指定されているデフォルトの 30 秒のタイムアウトを上書きします。タイムアウトが期限切れになると、例外がスローされます。 |
| タイプ | 説明 |
|---|---|
| なし |
(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(文字列 name, マップ inputs, 数値 timeout)
サーバー側スクリプトから同期的にサブフローを実行します。
| 名前 | タイプ | 説明 |
|---|---|---|
| name | 文字列 | 実行されるサブフローのスコープと名前。global.subflow_name など。 |
| inputs | マップ | サブフロー入力を定義する名前と値のペア。入力ラベルではなく、入力名を使用します。 |
| timeout | 番号 | オプション。タイムアウト (ミリ秒単位)。この値は、com.glide.hub.flow_api.default_execution_time システムのプロパティで指定されているデフォルトの 30 秒のタイムアウトを上書きします。タイムアウトが期限切れになると、例外がスローされます。 |
| タイプ | 説明 |
|---|---|
| オブジェクト | サブフローの出力を含むオブジェクトです。 |
| 例外 | 同期的に呼び出されたフローが一時停止すると、API が例外をスローします。現在の実行は待機ステータスになります。ほとんどの場合、フローが再開されると例外は削除されます。ただし、API は MID サーバーに送信されたフローを再開できません。 |
この例では、スクリプトは sn_fd.FlowAPI.executeSubflow を使用して、グローバルスコープで subflowTest というサブフローを実行します。変数 inputs には、サブフローの入力が含まれます。この場合、名前とパスワードです。コードは try/catch ステートメントでラップされ、フローの実行時に発生するエラーをすべてキャプチャします。
(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(文字列 name, マップ inputs, 数値 timeout)
実行の詳細や他の関連レコードを作成せずに、現在のユーザーセッションでサーバー側スクリプトから同期的にサブフローを実行します。レコード保持のオーバーヘッドをなくすことで、パフォーマンスを向上させます。 この API を使用すると、本番環境での大量の処理 (1 秒あたり複数実行など) の速度が向上します。
- レポートと生成されたレコード
- このメソッドは、ワークフロースタジオ 設定に関係なく、実行の詳細とコンテキストレコードを作成しません。
- ユーザーとして実行
- このメソッドは、セッションを開始したユーザーとしてフローを実行します。システムユーザーとして実行するようにフローを設定すること、またはユーザーの代理操作を行うことはサポートされていません。
- 待機サポート
- このメソッドは、フローを一時停止して条件を待機することはサポートしていません。「承認を求める」、「条件待ち」、「期間の待機」などの待機条件で一時停止するアクションまたはフローロジックはサポートされていません。
- MID サーバーのサポート
- このメソッドは、MID サーバーから実行するフローの一時停止をサポートしていません。
| 名前 | タイプ | 説明 |
|---|---|---|
| name | 文字列 | 実行するサブフローのスコープと内部名です。例えば、global.subflow_name です。ワークフロースタジオ サブフローのリストで [内部名] フィールドを見つけます。 |
| inputs | マップ | サブフロー入力を定義する名前と値のペア。利用可能なサブフローの入力と必要なデータタイプは、サブフローの [入力] で確認できます。入力ラベルではなく、入力名を使用します。例:{'table':'incident','sys_id':'a39d8e3cf0212300964feeefe80ff0ed'} |
| timeout | 番号 | オプション。タイムアウト (ミリ秒単位)。この値は、com.glide.hub.flow_api.default_execution_time システムのプロパティで指定されているデフォルトの 30 秒のタイムアウトを上書きします。タイムアウトが期限切れになると、例外がスローされます。 |
| タイプ | 説明 |
|---|---|
| オブジェクト | サブフローによって定義された出力を含むオブジェクトです。サブフローの出力は、サブフローアウトラインの [サブフローの入力および出力] で確認できます。 |
(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(文字列 contextId)
フロー、サブフロー、またはアクションによって生成されたエラーメッセージを返します。このメソッドは、quick() API で実行されるフロー、サブフロー、またはアクションからメッセージを返すことはできません。
| 名前 | タイプ | 説明 |
|---|---|---|
| contextId | 文字列 | エラーメッセージを取得するフロー、サブフロー、またはアクションの sys_id です。 |
| タイプ | 説明 |
|---|---|
| 文字列 | 前回の操作の実行とそれによって生成されたエラーメッセージです。 |
この例は、test_error_subflow というグローバルサブフローを開始し、生成されたエラーメッセージを返します。通常は、単一のスクリプトがフローを実行してそのエラーメッセージを取得することはありません。一般に、別のスクリプトまたは ワークフロースタジオ のいずれかが既にフローを実行しています。コードは try/catch ステートメントでラップされ、フローの実行時に発生するエラーをすべてキャプチャします。
(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);
}
})();
出力:
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(文字列 scopedFlowName)
フローステージのリストを含む JSON 文字列を返します。
| 名前 | タイプ | 説明 |
|---|---|---|
| scopedFlowName | 文字列 | ステージを取得するフローのアプリケーションスコープと名前。 |
| タイプ | 説明 |
|---|---|
| 文字列 | フローのステージをステージレコード値別にリストする JSON 形式の文字列。 |
この例では、サービスカタログアイテム要求フローのステージの取得を示します。
(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);
}
})();
出力:
JSON 文字列には、ステージフィールドの名前と値のペアが含まれています。詳細については、を参照してください。
[
{
"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(文字列 contextId)
完了したアクションまたはサブフローの出力を返します。
| 名前 | タイプ | 説明 |
|---|---|---|
| contextId | 文字列 | 出力を取得するアクションまたはサブフローの sys_id です。 |
| タイプ | 説明 |
|---|---|
| オブジェクト | アクションまたはサブフローの出力を含むオブジェクトです。 |
この例は、test_subflow というグローバルサブフローを開始し、フローが終了するのを待ってから、その出力値を取得します。通常は、単一のスクリプトがフローを実行してその出力値を取得することはありません。getOutputs() 呼び出しの前にフローが完了しない場合があるため、この例では待機時間を使用しています。一般に、別のスクリプトまたは ワークフロースタジオ のいずれかが既にフローを実行しています。コードは try/catch ステートメントでラップされ、フローの実行時に発生するエラーをすべてキャプチャします。
(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()
実行するフローまたはアクションの ScriptableFlowRunner ビルダーオブジェクトを返します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| ScriptableFlowRunner | ワークフロースタジオ のアクション、フロー、またはサブフローを実行するために使用されるビルダーオブジェクト。 |
この例は、フローを同期的に実行します。
(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(String contextId)
フロー、サブフロー、またはアクションのステータスを返します。
| 名前 | タイプ | 説明 |
|---|---|---|
| contextId | 文字列 | ステータスを取得するフロー、サブフロー、またはアクションのsys_id。 |
| パラメーター | タイプ | 説明 |
|---|---|---|
| <Object> | オブジェクト | フロー、サブフロー、またはアクションの現在のステータスを名前と値のペアとして含むオブジェクト。 |
| <Object>.hasLookupError | ブール | フロー、サブフロー、またはアクションのコンテキストステータスの検索で問題が発生したかどうかを示すフラグ。 |
| <Object>.errorMessage | 文字列 | コンテキストルックアップ操作によって返されたエラーメッセージ。hasLookupError が false の場合、このパラメーターは無効です。 |
| <Object>.contextStatus | オブジェクト | クエリされたフロー、サブフロー、またはアクションに関するステータスの詳細を含むオブジェクト。 |
| <Object>.contextStatus.state | 文字列 | フロー、サブフロー、またはアクションコンテキストのステータス。一部のステータス値は、関連するパラメーターに追加情報を提供します。
|
| <Object>.contextStatus.errorState | 文字列 | フローエラー処理によって生成されたフロー完了ステータス。API は、フロー、サブフロー、またはアクションが COMPLETE ステータスの場合にのみ、このパラメーターを生成します。
|
| <Object>.contextStatus.message | 文字列 | フロー、サブフロー、またはアクションによって返されるエラーメッセージ。API は、フロー、サブフロー、またはアクションが ERROR ステータスの場合にのみ、このパラメーターを生成します。 |
| <Object>.contextStatus.canceledReason | 文字列 | フロー、サブフロー、またはアクションによって返されたキャンセルメッセージ。API は、フロー、サブフロー、またはアクションが CANCELLED ステータスの場合にのみ、このパラメーターを生成します。 |
| <Object>.contextStatus.isRunOnMid | ブール | フロー、サブフロー、またはアクションが MID サーバー環境で実行されているかどうかを示すフラグ。API は、フロー、サブフロー、またはアクションが IN_PROGRESS ステータスの場合にのみ、このパラメーターを生成します。 |
| <Object>.contextStatus.waitingOn | アレイ | 現在のフロー、サブフロー、またはアクションが待機しているアイテムのリスト。API は、フロー、サブフロー、またはアクションが WAITING ステータスの場合にのみ、このパラメーターを生成します。 |
| <Object>.contextStatus.waitingOn.order | 文字列 | フローを待機させる原因となっているアイテムのフローステップ番号。待機アクションがフロー内のカスタムアクションである場合、順序には、フローが待機しているカスタムアクションの期間とアクションステップ番号も含まれます。 |
| <Object>.contextStatus.waitingOn.stepType | 文字列 | フロー、サブフロー、またはアクションを待機させる原因となっているアクションまたはフローステップのタイプ。API は、フロー、サブフロー、またはアクションが WAITING ステータスの場合にのみ、このパラメーターを生成します。一般的な例をいくつか示します。
|
| <Object>.contextStatus.waitingOn.table | 文字列 | フロー、サブフロー、またはアクションが待機しているレコードを含むテーブル名。API は、フロー、サブフロー、またはアクションが WAITING ステータスで、stepType が WAIT_FOR_CONDITION、WAIT_FOR_CONDITION_WITH_TIMEOUT、ASK_FOR_APPROVAL、または CREATE_TASK_WITH_WAIT の場合にのみ、このパラメーターを生成します。 |
| <Object>.contextStatus.waitingOn.condition | 文字列 | フロー、サブフロー、またはアクションが待機しているレコードのクエリ条件。API は、フロー、サブフロー、またはアクションが WAITING ステータスにあり、実行を継続するために満たす必要がある条件がある場合にのみ、このパラメーターを生成します。 |
| <Object>.contextStatus.waitingOn.endTime | 整数 | フロー、サブフロー、またはアクションが待機している終了時間。API は、フロー、サブフロー、またはアクションが WAITING ステータスで、stepType が WAIT_FOR_CONDITION_WITH_TIMEOUT、TIMER、または SLA_TIMER の場合にのみ、このパラメーターを生成します。 |
| <Object>.contextStatus.waitingOn.approvalRule | 文字列 | フロー、サブフロー、またはアクションが待機している承認ルール。API は、フロー、サブフロー、またはアクションが WAITING ステータスで、stepType が ASK_FOR_APPROVAL の場合にのみ、このパラメーターを生成します。 |
| <Object>.contextStatus.waitingOn.contextId | 文字列 | フローまたはサブフローが待機しているサブフローのsys_id。API は、フローまたはサブフローが WAITING ステータスで、stepType が SUBFLOW の場合にのみ、このパラメーターを生成します。 |
この例では、[Do the following in parallel] フローロジックを含むフローを実行します。通常は、単一のスクリプトがフローを実行してそのエラーメッセージを取得することはありません。一般に、別のスクリプトまたは ワークフロースタジオ のいずれかが既にフローを実行しています。
(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(文字列 scopedFlowName)
指定されたスコープ内のフローが「承認を求める」アクションを含んでいるかどうかをチェックします。
hasApprovals() メソッドは、指定されたスコープ内のフローが「承認を求める」アクションを含んでいるかどうかを判断します。このメソッドはまた、 フロー内の「承認を求める」アクションが、If フローロジックブロックでネストされているかどうかをチェックします。詳細については、「 承認を求める」アクションを参照してください。
| 名前 | タイプ | 説明 |
|---|---|---|
| scopedFlowName | 文字列 | 実行するフローのスコープと内部名です。例えば、global.flow_name です。ワークフロースタジオ フローのリストで [内部名] フィールドを見つけます。 |
| タイプ | 説明 |
|---|---|
| 文字列 | 次の文字列値のいずれか 1 つを返します。
|
次の例では、グローバルスコープ内の example_flow に「承認を求める」アクションが含まれているかどうかをチェックし、結果をログに記録します。
(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)
バックグラウンドで実行されたフロー、サブフロー、またはアクションを再開します。新しい入力を指定することも、省略して以前に行った入力を再利用することもできます。
| 名前 | タイプ | 説明 |
|---|---|---|
| contextId | 文字列 | 再起動するフロー、サブフロー、またはアクションのsys_id。このフロー、サブフロー、またはアクションはバックグラウンドで実行され、sysevent レコードが関連付けられている必要があります。 |
| providedInputs | オブジェクト | オプション。フロー、サブフロー、またはアクションの置換入力を定義する名前と値のペアを含むマップオブジェクト。このパラメーターに null 値を省略または指定した場合、フロー、サブフロー、またはアクションは、以前に指定した入力を使用して実行されます。 |
| タイプ | 説明 |
|---|---|
| ScriptableFlowRunnerResultsScoped | ワークフロースタジオ アクション、フロー、またはサブフローの実行の詳細を含むオブジェクト。 |
インシデント テーブルにレコードベースのトリガーがあるサンプル フローを再起動します。元のフローでは、サンプルインシデントINC0008112を入力として使用していました。フローが再開されると、代わりにサンプルインシデントINC0008111が入力として使用されます。
(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 (String contextId、String reason、Integer delaySeconds)
フローエンジンキュー内のシステムイベントをスケジュールして、進行中、中断と推定、遅延後待機状態になっているフローをキャンセルします。
| 名前 | タイプ | 説明 |
|---|---|---|
| contextId | String | フロー、サブフロー、またはアクションの実行詳細レコードの Sys_id。ターゲットのフロー、サブフロー、またはアクションは、進行中、中断と推定、または待機状態である必要があります。ワークフロースタジオ の [フロー実行] タブに移動して実行の詳細にアクセスするか、メソッドによって返されたコンテキストレコードのsys_idを渡します。 注: ターゲットコンテキストがインスタンスの別のノードで実行されている場合、キャンセルにわずかな遅延が発生する可能性があります。同じノードで実行されているコンテキストはすぐにキャンセルされます。別のノードで実行されているコンテキストの場合、まずキャンセルが適切なノードに転送されるまで待つ必要があります。 |
| 理由 | 文字列 | フロー、サブフロー、またはアクションをキャンセルする理由です。フローエンジンのログエントリー [sys_flow_log] テーブルの [メッセージ] フィールドに表示されます。 |
| delaySeconds | 整数 | オプション。フローエンジンキューでキャンセルイベントを処理するまでの待機秒数。このパラメーターを省略すると、メソッドはデフォルト値の 1 秒を使用します。 このパラメーターを使用すると、数千のフローコンテキストのキャンセルを同時にスケジュールすることによるパフォーマンスへの影響を回避できます。すべてのキャンセルを同時に実行するのではなく、フローのキャンセルのバッチを遅延でスケジュールします。または、遅延を非同期フローのタイムアウト値として使用することもできます。 |
| タイプ | 説明 |
|---|---|
| なし |
この例では、 startFlow() メソッドの戻り値を使用して、長時間実行されるフローのキャンセルをスケジュールします。
(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);
この例では、「テストフロー」という名前のフローのキャンセルをスケジュールします。
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);
}
この例では、delaySeconds パラメーターを使用して、フローキャンセルジョブをバッチで実行します。バッチを使用して、数千のフローコンテキストをキャンセルします。
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(文字列 contextSysID, 文字列メッセージ, 文字列ペイロード)
一時停止してメッセージを待機しているフローに、特定のメッセージとペイロードの応答を送信します。
| 名前 | タイプ | 説明 |
|---|---|---|
| contextSysID | 文字列 | 一時停止され、特定のメッセージの再開を待機しているフローまたはサブフローのsys_id値。フローまたはサブフローには、[メッセージを待機] アクションが含まれている必要があります。「Wait For Message action」を参照してください。 |
| メッセージ | 文字列 | 待機中のフローまたはサブフローに送信するテキスト文字列。このメッセージ値が [メッセージを待機] アクションにリストされているメッセージ値と一致する場合、フローまたはサブフローは実行を再開します。「Wait For Message action」を参照してください。 |
| payload | 文字列 | 待機中のフローに送信するテキスト文字列出力値。フローまたはサブフローは、実行を再開するときにペイロードを入力として使用できます。たとえば、レコードが再オープンされた理由や、新しい承認が必要だった理由を指定できます。 |
| タイプ | 説明 |
|---|---|
| なし |
この例では、「 フローを再開」 というメッセージを送信して、一時停止したフローを再開します。一時停止したフローは、ペイロード値をフローの他の場所でデータとして使用できます。
(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);
}
})();
出力:
[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(文字列 password)
スクリプトステップ内で password2 の値を構築します。
GlideRecord から返された暗号化された password2 値を特定し、システムが値を暗号化された文字列ではなくマスク済みパスワードとして表示できるようにします。
| 名前 | タイプ | 説明 |
|---|---|---|
| パスワード | 文字列 | 暗号化された password2 値。 |
| タイプ | 説明 |
|---|---|
| 文字列 | 暗号化された password2 値。エンジンによってパスワード値として認識されます。 |
この例では、ユーザーレコードから password2 フィールドの値を返し、変数に格納します。この変数は setEncryptedOutput メソッドに渡されます。このメソッドは、sn_fd.GlideActionUtil.setEncryptedOutput を使用して呼び出されます。インスタンスは、戻り値をパスワードとして認識します。
(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(文字列 name, マップ inputs)
サーバー側スクリプトから非同期的にアクションを実行します。
| 名前 | タイプ | 説明 |
|---|---|---|
| name | 文字列 | 実行されるアクションのスコープと名前。global.action_name など。 |
| inputs | マップ | アクションの入力を定義する名前/値ペアです。入力ラベルではなく、入力名を使用します。 |
| タイプ | 説明 |
|---|---|
| 文字列 | アクションのコンテキストレコードの sys Id です。ワークフロースタジオ の [フローの実行] タブに移動し、フロー実行を選択して [コンテキストレコードを開く] をクリックして、コンテキストレコードにアクセスします。 |
この例では、sn_fd.FlowAPI.startAction を使用して、sn_itsm_spoke スコープで add_comment というアクションを実行します。inputs オブジェクトには、ターゲットレコードとそのレコードに追加するコメントが含まれます。コードは try/catch ステートメントでラップされ、フローの実行時に発生するエラーをすべてキャプチャします。
(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(文字列 name, マップ inputs)
実行の詳細や他の関連レコードを作成せずに、サーバー側スクリプトから非同期的にアクションを実行します。レコード保持のオーバーヘッドをなくすことで、パフォーマンスを向上させます。 この API を使用すると、本番環境での大量の処理 (1 秒あたり複数実行など) の速度が向上します。
- レポートと生成されたレコード
- このメソッドは、ワークフロースタジオ 設定に関係なく、実行の詳細とコンテキストレコードを作成しません。
- 待機サポート
- このメソッドは、アクションを一時停止して条件を待機することはサポートしていません。「承認を求める」や「条件待ち」などの待機条件で一時停止するステップはサポートされていません。
- MID サーバーのサポート
- このメソッドは、MID サーバーから実行するアクションの一時停止をサポートしていません。
| 名前 | タイプ | 説明 |
|---|---|---|
| name | 文字列 | 実行するアクションのスコープと内部名です。例えば、global.action_name です。ワークフロースタジオ アクションのリストで [内部名] フィールドを見つけます。 |
| inputs | マップ | アクションの入力を定義する名前/値ペアです。利用可能なアクションの入力と必要なデータタイプは、アクションアウトラインの [入力] で確認できます。入力ラベルではなく、入力名を使用します。例:{'table':'incident','sys_id':'a39d8e3cf0212300964feeefe80ff0ed'} |
| タイプ | 説明 |
|---|---|
| なし |
(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(文字列 name, マップ inputs)
サーバー側スクリプトからフローを実行します。
| 名前 | タイプ | 説明 |
|---|---|---|
| name | 文字列 | 実行されるフローのスコープと名前。global.flow_name など。 |
| inputs | マップ | トリガーの入力を定義する名前/値ペアです。入力ラベルではなく、入力名を使用します。 |
| タイプ | 説明 |
|---|---|
| 文字列 | フローのコンテキストレコードの sys Id です。ワークフロースタジオ の [フローの実行] タブに移動し、フロー実行を選択して [コンテキストレコードを開く] をクリックして、コンテキストレコードにアクセスします。 |
この例では、sn_fd.FlowAPI.startFlow を使用して、test_flow というグローバルフローを実行します。コードは、フローが必要とする入力を含む inputs 変数を作成します。この場合、現在のレコードとそのレコードのテーブルです。コードは try/catch ステートメントでラップされ、フローの実行時に発生するエラーをすべてキャプチャします。
(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(文字列 name, マップ inputs)
実行の詳細や他の関連レコードを作成せずに、サーバー側スクリプトから非同期的にフローを実行します。レコード保持のオーバーヘッドをなくすことで、パフォーマンスを向上させます。 この API を使用すると、本番環境での大量の処理 (1 秒あたり複数実行など) の速度が向上します。
- レポートと生成されたレコード
- このメソッドは、ワークフロースタジオ 設定に関係なく、実行の詳細とコンテキストレコードを作成しません。
- システムユーザーとして実行
- このメソッドは、システムユーザーとしてフローを実行します。セッションを開始するユーザーとして実行するようにフローを設定すること、またはユーザーの代理操作を行うことはサポートされていません。
- 待機サポート
- このメソッドは、フローを一時停止して条件を待機することはサポートしていません。「承認を求める」、「条件待ち」、「期間の待機」などの待機条件で一時停止するアクションまたはフローロジックはサポートされていません。
- MID サーバーのサポート
- このメソッドは、MID サーバーから実行するフローの一時停止をサポートしていません。
| 名前 | タイプ | 説明 |
|---|---|---|
| name | 文字列 | 実行するフローのスコープと内部名です。例えば、global.flow_name です。ワークフロースタジオ フローのリストで [内部名] フィールドを見つけます。 |
| inputs | マップ | トリガーの入力を定義する名前/値ペアです。利用可能なトリガーの入力と必要なデータタイプは、フローの [トリガー] セクションで確認できます。入力ラベルではなく、入力名を使用します。例:{'table':'incident','sys_id':'a39d8e3cf0212300964feeefe80ff0ed'} |
| タイプ | 説明 |
|---|---|
| なし |
(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(文字列 name, マップ input)
サーバー側スクリプトからサブフローを実行します。
| 名前 | タイプ | 説明 |
|---|---|---|
| name | 文字列 | 実行されるサブフローのスコープと名前。global.subflow_name など。 |
| inputs | マップ | サブフロー入力を定義する名前と値のペア。入力ラベルではなく、入力名を使用します。 |
| タイプ | 説明 |
|---|---|
| 文字列 | サブフローのコンテキストレコードの sys Id です。ワークフロースタジオ の [フローの実行] タブに移動し、フロー実行を選択して [コンテキストレコードを開く] をクリックして、コンテキストレコードにアクセスします。 |
この例は、sn_fd.FlowAPI.startSubflow を使用して、test_subflow というグローバルフローを実行します。コードは try/catch ステートメントでラップされ、フローの実行時に発生するエラーをすべてキャプチャします。
(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(文字列 name, マップ inputs)
実行の詳細や他の関連レコードを作成せずに、サーバー側スクリプトから非同期的にサブフローを実行します。レコード保持のオーバーヘッドをなくすことで、パフォーマンスを向上させます。 この API を使用すると、本番環境での大量の処理 (1 秒あたり複数実行など) の速度が向上します。
- レポートと生成されたレコード
- このメソッドは、ワークフロースタジオ 設定に関係なく、実行の詳細とコンテキストレコードを作成しません。
- システムユーザーとして実行
- このメソッドは、システムユーザーとしてフローを実行します。セッションを開始するユーザーとして実行するようにフローを設定すること、またはユーザーの代理操作を行うことはサポートされていません。
- 待機サポート
- このメソッドは、フローを一時停止して条件を待機することはサポートしていません。「承認を求める」、「条件待ち」、「期間の待機」などの待機条件で一時停止するアクションまたはフローロジックはサポートされていません。
- MID サーバーのサポート
- このメソッドは、MID サーバーから実行するフローの一時停止をサポートしていません。
| 名前 | タイプ | 説明 |
|---|---|---|
| name | 文字列 | 実行するサブフローのスコープと内部名です。例えば、global.subflow_name です。ワークフロースタジオ サブフローのリストで [内部名] フィールドを見つけます。 |
| inputs | マップ | サブフロー入力を定義する名前と値のペア。利用可能なサブフローの入力と必要なデータタイプは、サブフローの [入力] で確認できます。入力ラベルではなく、入力名を使用します。例:{'table':'incident','sys_id':'a39d8e3cf0212300964feeefe80ff0ed'} |
| タイプ | 説明 |
|---|---|
| なし |
(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);
}
})();