【FileMaker】FileMaker Goで入庫チェック

今回は、ハンズオンです！
ぜひ作ってみてください。

FileMaker Goが入ったiPadやiPhone片手に現場で在庫チェックする姿は今ではよく見られる光景ですね。
[前回](https://qiita.com/tyuma/items/109fc8c0ca75d7db4571)はQRコードを単に読み取って在庫があるかないかをチェックしていきました。
今回はお店に配送された商品が入庫予定数通り納入されているかどうかチェックするアプリをむっちゃローコードで構築していきます。

前回は実際に使っているアプリの解説でしたが、今回は簡単なサンプルを作っていきましょう。

# 用意するもの
## 開発用
FileMaker (PC)

## 実施用
iPadもしくはiPhone
FileMaker Go
バーコードリーダー(今回はQRコードが読み取れるもの)

バーコードリーダーは、なければiPad,iPhoneのカメラ機能を使うことができますが、そのやり方は[こちら](https://qiita.com/tyuma/items/ca16b6a3c3103e5214b1)を参考にしてください。

# 動作環境
サンプルは、FileMaker 19.4.1作りましたが、特にすごい技術は使っていないので、幅広いバージョンで作れると思います。

# 動き
どんな感じで動くか見ていきましょう。

https://twitter.com/GuppyWebService/status/1469313790336696325

# 実装
では、実際に実装してみましょう。

## テーブル設計
入庫されるはずのデータを保存するテーブルを作ります。
例えば、業者から「明日はこれこれを納品します」というような納品リストと思ってください。
「入庫テーブル」という名前にしました。
![スクリーンショット 2021-12-10 18.47.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/c3890397-8f21-bedc-97e6-6b838c297bf0.png)

それから、納品された商品をチェックするテーブルです。
バーコードリーダーで読み取った商品番号と入庫数を記録するトランザクションテーブルです。
「入庫チェックリスト」という名前にしました。
![スクリーンショット 2021-12-10 18.47.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/b189b0cd-0e97-a4b8-3434-9d3c1d3e543a.png)
「itemNog」グローバルフィールドは、バーコードから読み込んだ商品番号を一時的に保持しておくフィールドです。
「入庫個数集計s」集計フィールドは、同じitemNo（商品番号)のチェックした個数を集計します。
その他、「itemNo」「itemCnt」は、チェックして読み込んだ商品番号と個数を履歴として保存するためです。

これらのテーブルのリレーションシップグラフはこんな感じです。
![スクリーンショット 2021-12-10 18.48.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/fa94219b-8de8-b9c3-70f4-1b29bedb7fe1.png)
チェックしたitemNoと同じitemNoを持つ入庫テーブルのデータを参照するようにつなぎます。

## レイアウト設計
今回は、以下の2つのレイアウトを用意します。
・入庫チェックをするレイアウト
・納入リストに当たる入庫リスト

### 入力チェック
入庫チェックリストテーブルで「入庫チェック」というレイアウト名で新規作成します。
![スクリーンショット 2021-12-10 22.10.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/0ff39edc-6df0-e16a-2091-1934e7c35345.png)

レイアウト形式は、フォーム形式にします。
![スクリーンショット 2021-12-10 22.11.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/03080ea4-d3f9-1b15-d6ea-d58dde121f1f.png)

レイアウトを起動した時に入力フィールドをクリアするスクリプトトリガを設定しますが、ここではまだ設定せずに進みます。
次に、レイアウト内に入庫チェックリストテーブルのitemNogを配置します。
画面右のインスペクタの「データ」設定で、フィールド入力ができるように「ブラウズモード」にチェックを入れるのと、オブジェクト移動のキー設定をしてください。
もし、QRコードが読み取れなかった場合用に、キーボードの設定（インプットメソッドの設定とタッチキーボードタイプ）もしておくと安心です。
![スクリーンショット 2021-12-10 22.20.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/9443331e-394d-9950-1011-5c761c3586b9.png)

QRコードの読み込みフィールドの下に、入庫チェックレイアウトを閉じるボタンとして「チェック終了」を配置します。
カードウインドウでこの入庫チェックレイアウトを表示した場合は、ウインドウ設定で左上に閉じるマークも配置できますが、ここでは明示的に終了する、ということでボタンを配置しています。
このボタンには、「[ウインドウを閉じる](https://help.claris.com/ja/pro-help/content/close-window.html)」スクリプトステップを単一ステップとして設定します。
![スクリーンショット 2021-12-10 22.10.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/d77d5254-ab32-422b-74f4-ba22dfc5bd33.png)


### 入庫リスト
実際に納入してくる商品情報を表示するレイアウトを作ります。
ついでに、このリストに入庫チェックのステータスを表示させます。
納入してくる商品情報は、運用として何かしらデータ連携をしますが、今回は納入情報を入力できるように情報登録できるように入力可能な状態で作成しました。
もし、連携ができるなら、簡易的に連携できる手段としてcsvやexcelが適当と思いますので、ファイルのインポートボタンを作ってみてもいいと思います。

こんな感じのリストです。
![スクリーンショット 2021-12-10 22.06.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/c4c884c7-4c4b-c459-7241-caad44e80624.png)
レイアウト左には、納入情報として、
・商品番号
・商品名
・入庫予定数
を表示しています。
レイアウト右側の入庫個数は、入庫チェックをした数を表示しています。

レイアウトの設定です。
レイアウト名を「入庫リスト」、レイアウトのテーブル（TO)は、入庫リストです。
![スクリーンショット 2021-12-10 22.07.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/7fd9c894-2794-354c-255f-8cdd6def0264.png)

レイアウトの表示は、「リスト表示」にして、一画面でリスト形式で見れるようにします。
![スクリーンショット 2021-12-10 22.07.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/2d047e3c-dc30-f8a6-caf9-123d8f7947fe.png)

レイアウトにフィールドを配置していきましょう。
「入庫リスト」TOの、itemNo,itemName,itemCntを配置します。
itemCntは数字なので、インスペクタで表示を右寄せにした方が綺麗に見えます。
![スクリーンショット 2021-12-10 22.07.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/c2e113fb-9241-c032-36e4-f36f6306b130.png)

FileMaker左の「現在のテーブル」を「入庫チェックリスト」に変更します。
リレーションシップグラフで関連づけているので、「関連テーブル」欄にあります。
![スクリーンショット 2021-12-10 22.07.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/036ecaee-1649-d4be-8451-0a3023eb7432.png)

集計フィールドの「入庫個数集計s」を配置します。
このフィールドも数値で常時したいので、右寄せで表示します。
![スクリーンショット 2021-12-10 22.07.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/ce495015-295d-6d70-1096-26eb1aa14f5d.png)
この部分は、チェックした結果を反映する部分なので、チェック状態による色の表示を条件付き書式で施していこうと思います。

![スクリーンショット 2021-12-10 22.08.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/f022a5e3-6a2d-ff51-a011-866764914122.png)
![スクリーンショット 2021-12-10 22.08.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/842cdc26-82f1-3ccd-f1d9-6e8a57a1ef54.png)
![スクリーンショット 2021-12-10 22.08.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/630b7947-2ea5-3ad2-f33c-554815e8c02d.png)


ボタンを配置していきましょう。
最新情報を表示したいので、画面のリフレッシュボタンを配置しました。
「[ウインドウ内容の再表示](https://help.claris.com/ja/pro-help/content/refresh-window.html)」を使います。
![スクリーンショット 2021-12-10 22.09.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/c54eaee8-9031-8b97-b448-45f769c765b7.png)

入庫チェックをする際の入力ウインドウを表示するボタンを、「入庫チェック」という名前でボタンを配置します。
ここは、入力に集中してもらうために、ウインドウスタイルを「カードウインドウ」にしました。
![スクリーンショット 2021-12-10 22.09.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/adacb25f-17fe-e77e-8dc4-76d61b557122.png)

レイアウトの作成が終わりました。
次はいよいよスクリプトです。

## スクリプト作成
入力チェックをする入庫チェックレイアウトが表示された時に、入力フィールドをクリアするスクリプトトリガを設定します。
![スクリーンショット 2021-12-10 22.11.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/a8eadc53-4702-d21e-840a-c5ef8f3557b3.png)

このスクリプトを、「入庫チェック」レイアウトのスクリプトトリガ：onLayoutEnterに指定します。
![スクリーンショット 2021-12-10 22.11.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/db06354c-da42-97bc-dd1d-dfc8feb25d11.png)

もう一つ、実際にQRコードを読み込んだ後に入庫記録をするスクリプトを作成します。
実コード数は5行！です。
![スクリーンショット 2021-12-10 23.40.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/5e655cf6-0392-1bf4-9038-cd1425572af6.png)

このスクリプトを、「入庫リスト」レイアウトの「入庫チェック」ボタンへ貼り付けます。
![スクリーンショット 2021-12-10 23.41.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/0c87ef2b-fead-1eb8-1747-b528ce2c9ed8.png)

さぁ、これで実装は終わりです。
単一スクリプトを除けば、コード書きは２本、しかも１本はたった2行、もう一本は5行というローコード振りです。

# 動かしてみる
今回は、商品にQRコードがついていると想定し、商品コードのQRコードを作成し、紙に印刷しました。
QRコード作成は、FileMakerで作成する場合は、[fmgo](https://fmgo.jp/)にある、Claris Partnerの株式会社ジェネコムさまが提供されいている[QRコード作成アプリ](https://fmgo.jp/detail.php?recid=577)を活用したり組み込んだりするのもいいと思います。
![スクリーンショット 2021-12-10 23.12.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/1b5a8bab-430f-f19a-f7bc-d9766555ce2c.png)

作ったFileMakerアプリは、テスト用に共有設定するか、FileMaker Goに単体として取り込んで実行してみてください。
ここでは、テスト用に共有設定をする例を示します。

:::note warn
この共有設定は、セキュリティ上、本番環境では使えませんので、「こんなふうに動くのか」という確認で共有設定をしてください。
:::

![スクリーンショット 2021-12-11 10.51.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/9f421369-564b-e22b-7533-0928fb5cf79e.png)
![スクリーンショット 2021-12-11 10.51.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/8c3b2560-2b4f-78c8-863c-b1b2427cf511.png)

この記事の最初に紹介した動きと同様に動くことを確認してみましょう。
画面キャプチャなのでQRコードスキャン部分は見えませんが、実際にQRコードをスキャンして在庫を計上してみてください。

https://twitter.com/GuppyWebService/status/1469313790336696325

少ないコードでまずは実装してみましょう。
そこから、「あ、ここはもうちょっとチェックが必要かな」「ウインドウを誤動作させないようにしよう」など気が付いてくると思います。
カスタマイズして自分仕様のアプリをFileMaker Goで動かして働き方改革をしていきましょうね！