第113回 「ポータル行の途中への行を挿入」「ポータル行の入れ替え」「ポータル行のソート(並び替え)」

こんにちは。エヌ・ケイ・カスタマイズの仲村です。

8月より入社いたしまして、本ブログでは初登場になります。
Claris FileMakerは、7年ほど携わってきておりますが、まだまだ勉強中の身です。
本ブログを通して、皆さんと一緒に学べたらと思います!

今回は、ポータルに対し「ポータル行の途中への行を挿入」「ポータル行の入れ替え」「ポータル行のソート(並び替え)」をお伝えしていきます。
個人的には少し難しい内容かなと思いますので、繰り返し学習していければと思います。


以下の記事は、Claris FileMaker 関数・スクリプトガイド(バージョン 19 対応)より、
「26.ポータル行を挿入する/入れ替える/ソートする(837ページ)」を元に掲載しています。

この文献から、ポータル内の行の操作について学習することができました。文献の執筆者、関係者の方々に深謝いたします。

なお、このブログ記事の趣旨は、弊社所属スタッフの Claris FileMaker 学習の成果を公開することを目的とし、同時に、参考文献の内容の紹介に資するものであることを Claris International Inc. が確認しています。

Claris FileMaker 公式トレーニング教材

はじめに

前回の「第112回 ポータルを含めて複製する」はじめに で少し触れておりますが、
ポータルとは、リレーションシップが設定されている「関連テーブル」のデータを表示することができる機能になります。

そのため、今回の「行挿入」や「ソート」においても、メインのテーブルに対してデータの追加やソートを行うのではなく、
「関連テーブル」であるポータルに対して処理を行っていくことになります。

考え方

「SortNo」 フィールドによってソートされているポータル行を 「SortNo」 フィールドの値を操作することで「行の追加」や「ソート」を実現します。

準備

(1)「見積」テーブルと「見積明細」テーブルを「見積ID」でリレーションします。

(2)画面には、 ポータルに対する 「行追加」、 「選択業の上に追加」、 「↑行移動」、 「↓行移動」、 「ソート」 ボタンを配置しておきます。
   ※それぞれ次項にて説明いたします。

(3)ポータルは 「SortNo」 フィールドでソートされています。

「行の追加」

実装

(1)「行追加」ボタンは、「SortNo」 フィールドの最大値に 10 加算したポータル行を作ります。
「見積明細」 テーブルのレイアウトに移動して処理を行っています。
ポータル行の一番下の行に新たに作成されるので、 一番下の行へ移動します。 (スクリプトステップ:13行目)

(2)赤枠のデータが新たに、追加されたポータル行になります。
「SortNo」が、6→16→26と追加するごとに、最後の「SortNo」から10ずつ増えているのが分かると思います。

「ポータル行の途中への行を挿入」

実装

(1)「選択行の上に追加」ボタンは、ポータル行を選択している状態で実行されることを想定しています。 ポータ
ルを選択していない場合はダイアログを出して終了します。 (スクリプトステップ:3 ~ 9行目)

ポータル行を選択している場合は、 選択行の上に新たにポータル行が追加されます。
スクリプトステップの15行目で挿入位置の変数 [$SortNo] を作成しています。

(2)スクリプトステップ15行目の変数設定をもう少し詳しくみていきます。


この計算式では前の行と今の行の間の値を計算しています。
レコードの先頭行とそれ以外で Case 関数で分岐しています。
先頭行の場合は前の行が ”?” となります。

「SortNo」 フィールド の 10と20の間に入れる場合は15となります。
ポータルの先頭に入れる場合は 0+10=5 となります。
GetNthRecord 関数は存在しない行を指定した場合は”?”を返します。

このように 「見積明細」 テーブルのレイアウトへ移動した場合はポータルの状態を再現するために
「SortNo」フィールドでソートします。 (スクリプトステップ:13行目)

その後に選択していたポータル行の位置へ移動し (スクリプトステップ:14行目)、 挿入するレコードの SortNo を計算します。
そこまで出来ると、 「行追加」 ボタンと同じ様な処理となります。 (スクリプトステップ:17 ~ 22行目)

「ポータル行の入れ替え」

実装

(1)「↑行移動」 ボタン、 「↓行移動」 ボタンは、それぞれ引数に 「↑」 「↓」 が設定されています。 (スクリプトステップ:3行目)
これらボタンもポータル行を選択している状態で実行されることを想定しています。 (スクリプトステップ:4 ~ 9行目)

(2)このスクリプトのポイントである、16行目~20行目を詳しくみていきましょう。

17行目の「↑」移動の計算式

19行目の「↓」移動の計算式

GetNthRecord 関数によって前後のレコードの「SortNo」 フィールドの値を取得し計算します。
ポータルの2行目から上へ移動する場合は存在しないレコードを参照するので ”?” を返します。
その場合は前の前の行は 0 として計算します。
ポータルの下から2行目の場合は一番下の行に10加算します。

加算する値は1でも良いのですが、 「行追加」 ボタンで 10 毎に追加していますので、 それに合わせています。

移動する際、選択している行によっては、”間に”入れることも考慮する必要があることを意識していきましょう。

「ポータル行のソート(並び替え)」

実装

(1)「ソート」 ボタンはポータルのいずれかのフィールドにカーソルが入っていることを前提としています。 (スクリプトステップ:1 ~6行目)
また、 スクリプト内で作業を行う 「見積明細」 テーブルのレイアウトには、 ソートするフィールドを配置して、 フィールド名と同じオブジェクトを付ける必要があります。
ソートするにあたって昇順か降順かを指定するためにカスタムダイアログで選択させます。 (スクリプトステップ:8 ~ 15行目)

その後、 ポータルで選択したフィールド名を Get ( アクティブフィールド名 ) 関数で取得していたので、
同名のオブジェクトへ移動し、 [レコードをフィールド順でソート] スクリプトステップでソートします。

この時にカスタムダイアログの昇順降順の選択肢で分岐させます。 (スクリプトステップ:24 ~ 28行目)

(2)上記で選択したフィールドでソートが実行されるので、「SortNo」フィールドをシリアル値で全置換します。(29行目)

ポータルは、「SortNo」でソートされているので、シリアル番号の順番で並び替えされているということになります。

まとめ

いかがでしたでしょうか。少し説明が長くなりましたね。

「SortNo」のフィールドをうまく活用することで、ポータルに表示された「関連レコード」を操作しています。
冒頭で少し難しいと言いましたが、複雑に考えすぎず、結局のところは、「SortNo」の値を変更して表示順を変えているのだと考えてください。

個人的には、各処理で「SortNo」の値を変更後に、「フィールド内容の全置換」でシリアル番号を採番し、
きれいな数字にしておいたほうが、不具合の発生や問題点の精査などやりやすくなり、リスクヘッジにもなるのかなと思います。
(スクリプト「ポータル行のソート(並び替え)」以外)

それでは、来週もお楽しみに!


参考文献: Claris FileMaker 公式トレーニング教材 から、「Claris FileMaker 関数・スクリプトガイド」等を参考にしています
https://content.claris.com/fmb19_reg-ja