複数のテーブルを同時に更新する

複数のテーブルを同時に更新する

Forguncyにおけるテーブル更新は、既にCRUDやコマンドの回で紹介した通り「テーブルデータの更新」コマンドを用いて行います。しかし、一つのコマンドでは一つのテーブルにしか登録処理や更新処理を行えない、というのは不便と思われた方もいらっしゃるかもしれません。

実はこの「テーブルデータの更新」コマンドでは、一度に複数のテーブルに対して更新処理を行うことができます。 本記事ではこのコマンドを使い、1つのテーブルデータの更新コマンドで複数のテーブルに対してCRUD処理を行う方法について解説します。

見出しの装飾

ForguncyでのCRUD処理のおさらい

Forguncyでは業務ロジックの処理をプログラミングの代わりに「コマンド」で実装します。

各コマンドの詳細については開発スタートガイドの当該記事を参考にしていただければと思いますが、本記事において使用する「テーブルデータの更新」コマンドについて軽く復習しておきます。

本コマンドでは追加・更新・削除から処理の種類を選び、どのテーブルのどのフィールドにどの値をセットするのか、といった情報を設定することで使用可能になります。

ForguncyにおけるデータのCRUDについて、より詳細な情報については以下のリンクから当該記事を参考にしてください。

テーブルデータの更新コマンドの設定画面
▲ テーブルデータの更新コマンドの設定画面
見出しの装飾

1つのコマンドで複数テーブルを一括更新

前述のようにデータの更新処理を担うテーブルデータの更新コマンドですが、実はこのコマンドにはオプション設定が存在し、トランザクションを有効にすることができます。

この設定を有効にすると、コマンドの設定画面は下図のように変わり、複数テーブルをまとめて更新できるようになります。

トランザクションを有効にした際のテーブルデータの更新コマンドの設定画面
▲ トランザクションを有効にした際のテーブルデータの更新コマンドの設定画面

更新対象のテーブル数は自由に増減させることができます。処理が実行される順番もボタンで簡単に入れ替えができるようになっています。もちろんForguncyはノーコードツールなので、SQLで複雑な結合処理を書く必要はありません。

一般的なトランザクション同様に、更新処理の途中で問題が発生した場合にはロールバックが発生します。問題が発生した時点までの更新処理はすべて元に戻るため、データの不整合が発生する恐れもありません。ただし、複数の「テーブルデータの更新」コマンドを使用している場合で更新処理に問題が発生した場合、ロールバックが発生するのはエラーが発生した当該コマンド内で指定しているテーブルのみになります。1つ目のテーブルデータの更新コマンドが終了した後に2つ目のテーブルデータの更新コマンドが動き、そちらで問題が発生した場合には、1つ目のコマンドで更新されたテーブルのデータは元に戻らないので注意してください。

トランザクション処理についてはヘルプでも解説していますので、そちらも参照してください。

見出しの装飾

登録と更新を1つのコマンドでまとめて実行

テーブルデータの更新コマンドのトランザクション中で扱うCRUD処理は、種類が違うものでもひとまとめにすることができます。例として、1つのテーブルデータの更新コマンドで「登録」と「更新」の2種類の処理を一括で行う営業日報システムをご紹介します。

このシステムでは、ユーザーが日報を書くと2つのテーブルに対してCRUD処理が発生します。1つ目が営業活動履歴テーブルに対しての登録処理で、こちらには営業日報に記載したデータがすべて新規登録されます。2つ目が営業案件リストテーブルに対しての更新処理です。このテーブルには営業案件データが既に登録されており、ユーザーが日報の中で記述した各案件の進行状況に関わる情報のみが更新されるようになっています。

営業日報システムのイメージ
▲ 営業日報システムのイメージ

これは、テーブルデータの更新コマンドを用意し、トランザクションを有効に設定してどのテーブルに対してどの処理を実行するかを選択すれば実現できます。

例に挙げたこちらの営業日報システムについては、Forguncyドリルで詳しくご紹介しています。ドリルではサンプルプロジェクトを配布しておりますので、ダウンロードしていただくことで実際にどのように動くのか確認していただけます。また、このサンプルアプリケーションの作成手順もご紹介しておりますので、手順通りに行えばご自分で作成していただくこともできますのでぜひ一度ご確認ください。

見出しの装飾

サーバーサイドコマンドとの違い

ここまで解説してきたテーブルデータの更新コマンドは、通常コマンドの物です。サーバーサイドコマンドにも同名のコマンドはありますが、そちらにはトランザクションを有効にするオプション設定はありません。

サーバーサイドコマンドには、「トランザクション」という名前で1つのコマンドとしてトランザクション機能を提供しています。そのため、サーバーサイドコマンドを用いて複数テーブルの更新を行う場合には、トランザクションコマンドを配置した後に1テーブルにつき1つのテーブルデータの更新コマンドを作成する必要があります。通常コマンドとサーバーサイドコマンドでは、有用な場面が異なります。

画面上のデータやセルなどを用いて対話的に行うような処理では通常コマンドの方が、バックグラウンドで自動的に行われるような処理ではサーバーサイドコマンドの方が向いています。作成するアプリケーションの要件に合わせて、どちらのコマンドで実装するかを選択してください。

クライアントサイド(通常コマンド)とサーバーサイドのコマンドの比較
▲ クライアントサイド(通常コマンド)とサーバーサイドのコマンドの比較

サーバーサイド処理については開発スタートガイドでも個別に扱っていますので、詳細はそちらもご一読ください。

見出しの装飾

Forguncyをもっとよく知る

各業種や用途別にForguncyを活用して、成功した事例や使い方をご紹介します。