見出し画像

【ソーシャルワークのFileMakerカスタムアプリ入門13】複数画面システムの作成① ~テーブルを分ける~


はじめに

東京では、もう春のような暖かさが訪れています。皆さま、いかがお過ごしですか?

前2回は、SOAPとソーシャルワークについての記事だったので、記録システムは少し間が空いてしまいました。記録システムの前回の記事では、「繰り返すデータ関係(つまり、1対多の関係)が出現したら、テーブルは分ける」ことを説明して、経過記録テーブルを実際に分ける操作を学びました。

今回は、他の繰り返すデータ関係となるもの、「連絡先」「連絡先TEL」「関係機関」「関係機関TEL」を別テーブルします。

「連絡先」「連絡先TEL」は、どのようにテーブルを分ける?

「連絡先」と「連絡先TEL」の関係は1対多なので、そのような対応関係を作ります。「連絡先」は「パーソナルコミュニティ」という名称に変更します。「パーソナルコミュニティ」は、インフォーマルかつクライエントと個人的・援助的な繋がりを持っている対象(※1)で、従来の「家族関係」以外の関係を含むことができるように拡大させた概念です。

「フェースシート」→「パーソナルコミュニティ」→「パーソナルコミュニティ_連絡先」の関係図は以下のようになります。

「パーソナルコミュニティ」と「パーソナルコミュニティ_連絡先」テーブルの作成

「パーソナルコミュニティ」と「パーソナルコミュニティ_連絡先」テーブルを、それぞれ作りましょう。

ファイル>管理>データベースに進みます。

データベース管理画面から、「パーソナルコミュニティ」「パーソナルコミュニティ_連絡先」テーブルを作成します。[テーブル名]氏名に[作成]ボタンをクリックします。

「パーソナルコミュニティ」テーブルを作成


「パーソナルコミュニティ_連絡先」テーブルを作成

「パーソナルコミュニティ」と「パーソナルコミュニティ_連絡先」のフィールドの作成

[フィールド]タブに移動して、House keeping field(以下、「HKF」)をすべて削除しましょう。

「パーソナルコミュニティ」のHKFを削除
「パーソナルコミュニティ_連絡先」のHKFを削除

それぞれのフィールドを以下のように定義してください。

「パーソナルコミュティ」のフィールド
「パーソナルコミュニティ_連絡先」のフィールド

「パーソナルコミュニティ」と「パーソナルコミュニティ_連絡先」フィールドオプションの設定

フィールドのオプションを設定していきます。

 └ 主キー:Get ( UUID )

まず、それぞれのプライマリ・キー(主キー)ですが、覚えてますか?前回の記事の「FileMaker上で複数のテーブルを作成」で紹介しました。

理論的に重複しない文字列を返す関数を設定しましたね。そう、「Get ( UUID )」関数を使います。設定の仕方は、前回の記事を参照してくださいね。

 └ 氏名:[姓]& 全角スペース &[名]

「パーソナルコミュニティ」の[氏名]フィールドのオプションを設定します。このフィールドは、[姓]と[名]に分かれているのを[氏名]の形で表示させるためのものです。[姓]か[名]が入力されれば、それに連動して[氏名]の形でデータが作成されます。

①フィールド[氏名]をクリックして選択したら、②オプションをクリック。③「入力値の自動化」タブ、「計算値」の[指定]をクリックします。

計算式入力ウインドウに、以下のテキストを入力します。

以下をそのままコピペしてくださいして、コピペしたら[OK]ボタンをクリックしてウインドウを閉じます。

/*------------------------------------------------------------

【機能説明】
[姓]と[名]をつなげて「氏名」を表示させます。

【Let 関数】
 「[」と「]」の間に変数(ここでは「~trigger , ~result」がそれ)を使った計算式を入れて、上から順番に計算させ、
 「] ; 」のあとに最終的な結果を返す変数か結果を出す計算式を入れる

この計算式を日本語文に直すと、以下のようになります。
 [姓]フィールドと[名]フィールドに何か値が入ったら、それが変数「~trigger」に入ります。つまり、この関数が起動します。
 結果を表示させるために用意した変数「~result」に、[姓]& 全角スペース &[名]の値を格納します。

------------------------------------------------------------*/


Let (
[
~trigger = 姓 & 名 ;
~result = 姓 & " " & 名
] ;
~result
)

計算式の説明は、書いてある通りです。

「フィールド「氏名」のオプション」ウインドウを閉じる前に、「フィールドに既存の値が存在する場合は置き換えない」のチェックを外す必要があります。チェックが入ったままだと、一度でも[姓]か[名]に値が入ると、連動して[氏名]にも値が入ります。そのあとで[姓]や[名]を修正しても「既存の値が存在する」ので、[氏名]フィールドが修正されないという事態になってしまいます。なので、このチェックは外します。

 └ 連絡先No:RomanHankaku ( 連絡先No )

「パーソナルコミュニティ_連絡先」の[連絡先No]のオプションを設定します。 この「RomanHankaku」という関数は、入力された値を「半角の英数字に変換する」というものです。仮に全角の英数字が入力されても、確定時点で半角に自動的に変換されます。ここには、電話番号やメールアドレスが入るので、文字を揃えるために設定します。

①「テーブル」から「パーソナルコミュニティ_連絡先」を選択し、②[連絡先No]フィールドを選択、③オプションをクリック、④「フィールド「連絡先No」のオプション」ウインドウの「入力値の自動化」タブ、「計算値」の[指定]をクリックします。

計算式入力エリアに、「RomanHankaku ( 連絡先No )」と入力します。コピペしてもいいですが、直接入力の方法も説明します。

「Roman」と関数名を途中まで打ち込むと、候補が表示されますので、そこからダブルクリックで選択することができます。

プルダウンの候補から「RomsnHankaku」をダブルクリックで選択
どのフィールドの値を半角英数字にするのか、が「テキスト」のところです。ここに、[連絡先No]を入れたいので、「テキスト」が選択されている状態で[連絡先No]をダブルクリックします。
「テキスト」となっていたところに[連絡先No]が入りました。これで、[連絡先No]の値を半角の英数字に変えるよ、となります。

入力出来たら[OK]ボタンをクリックしてウインドウを閉じます。

そして、こちらも「フィールドに既存の値が存在する場合は置き換えない」のチェックを外します。

チェックを外します

[OK]でオプションのウインドウを閉じると、「オプション/コメント」に下のようなコメントが追加されます。

「パーソナルコミュニティ」テーブルのフィールドの方も、以下のようになっていると思います。

「関係機関」「関係機関TEL」は、どのようにテーブルを分ける?

これらは、どのように分けたらよいでしょうか?

これも、パーソナルコミュニティと同じように、1つの「関係機関」には複数の連絡先番号(電話、ファクス、メールアドレス、ホームページURL)があるので、1対多の関係が成り立っています。

しかし、ここはもうちょっと考える必要があります。実務で私たちはどのように動くでしょう。関係機関の番号に電話を掛けます。そして担当が決まれば、担当者宛てに、代表番号や直通番号があれば直通で連絡を取ります。という事で、「担当者」テーブルも必要です。

そこで、「関係機関」「担当者」「関係機関・担当者_連絡先」の3つのテーブルに分けることにします。

フェースシートを含めてちょっと込み入ってきましたが、各テーブルの1対多の関係は、以下の通りです。

先に、「パーソナルコミュニティ_連絡先」テーブルを作成しました。連絡先を一つのテーブルにまとめるアイデアもありますが、個人情報とそうでないものは分けた方が良いと判断して別のテーブルにしています。

1対多   
フェースシート:関係機関      
フェースシート:担当者       
  関係機関:担当者      
     関係機関:関係機関・担当者_連絡先
      担当者:関係機関・担当者_連絡先

「関係機関」「担当者」「関係機関・担当者_連絡先」テーブルの作成

では、それぞれのテーブルを作っていきましょう。テーブルの作り方は、先の「パーソナルコミュニティ」と同じです。HKFの削除まで行ってください。リンクはこちら↓。

「関係機関」「担当者」「関係機関・担当者_連絡先」のフィールドの作成

それぞれのフィールドを以下のように作成してください。

「関係機関」テーブルのフィールド
「担当者」テーブルのフィールド
「関係機関_担当者_連絡先」テーブルのフィールド


「関係機関」「担当者」「関係機関・担当者_連絡先」フィールドオプションの設定

 └ 主キー:Get ( UUID )

「Pk_関係機関」「Pk_担当者」「Pk_関係機関・担当者_連絡先」は「Get ( UUID )」でしたね。そして、「フィールドに既存の値が存在する場合は置き換えない」のチェックを残す、です。

 └ 「機関名_読み」「担当者名_読み」:ふりがな

フィールドの「ふりがな」の設定は、一度やりました。覚えておられますか?入門の5、「患者氏名読み」フィールド設定のところでした。やり方は、以下のリンクをご参照ください。


 └ 「郵便番号」:半角英数字に限定する

「郵便番号」に全角文字や数字以外の文字が入らないように、入力できる文字を限定できる「Filter関数」を設定します。

①「郵便番号」フィールドを選択して、②オプションをクリック、③「計算値」の[指定]ボタンをクリックします。

計算式入力エリアに、以下のテキストをコピペして下さい。

/*------------------------------------------------------------

【機能説明】
[郵便番号]フィールドに7つの半角英数字のみ入力されるようにする。
文字数が多いか少ない場合は、空欄に戻す

【Filter関数】
 Filter ( a ; b )の形をとる。「a」にフィルターを掛ける文字列やフィールド、「b」にどんな文字列に限定するかを入れる

【If関数】
 If ( A ; b ; c )の形をとり、Aが真(正しい→1を返す)ならばb、偽(正しくない→0を返す)ならc

この計算式を日本語文に直すと、以下のようになります。
 [郵便番号]フィールドに入力できる文字を"1234567890"に限定(フィルター)した上で、
 文字数が7つであればそのまま、7つ以外であれば空欄を返す。

------------------------------------------------------------*/

Let (
[
~step1 = Filter ( 郵便番号 ; "0123456789" ) ;
~result = If ( Length ( ~step1 ) = 7 ; ~step1 ; "" )
] ;
~result
)


 └ 「郵便番号_表示」:ハイフンを入れた表示にする

こちらは、「郵便番号」フィールドの値を用いて、間にハイフンを入れた文字列を返すようにオプションを設定します。

「郵便番号」のオプションで既に7桁の半角数字に整形済みなので、「郵便番号」の値が空欄なら空、値があれは、ハイフンを入れて表示させます。

こちらも、オプションの計算式入力エリアを開き、以下のテキストをコピペして下さい。

/*------------------------------------------------------------

【機能説明】
[郵便番号]フィールドの文字列から、ハイフンを含んだ郵便番号文字列を生成する

【If関数】
 If ( A ; b ; c )の形をとり、Aが真(正しい→1を返す)ならばb、偽(正しくない→0を返す)ならc

【IsEmpty関数】
 IsEmpty ( a )の形をとり、「a」の値が空なら「1」を、空でないなら「0」を返す

【Left関数】
 Left ( a ; b )の形をとる。「a」の文字列の左から「b」個分の文字列を返す

【Right関数】
 Right ( a ; b )の形をとる。「a」の文字列の右から「b」個分の文字列を返す

この計算式を日本語文に直すと、以下のようになります。
 もし[郵便番号]フィールドが空なら空欄を、値があれば、左から3文字分&ハイフン&右から4文字分のテキストを返す。

------------------------------------------------------------*/

If ( IsEmpty ( 郵便番号 ) ; "" ;  Left ( 郵便番号 ; 3 ) & "-" & Right ( 郵便番号 ; 4 ) )

 └ 「/*〜*/」:コメントアウト

説明していませんでしたが、計算式入力エリア内にある、この2つ(「/*」「*/」)の記号は、「コメントアウト」といって、この記号に挟まれている部分は計算式として認識されないので、説明書きなどを残すをときに良く使います。

ちょっと複雑な式を作ったときなど、後になっても分かるようにこうして説明書きを残しておくと何かと役に立ちます。

今回は、ここまでです。お疲れさまでした!

次回から、必要なレイアウトを作成しながら、テーブル間をリレーションで結んでいきます。

みんなで、ソーシャルワークをより良いものに。

それでは、また次回の記事でお会いしましょう!!


1)野沢慎司:都市家族の夫婦関係とパーソナル・コミュニティー妻の援助ネットワークと夫婦の紳ー,総合都市研究第56号1995

いいなと思ったら応援しよう!