スクリプトの例

このヘルプで説明されているサンプルスクリプトを参考にして独自のスクリプトを作成することができます。その他のスクリプト例と詳細なヘルプについては、Claris Community を参照してください。

FileMaker Pro でスクリプトを確認するには:

  1. [スクリプト] メニュー > [スクリプトワークスペース...] を選択します。または [ファイル] メニュー > [管理] > [スクリプト...] を選択します。

  2. スクリプトパネルで、表示するスクリプトをダブルクリックします。

    スクリプトがスクリプト編集パネルの新しいタブで開きます。

If 構造の例

[If]、[Else If]、および [End If] スクリプトステップは、スクリプトステップをどのような条件で実行するかを定義することができます。構造内のそれぞれのステップは、評価可能な条件や論理式の計算結果に基づいて実行されます。

  • 計算結果が 0 以外の数字である場合は、条件は真 (True) であると評価され、後に続くスクリプトステップが実行されます。
  • 計算結果が 0 になった場合、空の場合、または数字に解決されない内容の場合は、条件は偽 (False) と評価され、後に続くスクリプトステップは実行されません。

[Else If] スクリプトステップは、さらに論理式を評価します。[Else] スクリプトステップは、すべての条件評価が偽の場合に代わりに実行されるスクリプトステップです。

例 1

検索を実行します。レコードが見つからない場合は、カスタムダイアログを表示します。レコードが見つかった場合は、対象レコードをソートします。

コピー
検索実行 [記憶する]
If [Get (対象レコード数) = 0]
    カスタムダイアログを表示 ["レコードの検索"; "レコードが見つかりません。"]
Else
    レコードのソート [記憶する; ダイアログあり: オフ]
End If

例 2

検索を実行します。レコードが見つからない場合は、カスタムダイアログを表示します。1 つのレコードが見つかった場合、「請求書詳細」レイアウトに切り替えます。複数のレコードが見つかった場合、「請求書」レイアウトに切り替えます。

コピー
検索実行 [記憶する]
If [Get (対象レコード数) = 0]
    カスタムダイアログを表示 ["レコードの検索"; "レコードが見つかりません。"]
Else If [Get (対象レコード数) = 1]
    レイアウト切り替え [「請求書詳細」]
Else
    レイアウト切り替え [「請求書」]
End If

Loop 構造の例

[Loop]、[Exit Loop If]、および [End Loop] スクリプトステップは、スクリプトステップを繰り返すことができるようにする構造を定義します。[Loop] と [End Loop] の間に挟まれたスクリプトステップは、[Exit Loop If] の条件が満たされるまで、または [レコード/検索条件/ページへ移動] スクリプトステップや [ポータルへ移動] スクリプトステップの [最後まできたら終了] の条件が満たされるまで繰り返されます。

[Exit Loop If] スクリプトステップを使用して、評価する計算式を指定します。計算結果が 0 でない場合は、この式は真 (True) であると評価され、ループが終了します。計算結果が 0 になった場合は、この式は偽 (False) であると評価され、ループは繰り返し実行されます。

例 1

すべてのレコードで [顧客::勤務先電話番号] の内容を [顧客::日中の連絡先] にコピーします。

コピー
レコード/検索条件/ページへ移動 [最初の]
Loop [フラッシュ: 常に]
    フィールド設定 [顧客::日中の連絡先; 顧客::勤務先電話番号]
    レコード/検索条件/ページへ移動 [次の; 最後まできたら終了: オン]
End Loop

例 2

レコードをループして、オブジェクトフィールド内のファイルをエクスポートします。レコードに空のオブジェクトフィールドがある場合、ループを終了します。

コピー
変数を設定 [$パス; 値: Get (ドキュメントパス) & 製品::オブジェクト]
レコード/検索条件/ページへ移動 [最初の]
Loop [フラッシュ: 常に]
    Exit Loop If [IsEmpty (製品::オブジェクト)]
    フィールド内容のエクスポート [製品::オブジェクト; 「$パス」 ; 
    フォルダを作成: オフ]
    レコード/検索条件/ページへ移動 [次の; 最後まできたら終了: オン]
End Loop

起動スクリプトの例

起動スクリプトを使用すると、ユーザのデータベースビューをカスタマイズすることや、データベースを開いた時にその他の処理を実行することができます。起動スクリプトは OnFirstWindowOpen スクリプトトリガによって実行されます。起動スクリプトの設定の詳細については、ファイルオプションの設定を参照してください。

例 1

アカウントに [完全アクセス] アクセス権セットが割り当てられている場合、[管理] レイアウトに切り替えます。それ以外の場合は、[データ入力] レイアウトに切り替えます。

コピー
If [Get (アカウントアクセス権セット名) = "[完全アクセス]"]
    レイアウト切り替え [「管理」]
Else
    レイアウト切り替え [「データ入力」]
End If

例 2

データベースを開いた FileMaker Pro または FileMaker Go のバージョンを確認して、適切な [顧客] レイアウトに切り替えます。

コピー
If [Get (デバイス) = 3]
    レイアウト切り替え [「iPad の顧客」]
Else If [Get (デバイス) = 4]
    レイアウト切り替え [「iPhone の顧客」]
Else
    レイアウト切り替え [「顧客」]
End If

[スクリプト実行] とスクリプト引数の例

[スクリプト実行] は、現在のファイルまたは別の FileMaker Pro ファイルで定義されているスクリプトを実行します。

オプションのスクリプト引数を使用して、スクリプトにテキストを渡すことができます。たとえば、スクリプト引数を使用して、スクリプトの開始時にアクティブなレコードの番号を保存することができます。これにより、スクリプトの最後でそのレコードに簡単に戻ることができるようになります。また、同じレイアウト上の複数のボタンから同じスクリプトを呼び出す場合は、ボタンごとに異なるスクリプト引数を使用することで、スクリプトを呼び出したボタンを簡単に判断することができます。

指定した引数は、スクリプト内でアクセスすることや、Get (スクリプト引数) 関数を使用して他のスクリプトに渡すことができます。

名前や他の値の一覧など、複雑な引数を使用することもできます。改行マークで区切られた複雑な引数は、LeftValues 関数MiddleValues 関数、および RightValues 関数を使用して解析することができます。これらの関数は、改行マークで区切られた一覧の先頭、中間、および終端の値をそれぞれ返します。他の文字で区切られた複雑な引数は、Left 関数Middle 関数、および Right 関数などの関数を使用して、テキストとして解析することができます。

例 1

引数なしで「請求書レポートの印刷」スクリプトを実行します。

コピー
レイアウト切り替え [「請求書レポート」]
スクリプト実行 [指定: 一覧から ; 「請求書レポートの印刷」 ; 
引数: ]

例 2

引数として「顧客名」フィールドを使用します。請求書レポートレイアウトを含む新しいウインドウに現在の顧客の請求書が表示されます。

メインのスクリプト: 現在の顧客の請求書

コピー
一致するレコードを検索 [置換; 請求書::顧客 ID]
# 以下に定義する「顧客請求書の表示」サブスクリプトを呼び出します。
スクリプト実行 [指定: 一覧から:「顧客請求書の表示」; 引数: 請求書::顧客名]

サブスクリプト: 顧客請求書の表示

コピー
新規ウインドウ [名前: "顧客: " & Get (スクリプト引数) ; スタイル: ドキュメント]
レイアウト切り替え [「請求書レポート」]
レコードのソート [記憶する; ダイアログあり: オフ]

メモ

  • スクリプト引数は、スクリプトの実行中のみ有効です。スクリプト引数は、スクリプトが実行されるたびにリセットされます。ファイルが開いている間、スクリプト引数を維持する場合は、グローバル変数をスクリプト引数として使用できます。
  • スクリプト引数は、Get (スクリプト引数) 関数を使用して別のスクリプトに明示的に渡さない限り、親スクリプト内でのみ有効です。
  • スクリプト引数は、スクリプト内で使用することができますが変更はできません。Get (スクリプト引数) 関数を使用すると、サブスクリプトの引数としてサブスクリプトに渡すことができます。また、[スクリプト実行] を使用して、サブスクリプトが呼び出されるたびに異なる引数を指定することもできます。サブスクリプトに渡される引数を変更しても、親スクリプトの Get (スクリプト引数) から返される引数の値は変更されません。