1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Querierで名簿管理画面を作成する②

Last updated at Posted at 2023-11-10

前回の続き

社内向けの管理画面を、柔軟かつ速く作成することができるローコードツールである Querier(クエリア) を使用して社内名簿管理画面を作成することにしました。

前回はデータ連携や実際に画面にデータを表示する以下の手順をまとめ、投稿しました。

  • データ連携 
  • 画面作成
  • データ表示

前回作成した画面
image.png

現段階では、クエリア上でGoogleSpreadsheetのデータを確認することしかできないので、今回はユーザーの追加や更新作業を行えるよう、以下の操作の実装方法について記載します。

  • 追加
  • 更新
  • 削除
  • 検索

ユーザーの追加

テーブルのデータにユーザーを追加する機能を実装します。
氏名やフリガナの入力欄を用意し、追加ボタンをクリックすることでデータを追加するイメージです。
①まずは画面のレイアウトを整えます。
コンポーネントの「カラム」を選択し、画面中央にドラッグ&ドロップします。
無題22.png

②データをカラムの左側にドラッグ&ドロップします。
無題23.png

③カラムの左側にデータが移動しました。
image.png

④ここで、カラムの右側にユーザー追加のコンポーネントを追加していきます。
ユーザー情報用のインプット×3、ラジオボタン×1、ユーザー追加用のボタン×1 をドラッグ&ドロップします。
無題24.png

⑤追加したコンポーネントをクリックし、インプット×3、ラジオボタン×1 に対して、エディター画面で以下のように詳細を入力します。(ボタンは次の工程で設定)

項目 input1 input2 input3
ラベル 氏名 フリガナ メールアドレス
タイプ Text Text Email
必須 チェック チェック チェック
パターン Email
項目 radio1
ラベル 属性
Values ["社員", "パート"]
Default value 社員
必須 チェック
  • ラベル・・・画面に表示する名前
  • タイプ・・・インプットのタイプ(Text、Email、Numberなど)
  • 必須・・・必須項目か否か
  • パターン・・・Email、URLなどを選択でき、入力値がこのパターンから外れているとエラーメッセージがでる
  • Values・・・ラベルの選択肢
  • Default value・・・初期値

また、今回は設定しませんでしたが、Min length、Max length(最小値、最大値)を設定することで、入力のミスを減らす工夫もできます。
無題25.png

⑥⑤で設定したユーザーの情報を追加するデータフローを作成します。
このデータフローをボタンに割り当てることで、追加ボタンが機能します。
まず、データフローリストの新規作成をクリックし、GoogleSpreadsheetのアイコンをクリックします。この時、データフローの名前もappendに変更しておきます。
無題26.png
無題27.png

⑦データフローのアクションでAppend valuesを選択し、シート名を入力します。
次にパラメーターを追加するをクリックして、データのどの列にどのインプットの値を追加するか設定します。
無題28.png

パラメーターの上段(key)にはデータの列名、下段(value)には⑤で設定したインプットの値を設定します。

項目 パラメーター01 パラメーター02 パラメーター03 パラメーター04
上段(key) 氏名 フリガナ メールアドレス 属性
下段(value) {{ input1.value }} {{ input2.value }} {{ input3.value }} {{ radio1.value }}

image.png

さらに、成功時に実行するアクションを設定します。
無題33.png
イベントを追加するをクリックし、実行するアクションにデータフローの実行、データフローにdataflow1を設定します。
これを設定することで、ユーザー追加ボタンを押下後、リアルタイムで追加した情報がテーブルに反映されるようになります。
無題34.png

⑧ボタンの詳細を設定します。
ボタンのコンポーネントをクリックし、エディター画面で以下のように入力します。

項目 button1
ラベル 追加
無効にする条件 {{ !input1.value || !input2.value || !input3.value || !radio1.value }}

無効にする条件には氏名、フリガナ、メールアドレス、属性のインプットのどれか1つでも空欄の時ボタンを押せないようにするという条件を入力しました。

最後に⑦で作成したデータフローをボタンに設定します。
イベントを追加するをクリックします。
無題29.png
実行するアクションにデータフローの実行、データフローに⑥⑦で作成したappendを設定します。
無題30.png

⑨ユーザー追加ボタンが完成しました。右上のプレビューボタンからプレビュー画面に遷移して、動作確認を行います。

まずはエラーの確認から行います。
氏名、メースアドレス、属性に値を入力し、フリガナだけ空欄にしてみたところ、追加ボタンがグレーになり、クリックできなくなっています。
必須項目を空欄にしたことで、エラーの文言が表示されたのと、
ボタンの無効にする条件が機能し、ボタンが押せなくなりました。
無題31.png

正常操作の確認を行います。
上記の画面のままフリガナ欄に値を入力したところ、エラーの文言が消え、ボタンがクリックできるようになりました。
無題32.png

追加ボタン押下後、左側のテーブルに追加した情報が反映されました。
無題35.png

GoogleSpreadsheetも確認すると、問題なくデータが反映されていました。
image.png

メールアドレスの重複を禁止する

社内名簿の場合、ユーザーIDやメールアドレスなど一意のデータとして管理したい項目がいくつか存在すると思います。それを考慮して、ユーザーを新しく追加する際、すでにデータに存在しているメールアドレスは登録できない仕様を追加しました。

①データフローのappendにアクションを追加します。
action1の上の+ボタンをクリックし、GoogleSpreadsheetのアイコンをクリックします。
無題36.png

②データフローのアクションでGet valuesを選択し、シート名を入力します。
次にフィルターを追加するをクリックして、フィルターの条件に==、keyにメールアドレス、valueに{{ input3.value }}を入力します。
無題37.png
上記でやっていることは、GoogleSpreadsheetでイメージをすると以下のようなイメージです。全体の名簿を、メールアドレス列が{{ input3.value }}と同じものでフィルターしています。
image.png

③次に②のフィルターの結果を判定するコードを入力します。
action2action1の間の+ボタンをクリックし、JavaScriptのアクションを挿入します。
無題38.png

④スクリプト枠内に以下のコードを入力します。

if ({{ action2.data.length }} !== 0) {
throw Error("すでに存在しています。")
}

追加したいメールアドレスでフィルターした結果が、0行の時は同じメールアドレスが存在していないということなので、何もしない。
1行以上の時は同じメールアドレスが存在している=重複しているのでエラーメッセージを表示するコードになっています。
無題39.png

⑤メールアドレスの重複をNGにするデータフローが完成しました。
試しに同じメールアドレスを追加しようとすると登録できず、編集画面でエラーが表示されています。
無題41.png

ユーザーの更新

テーブルのユーザー情報を更新する機能を実装します。
更新の流れは、テーブルの中から更新したい行をクリック→インプットに新しい情報を入力→更新ボタンを押下する というイメージです。
①追加の作業と同様に、インプット×3、ラジオボタン×1、ユーザー更新用のボタン×1 を追加インプットの上にドラッグ&ドロップします。
また、追加と更新のレイアウトを区切るためにボーダー×1を更新ボタンの下に挿入しました。
無題42.png

②追加したコンポーネントをクリックし、インプット×3、ラジオボタン×1 に対して、エディター画面で以下のように詳細を入力します。(ボタンは次の工程で設定)

項目 input4 input5 input6
ラベル 氏名 フリガナ メールアドレス
タイプ Text Text Email
Default value {{ table1.selectedRow.data.氏名 }} {{ table1.selectedRow.data.フリガナ }} {{ table1.selectedRow.data.メールアドレス }}
必須 チェック チェック チェック
パターン Email
項目 radio2
ラベル 属性
Values ["社員", "パート"]
Default value {{ table1.selectedRow.data.属性 }}
必須 チェック

ユーザー追加との変更点はDefault valueに{{ table1.selectedRow.data.〇〇(列名) }}を設定していることです。
これで、テーブル内の更新したい行をクリックすると、その行の項目が自動でインプット欄に表示される設定になります。

例)テーブルの田中太郎の行をクリックするとインプット欄に田中太郎のデータが自動表示される。
image.png

③更新ボタンに設定するデータフローを新しく作成します。
データフローリストの新規作成をクリックし、GoogleSpreadsheetのアイコンをクリックします。この時、データフローの名前をupdateに変更しておきます。
無題43.png

④データフローのアクションでUpdate valuesを選択し、シート名を入力します。
次にユーザー追加時と同様に、パラメーターを追加するをクリックして、データのどの列にどのインプットの値を追加するか設定します。
無題44.png

項目 パラメーター01 パラメーター02 パラメーター03 パラメーター04
上段(key) 氏名 フリガナ メールアドレス 属性
下段(value) {{ input4.value }} {{ input5.value }} {{ input6.value }} {{ radio2.value }}

image.png

さらに、フィルターを追加するをクリックして、フィルターの条件に==、keyに氏名、valueに{{ table1.selectedRow.data.氏名 }}を入力します。
このフィルターを追加することで、現在選択しているテーブルの行に対してインプットの値を上書き(更新)する処理が動きます。
無題46.png

最後に、ユーザー追加時と同様、成功時に実行するアクションを設定します。
イベントを追加するをクリックし、実行するアクションにデータフローの実行、データフローにdataflow1を設定します。
これを設定することで、ユーザー更新ボタンを押下後、リアルタイムで更新した情報がデータに反映されるようになります。
無題45.png

⑤④で作成したデータフローをボタンに割り当てます。
ボタンのコンポーネントをクリックし、ラベルを更新に、イベントを追加するをクリックし、実行するアクションをデータフローの実行、データフローをupdateに設定します。
※更新ボタンの色は、わかりやすくするために追加ボタンと違う色を設定しました。
無題47.png

⑥ユーザー更新ボタンが完成しました。右上のプレビューボタンからプレビュー画面に遷移して、動作確認を行います。

試しに、3行目の佐藤健さんのフリガナをサトウケンサトウタケルに変更して更新ボタンを押下します。
image.png
問題なく更新できました。
無題48.png
image.png

ユーザーの削除

テーブルのユーザーを削除する機能を実装します。
削除の流れは、ユーザー更新と同様に、テーブルの中から削除する行をクリックし、削除ボタンを押下するイメージです。
ただし、ワンボタンで削除できてしまうと誤操作の恐れがあるため、ポップアップを挟んで削除する方法を採用します。
①コンポーネントからモーダルをドラッグ&ドロップし、更新ボタンの下に挿入します。
無題49.png

②モーダルをクリックするとポップアップが表示されるので、テキストとボタンをドラッグ&ドロップで挿入します。
無題50.png

③挿入したテキストをクリックし、エディターのテキストに{{ table1.selectedRow.data.氏名 }}を削除してよろしいですか?と入力します。
{{ table1.selectedRow.data.氏名 }}で現在テーブルで選択しているユーザーの氏名が表示されます。
確認のメッセージなのでサイズはlargeに変更しました。
無題51.png

④削除ボタンに設定するデータフローを新しく作成します。
データフローリストの新規作成をクリックし、GoogleSpreadsheetのアイコンをクリックします。この時、データフローの名前をdeleteに変更しておきます。
無題52.png

⑤データフローのアクションでDelete valuesを選択し、シート名を入力します。
次にフィルターを追加するをクリックして、フィルターの条件に==、keyに氏名、valueに{{ table1.selectedRow.data.氏名 }}を入力します。
現在テーブルで選択している氏名でフィルターをかけることで、その行の削除を行うことができます。
無題53.png

さらに、成功時に実行するアクションを設定します。
イベントを追加するをクリックし、実行するアクションにデータフローの実行、データフローにdataflow1を設定します。
これを設定することで、削除ボタンを押下後、リアルタイムでデータが削除されたテーブルが反映されるようになります。
無題54.png

⑥⑤で作成したデータフローを削除ボタンに設定します。
モーダル内のボタンをクリックし、ラベルに削除、イベントを追加するをクリックし、実行するアクションにデータフローの実行、データフローにdeleteを設定します。
無題55.png

⑦最後にモーダルの設定を行います。
モーダルをクリックし、エディターのボタンラベルに{{ table1.selectedRow.data.氏名 }}を削除するを設定します。これで、テーブルで現在選択しているユーザーの氏名がボタンに表示されるようになります。
タイトルには削除確認画面と入力します。ポップアップ内のタイトルを変更することができます。
※モーダルの色は分かりやすいように赤色に変更しました。
無題56.png
無題57.png

⑧ユーザー削除ボタンが完成しました。右上のプレビューボタンからプレビュー画面に遷移して、動作確認を行います。

試しに、テスト太郎さんを選択し、「テスト太郎を削除する」を押下します。
無題58.png

確認のポップアップが表示されたので、削除ボタンを押下します。
無題59.png

削除が完了し、ポップアップを×ボタンで閉じます。
テーブルを参照するとテスト太郎さんのデータが問題なく削除されていました。
image.png

ユーザーの検索

テーブルのユーザーを検索する機能を実装します。
検索欄を作成し、氏名を入力すると、一致するデータのみがテーブルに表示される というイメージです。
①コンポーネントからインプットをドラッグ&ドロップでテーブルの上に挿入します。
エディターのラベルに氏名で検索と設定します。
無題60.png

②現在テーブルを表示しているデータフローにフィルターの機能を追加します。
dataflow1をクリックします。
無題61.png

action1をクリックし、フィルターを追加をクリックします。
フィルターの条件にcontains、keyに氏名、valueに{{ input7.value }}を設定します。また、左側の変更発生時に自動で実行にチェックを入れます。
条件を==でなくcontainsにすることで、苗字だけ一致、名前だけ一致などの部分一致に対応することができます。
{{ input7.value }}は①で追加した検索欄のインプット
無題62.png

④検索機能が完成しました。上のプレビューボタンからプレビュー画面に遷移して、動作確認を行います。

試しに、検索欄に田中と入力すると、下のテーブルには氏名が田中のユーザーのみ表示されました。
無題63.png

検索を終了したいときは、検索欄を空欄にすると元のテーブル全体が表示されます。
image.png

完成

社内名簿管理画面が完成しました。
image.png
※バランスを整えるために、テーブルの高さを10→20に変更しました。
無題64.png

おわりに

記事を作成するにあたって、参考になるQiitaの記事があまりなかったので、公式のガイドを参考に画面を作成しました。
また、ガイドを読んでもわからなかった箇所は、画面右下の問い合わせチャットから不明な点をすぐに質問でき、丁寧で早急な対応をしていただきました。ありがとうございました。

前回の記事

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?