2017年10月17日 初版
Connect GUIにはイベントウォーク編集モードが2つあります。
標準エディットモード
通常使われるモードです。ステートの遷移経路は単純で、main系列(mainからmain_exitに至る経路)と、abort系列(abortからabort_exitに至る経路)の2つしかありません。ステートの追加・削除にともなう遷移先ステートの調整はシステムが自動的に行います。
フリーエディットモード
自由なステート遷移が設計できるモードです。その代わり、利用者には、各ステート遷移条件ごとに正しい遷移先を指定することが求められます。システムは自動的な遷移先ステートの調整を行いません。
イベントウォークの編集モードは次のボタンで変更できます。
Connect GUIにログイン →シナリオタブで対象シナリオを開く →右ペインの「イベントウォーク編集」で対象イベントウォークを開く →左ペイン下の「フリーエディットモードに移行」
エディットモードの変更は標準エディットモード→フリーエディットモードの一方通行です。一度フリーエディットモードに移行すると、そのイベントウォークについては、標準エディットモードに戻す方法はありません。なお、編集モードはイベントウォークごとの設定なので、あるイベントウォークについて編集モードを変更しても他のイベントウォークには影響しません。
ここでは、フリーエディットモードの場合に必要となる設定項目を説明します。標準エディットモードについてはイベントウォーク作成(標準エディットモード)を参照してください。
ステート遷移
標準エディットモードで選択できるステート遷移条件ANDとORに加え、フリーエディットモードでは次の2つが選択可能です。
いずれかのコネクターからイベントを受け取った時、各々のステートに遷移(case)
このステートで起動した(一般に複数の)コネクターのいずれかから一つでもイベントを受け取った時点でステート遷移が開始されます。この点ではCASEはORと同じのなのですが、遷移先ステートが一つしかないORとは異なり、CASEでは、それぞれのコネクターごとに遷移先ステートを指定する必要があります。ステート遷移の過程で、採用されたイベントを発したコネクターを含めこのステートで起動した全てのコネクターが停止されます。コネクターを一つしか起動しないステートでは、AND/OR条件と同じ動きになります。
それぞれのコネクターについて、遷移先ステートを指定する必要があります。
条件式によるステート分岐。このステートではコネクターを起動しません。(branch)
BRANCHは、他の3つのステート遷移条件とは大きく異なります。
このステートではコネクターを起動しイベントを待つという動作は起こりません。その代わり、過去のステート遷移を引き起こしたイベントの出力情報などを参照して、遷移先ステートを決定する条件式を記述することができます。
条件式は{{ }}で囲まれたJavaScriptの式で、条件分岐[0], [1], …と複数定義することができます。条件分岐は添字の小さいものから順に評価され、最初に真(true)になった条件式に対応する遷移先が採用されます。添字が最大の(一番下に表示された)条件分岐はdefaultとして機能し、そこに至るまでの条件式が全て偽となった場合に採用されます。
条件式の書き方、そこで使える組み込みオブジェクトはConnect GUIのリファレンスページ(右上アカウントメニュー→リファレンス)に記載されています。
下図の例は、BRANCH条件のステートを使った簡単なイベントウォークの例です。
ここで例として使ったシナリオとイベントウォークはシナリオテンプレート「0078:FAQ branchステート説明用シナリオ」として公開されています。
このイベントウォークは次のステートから成っています。
ステート:メール受信
Gmailコネクター TRIGGER when receivedメソッドで自分宛のメールを受信し「ブランチステート」に遷移します。
ステート:ブランチステート
次の条件と遷移先が指定されています。
条件分岐[0] 条件 {{last.subject.includes('メモに保存')}} 遷移先 メモに追記 条件分岐[1] 条件 {{last.subject.includes('slackに保存')}} 遷移先 slackに保存 条件分岐[2] 条件 上記条件がすべて偽の場合 遷移先 main_exit
メール受信ステートで受信したメールのサブジェクトにしたがって、遷移先ステートを切り替えています。
「メモに保存」という文字列が含まれていれば「メモに追記」に遷移。 「slackに保存」という文字列が含まれていれば「slackに保存」に遷移。 どちらも含まれていなければ「main_exit」に遷移。
ステート:メモに追記
Googleドライブコネクター ACTION: append data to sheetを使ってメール内容をスプレッドシートに追記し、「main_exit」に遷移します。
ステート:slackに保存
Slackコネクター ACTION: post messageを使って、メール内容をSlackの自分のメモチャネル(@本人のユーザー名)に投稿し、「main_exit」に遷移します。
タイムアウト
標準エディットモードでは、タイムアウトインターバルだけが設定可能でしたが、フリーエディットモードではタイムアウト発生時の遷移先ステートも指定する必要があります。デフォルト値としてmain系列のステートの場合はabortに、abort系列のステートの場合はabort_exitが設定されます。
アボート
コネクターからアボートイベント(リトライなどの回復措置を経てもなお必要な処理が正常終了しなかったことを示すイベント)を受け取ったときの遷移先ステートを指定します。アボートイベントを受け取るとステート遷移条件の設定にかかわらず、ただちにステート遷移が開始されます。アトミックリージョンIDの設定にも影響されません。アボートイベントが起こった場合、イベントウォーク全体をアボートさせることが多いので、遷移先は通常abortステートになっています。ただし、アボートイベントの意味を理解した上で、正常処理経路に戻るようなステート遷移を起こすことは禁止されていません。
アトミックリージョン
このステートが属するアトミックリージョンにつけるID(任意の文字列)です。
「あるステートのまとまりが処理を始めたら、その全てが終わるまで処理が中断されないようにしたい」という要求から生まれたもので、正確な定義は次の通りです。
「空文字列でないアトミックリージョンIDが設定されたステートにいるとき、そのステートの遷移条件が満たされるまでイベントウォークへの終了要求は保留される。そのステートの遷移先ステートが同じアトミックリージョンIDを持つ場合、ステート遷移中、遷移後も終了要求の保留は継続される。」
したがって、空文字列でないアトミックリージョンIDを持つステートに一旦入ると、それとは別のアトミックリージョンIDが設定されているステート、またはアトミックリージョンIDの設定されていない(空文字列の設定されている)ステートに遷移したとき初めてイベントウォークへの終了要求の保留が解除されます。
「イベントウォークの終了」という言葉が突然出てきましたが、これは、対象となるイベントウォークが、その親の指示により処理を終了することを指します。シナリオを構成するメインのイベントウォークの場合、親はシナリオです。シナリオは、「実行を中断」ボタンが押された時や、運用スケジュールの条件にしたがって、メインイベントウォークを終了しようとすることがあります。また、サブイベントウォークの場合、親はイベントウォークです。親イベントウォークから見ると、サブイベントウォークはコネクターと同じ位置付けにあります。前述のとおり、遷移条件がOR/CASEのステートが複数のコネクターを実行する場合、一つのイベントを受け取ると、イベントウォークは現在のステートで起動した全てのコネクターを終了し、ステート遷移を開始します。このため、そのコネクターがサブイベントウォークであった場合、サブイベントウォークは、いかなる時点でも終了要求を受け取る可能性があることを想定しなければなりません。
アトミックリージョンを使ってどのような問題が解決できるかを示した具体例がアトミックリージョン具体例に掲載してあります。