クリアフィルター
記事
Makiko Kokubun · 2021年3月30日
*この動画は、2021年2月に開催された「InterSystems Japan Virtual Summit 2021」のアーカイブです。
この動画では、FHIR をご存じない方に向けて FHIR の概要を解説し、日本における FHIR 標準化活動の状況や国内外の事例を紹介しています。
後半の16分~くらいからは、InterSystems IRIS for Health が提供する FHIR リポジトリに代表される FHIR 関連機能と、今後の機能ロードマップを紹介しています。
この開発者コミュニティでは他にも IRIS の FHIR 機能に関連した多くの記事を公開しています。FHIR にご興味ある方はぜひご覧ください。
FHIR R4 リソースリポジトリを簡単にお試しいただける開発環境テンプレートのご紹介
Azure 上で IRIS for Health をデプロイし、FHIR リポジトリを構築する方法
その他FHIR関連記事 (#FHIRタグ)
記事
Hiroshi Sato · 2021年1月27日
これは InterSystems FAQ サイトの記事です。
一括コメントを付与したい行全体を選択後、Ctrl + / を入力することで、選択範囲を一括でコメントにすることができます。
コメントの一括解除には、コメントを解除したい行全体を選択後 Ctrl + Shift + / を入力します。
記事
Mihoko Iijima · 2021年7月5日
これは InterSystems FAQ サイトの記事です。
%Persistent クラスに既定で生成される Extent クエリは、ID 順に結果セットを出力することを意図していませんので、これは、仕様通りの動きとなります。
並び順は、設定されているインデックスにより、変わることがあります。
記事
Hiroshi Sato · 2022年8月22日
これは InterSystems FAQ サイトの記事です。
正規表現を使用する$Locate()関数がご使用いただけます。
正規表現の使用方法
使用方法の例は以下の様になります。
USER>write strあいうえおかきくけこABC123456さしすせそ USER>write $locate(str,"[A-Za-z]{3}[0-9]{6}",,,val)11 USER>write valABC123456 USER>
記事
Tomoko Furuzono · 2025年4月3日
これは、InterSystems FAQ サイトの記事です。
HTTPプロキシサーバまたは負荷分散装置(ロードバランサ)を経由してウェブサーバに接続するクライアントの送信元IPアドレスを特定する際は、HTTPヘッダ:X-Forwarded-For (XFF) を取得しますが、IRISでは以下で取得できます。
set ip = %request.GetCgiEnv("HTTP_X_FORWARDED_FOR")
記事
Hiroshi Sato · 2020年12月16日
これはInterSystems FAQ サイトの記事です。
SQLインジェクションに関しては、様々なWebサイトで対策等が公開されていますが、InterSystems SQLを使ったアプリケーションでも、他のRDBMSと同様にそれらの対策を適切に実施することで、SQLインジェクションは防げると考えられます。
さらに、InterSystems Data Platform(以下IRIS)の場合、一般的なRDBMSに比較して、SQLインジェクションを実行しづらい、幾つかの施策が組み込まれています。
InterSystems SQLでは、一度のリクエストで複数個のSQL文は実行できませんので、セミコロン(;)の後ろに悪意のあるコマンドを入力時に追加するというテクニックが使えません。
IRISは、SQLアクセスだけではなく、オブジェクトアクセスも提供しています。 更新処理を、オブジェクトアクセスで実装することで、一般ユーザに対するSQL文による更新処理を禁止することにより、SQL文のインジェクションによるアプリケーションが予期していないデータベースの改竄を防ぐことができます。
IRISのWeb技術であるCSPでは、urlのクエリ文字列は、全て暗号化できるので、クエリ文字列から、インジェクションの手がかりを得るなどのテクニックが使用しづらいです。
IRISのセキュリティモデルでは、ユーザだけではなくアプリケーションにデータベースへのアクセス権限を付与することができます。 そして、ユーザには、アプリケーションの実行の権限だけを与えて、データベースへの読み書きの権限を制限することができます。
これらにより、悪意のあるユーザがデータベースそのものを直接アクセスする機会をさらに狭めることができます。
お知らせ
Toshihiko Minamoto · 2021年5月6日
開発者の皆さん
こんにちは。
開発者コミュニティの2021年4月の変更内容をお届けします。
主な機能は以下の通りです。
* ソースコードでのクリップボードへのコピーボタン
* 翻訳ページの投稿
* 投稿へのプライベートリプライ
* インターシステムズの公式リリース、アラートページ
詳細は以下をご覧ください
ソースコードの「クリップボードへのコピー」ボタン
投稿やコメントにあるコードブロックにカーソルを移動し、このボタンを押すだけで簡単にコピーできます。
す
翻訳ページの投稿
ご承知のように、開発者コミュニティでは投稿された記事について5か国の言語への翻訳を依頼したり、自身で翻訳した記事を投稿したりすることができます。
現在、翻訳ページの投稿をより簡単に行えるよう改善しています。
**1. **ドロップダウンメニューから言語を選択します。
**2.** 2つのうち、どちらかを選択します。
* ご自身で翻訳される場合は「Translate」ボタンをクリックします。
* 翻訳を依頼される場合は「Request」ボタンをクリックします。
投稿へのプライベートリプライ
投稿した方にプライベートリプライを送信することができます。「Direct message」ボタンをクリックするだけでSubjectは自動的に
入力されます。
**インターシステムズ公式リリースとアラートページ**
[インターシステムズ公式](https://jp.community.intersystems.com/tags/intersystems-official) タグをフォローすることで、
最新の公式アナウンスが更新されます。
現在では簡単に[リリース情報](https://jp.community.intersystems.com/tags/intersystems-official?period=releases) や
[アラート](https://jp.community.intersystems.com/tags/intersystems-official?period=alerts)でフィルターをかけることができます。
最新機能をぜひお試しください。
[改善リクエストやバグ報告](http://github.com/intersystems-community/developer-community/issues)がありましたら、お気軽にお問合せください。
引き続き、開発者コミュニティをぜひご利用ください!
質問
Yuji Ohata · 2022年5月26日
こんにちは、皆さま。業務でIRISを用いて開発を行っている者です。
EmbededPythonに興味があり、利用を検討しているのですが、スタンドアロン下におけるライブラリの使用方法について疑問があります。
https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=AFL_epython#AFL_epython_pylibraryこちらを確認しましたところ、ライブラリは以下のコマンドで取得するという理解です。
> irispip install --target C:\InterSystems\IRIS\mgr\python ライブラリ名
pipコマンドではネットワーク上から、名称に一致したライブラリをダウンロード/インストールしてくれる機能と認識しておりますが、利用したいPCがインターネットに接続されていなかった場合、単純にこのコマンドを実行してもエラーになるだけと考えております。
このようなスタンドアロン下でのライブラリ取得について、何か知見がありましたらご教示いただけませんでしょうか?
Ohataさん、こんにちは。
既に解決されているかもしれませんが、記述されていた通り、スタンドアロン環境ではパッケージをインストールできませんので、以下の手順でインストールする必要があるかと思います。
1. インターネット環境にて必要なパッケージ(.gzファイル)をダウンロードする
irispip download -d c:\intersystems\iris\mgr\python --no-binary :all: <パッケージ名>
c:\InterSystems\IRIS\mgr\pyhtonフォルダにパッケージ(tar.gz形式)のファイルが作成されます。
2. スタンドアロン環境にパッケージをコピー
3. スタンドアロン環境にてパッケージをインストール
irispip install c:\intersystems\iris\mgr\python\<パッケージファイル名>
以下のサイトを参考にしました。
https://qiita.com/analytics-hiro/items/2565adbb2c900e6738cd
Toshihiko Minamoto さん
ご回答いただきありがとうございます!頂いた方法で試してみます。
お知らせ
Toshihiko Minamoto · 2023年2月16日
インターシステムズは、InterSystems IRIS® および Caché が、Windows 上でラージ・ページが割り当てられていることを示しているにもかかわらず、その利点を利用しないことがある問題を修正しました。この問題は、システム・パフォーマンスに悪影響を及ぼす可能性があります。
この問題は、InterSystems IRIS® および Caché を変更する必要がある Windows 10 の変更に起因しています。この問題は、InterSystems IRIS® または Caché をベースとするすべてのインターシステムズ社製品に影響します。この問題は、Windows の以下のバージョンで発生します。
Windows 10 (バージョン 1703 以降)
Windows 11
Windows Server 2019
Windows Server 2022
Windows Server 2016 は影響を受けません。
参考までに、この問題の修正プログラムは RJF533 として認識されています。この修正は、今後の InterSystems IRIS® および Caché のすべてのディストリビューションに含まれる予定です。また、この修正プログラムは、サポートされる製品バージョンに対して、アドホック配布として提供されます。
インターシステムズでは、深刻なシステム・パフォーマンスの低下を回避するために、以下を推奨しています。
ラージ・ページを使用しているシステムでは、この修正が適用されるまで、影響を受ける Windows バージョンへのアップグレードを延期してください。既に影響を受ける Windows バージョンでラージ・ページを使用しているシステムでは、システム負荷を増加させる前に修正を適用してください。インターシステムズでは、通常、パフォーマンスを向上させるためにラージページを使用することを推奨しています。 詳細は、ドキュメントの「Windows でのラージ・ページの構成」および「memlock」のセクションを参照してください。
このアラートについて質問がある場合、または修正版のアドホック配布が必要な場合は、ワールドワイド・レスポンス・センターまでご連絡ください。
お知らせ
Toshihiko Minamoto · 2023年4月18日
InterSystems API Manager (IAM) バージョン 3.2.1 が公開されました。 IAM 3.2.1では、バグフィックスや細かな改良に加え、IRISのお客様にとって興味深い新しいプラグインが追加されています。
OAS バリデーション (oas-validation)
OpenAPI 3.0やSwagger API仕様を元にした HTTPリクエストや応答を検証します。
SAML (saml)
サービスプロバイダー (Kong Gateway)、IDプロバイダー(IdP)間のSAML v2.0 認証を提供します。
XML 脅威保護 (xml-threat-protection)
このプラグインは、XMLペイロードの構造をチェックすることで、XML攻撃のリスクを低減することができます。これにより、最大複雑度(ツリーの深さ)や要素、属性の最大サイズが検証されます。
AppDynamics (app-dynamics)
Kong GatewayをAppDynamics APM Platformと統合
JWE Decrypt (jwe-decrypt)
リクエストに含まれるインバウンドトークン(JWE)の復号化
IAM は、InterSystems IRIS サーバとアプリケーション間の API ゲートウェイであり、HTTP ベースのトラフィックを効果的に監視、制御、および管理するためのツールを大規模に提供します。 IAMは、InterSystems IRISライセンスの無償アドオンとして提供されます
IAM 3.2は、WRCソフトウェア配布サイトのComponentsエリアからダウンロードできます。
ダウンロード、インストール、IAMの使用方法につきましては、インストール・ガイドをご参照ください。InterSystems IRIS での使用に関する詳細な情報についてはドキュメントをご参照ください。パートナーであるKong社では、IAMの使用に関する詳細なドキュメントとしてKong Gateway (Enterprise) 3.2ドキュメントを提供しています。
IAMは、OCI(Open Container Initiative)、別名Dockerコンテナ形式でのみ利用可能です。コンテナイメージは、Linux x86-64およびLinux ARM64用のOCI準拠のランタイムエンジンとして利用可能です。詳細はサポートプラットホームドキュメントをご参照ください。
このリリースのビルド番号は IAM 3.2.1.0-4 です。
このリリースは Kong Gateway (Enterprise) バージョン 3.2.1をベースとしています。
記事
Hiroshi Sato · 2021年7月27日
これは InterSystems FAQ サイトの記事です。
スーパーサーバでSSL/TLS接続を有効にする場合、クライアントアプリケーションは、使用するプロトコル、アクセスする証明書などを知るためにSSL設定が必要となります。これらは下記のようにiniファイルを作成・編集することで設定可能です。 ==============================設定ファイルの場所==============================デフォルトでは、SSL設定ファイルはSSLdefs.iniと呼ばれ、32ビットの共通プログラムファイルのディレクトリ下の InterSystems\IRIS(またはInterSystems\Cache)ディレクトリに置く必要があります。Windows 64bitの場合:C:\Program Files (x86)\Common Files\InterSystems\IRIS\SSLdefs.ini C:\Program Files (x86)\Common Files\InterSystems\Cache\SSLdefs.ini Windows 32bitの場合:C:\Program Files\Common Files\InterSystems\Cache\SSLdefs.iniクライアントインストーラはこのファイルを自動生成しないため、ユーザ自身で作成する必要があります。※ファイルはBOMなしUTF-8で保存してください。BOMありだと正常に動作しません。ファイルパスとファイル名を変更したい場合は、環境変数ISC_SSLconfigurationsを定義しファイルのフルパスを設定します。
==============================SSLdefs.iniファイルサンプル==============================以下の2つのセクションからなるファイルを作成します。最初のセクションは、各接続でどのSSL/TLS構成を使用するかを示します。※2016.1以降のクライアントは、Addressに接続先サーバのIPアドレスとDNSの両方を指定することが可能です。2つめのセクションでは、接続に使用するのSSL/TLS構成の設定情報を定義します。
[Development Server]Address=10.100.0.17Port=51773TelnetPort=23SSLConfig=DefaultSettings [DefaultSettings]VerifyPeer=2CAfile=c:\InterSystems\certificates\CAcert.pemCertFile=KeyFile=Password=KeyType=Protocols=28CipherList=ALL:!aNULL:!eNULL:!EXP:!SSLv2
==============================各パラメータの説明==============================VerifyPeer オプションは、0=なし、1=リクエスト、2=必須。 「必須」は推奨値。 「なし」を選択すると、悪意のあるサーバーが接続しようとしているサーバーのようなふりをする可能性がある。 「必須」を選択した場合は、CAfile を指定する必要がある(「リクエスト」の場合は任意)。 これは、管理ポータルの「サーバー証明書の検証」に相当する。 CAfile 信頼できる認証局(CA)ファイルのパス。VerifyPeer値が2である場合に入力する。 これは、管理ポータルの「信頼済み認証局の証明書を含むファイル」に相当する。 証明書はPEM形式でなければいけない。CertFile クライアントの証明書のパス。 クライアント認証情報が必要ない場合は空白にする。 これは、管理ポータルの「このクライアントの証明書を含むファイル」に相当する。 証明書はPEM形式でなければいけない。KeyFile CertFileの秘密鍵のパス。CertFileがある場合に設定する。 これは、管理ポータルの「関連づけられた秘密鍵を含むファイル」に相当する。Password 秘密鍵の復号に必要なパスワード。 クライアントで証明書を使用していない場合、または証明書の秘密鍵がディスク上で暗号化されていない場合は空白にする。~KeyType 秘密鍵タイプ。 CertFileおよびKeyFileが設定されている構成にのみ使用する(おそらくRSA)。Protocols クライアントが実行できるSSL/TLSのバージョンを指定する。 複数のバージョンを指定する場合は、数字を追加する(例:TLSv1+TLSv1.1+TLSv1.2=28)。 1 = SSLv2 2 = SSLv3 4 = TLSv1.0 8 = TLSv1.1 16 = TLSv1.2 これは、管理ポータルの「暗号方式設定/プロトコル」に相当する。 SSLv2とSSLv3には既知の問題があり、推奨されていないCipherList これは、ポータルの「有効な暗号化スイート」に相当する。 「ALL:!aNULL:!eNULL:!EXP:!SSLv2」は管理ポータルのデフォルト値(バージョンにより異なる) 設定ファイルについては下記ドキュメントもご参照ください。(英語)Connecting from a Windows Client Using a Settings File
記事
Mihoko Iijima · 2021年2月5日
これは InterSystems FAQ サイトの記事です。
Java ゲートウェイを使用することで、Java クラスのモジュールを InterSystems IRIS から実行できます。
【メモ】Java ゲートウェイは、外部 Java オブジェクトを InterSystems IRIS 内のネイティブ・オブジェクトと同じようにインスタンス化し、Javaオブジェクトを操作するための方法です。
詳細は以下ドキュメントをご参照ください。Java ゲートウェイについて
Java ゲートウェイを使用する手順は以下の通りです。
1) Java ゲートウェイサーバを開始する
2) プロキシオブジェクト(ダイナミック・プロキシ・オブジェクト)を作成して Java オブジェクトを操作する
1) Java ゲートウェイサーバを開始する
Java ゲートウェイサーバを開始する方法は 3 種類あります。以下のいずれかの方法で、Java ゲートウェイサーバを開始します。
A) 管理ポータルの「オブジェクトゲートウェイ」を利用する
B) プロダクションにJavaゲートウェイサービスを追加する
C) java コマンドを使用する
A)~C) の方法は以下の通りです。
A) 管理ポータルの「オブジェクトゲートウェイ」を利用する
管理ポータル > [システム管理] > [構成] > [接続性] > [オブジェクトゲートウェイ] の画面で Java ゲートウェイサーバを作成します。
設定保存後、「開始」をクリックして Java ゲートウェイサーバを開始します。
開始後の画面は以下の通りです。
これで、Java ゲートウェイサーバの開始は終了です。停止する場合は、オブジェクトゲートウェイの設定画面で「停止」のリンクをクリックします。
B) プロダクションにJavaゲートウェイサービスを追加する
任意のネームスペースにプロダクションを作成し、EnsLib.JavaGateway.Service クラスを「サービス」に追加します。
管理ポータル > [Interoperability] > [一覧] > [プロダクション] > [新規]ボタンクリック > パッケージ名、プロダクション名(=クラス名)を指定し OK ボタンクリック
サービスの右側にある + のボタンをクリックし [EnsLib.JavaGateway.Service] を追加します。
設定を行うため、EnsLib.JavaGateway.Service をクリックします(クラス名の字の部分をクリックします)。
画面右側の「設定」タブで、アドレス/ポート を設定します。
この後、プロダクションを「開始する」ボタンで開始することで、Java ゲートウェイサーバも開始します。停止する場合は、プロダクションを「停止する」ボタンで停止してください。
詳細は、ドキュメントもご参照ください。Java ゲートウェイのビジネスサービスの追加
C) java コマンドを使用する
以下のコマンドで開始できます。
java -classpath [IRISインストールディレクトリ]\dev\java\lib\JDK18\intersystems-jdbc-3.1.0.jar;[IRISインストールディレクトリ]\dev\java\lib\JDK18\intersystems-gateway-3.1.0.jar com.intersystems.gateway.JavaGateway ポート番号 ログファイルフルパス プロキシクラスの識別子 ホスト名
実行例) IRISのインストールディレクトリが c:\InterSystems\IRIS1 、ホスト名は localhost、ポート番号は 12345 で開始する例
java -classpath C:\InterSystems\IRIS1\dev\java\lib\JDK18\intersystems-jdbc-3.1.0.jar;C:\InterSystems\IRIS1\dev\java\lib\JDK18\intersystems-gateway-3.1.0.jar com.intersystems.gateway.JavaGateway 12345 c:\kit\javag.log abc localhost
詳細は、ドキュメントもご参照ください。コマンド・プロンプトの使用法
2) プロキシオブジェクト(ダイナミック・プロキシ・オブジェクト)を作成して Java オブジェクトを操作する。
上記3手法のいずれか1つで Java ゲートウェイサーバを開始してから実行します。
なお、Java 側のクラスや Jar ファイルが更新された場合、Java ゲートウェイサーバの再起動が必要です。ご注意ください。
テストに使用している Java クラス(test.java)は以下の通りです。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class test {
public int num = 1234;
public String data;
// test1 は文字列を返す
public static String test1() { return "abc"; }
// test2 は test3()で作成したリストの個数を返す
public static int test2(List obj) { return obj.size(); }
// test3 は 可変個の引数として文字列を受け取り、testインスタンスを作成しListに格納して戻す
public static List test3(String... input) {
List testlist=new ArrayList();
for (String str : input) {
test obj=new test();
obj.data=str;
testlist.add(obj);
}
return testlist;
}
}
例では、 c:\temp\test.java に配置した状態でコンパイルを実行し、c:\temp\test.class を作成しています。
IRIS から test.class のインスタンスを生成するコードは以下の通りです。
// クラス/JARファイルの位置を指定するためリストオブジェクトを作成
set class=##class(%ListOfDataTypes).%New()
// 作成したJavaクラスの場所をリストに追加
do class.Insert("c:\temp")
// Javaゲートウェイサーバに接続するためのインスタンス生成
set GW=##class(%Net.Remote.Gateway).%New()
// 第1引数:ホスト名/第2引数:ポート番号/第3引数:ネームスペース/第5引数:クラスファイルを指定したリスト
set st=GW.%Connect("localhost",55555,"USER",,class)
// 1が返れば、接続成功
write st
// 1以外が戻った時にエラーメッセージ表示方法
write $system.Status.GetErrorText(st)
// ダイナミックプロキシオブジェクトを利用して test.classのインスタンス生成
set testobj=##class(%Net.Remote.Object).%New(GW,"test")
// test1()メソッドの実行
write testobj.test1()
// インスタンス変数 num の表示
write testobj.num
// Javaクラスに用意した test3()メソッドを利用して testインスタンスをListに格納して返送
set newobj=testobj.test3("あ","い","abc")
// test3()の結果を変数に設定し、test2()に渡して何個のリストが格納されているか確認(3が返る予定)
write testobj.test2(newobj)
// 接続切断
set st=GW.%Disconnect()
記事
Toshihiko Minamoto · 2021年3月29日
[FHIR Terminology Service](https://www.hl7.org/fhir/R4/terminology-service.html)の仕様には、 [CodeSystem](https://www.hl7.org/fhir/R4/codesystem.html)、[ValueSet](https://www.hl7.org/fhir/R4/valueset.html)、および[ConceptMap](https://www.hl7.org/fhir/R4/conceptmap.html)リソースでの一連の演算子が記述されています。 これらの演算子の内、以下の4つの演算子が最も広く採用されているようです。
| CodeSystem | ValueSet |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [$lookup](https://www.hl7.org/fhir/R4/codesystem-operation-lookup.html)[$validate-code](https://www.hl7.org/fhir/R4/codesystem-operation-validate-code.html) | [$expand](https://www.hl7.org/fhir/R4/valueset-operation-expand.html)[$validate-code](https://www.hl7.org/fhir/R4/valueset-operation-validate-code.html) |
IRIS for Health 2020.1で導入された[新しいFHIRフレームワーク](https://docs.intersystems.com/irisforhealth20203/csp/docbook/Doc.View.cls?KEY=HXFHIR_server_intro#HXFHIR_server_arch)を学ぶには、仕様の部分的な実装を開発するのが最も効果的と言えます。 [実装](https://github.com/intersystems-ru/fhir-terminology-service)には上記の4つの演算が含まれており、[CodeSystem](https://www.hl7.org/fhir/R4/codesystem.html)と[ValueSet](https://www.hl7.org/fhir/R4/valueset.html)リソースで[read](https://www.hl7.org/fhir/R4/http.html#read)と[search](https://www.hl7.org/fhir/R4/http.html#search)操作がサポートされています。
実装には単純なObjectScript永続クラスがソース用語テーブルとして使用されていることに注意することが重要です。
### サンプルストラテジーを使ったインストールとテスト
以下のリストでは、インストールと基本的なテスト手順を説明しています。
1. IRIS for Health 2020.1以降をインストールします。
2. ポータルの `システム管理` > `構成` > `システム構成` > `ネームスペース` メニューを使用して、またはHSLIBネームスペースで `do ##class(HS.HC.Util.Installer).InstallFoundation("")` コマンドを実行して、新しいネームスペースをセットアップします。 その後、 [intersystems-ru/fhir-terminology-service](https://github.com/intersystems-ru/fhir-terminology-service) GitHubリポジトリの[src/cls](https://github.com/intersystems-ru/fhir-terminology-service/tree/main/src/cls/)と[samples/cls](https://github.com/intersystems-ru/fhir-terminology-service/tree/main/samples/cls/)フォルダからクラスをインポートします。
3. [dummy-search-parameters.json](https://github.com/intersystems-ru/fhir-terminology-service/blob/main/src/fhir-search-parameters/dummy-search-parameters.json)で定義された追加の検索パラメーターを使って、R4セットに基づく独自のFHIRメタデータセットを作成します。 これは、`##class(HS.FHIRServer.ConsoleSetup).Setup()` インタラクティブユーティリティを使うか、次のコマンドを実行します。
```
do ##class(HS.FHIRServer.Installer).InstallMetadataSet("", "", "HL7v40", $lb(""), 1)
```
* これは、`$expand` と `$validate-code` 演算子がHTTP GETリクエストをサポートするため必要な手順です。
* InterSystems IRISにパッケージ化されたFHIRメタデータセットファイルは、`/dev/fhir/fhir-metadata` ディレクトリにあります。
4. 新しいメタデータセットと[Sample.iscru.fhir.fts.SimpleStrategy](https://github.com/intersystems-ru/fhir-terminology-service/blob/main/samples/cls/Sample/iscru/fhir/fts/SimpleStrategy.cls)クラスに基づく新しいFHIRエンドポイントを作成します。 これについても、インタラクティブユーティリティを使用するか、次のコマンドを実行します。
```
do ##class(HS.FHIRServer.Installer).InstallInstance("", "Sample.iscru.fhir.fts.SimpleStrategy", "")
```
5. 新しいエンドポイントに認証なしアクセスを許可します。インタラクティブユーティリティを使用するか、次の[コマンド](https://docs.intersystems.com/irisforhealth20203/csp/docbook/Doc.View.cls?KEY=HXFHIR_server_install#HXFHIR_server_install_program_configure)を実行してください。
```
set strategy = ##class(HS.FHIRServer.API.InteractionsStrategy).GetStrategyForEndpoint("")
set config = strategy.GetServiceConfigData()
set config.DebugMode = 4
do strategy.SaveServiceConfigData(config)
```
6. [Sample.iscru.fhir.fts.model.CodeTable](https://github.com/intersystems-ru/fhir-terminology-service/blob/main/samples/cls/Sample/iscru/fhir/fts/model/CodeTable.cls)にデータを入力します。
```
do ##class(Sample.iscru.fhir.fts.model.CodeTable).Populate(10)
```
7. [fhir-terminology-service.postman_collection.json](https://github.com/intersystems-ru/fhir-terminology-service/blob/main/tests/postman/fhir-terminology-service.postman_collection.json)ファイルをPostmanにインポートし、コレクション内に定義されている `url` 変数を調整して、単純な永続クラスである `Sample.iscru.fhir.fts.model.CodeTable` に対してサービスをテストします。
### サポートされているFHIR操作
CodeSystemとValueSetで現在サポートされている検索パラメーターは、`url` のみです。
HTTP GETとHTTP POSTメソッドは、上記の4つの演算子でサポートされています。
以下の表には、[Sample.iscru.fhir.fts.model.CodeTable](https://github.com/intersystems-ru/fhir-terminology-service/blob/main/samples/cls/Sample/iscru/fhir/fts/model/CodeTable.cls)クラスに対して行えるHTTP GETリクエストをいくつか示しています。
| URI(`http://:` の後に続く) | 説明 |
| ----------------------------------------------------------------------------- | ------------------------------------------------------------------- |
| /metadata | エンドポイントの機能宣言リソースを取得します。 |
| /CodeSystem/Sample.iscru.fhir.fts.model.CodeTable | Sample.iscru.fhir.fts.model.CodeTableクラスに対応するCodeSystemリソースを読み取ります。 |
| /ValueSet/Sample.iscru.fhir.fts.model.CodeTable | Sample.iscru.fhir.fts.model.CodeTableクラスに対応するValueSetリソースを読み取ります。 |
| /CodeSystem?url=urn:CodeSystem:CodeTable | CodeSystemリソースをURLで検索します。 |
| /CodeSystem | 使用可能なすべてのCodeSystemリソースを出力します。 |
| /ValueSet?url=urn:ValueSet:CodeTable | ValueSetリソースをURLで検索します。 |
| /ValueSet | 使用可能なすべてのValueSetリソースを出力します。 |
| /CodeSystem/$lookup?system=urn:CodeSystem:CodeTable&code=TEST | あるシステムとコードで、概念に関するすべての詳細を取得します。 |
| /ValueSet/$expand?url=urn:ValueSet:CodeTable | ValueSetを展開します。 |
| /CodeSystem/Sample.iscru.fhir.fts.model.CodeTable/$validate-code?code=TEST | コードがコードシステムにあることを検証します。 |
### カスタムストラテジーの作成
独自の永続クラスをFHIRコードシステム/値セットとして公開するには、[iscru.fhir.fts.FTSStrategy](https://github.com/intersystems-ru/fhir-terminology-service/blob/main/src/cls/iscru/fhir/fts/FTSStrategy.cls)をサブクラス化してカスタムストラテジークラスを作成し、その新しいカスタムストラテジーに基づいてFHIRエンドポイントを作成する必要があります(上記手順4のインストール手順を参照)。
1つのクラスパラメーターと少なくとも3つのメソッドをストラテジークラスでオーバーライドする必要があります。
* `StrategyKey` クラスパラメーター: いくつかの一意の値を割り当てる必要があります。 現在のクラスの名前が適当でしょう。
* `getCodeTablePackage()` クラスメソッド: [正規URL](https://www.hl7.org/fhir/R4/resource.html#canonical)で識別される特定のコードシステム(または値セット)のパッケージ名を返す必要があります。 一般的に、すべての用語クラスは1つのパッケージに属しているため、このメソッドは通常、引数の値に関係なく1つの同じパッケージ名を返します。
* `getCodePropertyName()` および `getDisplayPropertyName()` クラスメソッド: `code` と `display` 概念要素に対応するクラスプロパティの名前を返します。 各クラスには、用語コード/ディスプレイ要素にマッピングされたそれぞれのプロパティがあります。
以下は、オーバーライドした方が適切だと思われる [iscru.fhir.fts.FTSStrategy](https://github.com/intersystems-ru/fhir-terminology-service/blob/main/src/cls/iscru/fhir/fts/FTSStrategy.cls) のその他のメソッドとパラメーターです。
* `listCodeTableClasses()` クラスメソッド: 使用可能なすべてのコードシステム(または値セット)を返す検索リクエストをサポートするには、オーバーライドする必要があります。 このメソッドは、使用可能なすべての用語クラスのクラス名のリストを返します。 [Sample.iscru.fhir.fts.SimpleStrategy](https://github.com/intersystems-ru/fhir-terminology-service/blob/main/samples/cls/Sample/iscru/fhir/fts/SimpleStrategy.cls)には、次のように、このメソッドの基本的な実装が含まれます。
```
/// 使用可能なすべてのコードテーブルクラスのリストを返します。
ClassMethod listCodeTableClasses() As %List
{
#dim sql As %String = "SELECT name FROM %Dictionary.ClassDefinition WHERE name LIKE '" _ ..#codeTablePACKAGE _ ".%' ORDER BY name"
#dim resultSet As %SQL.StatementResult = ##class(%SQL.Statement).%ExecDirect(, sql)
if (resultSet.%SQLCODE '= 0) && (resultSet.%SQLCODE '= 100) $$$ThrowStatus($$$ERROR($$$SQLError, resultSet.%SQLCODE, resultSet.%Message))
#dim return As %List = ""
while resultSet.%Next()
{
set return = return _ $lb(resultSet.name)
}
quit return
}
```
* `isExcludedProperty()` クラスメソッド: 永続クラスの特定のプロパティをCodeSystemリソースに表示されないようにするには、オーバーライドする必要があります。 デフォルトでは、このメソッドは、`Collection`、`Identity`、`Internal`、`MultiDimensional`、および`Private`プロパティを除外します。 フレームワークでは、オブジェクト参照とストリームプロパティは現在サポートされていないため、無視されることに注意してください。
* `codeSystemUrlPREFIX` と `valueSetUrlPREFIX` クラスパラメーター、および `getCodeSystemForClassname()`、`getValueSetForClassname()`、`determineCodeTableClassname()`、および `determineCodeSystemForValueSet()` メソッド: クラス名をどのように [正規URL](https://www.hl7.org/fhir/R4/resource.html#canonical)と関連付けるかを制御します。 デフォルトでは、正規URLには、次の命名スキームが使用されています。
| CodeSystem | ValueSet |
| ----------------------------------------- | --------------------------------------- |
| `urn:CodeSystem:` | `urn:ValueSet:` |
CodeSystem/ValueSetリソースの[論理ID](https://www.hl7.org/fhir/R4/resource.html#id)(またはサーバーID)は、対応するクラスの完全な名前と同じです。
### 今後の課題
現在不足しているのは、コードシステムのバージョン管理、概念階層と `$subsumes` 演算子、ConceptMapリソースなど多くのものに対するサポートです。 皆さんのアイデア、そしてプルリクエストをぜひお待ちしています!