ぺーぺーぷーぷーな日々

Claris FileMaker と戯れる日々です。

Loopスクリプトを使ってレコードに書き出す。

※追記(2021.4.24)
こちらの記事中では GetFieldValues関数を拝借しておりました。
そこを While関数で書き換えました記事を書きましたのでご笑覧ください。
kei0114.hatenablog.com

    • -


以前にも書いたことなんですが、例えば「入退院履歴」(入院日:◯月◯日〜退院日:◯月◯日)のようなものがあれば、「今日現在入院している人を検索して抽出する」ことができます。私はその抽出結果を、あらためて「病床稼働履歴」として別のテーブルに書き出しています。毎日、スクリプトで書き出しています。

この 3.病床稼働履歴 というのは、1つのレコードが「○月○日、○病棟の○病室に○○さんが在院していた」という履歴で、1と2を元に、毎日、スクリプトでレコードを生成しています。その日毎の入院患者名簿を作っているというわけです。病床が稼働している数だけレコードを生成してしまおうというわけです。このレコード数をカウント関数で数えることで、病床稼動数を算出しています。

病床管理で私が基本にしている3つのテーブル - ぺーぺーぷーぷーな日々


で、私の場合は「病床移動履歴」(入退院履歴)と名づけたテーブルから当該日を抽出するのですが、この履歴から抽出した結果は例えばこんな感じになります。



患者番号 入院日 病棟 病室 病床 退院日 - -
001 1月1日 一般病棟 201 A 1月10日
008 1月1日 一般病棟 201 B -
013 1月2日 療養病棟 301 B -
106 1月3日 回復期リハ病棟 501 - -
051 1月4日 一般病棟 210 C 1月20日
- - - - - -
- - - - - -


この情報から、患者番号、病棟、病室、病床を当該日の「病床稼働履歴」として書き出したい。
その日入院していた人の数を稼働数として、100件なら100件分を書き出したい。
書き出したいフィールド数が多いと大変なんだけど、これくらいなら変数で書きだしたほうが早かろう。


そこでまず、これらのフィールドの情報を

  • $患者リスト
  • $病棟リスト
  • $病室リスト
  • $病床リスト

という変数に格納します。変数名は任意で。
それぞれの変数には、100件なら100件分を改行区切りで格納したい。


ここで便利なカスタム関数、GetFieldValues 関数を利用します。
私はこの関数を、 FMPro.info で見つけました。ありがとうございます。

FileMaker Proの標準関数であるList()や既に公開しているカスタム関数SimpleList()は、関連レコードの指定したフィールド値を改行区切りで取得してくれる関数ですが、このGetFieldValues()関数は、関連レコードではなく現在のレコードセットの指定フィールド値を取得するための関数です。

http://www.fmpro.jp/fmi/xsl/plugin/cf.xsl?ID=0063


この関数をつかって、それぞれの変数( $患者リスト、$病棟リスト、$病室リスト、$病床リスト )に改行区切りでデータを格納します。
こうやってデータを格納した状態で、書き出したいテーブルに移動して新規レコードとして書き出していきます。
あとは Loop スクリプト 、そして GetValue 関数を使って、1行目、2行目、3行目と取り出していきます。


画像を参考までに。
(実際に使っているものなので、フィールド名が紛らわしいかもしれませんが、ご了承ください。)



補足すると、改行区切りから取り出すための1行目、2行目、3行目と指定するのにも変数を使っています。
(ここでは $count という名前の変数にしています。)


この変数に1ずつ足していって、Loop させる。
そして、 ValueCount 関数で行数を数えて、それを超えたら Loop 終了。
あ、あと、日付は $date として変数を設定してあります。


むかし、私は、「えー、100件も繰り返すなんて拷問だよー」と思っていたのですが、瞬時に終わります。
コンピュータにとっては、これくらい楽勝なんですねえ。


以前は「フィールド内容のインポート」とかを使ってたのですが、今回の方法の方が速いかも知んない。
サーバーサイドでも使えますし。