FMDB-blue導入のチュートリアル【オブジェクトフィールド編】

# はじめに
【基礎編】で作成したファイルに、オブジェクトフィールドを追加したものを作成します。実際にFileMaker上でundo、redoできるようになると、ちょっと感動されると思います。皆さまに、ぜひ、ご利用いただいて、いろいろご意見をいただければと思います。よろしくお願いいたします。

# このチュートリアルで作れるもの
`AnyFileName`ファイルに、ログが取れ、undo、redoができるオブジェクトフィールドが追加されます。
![20211202_PracticeContainer.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2283446/578a513d-15e8-0103-2bd7-e911fce710cc.gif)

# 準備するもの
【基礎編】で作成したものがあれば大丈夫です。

1. FileMaker Pro 19
2. FMDB-blueファイル一式
    - FMDB-blue_Processor.fmp12<br>
このチュートリアルでは「Processorファイル」と呼びます。
    - SampleApp_Interface.fmp12<br>
    - FMDB-blue_Data.fmp12
    - SampleApp_Data.fmp12<br>
    これらのファイルは、このチュートリアル内では登場しませんが、FMDB-blueの導入、稼働には必要なファイルです。

    ここから最新版がダウンロードできます。
    <a href="https://github.com/siebenunddreissig/FMDB-blue"><img src="https://github-link-card.s3.ap-northeast-1.amazonaws.com/siebenunddreissig/FMDB-blue.png" width="460px"></a>

3. ログ記録を残したいFileMakerファイル。
    【基礎編】で作成した`AnyFileName`ファイルを使います。
    チュートリアル通りに作っていれば、FMDB-blueフォルダの中に作られていて、アカウント、パスワードは「admin」のはずです。

# FMDB-blue導入のチュートリアル【オブジェクトフィールド編】
## 1. ログ記録を残したいFileMakerファイルでの設定
1-1.
まず【基礎編】作った`AnyFileName`ファイルを開きましょう。
![20211202_165953.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2283446/2a6c6ab2-5bed-bc02-08be-37e2310b491c.png)

1-2.
「データベースの管理」を開きます。 
![20211202_170021.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2283446/5ea5e45d-8d06-7b0b-dfd2-9626b7ef3426.png)

1-3. 
オブジェクトフィールドを追加します。名前はなんでもよいですが、ここでは`AnyContainerField`とします。
![20211202_170030.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2283446/6e5ed420-159e-9ca7-7c2d-3e51fc4f4f40.png)

1-4.
レイアウトモードにして、作成した`AnyContainerField`フィールドをドラッグ＆ドロップします。
![20211202_170237.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2283446/d8ee2e60-f8c7-4ed6-685b-16416ecd8adf.png)

1-5.
配置された`AnyContainerField`フィールドを右クリックして、コピーします。
![20211202_170352.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2283446/ca3ef33d-b327-c4fe-9f39-9693ab8f5c60.png)

1-6.
そのままペーストします。右側パネルで「データ」タブを選択し、「フィールド入力」のところの2つのチェック（ブラウズモード、検索モード）を外します。
![20211202_170415.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2283446/37eab9e1-c9ac-7470-0dd2-f1bac1a56282.png)

1-7.
コピー前のフィールドを選択して、右側パネルで「外観」タブを選択し、「塗りつぶし」を「なし」にします。
![20211202_170548.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2283446/9047809b-96db-f573-221e-c98f2851e81b.png)

1-8.
引き続きコピー前にフィールドで右クリックメニューを出し「フィールド設定...」を開きます。
![20211202_170609.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2283446/7417db90-30f2-ba9c-28e0-202a4c0b3c6b.png)

1-9.
フィールドとして`eM_Hub#FMDBblue::g_NewContent.container`を選択して、「OK」します。
![20211202_170635.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2283446/fd0f889c-2f5c-204f-1c48-389b8c47362e.png)

1-10.
この`g_NewContent.container`フィールドで、再度右クリックで「スクリプトトリガ設定...」を開きます。
![20211202_170726.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2283446/205e47e1-c186-2c6a-8d1f-b4fb71013ae5.png)

1-11.
「スクリプトトリガ設定」で「OnOBjectModify」スクリプトトリガを選択します。
![20211202_170730.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2283446/fd71df99-70b8-e413-1e67-9c033997163b.png)

1-12.
「_LogSystem」フォルダ内の`OnObjectModify_Handle_Drag&Drop(EntireFN)`スクリプトを選択します。スクリプト引数として`GetFieldName ( AnyFileName::AnyContainerField )`を設定し、「OK」します。
![20211202_170805.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2283446/32d96c43-8abd-a8c0-b183-7dcd44cebecc.png)

1-13.
コピーしたフィールドを、コピー元のフィールドに重なるように移動させます。これで、`AnyFileName`ファイルの設定は終了です。
![20211202_171006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2283446/b8a9310e-0f92-2c88-85ae-c92fd56739fc.png)

## 2. Processorファイルの設定
2-1.
次に、Processorファイルの設定を行います。Processorファイルを開くために「Set TO Shift Active Field」スクリプトを実行します（この方法で開くと、アカウント、パスワードが聞かれません）。
![20211202_171044.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2283446/3974ff8c-0125-1a33-8683-65ae9357d890.png)

2-2.
「TableOccurrenceShiftの設定」で「キャンセル」を選択します（ここで「3」を入力して「選択する」のもありです）。
![20211202_171100.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2283446/4f7aeab3-4004-ca1e-4c17-b84664207c3f.png)

2-3.
レイアウトを`_Log@AnyOccurrenceName.form`に変更します。
![20211202_171134.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2283446/c38813a7-d303-ce1a-c3ba-4133dbc4f442.png)

2-4.
`AnyContainerField`フィールドをドラッグ＆ドロップします。これでProcessorファイルの設定は終了です。Processorファイルのウインドウは閉じてください。
![20211202_171214.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2283446/0b891b5c-a309-6811-bc8b-32fe091e65a3.png)

2-5.
これで練習ファイルの編集は完了です！
2つ目のフィールドとしてオブジェクトフィールドが追加されました。このオブジェクトフィールドの編集は、ドラッグ＆ドロップ、右クリックなどの「〇〇を挿入」でも、どちらでも対応可能です。ぜひ、undo、redoをしてみてください。
![20211202_PracticeContainer.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2283446/578a513d-15e8-0103-2bd7-e911fce710cc.gif)

# チュートリアル後の注意事項
- 作られたオブジェクトフィールドは通常のものと違い、対象レコードがゼロの場合でも、レコードがないことを表すアラートが表示されません。後ろに置いた`g_NewContent.container`フィールドの`OnObjectEnter`スクリプトトリガにアラート用のダイアログ表示スクリプトを設定すれば、少しはそれに対処できるかも知れません。
- FMDB-blue導入のチュートリアルはこの【オブジェクトフィールド編】で一旦終了です。もし、ご要望等あれば、関連レコード、ポータルなどのチュートリアル作成も検討します。ぜひ、ご利用いただいて、いろいろご意見をいただければと思います。


# 謝辞
- [FM-1GP大賞発表LIVE](https://www.fm-1gp.com/post/fm-1_2021_grandprize)終了後の打ち上げzoomで、ご意見をいただいたのがきっかけです。FM-1GP運営に感謝！
- 当チュートリアルを作成するのに[MarkdownThing](https://www.fm-1gp.com/post/entryno38)（[魔改造バージョン](https://twitter.com/37_fmp/status/1465183973399617536)）を使用しています。[@qbxxdp](https://twitter.com/qbxxdp)さんに感謝！　本チュートリアルのご指導もいただいております。