リストビューの直接編集によるデータ登録、更新はExcelのような感じで使いやすいですよね。

以前にExcelライクなリストビューとして紹介もさせもらいました。

今回は、複数行の入力チェックを同時に行うために、登録用のサーバーサイドコマンド呼び出しの前にチェック用のサーバーサイドコマンドを呼び出す際の注意点を紹介します。

チェック用サーバーサイドコマンドを追加したら、エラーメッセージは表示されないのにデータが登録されなくなったときには、この記事のことを思い出してください。

このページでは以下のことがわかります!

  • 1つのコマンド内で複数回サーバーサイドコマンドを呼び出した際の注意点
  • 「チェック用サーバーサイドコマンドを追加したら、データが登録されなくなった」の原因

このページの想定読者

  • 目的毎にサーバーサイドコマンドを作成して、1つのコマンドで複数回サーバーサイドコマンドを呼び出すことがあるかた。
  • リストビューの直接編集で「リストビューのデータを即時更新しない」にチェックを付けるケースが多いかた。

このページの情報はV10以降で動作確認済みです。

サーバーサイドコマンド呼び出し時のデフォルト設定

「サーバーサイドコマンドの呼び出し」コマンドの「詳細設定」のデフォルト設定は以下となっています。
※「詳細設定を表示」リンクをクリックすると確認できます。

  • 処理の完了を待たずに次のコマンドを実行する(初期値:チェックなし)
  • 連結データを最新の情報に更新する(初期値:チェックあり)
  • コマンド実行前にセルのデータ入力検証を行う(初期値:チェックあり)

※ヘルプサイトでは「連結データを最新の情報に更新する」は「初期値はチェックなし」となっていますが、記憶ではV8の時はチェックなしがデフォルトで、V10からは「初期値はチェックあり」となっています。(非公式情報)

「連結データを最新の情報に更新する」の動き

ヘルプサイトの情報によると、「チェックした場合、サーバーサイドコマンドの実行完了後に、ページはデータの再読み込みを行い、最新のデータを表示します。本設定は、現在のページに表示しているデータをサーバーサイドコマンドを使用して更新する場合に必要となる設定です。」となっています。

つまりは、サーバーサイドコマンドの処理が完了した時点で確定してる情報で再表示するということです。

1つのコマンドで複数の「サーバーサイドコマンド呼び出し」を使用

基本的なコマンドの組み合わせ

[前提条件]

  • 登録前チェックサーバーサイドコマンドに渡す配列データは「変更データのみを送信」をチェックすることで追加、変更があったもののみとする。
  • 登録前チェックはメールアドレスに@(アットマーク)が含まれているかのチェックとする。
  • 登録処理サーバーサイドコマンドに渡す配列データは「変更データのみを送信」をチェックすることで追加、変更があったもののみとする。
  • 「登録前チェックサーバーサイドコマンド」の結果でOKの場合のみ、「登録処理サーバーサイドコマンド」を呼び出す。
  • リストビューの設定は以下とする。

[コマンドの構成]

  1. 進捗インジケーターの表示
  2. 登録前チェック(サーバーサイドコマンドの呼び出し)
  3. チェック結果の確認
    • チェック結果でエラーがあった場合は、メッセージを通知して終了
  4. 登録処理(サーバーサイドコマンドの呼び出し)
  5. 進捗インジケーターの終了(非表示)
  6. 登録処理の確認
    • エラーの場合:エラーメッセージを通知
    • 正常終了の場合:正常終了メッセージを通知

デフォルト設定のままで構成

登録済みの行を1つ編集(メールアドレスの@(アットマーク)以降を削除)、最終行に新規のレコードを入力し、登録ボタンをクリックする。

登録前チェックでエラーとなりエラーメッセージが表示されます。

リストビューの内容を確認すると、編集した行が編集前の状態になり、最終行にに追加した新規のレコードがなくなっていることに気付きましたか?

登録ボタンをクリックする前

登録ボタンをクリックした後

これは、登録前チェックのサーバーサイドコマンド実行後に、「処理が完了した時点で確定してる情報で再表示」の処理が行われたためです。

チェック終了時点ではレコードの更新および新規登録処理は完了していないので、テーブル情報は編集、新規登録前の情報が最新の情報として再表示されます。

では、エラーが発生しない場合ならどのよう動きをすると思いますか?

登録ボタンをクリックする前

登録ボタンをクリックした後

登録処理は正常に終了しますが、登録後のリストビューの内容は編集した行が編集前の状態になり、最終行にに追加した新規のレコードがなくなっています。

登録前チェックのサーバーサイドコマンド実行後にリストビューの再表示が行われたことで、編集行、新規追加行なしで登録処理が行われ、正常に処理は終了したと判断されます。

「連結データを最新の情報に更新する」のチェックを外す

変更は、登録前チェックのサーバーサイドコマンドの呼び出しコマンドの「連結データを最新の情報に更新する」のチェックを外すだけで大丈夫です。

これでデフォルト設定と同じような操作してみましょう。

まずは登録前チェックでエラーとなるパターンで確認しましょう。

登録ボタンをクリックする前

登録ボタンをクリックした後

エラーメッセージが表示されても、編集行、新規追加行の状態が保持されていることが確認できます。

続いて、エラーが発生しないパターンでで確認しましょう。

登録ボタンをクリックする前

登録ボタンをクリックした後

登録処理(サーバーサイドコマンドの呼び出し)の「処理が完了した時点で確定してる情報で再表示」の処理が行われたことで、登録済み内容で再表示されていることが確認できます。

「連結データを最新の情報に更新する」のチェックを付ける箇所

タイミングは、「サーバーサイドコマンドの処理実行後にリストビューのデータを再表示したいタイミング」なので、登録処理を行うサーバーサイドコマンドが「連結データを最新の情報に更新する」にチェックを付ける「サーバーサイドコマンドの呼び出し」コマンドになります。

ただし、注意点もあります。

1つのコマンド内に複数の登録処理を行う「サーバーサイドコマンドの呼び出し」コマンドがある場合は、最後の登録処理を行う「サーバーサイドコマンドの呼び出し」コマンドが対象になります。

また、サーバーサイドコマンドの処理でエラーが発生し登録処理が失敗した際にも、「処理が完了した時点で確定してる情報で再表示」の処理が実行されるため、更新および新規登録処理は完了していなくても、その時点での最新の情報が再表示されます。

まとめ

ハマってしまうと、原因を見つけられない無限ループに入ってしまう事例の紹介でした。

より複雑なものを開発するようになると、目的毎にサーバーサイドコマンドを分けることが必要になってくると思います。そのときに、「こんな記事あったなぁ」と思い出してもらえればと思います。

この記事はいかがでしたか?内容を楽しんでいただけましたか?少しでもワクワクしたり、新しい発見があれば嬉しいです!わくわくした方は、ぜひわくわくボタンをクリックしてください。

関連記事

【著者】

Jun

I’m Forguncy lover!

2019年にForguncyに出会い、今では、(自称)日本一のForguncyファンです。アップデート毎に増える機能にいつもワクワクしています。もっと、開発者にForguncyの魅力を知ってもらい、使いこなし、私たちと同じようワクワクする体験をして欲しいと思い、有志とともに2025年6月30日にForguncy Users Communityを立ち上げさせてもらいました。当サイトにアクセスした開発者がワクワクする情報を発信していきたいと思います。