埼玉系社内SEの日記

埼玉県内の物流会社に勤務する社内SEが適当に書込む日記です。

FileMakerでシリアル入力

最近FileMakerが楽すぎて社内系は全部FileMaker使ってる今井です。

FileMakerばっかりやってるんで他の言語忘れそうです(笑)。

 

さて、今回は社内にあったシリアルポート接続タイプのバーコードリーダーをFileMakerで使いたいと思います。

バーコードリーダーでよくあるタイプとして、USBで繋いでキーボードエミュレーションする製品ってお手軽でいいのですが、フォーカスが当たってないと期待した動作にならないので、画面をモーダル表示にしてテキストボックスからフォーカス外れたら戻すとかしないといけないのですが、シリアル入力だとフォーカス外れようが、画面が裏側になっていようが関係なく処理できるので、個人的にシリアル入力タイプお勧めです。

 

でもですね

そんなお勧めのシリアルさんはFileMakerでは取り扱いしてないのです(悲)

MSのAccessですらできるのに....

 

そんな訳でなんとかしてみました。(Windows限定です)

C#(VisualStudio2012)でシリアル通信するフォームアプリケーション作って、入力受け取ったらFMPプロトコルFileMaker側に渡すようにしてみました。

f:id:lincle-imai:20171024153933j:plain

微妙なアイコン付きですが、ポイントとしては下記

1.SerialPortコンポーネントを使います。

  (バッファリングとかしてくれて便利)

2.DataReceivedイベントでReadExistingしてFMPプロトコルに流します

      ReadExistingはバッファ内の読み取り可能なデータを全部持ってきてくれます。

      今回は単純なデータなのでReadExistingで簡単に済ませます。

      FMPスクリプトの呼び出しには外部起動でよく使う、System.Diagnostics.Process

      を使用します。

3.FileMaker側にはFMPプロトコルで呼ばれるスクリプトを用意しておく

      

      かなりざっくりですが、下記C#コードです。


private void sp_Barcode_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
    string receivedData;
    receivedData = this.sp_Barcode.ReadExisting();

    using (System.Diagnostics.Process p = new System.Diagnostics.Process())
    {
        p.StartInfo.FileName = "fmp://{アドレス}/{FMファイル名}?script={FMスクリプト名}&param=" + receivedData;
        p.Start();
    }
}

 これでバーコード読み込むとFileMaker側のスクリプトが呼ばれて、パラメータに渡したバーコードデータを元にゴニョゴニョできます。

今回はざっくり作りましたが、多分近い時期に社内で必要になるのでしっかり版作ります。

欲しい人は連絡下さいっていねーか(笑)