第52回 スクリプトによるポータルのレコード操作

エヌ・ケイ・カスタマイズの泉です。

私のいる福岡は、未だ緊急事態宣言のまっただなかですが、県民の皆さんのがんばりで、
陽性患者数は昨日(6/1)に2桁台にまでさがりました!!
しかし、こんな時は、漫画「テニスの王子様」の青学の手塚キャプテンの言葉を思い出しましょう!!
『油断せずに行こう』

以下の記事は、Claris FileMaker Master Book 初級編(バージョン 19 対応)より、
「12.4.3 ポータルのレコード作成(269ページ)」を元に掲載しています。

この文献から、スクリプトを使ってポータル内のレコードを操作する際の手順や注意点について学びました。文献の執筆者、関係者の方々に深謝いたします。

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

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

今回も、前回に引き続きスクリプトの解説です。
今回は、ポータルをスクリプトで操作します。

ポータルのレコード作成

「タスク詳細」レイアウトの2 つのポータルにも新規レコード作成機能が必要です。

・ 新規担当者登録  → タスクの担当者を入力する
・ 新規添付ファイル登録 → タスクの添付ファイルを入力する

このポータルのTO のリレーションシップでは、
[このリレーションシップを使用してこのテーブルでのレコードの作成を許可]
がオンです。ですから、ポータルをクリックして入力すれば関連レコードの作成が可能です。
レイアウトにボタンもあった方がわかりやすそうです。

1. スクリプトの設計

ここで、スクリプトステップを全て暗記していない私は

『「ポータルの新規レコード作成」ってスクリプトステップがあるだろう』

と考えるわけです。
そして、いざ、スクリプトステップを探してみると、、、
それらしいスクリプトステップが見当たりません!!

ここで、スクリプトステップを検索した結果をみてみると

ポータルのレコードは行

私の中で言葉の定義として「行=レコード」としていましたが、
あらためて辞書引いてみると「レコード=1件分のデータ」という意味のようです。
通常、レイアウトでフィールドの値を配置する時は、「1件分のデータ」を好きにレイアウトします。
それに対して、ポータルはリスト形式、つまり「1行単位」でのレイアウトが必要です。
だから、ポータルでは「レコード」ではなく「行」なのだと、個人的に解釈しました。

話を戻して、それでは、どうしたらポータルに行ができたかを思い出しましょう。

(1) 新しい行を作成したいポータルに移動
(2) ポータルの最後の行まで移動
(3) 最後の行の次の行のフィールドをクリックする

上記操作を、スクリプトに落とし込んでいきます。

タスクに添付ファイルを入力する場合:
材料 どのレイアウトから実行するか、つまり、どのTO なのか
  → ボタンが配置されているポータルが配置されているレイアウト
  → ポータルに指定されている「タスク添付ファイル」TO のレコードが対象
順序 どのような順番で作業するか(命令と結果)
  → ポータルに移動し、フィールドをクリック
成功の条件(完了) どうなったら成功したか(どのような結果が出たら良いのか)
  → 新しいタスクの添付ファイル行が入力できるようになりレイアウトはそのまま

2. スクリプトの作成

(1) [スクリプトワークスペース]を表示します。

(2) 「新規ポータル行作成:添付ファイル」スクリプトを作成します。
 a. 以下のスクリプトを作成して保存します。
  ・スクリプト名は「新規ポータル行作成:添付ファイル」
  ・スクリプト行は2行

ポータル内の行へ移動[選択:オン;最後の]
フィールドへ移動[タスク添付ファイル::説明]

(3) 「タスク詳細」レイアウトの添付ファイルタブのポータルに「添付ファイルを追加」ボタンを作成して
 「新規ポータルレコード作成:添付ファイル」スクリプトを割り当てます。
 

(4) レイアウトを保存します。スクリプトとボタンができました。

(5) 正しく動作するかテストします。
 添付ファイルのポータルの最後の行の「説明」フィールドがアクティブに、、、なりませんでした。
 

特殊なケース:1つのレイアウトにポータルが2つ以上配置されている場合

[ポータル内の行へ移動]スクリプトステップは、1 つのレイアウトに2 つ以上のポータルが配置されていて、
移動先のポータルが確実でない場合、常に優先する方のポータルに移動します。

「タスク詳細」レイアウトでは、タブパネルが前の配置(左側)の「担当者」タブの「担当者割り当て」TO のポータルが優先します。
その後、「説明」フィールドに移動するので、添付ファイルのポータルの1 行目に移動したようにみえるのです。

対処方法は2 つあります。
・ ポータル上に配置されているレイアウト上に1つしかないフィールドへ移動してから、ポータルの最後の行に移動する
・ ポータルに名前をつけ、名前でポータルに移動してポータルの最後の行に移動する

前者は、レイアウト上に1 つしかないフィールドへ移動することで間接的に
ポータルへの移動をおこなっています(先にポータルに表示されている関連レコードに
移動してしまえば、あとはそのポータルの最後の行に移動できるということです)。

後者は、より確実です。移動先を明示的に指定するからです。

レイアウトでは、ポータルは常に1 つとは限りません。あとから追加されたり、タブパネルの順番を変更するかもしれません。
ですから、毎回、必ず確実にポータルに移動する内容でスクリプトを作成するようにします。

添付ファイルのポータルに確実に移動できるようにスクリプトを変更します。

(1) 「新規ポータル行作成:添付ファイル」スクリプトを以下の内容に変更します。

フィールドへ移動[タスク添付ファイル::説明]
ポータル内の行へ移動[選択:オン;最後の]
フィールドへ移動[タスク添付ファイル::説明]

(2) 正しく動作しているか確認します。
 今度こそ、添付ファイルのポータルの最後の行の「説明」フィールドがアクティブになりました!!
 

ポータルのレコード削除(正確には「行削除」)

ポータル行の削除は、どうでしょうか。

・ 担当者削除  → タスクの担当者を削除する
・ 添付ファイル削除  → タスクの添付ファイルを削除する

1. スクリプトの設計

ポータルの行を削除するにあたって、前作業で「ポータル内の行を削除」というスクリプトステップがあることを確認しました。

ポータルに表示されている行を削除するスクリプトステップで、削除したいポータル行での実行が必要です。

材料 どのレイアウトから実行するか、つまり、どのTO なのか
  → ボタンが配置されているポータルが配置されているレイアウト
  → ポータルに指定されているTO のレコードが対象

順序 どのような順番で作業するか(命令と結果)
  → アクティブなポータルの行(レコード)を削除

成功の条件(完了) どうなったら成功したか(どのような結果が出たら良いのか)
  → アクティブなポータルの行(レコード)が削除されてレイアウトはそのまま

ポータル行削除のスクリプトとボタンを作成して、ボタンをポータル行の中に配置します。

「タスク詳細」レイアウト上の「担当者割り当て」TO のポータルと、「タスク添付ファイル」TOポータルの
2 つのポータルで1 つのスクリプトをつかうことができます。ポータル行の中に「削除」ボタンを配置することで、
どのTO のレコードを削除するかを指定することになるからです。

2. スクリプトの作成

(1) 「ポータル行削除」スクリプトを作成します。

ポータル内の行を削除[ダイアログあり:オン]

(2) 「タスク詳細」レイアウトのポータル内にボタンを作成して「ポータルレコード削除」スクリプトを割り当てます。
 作成したボタンはポータル行の中に配置します。
 ・ 「担当者割り当て」TO のポータルと、「タスク添付ファイル」TO ポータルの両方に配置
 ・ 行の高さや、フィールドの幅のために上手く配置できない場合は調整
 

(3) レイアウトを保存します。スクリプトとボタンができました。

(4) 正しく動作するか確認します。
 対象のポータル行が削除できました!!

まとめ

今回はポータルを操作するスクリプトを解説しました。

自分でも改めて

・ポータルを操作するスクリプトステップの理解
・1レイアウトで複数のポータルがある場合の注意点
・言葉の理解

と、リマインドするべきことがたくさんありました。

これまで、複数回に渡って「スクリプト」について解説してきましたが、一旦「スクリプト」の解説はここまでにして、
次回からは、スクリプト以外の機能を作っていく方法や工程を解説します。


参考文献:Claris FileMaker 公式トレーニング教材 から、「FileMaker Master Book 初級編」 等を参考にしています
https://content.claris.com/fmb19_reg-ja