
Canbus.で自動処理が動かない時に確認する場所 Part.1
Canbus.で大量のデータを取り扱う場合、レコードの作成や更新を自動で行うことができる自動処理機能はとても便利です。
しかし、自動処理機能で更新したい内容が反映されない、そもそも設定を保存できないなどといった経験はありませんか?
そういった事象が発生した時のために、自動処理がうまく動かない時の対処方法について、いくつかの記事に分けてご案内いたします!
第1回となる今回の記事では、
について紹介します。
今回の説明に使用するテナントでは、所属組織や勤務地などの社員情報や、各本部に所属する社員の在席状況をCanbus.内で管理しています。
ここでは、社員情報を管理するテーブルを「全社員マスタ」、A本部に所属する社員の在席状況を管理するテーブルを「A本部在席状況」として説明します。
「全社員マスタ」には、社員の情報を新規で登録した際に「A本部在席状況」にレコードを追加する自動処理が設定されています。
A本部在席状況
設定例
Canbus.で自動処理を設定する場合、反映先に設定したテーブルのテーブルレベルアクセス権によって、自動処理が動作しない場合があります。
今回は、「全社員マスタ」に設定された「自動処理1」について見ていきましょう。
自動処理1
この自動処理では、所属組織にA本部を設定したレコードを「全社員マスタ」に追加した場合、「A本部在席状況」にレコードを追加する処理が設定されています。
しかし、実際に操作すると以下のユーザーでは、「A本部在席状況」にレコードが追加されませんでした。
実行条件を満たす操作を行ったのに自動処理が動作しない…
そんな時は反映先に設定したテーブルのテーブルレベルアクセス権を確認しましょう。
A本部在席状況アクセス権
今回自動処理の反映先に設定した「A本部在席状況」では、A本部に所属しているユーザーのみにテーブルレベルアクセス権が付与されているようです。
Canbus.では、反映先のテーブルに「テーブルの公開」権限が付与されていない場合、自動処理でレコードを操作することができません。
そのため、A本部に所属していないユーザーで「全社員マスタ」にレコードを追加した場合は自動処理でレコードを操作することができず、「A本部在席状況」に反映されなかったのです。
今回は作業を行ったユーザーによって自動処理の変更が反映されないという事象を紹介しましたが、実はこの事象には回避策があります。
それは、自動処理専用のユーザーを作成するという方法です。
この回避策を用いる場合、「自動処理1」と「A本部在席状況アクセス権」の設定を変更する必要があります。
自動処理1(変更後)
A本部在席状況アクセス権(変更後)
項目の設定でユーザー選択を設定すると、自動処理を実行するユーザーに作業者以外のユーザーを指定することができます。
今回追加した設定は、どのユーザーがレコードを追加した場合でも「自動処理用ユーザー」が「自動処理1」を実行するような設定となっています。
「自動処理用ユーザー」には「A社員在席状況」のアクセス権が付与されているため、自動処理でレコードを追加することができるのです。
無限ループ設定
Canbus.の自動処理機能では、トリガーの設定次第で無限ループが発生してしまう場合があります。
ここで紹介する無限ループとは、一連の処理で同じ自動処理を呼び出し続けてしまい、いつまでたっても処理を完了することができないことを指します。
具体的には、自動処理Aが自動処理Bを呼び出し、自動処理Bが自動処理Aを呼び出すといった設定の場合です。
実行条件やフィルター条件でループが発生しないように設定しても、同じ自動処理を呼び出し続ける場合は無限ループ扱いとなります。
無限ループの発生を防止するため、Canbus.では無限ループが発生するトリガー設定を保存することができないようになっています。
例えば、「全社員マスタ」に「自動処理2」、「A本部在席状況」に「自動処理3」を同時に適用しようとすると無限ループのエラーが発生し、設定を保存できません。
自動処理2
自動処理3
「自動処理2」と「自動処理3」を同時に設定できてしまった場合、「A本部在席状況」のレコードを更新すると以下のような動作となります。
①「A本部在席状況」のレコードを更新する
②「A本部在席状況」が更新されたので、「自動処理3」を実行する
③「自動処理3」が「全社員マスタ」を更新する
④「全社員マスタ」が更新されたので、「自動処理2」を実行する
⑤「自動処理2」が「A本部在席状況」を更新する
⑥「A本部在席状況」が更新されたので、「自動処理3」を実行する
・
・
・
このように、②以降の動作が無限にループしてしまいます。
では、どうすれば無限ループが起こらなくなるのでしょうか。
実は、以下の2か所のどちらかのチェックを外すことで無限ループのエラーが発生しなくなります。
問題箇所
「レコードが自動処理された時に実行する」を無効にした場合を「設定1」、「実行タイミング」を「即時」以外に変更した場合を「設定2」としてそれぞれの動作を見ていきましょう。
設定1
①「A本部在席状況」のレコードを更新する
②「A本部在席状況」が自動処理以外で更新されたので、「自動処理3」を実行する
③「自動処理3」が「全社員マスタ」を更新する
④「全社員マスタ」が更新されたので、「自動処理2」を実行する
⑤「自動処理2」が「A本部在席状況」を更新する
⑥「A本部在席状況」が自動処理で更新されたので、「自動処理3」を実行しない
設定2
①「A本部在席状況」のレコードを更新する
②「A本部在席状況」が更新されたので、「自動処理3」が実行タイミングまで待機する
③「自動処理3」が実行され、「全社員マスタ」を更新する
④「全社員マスタ」が更新されたので、「自動処理2」を実行する
⑤「自動処理2」が「A本部在席状況」を更新する
⑥「A本部在席状況」が更新されたので、「自動処理3」が実行タイミングまで待機する
・
・
・
「設定1」は⑥の時点でトリガーの実行条件を満たさなくなるため、ループ自体が発生しなくなります。
「設定2」の場合は処理自体は繰り返し行われますが、「自動実行3」のタイミングで待機を挟むため、タイマー実行のような形で運用することができます。
自動処理の設定で無限ループのエラーが発生した場合、「レコードが自動処理された時に実行する」と「実行タイミング」の設定を確認してみてください。
今回はCanbus.で自動処理を設定する時に確認する点について、\テーブルレベルアクセス権と無限ループ設定/を紹介しました。
本記事をご参考にしていただくことで、アプリを運用する一助となれば幸いです。
今後もCanbus.の機能についての記事を投稿いたしますので、ぜひご確認ください。