目次
今回の記事では、前回作成した工場4S活動チェックリストテンプレートを使用したミニアプリを用いて、最新のレコードのみをPlatioから取得してしてプッシュ通知を送ります。
処理の流れ
基礎編の記事で作成した工場4S活動チェックリストのミニアプリをそのまま使用します。またフローは以下の2点を追加します。
- 前回のフロー実行時から比較して、新たに登録されたレコードのみを取得してプッシュ通知を送る
- スケジュール実行設定で決まった間隔で自動にフローを実行する
ここからは、これらのフローの修正手順を説明していきます。
事前準備
データビューアーもしくは端末のPlatioアプリから新たにレコードを作成しておいてください。
フローを修正する
フローデザイナーへログインし、 下図のコメントにある手順でフローを修正します。
コンポーネントを配置
前回作成していたフローを以下のように接続を切ります。
Startコンポーネントの下に新たにFileGetコンポーネント、Mapperコンポーネントを配置します。
ここで1つ目のMapperコンポーネントの下に、最初に切り分けていたPlatioGetコンポーネント、Mapperコンポーネント、PlatioNotificationコンポーネント、Endコンポーネントを接続します。
2つ目のMapperコンポーネントの下に新たにMapperコンポーネント、FilePutコンポーネント、Endコンポーネントを配置して、パラレル処理をおこないます。
ストリームを定義
前回のタイムスタンプを取得
FileGetコンポーネントの基本プロパティで以下のように設定します。初回のフロー実行時など、Timestamp.txt が存在しない場合はエラーを無視して処理を実行します。
- ファイルパス:Timestamp.txt
- エラー処理「ファイルが存在しない場合」:エラーを無視する
Platioからレコードを取得する時の検索条件を指定
1つ目のMapperコンポーネントを開き、条件付きレイヤー(条件式 $record.Object!="" )を設定します。この場合、ストリームのobject変数が空ではないときだけマッピングを実行します。
続いて、PlatioGetコンポーネントの検索条件を設定します。検索条件は、Platioのレコード検索書式で記述します。ここの検索条件については「タイムスタンプでの検索」を参照してください。
今回はタイムスタンプが新しいレコードにマッチする検索条件を設定します。マッパーにStrToDateStd関数、DateCalc関数、FormatDateStd関数、Embed関数の順番で配置します。入力ストリームにあるobject変数から上記の関数の並び順で接続して、出力ストリームにあるPlatioGetコンポーネント「検索条件」に指定します。
各関数の基本プロパティでは以下のように設定してください。
- StrToDateStd関数、FormatDateStd関数
- 日付フォーマット:yyyy-MM-dd'T'HH:mm:ss
- DateCalc関数
- 計算対象:秒、加算する値:1
- Embed関数
- データ:$fromTimestamp:${input1}
マッパー内で行う処理としては、object変数に流れている日時の文字列データを日時データに変換して、1秒加算した後に再び日時の文字列に変換しています。これにより、前回のタイムスタンプより大きい値を検索条件に指定できます。
検索条件に一致する情報をPlatioから取得
ここからは基礎編で設定していたPlatioGetコンポーネントの基本プロパティを修正します。今回はPlatioからのレコードを取得する際にループをせず、最新1レコードのみプッシュ通知を送信してる例です。
- ループを開始:いいえ
- 検索条件内タイムゾーン:東京
ヒント今回はプッシュ通知が何度も送られることを防ぐため、PlatioGetコンポーネントでループを開始プロパティを「いいえ」に設定しています。そのため、取得したレコードが複数(例えば10件)でも最新の1レコードのプッシュ通知しか送信されません。 また、今回の例でループ開始を「はい」に設定した場合、新規のレコードが複数あると同一のマネージャーに何件もプッシュ通知が送信されてしまいます。 |
続いて、PlatioGetコンポーネントのPlatioビルダーを開きます。「ユーザー name」のチェックはそのままで、「マネージャー name」のチェックを外します。以下の2つの項目にチェックを入れて保存します。
- マネージャー id
- _Timestamp
プッシュ通知を送る
2つ目のMapperコンポーネントを開きます。入力ストリームに流れているユーザー name、マネージャー idをそれぞれ適切な出力ストリームに接続します。
- 「ユーザー name」フィールドをフロー変数「ユーザー」に指定
- 「マネージャー id」フィールドをPlatioNotificationコンポーネント「ユーザー」に指定
タイムスタンプを比較
まず、2つ目のMapperコンポーネントにマッパー変数「timestamp」を設定します。
続いて、2つ目のMapperコンポーネントを開き、条件付きレイヤー(条件式 $record._Timestamp>$local.timestamp )を追加して、入力ストリームの「_Timestamp」を出力ストリームのマッパー変数「timestamp」に接続します。これによりタイムスタンプを比較して、前回フロー実行時に取得したタイムスタンプ(_Timestamp)よりも、PlatioGetコンポーネントで取得した最新のレコードのタイムスタンプ(マッパー変数 timestamp)が大きい場合にマッパーの処理が実行されます。
タイムスタンプを保存
ここからは、先ほど比較した最新のレコードのタイムスタンプを保存するステップです。3つ目のMapperコンポーネントを開き、入力ストリームのマッパー変数「timestamp」からFormatDateStd関数、出力ストリームのobjectの順に接続して以下のように設定します。
- FormatDateStd関数
- 日付フォーマット:yyyy-MM-dd'T'HH:mm:ss
最後に、FilePutコンポーネントの基本プロパティのファイルパスを「Timestamp.txt」と設定します。
これでフローの作成が完了しました!
スケジュール実行設定
「スケジュール起動」を設定することによって、フローの実行を自動で行うことができます。以下の手順を参照しながら、今回のフローを一定の間隔で実行できるように設定します。今回は動作を確認したいので、現在の時刻から2分おきに設定してください。
- 対象のフローをフロー一覧で選択し、右クリックして「実行」メニューの「実行設定」-「一定間隔で実行」を選択する。
- 「実行設定」ダイアログが表示されるので、「フロー」と「開始日時」が自動で入力されていることを確認する。
- フローの実行間隔を2分で指定して「登録」をクリックする。
- 登録が終了したら「閉じる」をクリックして「実行設定」ダイアログを閉じます。指定した日時に、対象のフローが実行されます。
ヒント実行した回数や最終の実行日時は「実行設定」ダイアログの下部にあるステータスから確認できます。 |
フローの実行を確認する
先ほど設定した間隔になると、フローが実行されます。新たに登録したレコードがある場合は、そのレコードで指定されているマネージャーにプッシュ通知が送られます。一方、新たに登録したレコードが無い場合にはフローは終了し、プッシュ通知の送信はありません。