ポータル内での新規レコード作成を工夫する

FileMaker 13の新機能である「オブジェクトの表示/非表示の操作」はいろんな応用先がありそうです。
Digital FusionのJames Currieさんが以下の記事で面白い小技を紹介しています。


digital fusion

ポータル内での新規レコード作成を工夫する
( Creating New Records in a Portal With a Twist )

Daniel Wood & James Currie
2014/7/24

新しい時代の幕開け

このブログを開設して4年、ここDigital Fusionのメンバを説得し続け、ついに私以外の人間に記事を執筆してもらうことに成功しました!
これは若手のトップデベロッパーの一人であるJames Currieによる最初の記事です。 FileMakerをこよなく愛するJamesが、とてもすばらしい手法をこの記事で公開しています。
私も引き続き記事を公開してきますが、Jamesが加わることで今後このブログの記事の幅と頻度が増えることでしょう。簡単ではない記事の執筆を引き受けてくれたJamesにぜひねぎらいの言葉をお願いします!

      • Daniel

はじめに

FileMakerで子レコードを作成する場合、いくつかの方法が考えられます。一つめは、リレーションシップグラフで「このリレーションシップを使用して、このテーブルでのレコードの作成を許可」をチェックします。それによってポータルの最後の行に空のフィールドのセットが表示され、ユーザはデータを入力して新規レコードを作成することができます。二つめの方法は、ポータルの外側に新規レコードを作成するボタンを配置し、作成されたレコードにユーザがデータを入力します。

また、FileMaker 13で広く使われている新機能に「オブジェクトの表示/非表示の操作」があります。この記事では、ポータル行での新規レコード作成と、条件によってオブジェクトの表示/非表示を切り替える機能を組み合わせる手法について説明します。これによって、より優れたやり方で新規レコードを作成することができます。

きっかけ

最近我々は地元企業向けにiPadソリューションを構築しました。そこでは販売コンサルタントが、カーテンやブラインドを取り付ける窓のサイズを現地で計測します。コンサルタントが、規定のレールのサイズよりもはるかに大きい窓を測定することは珍しいことではありません。コンサルタントは窓をカバーするために最大8本までレールをつなげることができます。

私たちは、コンサルタントがどのような長さで何本のレールを使用するかを決めることができるスマートなソリューションを考える必要がありました。加えて、ポータルの外には追加ボタンを置くスペースも余っていませんでした。であれば、ポータルの最終行にボタンを配置してレコードを追加できればいいのでは、と考えました。

課題に対する我々のソリューション

「オブジェクトの表示/非表示」と「リレーションを使ってレコード作成を許可」を組み合わせることによって、ポータルの最終行のみに表示される追加ボタンを作ることができます。このボタンをタップして、レコードを作成しレールの長さを登録します。上限の8レコードに達したら、それ以降はボタンが表示されません。

どのように設定するか

まずポータルに使用するリレーションシップを設定します。そのときにポータル側のテーブルオカレンスで、「このリレーションシップを使用して、このテーブルでのレコードの作成を許可」をチェックします。次に、設定したリレーションシップを使用してポータルを定義し、表示したいフィールドをポータル内に配置します。この段階では最終行にはフィールドが表示されて、ユーザはそこに入力することでレコードを作成することができます。

最終行の内容を非表示にする

最終行の内容を隠すための単純な計算式を定義します。最終行の中の隠したいすべてのオブジェクトを選択し、「次の場合にオブジェクトを隠す」の計算式を次のように設定します。

IsEmpty ( Tracks::Track ID )

対象のフィールドは、レコードの作成時に自動入力されるもの(例えば、レコードIDなど)であればどれでも構いません。ポータルの最終行の、非表示の条件を設定したすべてのオブジェクトが、これで非表示になります。

レコード作成用のボタンを追加する

次にレコード作成用のボタンをポータルに追加します。最終行の内容を隠すために設定した計算式に、一箇所だけ修正を加えます。計算式の最初にnotを追加することで、目的の効果が得られます。計算式は次のようになります。

not IsEmpty ( Tracks::Track ID )

レコードを作成する

レコード作成のために、表示されているオブジェクトにスクリプトを設定します。スクリプトは、単にリレーション先のフィールドに値を設定することで、自動的にレコードを作成します。

フィールド設定 [Tracks::Interface ID; Interface::Interface ID]
レコード/検索条件確定 []

注意点

この手法は、子レコードの数が限られている場合に適しています。子レコードの数が大きくなった場合、新規レコードを作るためにポータルの最後までスクロールする手間が発生します。

この手法をさらに発展させる

同じ手法を使って、通常はポータルの最終行に表示されてしまう削除ボタンを隠すことができます(サンプルファイルで確認できます)。あるいはポータルの最後から2行目に、ユーザに正しいデータを入力させるための入力補助ラベルを表示させることもできます。

サンプルファイル

サンプルファイルを添付しました。この記事の内容を完全に理解するためにこのファイルを利用できます。このファイルを参照するためにはFileMaker 13が必要です。

サンプルファイルをダウンロード

Leave a Reply