|8| 実習生作成 ポータルフィルター・ポップオーバー

|8| 実習生作成 ポータルフィルター・ポップオーバー

SampleDB_07_17.zip サンプルをダウンロード(ver.17以降)
SampleDB_07_16.zip サンプルをダウンロード(ver.16以前)

「現在のレコード」ポータルの機能はバージョン17以降になります。
16以前は異なるリレーションで構築することになります。

 

今まで、とても大事なことを書き忘れていました。サンプルファイルに使われているフォントは「源真ゴシック」というフリーフォントです。これはAdobeなどが開発した「源ノ角ゴシック」をカスタマイズしたフォントで、ウエイトが7種類、字幅がノーマル、かなプロポーショナル、英数半角の3種類、トルータイプでWindows、Mac共通のフリーフォントです。パワーポイントなどでも使い勝手の良いフォントだと思います。

自家製フォント工房 からダウンロードできます。
http://jikasei.me/font/genshin/

ボタンオブジェクト

データベースを作成する前に様々なボタンなどのオブジェクトを置いたレイアウトを作ろうと思います。これはデータベース全体の操作の統一感を出すためとコピーペーストすることで様々なレイアウトを作る利便性につながります。

若い人だけが使うのであればフラットデザインのボタンでいいのかもしれませんが、あまり慣れていない年配者が使うかもしれません。ボタンはある程度立体的にし、マウスを重ねた時にはっきりとわかるよう色の変化も大きくしてあります。
また、ボタンの機能によってもマウスを置いた時の色を変えてあります。ここではレイアウトの移動や学生と実習先を結びつけるようなレコードの一部を変えるボタンは青に、実習生作成のように新規レコードを作成するようなボタンは緑に、レコードを削除するボタンは赤にしてあります。

 

画面キャプチャ
レイアウトモード
画面キャプチャ
ブラウズモード
画面キャプチャ

マウスを置いた時の色の変化です。

 

実習生作成の流れ

今回は特定の実習に参加する実習生を作成します。
第2回で書いた実習生作成とは方法が異なりますので、その時に作ったリレーションを削除しておきます。
「現在のレコード」ポータルを作成できるバージョン17とバージョン16以前では異なった作り方になります。

それぞれの実習は原則として学生の学年に対して割り当てられています。それ以外では前年度に何らかの理由で実習の単位を修得できなかった学生と同じ年度内で実習の単位を修得できなかった学生の2回目以降を作成することになります。

まず、2020年度の実習が配当されている学生の現在の学年を検索して、まとめて実習生レコードを作成します。1回目の実習になるのでa02_同一年度回数フィールドに「1」を入力します。この時に重複したレコードを作らないようにします。

次に他の学年で単位を修得していない学生を検索してレコードを作成しますが、前年度に同じ実習に参加していても2020年度の実習では1回目ということになるのでa02_同一年度回数フィールドに「1」を入力します。前年度実習の可否が記録されていれば、そのデータに基づいて検索するのですが、ここでは実習の可否を入力するフィールドがないので目視で検索することにします。

最後に同一年度内に2回目以降の実習をする学生のレコードを作成しますが、同一年度内にその学生の実習生レコードがあるかどうかを確認した上で前回の回数に「1」を足した数字をa02_同一年度回数フィールドに入力するようにします。

削除する時もすでに実習先と結び付けられいるかどうか確認してから削除するようにします。

使用するレイアウトのテーブルオカレンス

対象学年でない学生や再実習の学生を選択するためにポータルを使いますが、ver.17では「現在のレコード」ポータル(以降、自己ポータルと書きます。)を使うのでa01_学生TOのレイアウトを使います。ver.16以前では自己ポータルが使えませんのでui01_実習管理TOのレイアウトを使います。

 

画面キャプチャ

トップメニューから「実習生設定」ボタンで実習を選択する画面に移動します。
このレイアウトはui01_実習管理TOのままです。
年度を選択し、実習を選択してから「実習生作成」ボタンで実習生を作成するレイアウトに移動します。

ボタンの下にスクリプトを指定しないグレーのボタンを配置して選択した年度のボタンは隠すようにしています。隠す式は

ui01_実習管理::ui01_g_年度 = d01_年度::d01_翌々年度(前年度、年度、翌年度)

になっています。

選択された実習にはbo1_実習::b01_背景フィールドを置いて書式から「条件付き…」で塗りつぶしの色を指定しています。計算式は

uiz02_セレクタ::uiz02_g_実習ID = b01_実習::b01_実習ID

になっています。
背景フィールドは実習管理ファイルの全てのテーブルに追加してあります。
文字列のフィールドは同じように「条件付き…」で文字色を白くしています。「選択」ボタンは同じ式で隠すようにしあり、ボタンの下には白の文字色で「●」を置いてあります。

 

画面キャプチャ

このレイアウトはver.17とver.16以前で異なります。このレイアウトに置かれたボタンのスクリプトはフィールドの指定やスクリプトが終了する前の処理が異なってきます。

このポータルはコネクタを通した実習生のレコードでポータルフィルターを使って絞り込んであります。フィルターを使わないと実習生の全レコードが表示されることになります。
フィルターの式は

If ( not IsEmpty ( uiz02_セレクタ::uiz02_g_実習ID ) ; a02_実習生::a02_実習id = uiz02_セレクタ::uiz02_g_実習ID ; 0 )

です。

この前のレイアウトの実習ポータルも同様で、フィルターの式は

If (  not IsEmpty ( ui01_実習管理::ui01_g_年度 ) ; ui01_実習管理::ui01_g_年度 = b01_実習::b01_実施年度 ; 0 )

になっています。
ただ、グローバルフィールドをキーにしたポータルであればキャッシュがディスクに書き込まれなくても機能しますが、ポータルフィルターはキャッシュを書き込まなければ即座に反応しません。必要な場面ではスクリプトの中に「ウインドウ内の再表示[キャッシュの結合結果を書き込む]」を入れてあります。

「再表示キャッシュ」ボタンは開発途中でポータルフィルターがうまく機能しない時にキャッシュを書き込んでみるボタンです。

 

画面キャプチャ

グローバル変数はあまり使いたくないのですが、対象学年を現在の年度と実習の実施年度を計算し、グローバル変数に格納しています。

対象学年の学生はこのグローバル変数で検索し、実習生も実習IDで検索して重複している学生のレコードは作らないようにスクリプトを書いています。1回目の実習が前提ですから実習回数は全て「1」にしてあります。

実習生として登録されている学生の人数はb01_実習生と同じポータルの最初の1行を表示してあり、集計フィールドを使っています。

FileMakerのスクリプトは柔軟ですが、メニューバーにある項目を実行するスタイルなのでとても長くなります。自分でメニュー項目にある機能を使ってどのような手順で操作するのかよく整理しておく必要があります。
必要な箇所にコメント入れ、空の行を入れておくと見通しが良くなります。

デバッグすることもできますが、ver.16以前ではFileMaker Pro Advancedが必要です。
ver.17は少し値上がりしたようですが、FileMaker Pro Advancedという製品がなくなり、FileMaker ProでそれまでのAdvancedと同じ機能が使えるようになりました。
初期設定のままでは使えませんが、FileMakerの|環境設定… > 一般|の一番下、「高度なツールを使用する」にチェックを入れてFileMakerを再起動すれば使えるようになります。

追加の実習生レコード

「追加学生」ボタンは前年度に単位を修得できなかった学生の実習生レコードを作るためのボタンです。

 

画面キャプチャ

ポップオーバーを使い、a01_学生レコードのポータルを作ってあります。このポータルの作り方もver.17とver.16以前と異なるところです。

このポータルはver.17では自己ポータルになりますから検索によって、ver.16以前だとフィルターを使って、学年や名前の頭文字で動的なポータルにしてあります。沢山のリストから探すより絞り込んだ方が目視しやすいからです。目視しやすいということはミスの軽減につながります。

このポータルで表示される氏名は苗字と名前のマージフィールドをスペースで繋いだテキストですが、このスペースが半角だときちんと表示されませんでした。全角では表示されます。半角スペースには文字ではなく何か役割があるようです。
なぜだか分かりませんが、うまくいきました。

 

画面キャプチャ

ポータル内の「登録」ボタンをクリックすると、実習生レコードの中で同じ学生ID、同じ実習IDを検索し、対象レコードがなければ、実習生レコードを作るようにしてあります。実習生のポータルはソートがかけられていますのでポータルでは見えなくなることもあります。登録された学生はポータルの上にあるオレンジ色のフィールドに表示するようにしてあります。

実習生の削除は実習生ポータル行の「-」ボタンをクリックします。その時に実習先と結び付けられていれば削除できません。何らかの理由で削除するのですが、実習先に依頼状など送付されていれば事後処理をしなければいけないからですし、実際に実習をしていたのであれば、その記録を残しておかなければならないからです。

人は余計なことはできるだけ削除したいと考えるのですが、データベースは削除に慎重でなければなりません。

再実習も仕組みは同じですが、実習生レコードの中で同じ学生IDと同じ実習IDを持つレコードがなければ登録できません。レコードが複数あれば実習回数が多い方に「1」を足して新しいレコードを作成します。

「追加学生」と「再実習追加」を1個のボタンにしてもいいのですが、どんどん追加され重複が増えると後で混乱するので別々にしてあります。

ポップオーバー

ポップオーバーボタンを隠しているのは、このボタンにスクリプトトリガーを割り当てるとポップオーバーを開きっぱなしにしておきたい時の制御が難しく、無限ループになることがあるからです。もっとスマートな方法があるかもしれませんが、私はワンアクションでポップオーバーを閉じてしまう場合以外はスクリプトを利用して開くようにしています。

ポップオーバーを開いた時、ポータル内に表示される学生はいない方が操作の間違いを減らせると考えています。操作する人が意思を持って学生を検索するか、フィルターをかけなければなりません。スクリプトが必要です。

そのスクリプトにポップオーバーオブジェクトへ移動するよう記述して開いています。同様に学生を登録した後に続けて絞り込みや登録ができるよう、ポップオーバーオブジェクトに移動して閉じないようにしています。

ポップオーバーを閉じるのは手動ですが、自己ポータルで開いたばかりの状態で閉じるとレイアウトの対象レコードが0の状態になり、実習生のポータル行を削除できなくなってしまいます。閉じるときに対象学年を検索し、対象レコードが0にならないようにしています。

 

今回は、自己ポータルかコネクタでのリレーションをフィルターしたポータルを使っています。自己ポータルやポータルフィルターで動的なポータルを簡単に作ることができます。


大きな楠の写真

近くの公民館にある木 クスノキのようですが、怪物が踊っているようです。樹皮のゴツゴツ感がすごい。
iPhone 6S 4.15mm ISO25 1/40 F2.2 P
jpg
2018/6 Kodaira City