3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

FileMakerAdvent Calendar 2020

Day 4

FileMakerProで湯婆婆を実装してみる

Last updated at Posted at 2020-12-04

はじめに

前書き

注意書き

この記事は映画「千と千尋の神隠し」のネタバレになる可能性があります。「大丈夫!」って人だけ下に進んでください。

対象読者

FileMaker Pro の tips として学べること

  • スクリプト作成の基本
  • カスタムダイアログによる入力受け付け
  • If 分岐と早期終了
  • ローカル変数/グローバル変数/マージ変数の使い方
  • Random 関数 と Middle 関数
  • スクリプトトリガの使い方

実行環境

  • Windows 10 Pro
  • FileMaker Pro 19.1.3.315

仕様

基本要件の確認

  • 名前の入力を受け付ける
  • 入力された文字列の中から一文字だけ抽出する
  • 抽出された一文字を返す
  • 入力値が空欄の場合はクラッシュさせるというのが元ネタへの厳密なるリスペクトになるが、今回はエラー処理まで入れることとする

フローをもう少し具体的に

  • テキストの表示
    • 湯婆婆「契約書だよ。そこに名前を書きな。」
  • ユーザー操作
    • 名前の入力
  • バックグラウンドの処理
    • 名前が空欄だったら入力を受け付けないようにする
    • 空欄でなければ次へ進む
  • テキストの表示
    • 名前が二文字以上の場合
      • 湯婆婆「フン。●●●●というのかい。贅沢な名だねぇ。」
      • 次へ進む
    • 名前が一文字以下の場合
      • 湯婆婆「フン。●というのかい。」
      • ここで終わらせる
  • バックグラウンドの処理
    • 入力された名前の中から一文字だけ抽出
  • テキストの表示
    • 湯婆婆「今からお前の名前は●だ。いいかい、●だよ。分かったら返事をするんだ、●」

実装

カスタムダイアログでの入力と表示

  • まずはカスタムダイアログだけで入力を受け付け、結果の表示をします

最初に完成形と結果

  • スクリプト全体

image.png

  • 名前を入力

image.png

  • 贅沢な名と言われる

image.png

  • 新たなる名を与えられる

image.png

  • 新たなる名はランダムで付与される

image.png
image.png

  • 名前が一文字の時はそのまま

image.png

  • さて、では実際の実装を一つずつおこなっていくことにしましょう

テーブルとフィールドの用意

  • yubaba テーブルに、グローバルのテキストフィールド g_txt を用意します

image.png

スクリプトの作成

  • 湯婆婆_カスタムダイアログ スクリプトを作成
  • スクリプトステップ カスタムダイアログを表示 追記
    • 一般 タブ
      • タイトルに "湯婆婆"
      • メッセージに "「契約書だよ。そこに名前を書きな。」"
      • デフォルトボタンのみ
        • キャンセルは受け付けない! 質問には答える。
    • 入力フィールド タブ
      • 入力フィールド 1 に yubaba テーブルの g_txt フィールドを指定

image.png
image.png

  • スクリプトステップ 変数を設定 追記
    • 名前に $input_name
    • 値に yubaba テーブルの g_txt

image.png

  • スクリプトステップ フィールド設定 追記
    *yubaba テーブルの g_txt
    • 計算式を "" にして早々に値リセットしておく

image.png

  • スクリプトステップ 変数を設定 追記
    • 名前に $count_input_name
    • 値に Length ( $input_name )

image.png

  • スクリプトステップ 変数を設定 追記
    • 名前に $interruption
    • 値に以下計算式
If (
  $count_input_name ≤ 1;
    True;
    False
)

image.png

  • スクリプトステップ 変数を設定 追記
    • 名前に $yubaba_output_1
    • 値に以下計算式
"「フン。" & $input_name & "というのかい。" & 

If (
  not $interruption;
    "贅沢な名だねぇ。"
) & 

"」"

image.png

  • スクリプトステップ カスタムダイアログを表示 追記
    • 一般 タブ
      • タイトルに "湯婆婆"
      • メッセージに $yubaba_output_1
      • デフォルトボタンのみ
        • 頷くのみ。

image.png

  • スクリプトステップ If End If 追記
    • If 条件は $interruption
    • スクリプトステップ 現在のスクリプト終了 追記

image.png

  • スクリプトステップ 変数を設定 追記
    • 名前に $output_name
    • 値に以下計算式
Let (
  [
    pos = Int ( $count_input_name * Random ) + 1
  ];

  Middle ( $input_name ; pos ; 1 )
)
  • スクリプトステップ 変数を設定 追記
    • 名前に $yubaba_output_2
    • 値に以下計算式
"「今からお前の名前は" & $output_name & "だ。いいかい、" & $output_name & "だよ。分かったら返事をするんだ、" & $output_name & "」"

image.png

  • スクリプトステップ カスタムダイアログを表示 追記
    • 一般 タブ
      • タイトルに "湯婆婆"
      • メッセージに $yubaba_output_2
      • デフォルトボタンのみ
        • 頷くのみ。

image.png

  • 以上で完了!

レイアウトでの入力と表示

  • 次にレイアウトで入力を受け付け、結果の表示をするようにしてみます

最初に完成形と結果

  • スクリプト全体

image.png

  • 名前を入力する前

image.png

  • 名前を入力して確定すると(フィールドからカーソルを外すと)贅沢な名と言われ、新たなる名を与えられる

image.png

  • 新たなる名はランダムで付与される

image.png
image.png

  • 名前が一文字の時はそのまま

image.png

  • さて、では実際の実装を一つずつおこなっていくことにしましょう

レイアウト作成

※画像は常識の範囲でご自由にお使いください。

  • 湯婆婆の素材画像をレイアウトに貼り付ける
  • 名前入力のために g_txt フィールドを置く
    • 適当に白い背景をセットしたりラベルテキストを付けたりする
  • マージ変数 <<$$yubaba_output>> を置く
  • レイアウトモードで確認
    • もっと契約書っぽいレイアウトにしたければしてもヨシ

image.png

スクリプトの作成

  • スクリプトステップ If End If 追記
    • If 条件は IsEmpty ( yubaba::g_txt )
    • スクリプトステップ 変数を設定 追記
      • 名前に $$yubaba_output
      • 値に "「契約書だよ。そこに名前を書きな。」"
    • スクリプトステップ ウインドウ内容の再表示 追記
    • スクリプトステップ 現在のスクリプト終了 追記

image.png
image.png

  • $input_name, $count_input_name 変数を設定するスクリプトステップを、先にカスタムダイアログで作成したスクリプトからコピーしてきてペースト
    • 中身はそのまま

image.png

  • スクリプトステップ If End If 追記
    • If 条件は $count_input_name ≤ 1
    • スクリプトステップ 変数を設定 追記
      • 名前に $$yubaba_output
      • 値に "「フン。" & $input_name & "というのかい。」"
    • スクリプトステップ ウインドウ内容の再表示 追記
    • スクリプトステップ 現在のスクリプト終了 追記

image.png

  • $output_name 変数を設定するスクリプトステップを、先にカスタムダイアログで作成したスクリプトからコピーしてきてペースト
    • 中身はそのまま

image.png
image.png

  • スクリプトステップ 変数を設定 追記
    • 名前に $$yubaba_output
    • 値の計算式は以下
"「フン。" & $input_name & "というのかい。贅沢な名だねぇ。」" & ¶ & 
"「今からお前の名前は" & $output_name & "だ。いいかい、" & $output_name & "だよ。分かったら返事をするんだ、" & $output_name & "」"
  • スクリプトステップ ウインドウ内容の再表示 追記

スクリプトトリガの設定

  • レイアウト設定スクリプトトリガ タブにて OnLayoutEnter でスクリプト 湯婆婆_レイアウト

image.png

  • 設置したフィールド g_txt のスクリプトトリガ設定にて OnObjectExit でスクリプト 湯婆婆_レイアウト

image.png

  • 以上!

おわりに

雑感

  • 私はいったい何をやっているんだろう……?
  • FileMaker Pro 楽しいと思っていただけたら幸い!

2020/12/15 追記

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?