Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

インターシステムズ FHIR クライアントのバイパス

サーバ側のアプリケーションを使用して内部 FHIR サーバに対して FHIR® 要求を行う場合、アプリケーションでは、通常、標準の FHIR クライアントが使用されます。これらの組み込みクラスの使用方法の詳細は、"FHIR クライアント" を参照してください。

ただし、カスタムの ObjectScript クラスを使用して、サービスを通じて要求せずに、リポジトリを操作できるようになりたい場合があります。例えば、サーバで要求を読み取り専用の相互作用に制限している場合でも、書き込みオペレーションを行いたい場合があります。その場合は、サービスをバイパスできます。

その他のケースでは、FHIR クライアントと REST ハンドラで使用されるのと同じメソッドを、ただし、カスタム・クラスから使用したい場合があります。詳細は、"DispatchRequest の直接呼び出し" を参照してください。

ObjectScript アプリケーションでは、リソースを検証することもできます。

サービスのバイパス

サーバ側アプリケーションは、サービス経由でプログラムによる要求を送信する代わりに、Interactions サブクラスのメソッドを直接呼び出すことができます。例えば、アプリケーションから、POST 要求をサービスに送信するのではなく、Interactions サブクラスの Add メソッドを直接呼び出すことができます。これは特に、サービスによって禁止されているアクションをサーバ側アプリケーションで実行する必要がある場合に便利です。例えば、サーバのメタデータでエンドポイントが読み取り専用として構成されている場合、サービスに対するプログラムによる要求でリソースを作成することはできません。ただし、サーバ側アプリケーションは、Interactions サブクラスへのメソッド呼び出しを使用し、リソースによってストレージ・ストラテジを更新すると、サービスによって強制されている制約を実質的にバイパスできます。

プログラムによる Interactions クラス・メソッドの呼び出しでは、FHIR データはダイナミック・オブジェクトとして渡されます。

DispatchRequest の直接呼び出し

ObjectScript アプリケーションは、DispatchRequest( ) を直接呼び出すことにより、FHIR クライアントとしても動作できます。このメソッドは、標準の FHIR クライアントと内部 FHIR サーバの REST ハンドラによって使用されます。

GET リソース

ObjectScript アプリケーションは、サーバのサービスを使用して、リソースを取得できます。例えば、178.16.235.12 がインターシステムズ・サーバの IP アドレス、52783 がスーパーサーバ・ポートであるとした場合、REST 呼び出しは以下のようになります。

GET http://178.16.235.12:52783/fhirapp/namespace/fhir/r4/patient/1

ObjectScript を使用した同一のエンドポイントへのアクセスは、以下のようになります。

set url = "/fhirapp/namespace/fhir/r4"
set fhirService = ##class(HS.FHIRServer.Service).EnsureInstance(url)
set request = ##class(HS.FHIRServer.API.Data.Request).%New()
set request.RequestPath = "/Patient/1"
set request.RequestMethod = "GET"
do fhirService.DispatchRequest(request, .response)

この例では、応答は、ダイナミック・オブジェクトに表される JSON 応答を使用したデータ・オブジェクト (HS.FHIRServer.API.Data.ResponseOpens in a new tab) になります。

Note:

サーバに対する最初の要求で、EnsureInstance メソッドを呼び出して、FHIR サービスをインスタンス化する必要があります。要求の前に毎回この呼び出しを実行しても問題は発生しませんが、サービスが変更されているかどうかをチェックするのにごくわずかな時間がかかります。

POST リソース

プログラムによって FHIR サーバにデータを送信することもできます。以下の例では、アプリケーションで、ファイル MyPatient.json の JSON オブジェクトに記述される Patient リソースを作成するとします。ObjectScript コードは以下のようになります。

set url = "/csp/fhirapp/namespace/fhir/r4/"
set fhirService = ##class(HS.FHIRServer.Service).EnsureInstance(url)
set request = ##class(HS.FHIRServer.API.Data.Request).%New()
set request.RequestPath = "/Patient"
set request.RequestMethod = "POST"
set request.Json = {}.%FromJSON("c:\resources\MyPatient.json")
do fhirService.DispatchRequest(request, .response)

この例では、要求に格納されている JSON のソースは、外部ファイルではなくアプリケーション内のダイナミック・オブジェクトから取得された可能性があります。

FHIR データの XML としての処理

REST クライアントを使用して FHIR サーバで CRUD オペレーションを実行すると、FHIR サーバは、FHIR データを自動的に受け入れるか、受信要求に基づいて FHIR データを XML として返します。ただし、カスタムの ObjectScript クラスからプログラムによって CRUD オペレーションを実行する場合、FHIR サービスに送信されるすべてのデータは JSON 形式である必要があります。同様に、サービスによって返されるデータもすべて JSON 形式になります。FHIR サーバには、XML を JSON に、および JSON を XML に変換するためのヘルパー・メソッドが用意されています。

XML データを FHIR サービスに送信するには、XML をストリーム・オブジェクトに配置し、それを HS.FHIRServer.Service.StreamToJSON()Opens in a new tab メソッドに送信して、形式が XML になるように指定します。例えば、以下のコードは、XML ペイロードを、FHIR サービスに渡すことができる JSON 要求に変換します。

set url = "/csp/fhirapp/namespace/fhir/r4/"
set fhirService = ##class(HS.FHIRServer.Service).EnsureInstance(url)
set request = ##class(HS.FHIRServer.API.Data.Request).%New()
set request.Json= fhirService.StreamToJSON(MyStream,"XML")

FHIR サービスからの JSON 応答を XML に変換するには、HS.FHIRServer.Util.JSONToXML.JSONToXML()Opens in a new tab メソッドを使用します。

FHIR データのストリームとしての処理

HS.FHIRServer.Service.StreamToJSON()Opens in a new tab メソッドは、XML または JSON ストリームを JSON オブジェクトに変換し、それを要求の一部として FHIR サービスに渡すことができるようにします。FHIR サービスは、ストリームを直接処理することはできません。このメソッドは、ストリーム、およびストリーム内のデータの形式の 2 つの引数を受け付けます。例えば、以下のコード行は、JSON ストリームを、FHIR サービスに送信できる JSON オブジェクトに変換します。

set url = "/csp/fhirapp/namespace/fhir/r4/"
set fhirService = ##class(HS.FHIRServer.Service).EnsureInstance(url)
set request = ##class(HS.FHIRServer.API.Data.Request).%New()
set request.Json= fhirService.StreamToJSON(MyStream,"JSON")

XML ストリームの場合は、単に XML を 2 つ目の引数として渡します。

FHIR リソースの検証

リソースがダイナミック・オブジェクトとして表される限り、ObjectScript アプリケーションは、FHIR $validate オペレーションを使用せずに、FHIR サーバのメタデータに対し、プログラムを使用してリソースを検証することができます。例えば、以下のコードは Patient リソースをサーバの FHIR R4 メタデータに対して検証します。このメタデータには、Patient リソースのスキーマが含まれています。LoadSchema メソッドを呼び出すと、FHIR バージョンの一般名 (R4STU3 など) や、サーバのベース・メタデータ名 (HL7v40 または Hl7v30 など) を指定することができます。

// Put JSON representation of Patient resource into a dynamic object
set patient = ##class(%DynamicObject).%FromJSON("c:\localdata\myPatient.json")

//Validate the patient resource
set schema = ##class(HS.FHIRServer.Schema).LoadSchema("R4")
set resourceValidator = ##class(HS.FHIRServer.Util.ResourceValidator).%New(schema)

do resourceValidator.ValidateResource(patient)
FeedbackOpens in a new tab