2017年10月17日
コーディルテクノロジー株式会社

イベントウォーク作成(標準エディットモード)

2017年10月17日 初版

シナリオテンプレートから作ったシナリオを動作させることが目的であれば、この記事は読み飛ばしていただいてかまいません。シナリオを改造したり、いちから作ってみようと思われたとき、じっくり取り組んでみてください。

ステートの集まり=イベントウォーク

ステートとは、ある時点のプログラムの状態を意味します。どのようなプログラムも、ステートの集まりと、各ステートでどのような事象(イベント)が起こった時にどのステートに遷移するか、という決まりごとを記述するものと言えますが、Connectの場合、特にステート・イベント・遷移を強く意識したものになっているため、あえてプログラムとは呼ばず、イベントウォークと言う造語で呼ぶことにしました。事象(イベント)を契機としてステート間を渡り歩くイメージです。

ステート、コネクター、イベント

ステートでは通常複数のコネクターを起動します。コネクターにはGmail、Googleカレンダー、Facebook、スマートフォンのボタンなど、多くの種類が準備されています。コネクターは、ステートの指示により起動され、担当する外部サービス(Gmailなど)をアクセスし、指定された条件が満たされた時、イベントウォークにイベントを送ります。イベントウォークは、そのイベントを契機としてステート遷移を開始します。

イベントウォークの起動

イベントウォークは、シナリオで定義された開始条件(曜日、時刻、次回起動までの待ち時間など)にしたがって起動されます。

この記事で例として使ったシナリオとイベントウォークはシナリオテンプレート「0008:スマートフォンのボタンでメール(Gmail版)」として公開されています。

シナリオ設定

シナリオ設定画面の右ペインにある「イベントウォーク編集」を押すと、イベントウォークの編集画面が現れます。

イベントウォーク全体像

どのイベントウォークも、最初はmainという名前のステートから実行を開始します。mainは何もせず次のステートに遷移する特別なステートです。下図の例では、main -> state2 -> state5 -> main_exitのに遷移し、ここでイベントウォークが終了します。これは全てが正常に進んだ場合の経路であり「main系列」と呼びます。

abortから始まる経路はmain系列でエラーやタイムアウトが起こった時に使われる経路「abort系列」です。下図の例では、abort -> abort_exitとなっており、ここでイベントウォークが終了します。

イベントウォーク

ステートの設定項目

以降、例を使いながらステートの設定項目を説明します。

なお、この記事では標準エディットモードのみを扱います。さらに自由度の高いフリーエディットモードも使えるようになっていますが、それについてはイベントウォーク作成(フリーエディットモード)を参照してください。

下の図は左ペインでstate2をクリックした状態です。右ペインにstate2の設定項目が現れます。

state2

ステート名

ステートの名前です。2017年10月のアップデートから、ステート名が編集可能になりました。ピリオド(.)、アポストロフィ(‘)、ダブルクォート(“)、空白以外の文字が使えます。日本語も使えます。イベントウォーク内ですでに使われているステート名・ラベル名、予約語と重なる名前は指定できません。

コメント

自由なコメントです。このステートの目的などを書き込んでおくと、イベントウォークが読みやすくなります。文字種の制限はありません。ここで書き込んだコメントは、左ペインのステート上にマウスポインターを移動したときにポップアップ表示されます。

ステート遷移

このステートからステート遷移するときの条件と遷移先ステートを指定します。

いずれかのコネクターからイベントを受け取った時、一つのステートに遷移(or)

いわゆるOR条件です。

このステートで起動した(一般に複数の)コネクターのいずれかから一つでもイベントを受け取った時点でステート遷移が開始されます。ステート遷移の過程で、採用されたイベントを発したコネクターを含めこのステートで起動した全てのコネクターが停止されます。

標準エディットモードでは、遷移先ステートはシステムにより決定され、変更することはできません。上の図ではstate2からの遷移先はstate5です。

すべてのコネクターからイベントを受け取った時、一つのステートに遷移(AND)

いわゆるAND条件です。

このステートで起動した(一般に複数の)コネクターの全てからイベントを受け取った時点でステート遷移が開始されます。ステート遷移の過程で、このステートで起動した全てのコネクターが停止されます。

標準エディットモードでは、遷移先ステートはシステムにより決定され、変更することはできません。上の図ではstate2からの遷移先はstate5です。

上記の定義から導かれることですが、コネクターを一つしか起動しないステートの場合、ORとANDはどちらを選択しても同じ結果となります。

タイムアウト

このステートで起動したコネクターが長時間イベントを送ってこない場合に、永久にこのステートに留まってしまうのを避けるために使う時限装置です。

インターバルに1(分)以上の値を指定すると、タイムアウトが有効になります。遷移先ステートは自動的に設定され、標準エディットモードではこれを変更する方法はありません。

遷移先ステートは、編集対象のステートがmain系列にある場合はabortに、abort系列にある場合はabort_exitに設定されます。

メソッドバスケットコネクターのTRIGGER: at timeoutメソッドとの使い分け

ステートに設定するタイムアウトが起こると、ステート遷移条件が何に設定されているかにかかわらず、即座に指定されたステートに遷移します。一方、メソッドバスケットコネクターのTRIGGER: at timeoutメソッドからのタイムアウトイベントは、コネクターからのイベントの1つに過ぎませんので、ステート遷移条件に従います。例えば、バスケットコネクターのTRIGGER: at timeoutメソッドを使って、次のようなことができます。

(例)
コネクターAのイベント
コネクターBのイベント
バスケットコネクターのタイムアウトイベント(例:5分後)

の3つのイベントを待つステートで、ステート遷移条件をANDに設定することで、コネクターA、Bからイベントを(5分より前に)受け取ったとしても、最低5分経過するまでは次のステートに遷移しない。

コネクター

ここでは、このステートで起動する(一般に複数の)コネクターメソッドと、それぞれの動作パラメーターを指定します。

コネクター(label_4)
コネクター(label_8)
ラベル名

このコネクターにつけるラベルの名前です。同じコネクターであっても「ステートにコネクターを追加」を行うたびに新しいラベルがつけられます。2017年10月のアップデートから、ラベル名が編集可能になりました。ピリオド(.)、アポストロフィ(‘)、ダブルクォート(“)、空白以外の文字が使えます。イベントウォーク内ですでに使われているステート名・ラベル名、予約語と重なる名前は指定できません。

実行結果のログ表示有無

Connect GUIのログタブに、該当コネクターの実行結果を表示するか否かを指定します。メソッドごとにデフォルト値が決まっており、通常変更する必要はありません。

メソッド

コネクターのメソッドを指定します。例えば、次のようなものです。

GmailコネクターのACTION: send
メソッドバスケットコネクターのTRIGGER: at timeout
入力パラメーター

コネクターメソッドごとに必要な入力パラメーターが異なります。入力パラメーターにはあらかじめ決められている必須パラメーターと、利用者が作成できるオプショナルパラメーターがあります。出力パラメーターは利用者が指定できるものではなく、コネクターメソッドごとに決まっています。入出力パラメーターについて詳しくはConnect GUIにログイン後、右上アカウントメニュー→リファレンスの画面で、左ペインのコネクタークラスを選択してください。

例のstate2では、青ボタンコネクターが次のパラメーターで起動されます。

ラベル名: label_4
実行結果のログ表示: 非表示
メソッド: 青ボタン:TRIGGER when pushed
入力パラメーター
    text: "定型メール送信"

同じようにstate5を見ると、次のようになっています。

ラベル名 label_8
実行結果のログ表示: 表示
メソッド: Gmail ACTION: send
入力パラメーター
    to: "{{consolidated.sendTo}}"
    subject: "{{consolidated.subject}}"
    text: {{consolidated.text}}

(*){{consolidated.xxx}}は、このイベントウォークに与えられたパラメーターを参照する書式で、この場合シナリオパラメーター(図「シナリオ設定」参照)で指定された値を参照しています。

このイベントウォーク全体は次のように表現できます。

「起動されると、スマートフォン上Codyl Connectアプリ内の青ボタンに「定型メール送信」というタイトルをつけ、ボタンを活性化。ボタンが押されると、シナリオパラメーターに定義された宛先、サブジェクトと本文でメールを送信する。」