オンライン資格確認 導入記 (No.10) 2021.6.18 更新
オンライン資格確認 導入記 (No.10) 2021.6.18 更新
回答XMLをインポートする
前回までの試行錯誤で, 診察券番号(患者ID)と関連づけた要求XMLをreq Folderに投げ込んで, その結果XMLが res Folderに返ってくるところまで, 到達したことを記しました。
こんどは“読み込む”ことを Filemaker で やらねばなりません。投げ込んだ fileが
OQSsiquc01req_2021052921060.xml なら 結果XMLファイルは
OQSsiquc01res_2021052921060.xml で, “q”と”s”の違いなので, 簡単そうに思われました。
FilemakerでXML Fileを読み込もうとすると, XSL スタイルシートを作製して, それを指定しなければなりません。<abc> xxx </abc> に囲まれた値xxxを効率よく読み込むには至極当然な仕組みですが, これが, なかなか思うようにいきません。xsl スタイルシートの構文がよくわかりません。
https://fmhelp.filemaker.com/help/12/fmp/jp/html/import_export.17.33.html
https://community.claris.com/en/s/question/0D50H00006dshLkSAI/simplest-mod-for-xslt-example-to-import-xml-data (Community のやり取りです)
そもそも xml というのは, 同じ形式の多数のレコードを読み込む仕組みのように理解しています
が, オンライン資格確認のxml は 多数の項目からなる 1件のレコードなので, ちょっと特殊なタイプじゃないでしょうか? タグを明示するのが重要だというタイプのxmlですね。
ネットでスタイルシートを探して見るんですが, 適当なサンプルが見つかりません。
Clarisの 本家サイトから MSDSO_ELEM を見つけました。
https://www.claris.com/ja/resources/downloads/
(このサイトの “テクニカルリソース”の “XMLサンプルファイル”を見てください)
msdso_elem.xml(サンプルxml) , msdso_elem.xslt (スタイルシート) 日本語版が載っています。試しに, この xslt を 少し改修して(<RESULTSET>以下の部分をいろいろいじってみるのですが, 思うような結果が得られません)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/*">
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
<ERRORCODE>0</ERRORCODE>
<PRODUCT BUILD="" NAME="" VERSION=""/>
<DATABASE DATEFORMAT="M/d/yyyy" LAYOUT="" NAME="" RECORDS="{count(/*/*)}" TIMEFORMAT="h:mm:ss a"/>
<METADATA>
<xsl:for-each select="/*/*[position()=1]/*">
<FIELD>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="処理実行日" TYPE="TEXT"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="文字コード識別" TYPE="TEXT"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="処理結果区分" TYPE="TEXT"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="資格確認日" TYPE="TEXT"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="照会区分" TYPE="TEXT"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="任意識別子" TYPE="TEXT"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="医療機関コード" TYPE="TEXT"/>
</FIELD>
</xsl:for-each>
</METADATA>
<RESULTSET>
<xsl:attribute name="FOUND"><xsl:value-of select="count(child::*)"/></xsl:attribute>
<xsl:for-each select="child::*">
<ROW>
<xsl:attribute name="MODID">0</xsl:attribute>
<xsl:attribute name="RECORDID">0</xsl:attribute>
<xsl:for-each select="child::*">
<COL>
<DATA>
<xsl:value-of select="."/>
</DATA>
</COL>
</xsl:for-each>
</ROW>
<xsl:text> </xsl:text>
</xsl:for-each>
</RESULTSET>
</FMPXMLRESULT>
</xsl:template>
</xsl:stylesheet>
オンライン資格確認xml を読み込んでみましたら,読めました。前半部は改修の結果 個々に読み込めますが,
<RESULTSET>で囲まれた本体部分は, ひとかたまりになって出力されました。
さらに<RESUTSET>より後半部もひとかたまりになって, タグが活かされていません。
桁数が固定の項目が多いので, なんとか項目に分解できそうですが….
ただ これらは “有効”であれば それ以上の解析は不要だと考えます。有効は<QualificationValidity>で回答されます。これは単独項目として最後に出力されます。
いろいろな マシン環境で 以上の作業をやってみると, 環境によって出力形態に差があることがわかりました。Windows10ではv16 ~19まで上記と同じです。(v17は手元になく未検証です)
Mac のv16までは Windows10 と同じなのですが, v18,19では <RESUTSET>本体部分が 各項目が改行されたかたちで出力されることに気がつきました。
これだと解析はラクです。
Filemaker v18からは Web-APIが使えるようになったとか, v19ではJavascriptが使いやすくなったとか, このあたりの改良が著しいので, 功を急ぐあまり, Version, 使用環境で同一の結果を実現させていないのかもしれません。それにしても, MacとWindows環境の差はなるべく消してほしいですね。
Macでv18を活かそうとするなら, オンライン資格確認端末(Windows)とMacをFile共有させて,Mac側でxmlを読み解くことで, うまくやれるかもしれません。
ところが ここまで来て, 顔認証のxml 読み込みに支障が出ることに気がつきました。
顔認証xml 自体は 確認xml と同質なのですが, File名を特定することができません。先に記したように, 結果xml は 前もってFile名がわかりますから, それを Scriptでインポートできるのですが, 顔認証の場合は, それができません。
OQSsiquc01res_face_67805684242db960911fae79ab7fa0_20210602135502.xml
上記のように 医療機関コードとマシンの固有コード, 日時のdataしかなく, Fileを特定してインポートすることができません。はじめて受診する人の場合, 当然と言えば当然です。
直近のFileをインポートすればいいのですが, そういうインポートの指定ができません。そうなると, face Folderを目視で確認して, 直近のものを手動でインポートするしかありません。それはいかにも味気ないし, 手間もかかって, せっかくの連携アプリを生かせません。
ここで XML 読み込みは いったん頓挫してしまいました。