#相互運用性

0 フォロワー · 90 投稿

ヘルスケアでは、相互運用性とは、さまざまな情報技術システムとソフトウェアアプリケーションが通信し、データを交換し、交換された情報を使用する能力です。

記事 Mihoko Iijima · 6月 23, 2021 40m read

開発者のみなさん、こんにちは!

2023/2/21追記

チュートリアルページが新しくなり「Developer Hub」に変わりました!

Interoperability(相互運用性)チュートリアルについても新しくなりました。詳しくは「InterSystems Developer Hub:クリック1回で開始できるチュートリアル(4種)のご紹介」をご参照ください。

この記事では、GettingStarted ページの無料体験環境(Sandbox)で試せるチュートリアルの中から、「Connect Your Systems」(Interoperabilityのチュートリアル)の使い方をご紹介します。

GettingStarted ページでできることについては、こちらの記事でご紹介しています。

無料体験環境(Sandbox)の開始手続きについては、こちらの記事でご紹介しています。ぜひご参照ください。

 Connect Your Systems では、IRIS の Interoperability メニューを利用してどのように異なるシステム同士を接続し、処理を連携させることができるのか、ビデオによる解説とチュートリアルをご用意しています。

(1) Interoperability 概要 :   ビデオ(日本語字幕切り替え可)と概要説明

0
0 427
記事 Makiko Kokubun · 6月 15, 2021 1m read

*この動画は、2021年2月に開催された「InterSystems Japan Virtual Summit 2021」のアーカイブです。

FHIR プラットフォームとして InterSystems IRIS for Health を選択する利点の一つは、クラウド/オンプレミスを含む豊富なプラットフォームの選択肢です。

 

インターシステムズは新しい選択肢の一つとして、FHIRマネージドサービスである”FHIR Accelerator Service”をまずは米国内でリリースします。このサービスを活用するとユーザはすぐにマネージド環境をプロビジョニングしてFHIRサービス開発/実行環境を入手することができます。
この動画では、AWSクラウド上でホストされるこのサービスについてデモを交えてご紹介しています。

この開発者コミュニティでは他にも IRIS の FHIR 機能に関連した多くの記事を公開しています。 FHIR にご興味ある方はぜひご覧ください。

0
0 138
記事 Mihoko Iijima · 5月 27, 2021 2m read

これは InterSystems FAQ サイトの記事です。

HL7 メッセージの送受信を行うプロダクションでは、以下3個のグローバルが非常に大きくなることがあります。

グローバルの大きさを確認する場合は、^%GSIZEユーティリティを利用します。詳細は関連トピック/記事をご参照ください。

^EnsHL7.Segment
^EnsLib.H.MessageD
^EnsLib.H.MessageI

HL7メッセージは EnsLib.HL7.Message.cls で定義されます。
^EnsLib.H.MessageD はデータを保存するグローバル、^EnsLib.H.MessageI はインデックスを保存するグローバルです。

また、HL7メッセージは多数のセグメントで構成されており、メッセージデータを含むそれらのセグメントは ^EnsHL7.Segment に保存されます。

^EnsLib.H.MessageD グローバルの値は、^EnsHL7.Segment グローバルの添え字にリンクしています。

これらメッセージ関連のグローバルの削除については、任意の保持日数を指定して手動および定期的に削除することができます。
パージ(Purge)用ユーティリティについては、以下のドキュメントをご参照ください。

プロダクション・データのパージ【IRIS】

プロダクション・データのパージ

関連トピック/記事

0
0 191
記事 Mihoko Iijima · 5月 23, 2021 2m read

これは InterSystems FAQ サイトの記事です。

仮想ドキュメント(以降VDOC)とは複雑な構造のドキュメント(メッセージ)を効率良く高速に処理するために考えられたメッセージ処理の仕組みです。

HL7に代表される EDI 標準は電子データ交換のための汎用的なかなり複雑なメッセージ形式を含んでいます。

また、メッセージの種類を増やすと運用が複雑になってしまうため、1 つのメッセージに様々なデータを詰め込む傾向があります。

その結果 1 つのメッセージは複雑かつデータ量が多いものになりがちです。

一方、実際のメッセージ交換では、メッセージの全てのデータを処理することはまれで一部のデータのみが必要となるケースがほとんどです。

複雑なメッセージ構造から必要な項目を抽出して処理する際、メッセージを InterSystems IRIS data platform のオプジェクト指向フレームワークに基づき一度オブジェクトとしてインスタンス化することで処理を簡潔に記述できます。

しかし、データ量の多いメッセージを解析しオブジェクトにインスタンス化する処理は非常に負荷のかかる処理で、しかも大量のメッセージを処理しなければならない場合は求められるスループットを満たせない状況になりがちです。

しかも必要なデータは「全体の中のほんの少し」という状況の場合、無駄の多い処理となります。

0
0 1048
記事 Makiko Kokubun · 5月 11, 2021 1m read

*この動画は、2021年2月に開催された「InterSystems Japan Virtual Summit 2021」のアーカイブです。

国や地域のニーズに合わせて何のデータをどこにどのように格納するのかを定める共通ルールである FHIR プロファイルは、FHIR による標準化において、非常に重要な要素です。

この動画では、InterSystems IRIS for Health における FHIR リポジトリの構築・設定~ FHIR プロファイルの追加の方法を、最新バージョンおよび今後のバージョンでのサポート内容を含めてご紹介いたします。

この開発者コミュニティでは他にも IRIS の FHIR 機能に関連した多くの記事を公開しています。 FHIR にご興味ある方はぜひご覧ください。

0
0 322
記事 Toshihiko Minamoto · 5月 11, 2021 9m read

  1. ブロックチェーン

この記事を書いている時点(2019年2月)で、ビットコインの価値はそれが絶頂期だったころの 5 分の 1 未満に下落しています。 そのため、ブロックチェーンの私の体験について誰かに話すときに最初に耳にするのは、「今頃ブロックチェーンを欲しがる人がいるのか」という偽りなく懐疑的な言葉です。

その通り。ブロックチェーンの盛り上がりは衰退しています。 ところが、それが基づいているテクノロジーはここにとどまり、特定の分野で使用され続けるでしょう。一般的にインターネットではこのテクノロジーの使用方法が記述された資料でいっぱいです。 

(たとえば[medium](https://medium.com/@matteozago/50-examples-of-how-blockchains-are-taking-over-the-world-4276bf488a4b) と [forbes](https://www.forbes.com/sites/bernardmarr/2018/05/14/30-real-examples-of-blockchain-technology-in-practice/#23a4daed740d) に掲載されています)。

ご存知のように、ブロックチェーンは分散レジストリ、すなわち、レジストリの完全なコピーを格納している複数のノードに分散されたデータベースです。 レコード(トランザクション)がブロックを形成し、ブロックがブロックのチェーンを形成するところに、ブロックチェーンの鍵となる機能があります。 ブロックチェーンはアペンド演算のみをサポートしているため、 ブロックチェーンにすでに保存されたトランザクションに変更を加えることは、ほぼ不可能ということになります。

ブロックチェーンに関するチュートリアルはインターネット上にたくさんあります(ブロックチェーンについて聞いたことがない方は、こちらの簡単な動画をまずご覧ください)。

ブロックチェーンが順調な成果を見せていた時、文字通りどこにでも、そのテクノロジーを使用するための呼び出しが複数ありました。 ただし、ブロックチェーンが必要となる可能性のあるプロジェクトやタスクには、明確な特性があります。

まず第一に、一貫性と信頼性のある大量のデータを書き込むプレーヤー/ユーザーがたくさん存在する必要がある点です。

そうであれば、誰もが信頼するサードパーティは存在しないはずです。

公開データ検証の仕組みが必要となります。
こういった条件のすべてを満たす場合、ブロックチェーンの使用を検討するのも良いかもしれません。

こういったタスクは、どの業界にも見られます。 www.101blockchains.com プロジェクトでは、潜在的および既存のブロックチェーンプロジェクトに関する情報と、様々な業界でブロックチェーンテクノロジーを使用するニュアンスを集約しています。

たとえば、ブロックチェーンは、ヘルスケアの分野で次のタスクに使用することができます。

  • 患者記録の安全なリモート管理

  • サプライチェーン全体で変更不可能なトランザクションによる、偽造医薬品への対策

  • 詐欺やデータ改ざんの可能性の排除による、臨床試験の監視と有効性の改善

  • 企業部門は通常、プライベート許可型ブロックチェーンと呼ばれる特殊なブロックチェーンを使用しています。 このようなネットワークには、トランザクションを検証するための特別なノードセットがあります。

    しかし、最初の InterSystems IRIS ブロックチェーンアダプターを開発する際、非許可型ブロックチェーンに区分されるイーサリアムという種類のブロックチェーンを選択しました。イーサリアムは、単一のコントロールセンターを持たないオープンプラットフォームです。 これは、このブロックチェーンエンジンの人気と、多くのツールやライブラリを備え、十分に成熟したインフラストラクチャであることを基に採用しました。 イーサリアムのツールを使えば、誰でもプライベートブロックチェーンを作成することができます。

    1. アダプター

    では、アダプターの話に戻りましょう。

    InterSystems IRIS のアダプターは(Ensemble でも同様に)、外部システムと対話可能にする InterSystems IRIS クラスのクラスまたはパッケージです。 InterSystems IRIS アダプターは、インバウンド(外部システムが対話を開始した場合に外部システムからデータを受信)とアウトバウンド(InterSystems IRIS が対話を開始した場合に外部システムと連携)に分けられます。

    IRIS Ethereum アダプターはアウトバウンドアダプターであり、ほかのほとんどの InterSystems IRIS アダプターとはわずかに異なります。 このアダプターには、小さな NodeJS モジュールも含まれています。 図 1 はこのアーキテクチャを示しています。

    図 1.

    アダプターの NodeJS モジュールではイーサリアムと連携するための NodeJS ライブラリを使用します。

    アダプターは次のことを行います。

  • スマートコントラクトをイーサリアムにデプロイする(スマートコントラクト、開発ツール、および例を網羅した記事を別途掲載する予定です)。

  • スマートコントラクトのメソッド(ブロックチェーンの状態を変更するメソッドと変更しないメソッド)を呼び出す。

  • トランザクションを保存する(ウォレット間で資金を送金する)。

  • ブロックチェーンの状態を取得するほかのメソッドを呼び出す。

  • すべてのリクエストをログに記録する(NodeJS モジュールによって行われ、デバッグに有効)。

  • OpenExchange上のアダプターのソースコード

    3. 簡単な例

    アダプターには「Hello World」サンプルが付属しています。

    イーサリアムを使用するには(このサンプルを実行するには)以下の作業を行います。

  • 使用するネットワークを選択します。 Ropsten などのテストネットワークは通常、開発目的で使用できます。

  • このネットワークにウォレットを作成して、資金を追加します。

  • ローカルイーサリアムクライアント( Geth など)をインストールするか、クラウドプロバイダー( Infura など)と連携するための鍵を取得します。

  • ビジネスオペレーションを構成する際は、次の項目を設定する必要があります(図 2)。

  • NodeJS モジュールが動作するサーバーとポート(デフォルトポートは 3000 )

  • プロバイダーの設定(この場合、Infura へのアクセス)

  • ログイン情報(ユーザー名にウォレット番号、パスワードに秘密鍵を指定します。 InterSystems IRIS はログイン情報を別のデータベースに保存します。このデータベースは、暗号化を有効にする必要があります。)

  • 図 2.

    スマートコントラクトを使用するには、ファイルシステム内に(使用するスマートコントラクトごとに)フォルダを作成し、次の 2 つのファイルを配置する必要があります。
    *abi.txt
    *bytecode.txt

    これらのファイルには、スマートコントラクトの ABI とそのバイトコードが含まれている必要があります。 スマートコントラクトの ABI は、JSON 形式によるインターフェースの正式な記述です。 ABI とバイトコードは、スマートコントラクトのコンパイル時に作成されます。

    バイトコードは、コントラクトのデプロイに必要です。

    InterSystems IRIS 相互運用性テストサービスを使用して、ビジネスオペレーションをテストできます。

    図 3 では、テストサービスを使用してどのようにスマートコントラクトがデプロイされるのかを示しています。 このビジネスオペレーションを呼び出すと、トランザクションのハッシュを含むメッセージが結果として返されます。

    図 3.

    ropsten.etherscan.io(https://etherscan.io/)ブラウザを使用してこのトランザクションを見つけ、デプロイされたスマートコントラクトのアドレスを取得できます。

    アダプターを使用してスマートコントラクトのメソッドを呼び出すには、運用構成の ContractFolder と ContractAddress フィールドに入力する必要があります。

    スマートコントラクトの実行コードは非常に単純です。

    set ..ContractABI = [].%FromJSON(..ContractFolder_"abi.txt")
    set contract = ..Adapter.GetContract(##class(Ethereum.Address).%New(..ContractAddress),..ContractABI)
    set result = contract.hello()
    set pResponse = ##class(Ens.StringContainer).%New(result.args)
    

    スマートコントラクトのアドレスと ABI をアダプターの GetContract メソッドに渡し、メソッドを呼び出すために使用するスマートコントラクトオブジェクトを作成します。 この場合、文字列を返す hello() メソッドはスマートコントラクトで定義されている必要があります。

    この例では、hello() メソッドはブロックチェーンの状態を変更しないため、同期的に呼び出すことができますが、 ブロックチェーンの状態を変更するメソッドの実行時間は非常に長くなることがあります(トランザクションの検証を待つ必要があるため)。

    このようなメソッドを呼び出すには、InterSystems IRIS が提供する遅延応答の仕組みを使用します。 アダプターは遅延応答トークンを送信する必要があり、トランザクションが承認されると、NodeJS モジュールはその実行結果を InterSystems IRIS に渡します。 これを行うには、Web アプリケーションを構成し、受信した応答を処理する追加のビジネスサービスを運用に追加する必要があります。

    以下は、ブロックチェーンの状態を変更するメソッドを呼び出すためのコードです。

    // EthereumAccount(ウォレット)と privateKey の取得
    do ##class(Ens.Config.Credentials).GetCredentialsObj(.cred, "Ethereum.Demo.EthereumOperation", "Ens.Config.Credentials", ..Credentials)
    set account = ##class(Ethereum.Address).%New(cred.Username)
    set privateKey = cred.Password
    
    //コントラクト ABI の読み取り
    set ..ContractABI = [].%FromJSON(..ContractFolder_"abi.txt")
    
    // コントラクトオブジェクトの取得
    set contract = ..Adapter.GetContract(##class(Ethereum.Address).%New(..ContractAddress),..ContractABI)
    $$$ThrowOnError(..DeferResponse(.deferred))
    
    // gas の推定
    do contract.SetOptions(account)
    set gasJSON = contract.EstimateGas("setName",pRequest.Name)
    $$$TRACE(gasJSON.gas)
    
    do contract.SetOptions(account, privateKey,  ##class(Ethereum.Wei).%New(1000000000), ##class(Ethereum.Wei).%New(100*gasJSON.gas),,deferred)
    
    set result = contract.setName(pRequest.Name)
    

    この場合、スマートコントラクトの setName() メソッドを呼び出す前に、遅延応答トークンを含む多数のパラメーターを指定する必要があります。

    次の記事では、スマートコントラクトについて詳しく説明し、InterSystems IRIS Ethereum アダプターを使って実際の問題を解決する例を示します。

    0
    0 254
    記事 Makiko Kokubun · 4月 6, 2021 1m read

    *この動画は、2021年2月に開催された「InterSystems Japan Virtual Summit 2021」のアーカイブです。

    既に運用されている電子カルテ・処方のデータや蓄積されているデータを、FHIR に変換して活用したいというニーズは、FHIR アプリケーションを構築するにあたり最も多いご要望の一つです。

    この動画では、InterSystems IRIS for Health を使用して、HL7/SS-MIX2 やCSV など他形式のデータから FHIR データへ変換する方法について、デモをまじえてご紹介いたします。

    この開発者コミュニティでは他にも IRIS の FHIR 機能に関連した多くの記事を公開しています。
    FHIR にご興味ある方はぜひご覧ください。

    0
    1 517
    記事 Makiko Kokubun · 3月 30, 2021 1m read

    *この動画は、2021年2月に開催された「InterSystems Japan Virtual Summit 2021」のアーカイブです。
     

    この動画では、FHIR をご存じない方に向けて FHIR の概要を解説し、日本における FHIR 標準化活動の状況や国内外の事例を紹介しています。

    後半の16分~くらいからは、InterSystems IRIS for Health が提供する FHIR リポジトリに代表される FHIR 関連機能と、今後の機能ロードマップを紹介しています。

    この開発者コミュニティでは他にも IRIS の FHIR 機能に関連した多くの記事を公開しています。
    FHIR にご興味ある方はぜひご覧ください。

    0
    0 540
    記事 Toshihiko Minamoto · 3月 1, 2021 6m read

    開発者の皆さん
    こんにちは。
    Windows共有しているリモートサーバに出力されたファイルでデータ連携する際、セキュリティ上、資格情報が必要となるケースが良くあるかと思います。いままでCachéで連携していた時には%ZSTARTルーチンや常駐プロセスのルーチンにて「net useコマンド」を実行されていたかと思いますが、IRISではInteroperability機能が使用できますので、前回の記事で作成したビジネスサービスクラスを元に、資格情報を使ってWindows共有フォルダにアクセスできる機能を追加したいと思います。

    仕組み

    ビジネスサービスが起動、停止する際に呼び出されるOnInit()、OnTearDown()メソッドにnet useコマンドを埋め込み、指定されている資格情報を使ってnet useコマンドで共有フォルダへの接続、切断を行います。

    認証情報設定パラメータ追加

    ビジネスサービスの設定画面で認証情報を選択できるよう、以下のようにCredentialsプロパティ、SETTINGSパラメータをTest.BS.ImportMasterクラスに設定します。

    0
    0 595
    記事 Toshihiko Minamoto · 2月 23, 2021 6m read

    Java Business Host から PEX への移行

    InterSystems IRIS 2020.1 および InterSystems IRIS for Health 2020.1 で PEX がリリースされ、Java Business Host を使うよりも優れたかたちで Java プログラムをプロダクション環境に取り込めるようになりました。 PEX は、相互運用性のコンポーネントを構築するための API をすべて提供するほか、Java と .NET の両方で使用できます。 Java Business Host は非推奨となり、今後のリリースで廃止される予定です。

    PEX を使うメリット

    • デベロッパーはプロダクションのすべてのコンポーネントを、Java と .Net のどちらでも構築できる
    • コンポーネント間で一層複雑なメッセージ構造の受け渡しができる
    • シンプルな設定
    • 開発のワークフローがシンプルな上に、ObjectScript を使う必要がない

    ここからは、既存の Java Business Host のコードを PEX に移行する方法に注目します。

    概要

    PEX で使用されるクラスとインターフェースは、Java Business Host (JBH) のものとは異なります。 本記事では、その相違点を要約して解説しますが、詳細は完全なドキュメントをご覧ください。

    ビジネスサービスを Java Business Host から PEX に変換する

    PEX のビジネスサービスを構築するには、com.intersystems.gateway.bh.BusinessService の代わりに、com.intersystems.enslib.pex.BusinessService を実装する必要があります。

    PEX で使用されるビジネスサービスの設計パターンは、サービスがスレッドを開始してメッセージを作成するというものから、サービスが定期的に呼び出される関数を実装してメッセージを作成するというものに一変しました。

    JBH では、以下のようなコードが使われています。

      @Override
      public boolean OnInit(Production p) throws Exception {
        production = p;
    
        if (messageThread == null) {
          Messager messager = new Messager();
          messageThread = new Thread(messager);
          messageThread.start();
        }
    
        return true;
      }
    

    一方の PEX では、関数を 3 つ実装するだけで OK です。

      public void OnInit() throws Exception {
        // 初期化
        return;
      }
    
      public Object OnProcessInput(Object messageInput) throws Exception {
        // ここで SendMessage() か SendMessageAsync() を呼び出します
    
        return null;
      }
    
      public void OnTearDown() throws Exception {
        // シャットダウン
        return;
      }
    

    また、設定はどのように使用され、メッセージはどのように配信され、ログはどのように記録されるのかも変更する必要があります。 詳しくは後ほど解説します。

    ビジネスオペレーションを Java Business Host から PEX に変換する

    PEX のビジネスオペレーションを構築するには、com.intersystems.gateway.bh.BusinessOperation の代わりに com.intersystems.enslib.pex.BusinessOperation を実装する必要があります。

    ビジネスオペレーションの設計パターンは、JBH も PEX も構造的には同じですが、2 つのメインエントリーポイントへのパラメーターが変更されています。

    OnInit() の変更点

    PEX の OnInit() はパラメーターを受け取りません。

    OnMessage() の変更点

    PEX の場合、OnMessage() には、JBH で使用される String の代わりに、ジェネリック型の Object が与えられます。 これにより、プロダクションの作成者は好きなメッセージを渡すことができます。

    JBH では、アプリケーションに以下のようなコードが使われていたのではないでしょうか

      public boolean OnMessage(String message) throws Exception {
        // ビジネスロジックを実行
        return true;
      }
    

    PEX では、パラメーターにジェネリック型の Java Object が使用されます。適切にキャストする必要がありますが、String を使った場合よりも一層複雑なメッセージを送信できます。 以下は、ファイルストリームであるリクエストを抽出する方法を示した例です。

      public Object OnMessage(Object request) throws Exception {
        com.intersystems.jdbc.IRISObject streamContainer = (com.intersystems.jdbc.IRISObject)request;
        com.intersystems.jdbc.IRISObject str = (com.intersystems.jdbc.IRISObject)streamContainer.get("Stream");
        String originalFilename = (String)streamContainer.get("OriginalFilename");
    
        Long contentSize = (Long)str.get("Size");
        String content = (String)str.invoke("Read", contentSize);
    
        // ビジネスロジックを実行
    
        return null;
      }
    

    また、設定が使用される方法、メッセージが配信される方法、ログが記録される方法も変更する必要があります。 詳しくは後ほど解説します。

    設定

    設定の宣言が簡単になりました。

    JBH では、設定は SETTINGS 文字列を使って宣言され、以下のようなコードで取り込まれていました。

      String setting = production.GetSetting("Min");
      if (!setting.isEmpty()) {
        min = Integer.parseInt(setting);
      }
    

    PEX の場合、設定は単純に public メンバフィールドとなります。 これらは、クラスがインスタンス化されるときに自動的に設定されます。

      public int Min = 0;
    

    public メンバーフィールドは、Java の基本データ型 (String や int など) であれば、何でもプロダクション環境で設定できます。

    メッセージ

    メッセージはよりパワフルに送信できます。 JBH では、メッセージは文字列として送信されます。 一方の PEX を使うと、メッセージは、 ObjectScript で定義されるオブジェクトの場合であれは、オブジェクト (IRISObject) として送信され、Java で定義されているクラスの場合であれば、com.intersystems.enslib.pex.Message のサブクラスとして送信されます。

    JBH の場合は、以下のようなコードが使われます

      production.SendRequest(value.toString());
    

    PEX の場合だと、以下のようなコードが使われます

      MyExampleMessageClass req = new MyExampleMessageClass("message to send"); 
      SendRequestAsync(Target, req);
    

    ログ

    ログ機能はすべて似たようなものですが、名前だけが違います。

    PEX で情報メッセージをログするときは、LOGINFO() を使います。

      LOGINFO("Received message");
    

    オブジェクトのゲートウェイ

    Java Business Host では、専用のゲートウェイが必要でしたが、 PEX では、Java ゲートウェイ 1 つで、Java のすべてのニーズに対応できます。 また、ゲートウェイはたくさん使うこともできます。 これはあなた次第です。 こちらの Java ゲートウェイの手引き がおすすめです。

    結論とフィードバック

    まだ PEX を試していないという方は、ぜひぜひお試しください。 PEX を使えば、少ないコードで解決できるビジネスの問題の幅をぐっと広げることができます。また、今はすべての作業を .NET で実行できるようにもなりました。

    JBH のアプリケーションを PEX へ移行させることに関するご質問や問題は、私か WRC までご連絡ください。

    0
    0 206
    記事 Toshihiko Minamoto · 2月 22, 2021 4m read

    皆さん、こんにちは。
    他のシステムとファイル連携を行う場合、Cachéでは、Jobコマンドを使った常駐プロセスやタスクを作成し、特定のディレクトリにあるファイルを定期的に監視、データを取り込むといった機能を手作りされていたかと思います。
    これにはファイルの監視や、常駐プロセスの監視、プロセスの制御(起動、停止)を行う機能を用意する必要がありましたが、IRISではInteroperability機能が使えますので、そのようなプログラムを省略することが可能です。

    今回は、既にファイル読込処理を行うルーチンが存在し、ルーチン呼出時の引数にファイル名があるという前提で、その処理をInteroperability機能を使ってどのように呼び出すかについて説明したいと思います。

    手順

    作業手順は以下の通りとなります。

    1. ビジネスサービスクラスの作成
    2. OnProcessInput()メソッドの実装
    3. プロダクションの作成
    4. ビジネスサービスの登録
    5. プロダクションの起動

    ビジネスサービスクラスの作成

    スタジオを起動し、ファイル読込処理を行うルーチンが存在するネームスペースに接続します。

    「ファイル」「新規作成」メニューをクリックします。

    以下のダイアログボックスが表示されますので、「プロダクション」カテゴリをクリックし「ビジネスサービス」アイコンをクリック、「OK」ボタンをクリックします。

    3
    0 471
    記事 Mihoko Iijima · 2月 5, 2021 5m read

    これは 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) 管理ポータルの「オブジェクトゲートウェイ」を利用する

    0
    0 497
    記事 Toshihiko Minamoto · 12月 30, 2020 5m read

    皆さん、こんにちは

    前回のつづきとしてESP8266からMQTTブローカーに接続し、データを送信する部分の内容ついて説明したいと思います。

    今回は温度湿度センサーのDHT11と気圧センサーのBME180を使って気温、湿度、気圧を計測し、1分に1回、MQTTブローカーに送信しています。

    ハードウェア

    回路図は以下のようにDHT11のDATAピンはGPIO、BMP180のSDA,SCLピンはそれぞれGPIO2,GPIO5に接続しました。
    電源は紆余曲折の末、単純にmicro USBから供給し、NodeMCUのボードから出力されている3.3Vをそれぞれのセンサーで使用しています。

        

    今回は外気温を測りたかったので、ケースに入れた方が良いと思いましたが、ブレッドボードだと見合った箱がありませんでした。
    そこで、手元にあったユニバーサル基板にESP8266をはんだ付けし、100均で購入した食品保存用の箱に入れてみました。

         

    箱からUSB電源の接続やセンサーとリード線を出す必要がありますので、ニッパで適当に欠きとっています。
    センサーは各ピンとリード線をはんだ付けし、熱収縮チューブで覆っています。BMP180の表面はそのままですが...

          

    ソフトウェア

    ESP8266のプログラムはArduino IDEを利用し、以下のプログラムを書きこんでいます。

    0
    0 2300
    記事 Toshihiko Minamoto · 12月 24, 2020 6m read

    皆さんこんにちは。

    IRIS 2020.1からMQTTアダプタが新たに追加されました。MQTTはPublish/Subscribe型のシンプルで軽量なメッセージングプロトコルです。帯域が低いネットワーク環境やArduinoやRaspberry PIといったワンボードマイコンやシングルボードコンピュータなどでも動作できます。
    今回はクラウド上のUbuntuサーバにIRISをインストールし、MQTTアダプタを使いEsp8266というマイコンで取得した温度、湿度、気圧データをIRIS上のデータベースに登録する方法について説明したいと思います。

    アーキテクチャ

    今回のアーキテクチャは以下の通りです。

     

    データを送受信するマイコンやアプリケーションにMQTTクライアントを組み込み、MQTTクライアントがMQTTブローカーというメッセージを転送するソフトウェアに接続します。

    同じMQTTブローカーにつながっているMQTTクライアントにてメッセージを送信したい場合はPublishメッセージを使用し、メッセージと共にトピックと呼ばれるメッセージの種類を表す文字列を送信します。情報を受信したい場合はSubscribeメソッドを使用し、受信したいトピックを指定します。

    IRISのインストール

    0
    0 1663
    お知らせ Mihoko Iijima · 11月 24, 2020

    開発者の皆さんこんにちは!

    第7回 InterSystems IRIS プログラミングコンテスト(Interoperabilityコンテスト) への応募、投票が全て終了しました。コンテストへのご参加、またご興味をお持ちいただきありがとうございました。

    今回のお知らせでは、見事受賞されたアプリケーションと開発者の方々を発表します!

    🏆  審査員賞 - 特別に選ばれた審査員から最も多くの票を獲得したアプリケーションに贈られます。 

    🥇 1位 - $2,000 は Open API Client Gen を開発された Lorenzo Scalese さんに贈られました!

    🥈 2位 - $1,000 は OCR Service を開発された YURI MARX GOMES さんに贈られました!

    🥉 3位 - $250 は IRIS Interoperability Message Viewer を開発された Henrique Gonçalves Dias さんに贈られました!

    🥉 3位 - $250 は interoperability-integratedml-adapter を開発された José Roberto Pereira さんに贈られました!

    🏆 開発者コミュニティ賞 - 最も多くの票を獲得したアプリケーションに贈られます。

    0
    0 93
    お知らせ Mihoko Iijima · 11月 16, 2020

    開発者の皆さん、こんにちは!

    第 7 回 IRIS プログラミングコンテストの Interoperability コンテストの投票が始まりました!

    これだ!と思う応募作品にぜひ投票お願いします!

    投票は、Expert Nomination または Community Nomination のどちらかで行っていただきます。

    Experts Nomination

    あなたがインターシステムズのプロダクト・マネージャー、InterSystems 開発者コミュニティのモデレーター、またはスペシャリスト・レベル以上のグローバル・マスターであれば、エキスパート推薦(Experts Nomination)に投票してください。


    Community Nomination

    InterSystems 開発者コミュニティで投稿や返信を行った経験がある場合は、コミュニティ推薦(Community Nomination)で投票してください。

    投票は Open Exchange コンテストページで行われ、Open Exchange にサインインする必要があります。

    投票期間であれば、一度投票した後も別のアプリケーションへ投票し直すこともできます。

    なお、コンテスト参加者は投票週間の間にバグの修正やアプリケーションの改善を行うことができますので、アプリケーションのリリース情報についてもお見逃しなく!(サブスクリプション登録が行えます)

    0
    0 85
    記事 Megumi Kakechi · 11月 13, 2020 2m read

    これは InterSystems FAQ サイトの記事です。
     

    管理ポータルから行う手動のパージ(Purge)と、タスクを利用する方法があります。

    データを手動でパージするには、[Interoperability] > [管理] > [管理データの削除] ページを使用します。
    (このページではバックグラウンド・ジョブとしてパージを実行しますので、ページがタイムアウトしても問題ありません。)

    タスクでパージする場合は、[システムオペレーション] > [タスクマネージャ] > [新しいタスク] の画面でInteroperabilityプロダクションのネームスペースを指定し、タスクタイプに「Ens.Util.Tasks.Purge」を指定します。

    タスクの場合は、「TypesToPurge」の項目で以下のパージ対象タイプを選択できます(図参照)。

    • イベント・ログ (Events)
    • メッセージ (Messages)
    • ビジネス・プロセス・ログ (Business Processes)
    • ビジネス・ルール・ログ (Rule Logs)
    • I/O アーカイブ・ログ (I/O Logs)
    • モニター・カウンター (Host Monitor Data)
    • 管理対象アラート (Managed Alerts)  


    詳細は、以下のドキュメントをご参照ください。

    プロダクション・データのパージ【IRIS】


    ※注意

    0
    0 462
    お知らせ Mihoko Iijima · 10月 26, 2020

    開発者の皆さんこんにちは!IRIS プログラミングコンテスト 7 回目のテーマが発表されました!

    今回のコンテストのテーマは ⚡️ InterSystems Interoperability(相互運用性) Contest ⚡️ です!

    日本からのご応募お待ちしております!

    応募期間は 2020年11月2日~15日 です!

    (投票期間は 2020年11月16日~22日、勝者発表は 11月23日を予定しています)

    優勝特典

    1、審査員から多く票を集めたアプリケーションには、以下の賞金が贈られます。

    🥇 1位 - $2,000 

    🥈 2位 - $1,000 

    🥉 3位 - $500

    2、Developer Community で多く票を集めたソリューションには、以下の賞金が贈られます。

    🥇 1位 - $1,000 

    🥈 2位 - $500 

    複数の参加者が同数の票を獲得した場合、全参加者が勝者となり賞金は勝者間で分配されます。

    参加資格

    どなたでもご参加いただけます!(InterSystems 開発者コミュニティのアカウントを作成するだけでご応募いただけます)

    コンテストのスケジュール

    11月2日~15日 応募期間Open Exchange へ作成されたアプリケーションをアップロードいただける期間=2週間です。この期間内であればアップロード後も自由に編集できます。)

    11月16日~22日 投票(1週間)

    2
    0 243
    お知らせ Mihoko Iijima · 11月 2, 2020

    開発者の皆さん、こんにちは!

    Interoperability(相互運用性)コンテストの続報の「テクノロジーボーナス」について紹介します。

    対象となる技術は、以下の通りです。

    • BPL エディタを利用したビジネス・プロセスの開発、または、ビジネスルールとデータ変換(DTL)を使用した開発
    • カスタムアダプタを使用した開発
    • プロダクションエクステンション(PEX)Java または .NET を使用した開発
    • ワークフローエンジンを使用した開発
    • ZPM パッケージによるデプロイが行える開発環境
    • Docker コンテナを使用した開発

    それぞれの詳細については以下ご参照ください。

    BPL エディタを利用したビジネス・プロセスの開発、または、ビジネスルールとデータ変換(DTL)を使用した開発 - 1 point

    IRIS の Interoperability(相互運用性)プロダクションの特徴の1つである、BPL エディタで記述できるビジネス・プロセスがあります。また、ビジネス・ルールは、Interoperability プロダクション内で実行したい処理を、ノーコード/ローコードのアプローチで指定できる開発エディタです(ビジネス・ルールを利用するためには、構築済ビジネス・プロセスを使用します)。

    以下参考ドキュメントをご参照ください。

    0
    0 240
    記事 Mihoko Iijima · 10月 27, 2020 4m read

    皆さん、こんにちは!

    InterSystems IRIS には [Interoperability(相互運用性)]というメニューがあります。

    このメニューには、システム統合を簡単に作成できる仕組み(アダプタ、レコードマップ、BPM、データ変換など)が用意されていて、異なるシステムを簡単に接続することができます。

    例えば、普段繋がっていないシステムを繋げるために相手の仕様に合わせてデータを受信(または送信)したり、データ送信前に別システムから情報を取得して追加したり、データベース(IRIS でもそれ以外でも)から情報を取得したり更新したり、データ中継の流れの中に様々な処理を含むことができます。

    この記事のシリーズでは、Interoperability(相互運用性)でシステム統合を行う際、どのような仕組みで動作するのか、またどのような開発が必要になってくるのか、をご理解いただくためにサンプルコードをご覧いただきながら以下の項目を解説します。

    まずはこのシリーズで使用するテーマをご紹介します。

    0
    2 1412
    記事 Mihoko Iijima · 10月 27, 2020 4m read

    この記事はこちらの投稿の続きの内容です。

    この記事では、Interoperability(相互運用性)メニューを利用してシステム統合を行う際、どのような仕組みで動作しているのかについて解説します。

    図の左側は、外部システムから送信される情報の受け入れ窓口です。

    情報の受信方法としては、ファイルを読むために指定ディレクトリを一定間隔で監視したり、データベースへ定期的に問い合わせを行ったり、入力を待機したり、または他システムのアプリケーションから直接呼び出して渡してもらうなど、様々な方法を用意しています。

    IRIS の Interoperability(相互運用性)メニューで作成するシステム統合の仕組みの中では、受信した情報を メッセージ と呼ぶオブジェクトに格納し、次の処理を担当するコンポーネントへ メッセージ を送信します。
    メッセージ は受信した情報を全て利用して作成することも、一部抜粋した情報のみを利用することも自由に選択できます。

    メッセージ に含まれる情報を外部システムへ 送信したい場合は、外部システムへ処理を依頼する役割があるコンポーネント(図の右側)へメッセージ を送信します。メッセージ を受信したコンポーネントは、外部システムへ処理を依頼します。

    0
    0 1080
    記事 Mihoko Iijima · 10月 27, 2020 7m read

    この記事はこちらの投稿の続きの内容です。

    前回の記事では、Interoperability(相互運用性)メニューを利用してシステム統合を行う際、どのような仕組みで動作しているのかについて解説しました。

    今回の記事では、Interoperability(相互運用性)メニューを利用してでシステム統合を行うためにどのような開発を行うのか、について解説します。

    最初に、どんな流れを作りたいのか?を考えながら、以下の内容を作成していきます。

    • プロダクション
    • メッセージ
    • コンポーネント
      • ビジネス・サービス
      • ビジネス・プロセス
      • ビジネス・オペレーション

    プロダクション については、システム統合を行うために必要なコンポーネントの指定と、コンポーネントの設定を保存しておくため定義で、管理ポータルを使用して設定します(内部的にはプロダクション用クラス定義として保存されます)。

    例えば、一定間隔で指定ディレクトリに置かれたファイルを処理するビジネス・サービスを作成している場合、「どのディレクトリを監視するのか」「どのファイルを処理したらいいのか」を具体的に設定します。この設定を保存するために用意するのが プロダクション です。

    なお、設定内容はデータを送受信するコンポーネントが使用するアダプタにより異なります。

    0
    0 1192
    記事 Mihoko Iijima · 10月 27, 2020 4m read

    この記事はこちらの投稿の続きの内容です。

    前回の記事では、プロダクションとは?について確認しました。また、サンプルコードを動かしながらプロダクションに流れるメッセージの中身をトレース画面で確認しました。

    今回は記事では、システム統合を行うための必要な開発内容の中から、コンポーネント間のデータ送受信に使用される メッセージ について、作成するときの考え方や定義方法を確認していきます。

    • プロダクション(前回の記事)
    • メッセージ
    • コンポーネント
      • ビジネス・サービス
      • ビジネス・プロセス
      • ビジネス・オペレーション

    メッセージ を作成する前に、サンプルのテーマを再度確認しましょう。

    ショッピングサイトを運営している会社があり、季節に合わせ商品情報の表示順を変更する作業を行っています。
    ところが、季節を問わず良く売れるもの、想定しなかった時期に売れるものもあり、現在の表示順変更ルールにうまく合いません。
    そこで、季節に合わせた表示順ではなく、そのときの気温にあわせた表示順に変更できないか検討した結果、購入物品に対してそのときの気温を調査する必要が出てきました。
    気象情報の確認には、外部の Web API が利用できるため、購入されたタイミングで気象情報を収集し、後で確認できるようにデータベースに情報を登録していく予定です。

    このテーマから、以下の内容が確認できます。

    0
    0 664
    記事 Mihoko Iijima · 10月 27, 2020 12m read

    この記事はこちらの投稿の続きの内容です。

    前回の記事では、コンポーネント間のデータ送受信に使用される メッセージ について、作成するときの考え方や定義方法を確認しました。

    今回の記事では、コンポーネントの作成方法の中から、ビジネス・オペレーションの作成について解説します。

    早速サンプルを参照しながらコードを確認します。

    0
    0 993
    記事 Mihoko Iijima · 10月 27, 2020 8m read

    この記事はこちらの投稿の続きの内容です。

    前回の記事では、システム統合に必要なコンポーネントの中から、ビジネス・オペレーションの作成について解説しました。

    今回の記事では、確認した2つのビジネス・オペレーションを順番を守って呼び出しを行うビジネス・プロセスの作成について解説します。

    ビジネス・プロセスは処理の調整役(司令塔)として働きます。

    サンプルの中で行いたい処理の調整は、以下の内容です。

    手順①    外部の Web API に都市名を渡し気象情報を問い合わせる
    手順②    ①の問合せ結果(気象情報)と、処理開始時に受信した購入商品名をDBへ登録する

    サンプルのビジネス・プロセスでは、手順① の回答を待って手順② を動かすように調整します。

    回答を待つ処理(=同期を取る処理)ですが、例えば、手順① が数日返ってこない場合、どうなるでしょうか?

    数日回答を待ち続けている間にビジネス・プロセスへ次々に新メッセージが渡された場合、メッセージは一旦キューに格納されるため消失しませんが、新メッセージの処理をビジネス・プロセスが実行できず処理に遅延が発生します。

    メモ: ビジネス・プロセスとビジネス・オペレーションにはキューがあります。

    0
    0 788
    記事 Mihoko Iijima · 10月 27, 2020 10m read

    この記事はこちらの投稿の続きの内容です。

    前回の記事では、システム統合に必要なコンポーネントの中から、プロダクション内の処理の調整役となるビジネス・プロセスの作成について解説しました。

    今回の記事では、プロダクションの情報入力窓口である、ビジネス・サービスの作成について解説します。

    いよいよ「Interoperability(相互運用性)を使ってみよう!」の最後のコンポーネントです。

    ビジネス・サービスは、IRIS 外部からの送信される情報の入力窓口で、外部 I/F に対してアダプタを使用する/しないを選択できます。

    サンプルでは、3 種類のビジネス・サービスを用意しています(括弧内のリンクはサンプルコードへのリンク)。

    1. ファイルインバウンドアダプタを利用したファイル用ビジネス・サービスStart.FileBS) 
    2. SOAP インバウンドアダプタを利用する Web サービス用ビジネス・サービスStart.WS.WebServiceBS
    3. アダプタを使用せず、ストアドプロシージャや REST で呼び出されるビジネス・サービスStart.NonAdapterBS
    0
    0 916
    記事 Tomohiro Iwamoto · 10月 22, 2020 12m read

    リモートや在宅での勤務が一般化しつつあります。

    そのため、今までの集中型、オンサイトの開発体制を見直し、分散型の開発体制への移行を進めておられるユーザさんも多いのではないかと思います。

    VSCodeを使用したIRISアプリケーションの開発が、コミュニティーを中心に広まり始めて久しいですが、Gitとの相性が良いこの開発ツールが今後さらに浸透していくことは間違いありません。あちらこちらで、その使いまわし方が語られていますが、ここでは、ソースコントロールとの関連を中心にご紹介したいと思います。

    ObjectScript Extensionの使い方の基本については、こちらこちらをご覧ください。

     VSCode InterSystems ObjectScript Extensionのプロダクションリリース(V1.0.x)の配布が始まりました。  

    これに合わせて、今までのコミュニティーサポートに加え、InterSystemsによる公式サポートもアナウンスされています。よりいっそう安心してご利用いただけるようになりました。

    目的

    0
    1 3198
    お知らせ Mihoko Iijima · 8月 31, 2020

    皆さんこんにちは。

    第5回 InterSystems IRIS プログラミングコンテスト(FHIRコンテスト) への応募は終了しました。コンテストへのご参加、またご興味をお持ちいただきありがとうございました。

    今回のお知らせでは、見事受賞されたアプリケーションと開発者の方々を発表します!

    🏆 審査員賞 - 特別に選ばれた審査員から最も多くの票を獲得したアプリケーションに贈られます。

    🥇 1位 - $1,500 は iris-fhir-portal を開発された Henrique Gonçalves Dias さんに贈られました!

    🥇 1位  - $1,500 は iris4health-fhir-analytics を開発された José Roberto Pereira さんに贈られました!

    🥉 3位  - $500 は fhir-chatbot を開発された Renato Banzai さんに贈られました!

    🏆 開発者コミュニティ賞 - 最も多くの票を獲得したアプリケーションに贈られます。

    🥇 1位 - $1,000 は iris-fhir-portal を開発された Henrique Gonçalves Dias さんに贈られました!

    🥈 2位 - $500 は iris4health-fhir-analytics を開発された José Roberto Pereira さんに贈られました!

    0
    0 133
    記事 Toshihiko Minamoto · 7月 26, 2020 6m read

    はじめに

    システム開発では、集計作業や他システムとの連携など、数十秒ごとにバックグラウンドで処理を実行する、常駐プロセスが必要になるケースが多々あるかと思います。

    Cachéでは、Jobコマンドを使って常駐プロセスを作成しますが、実際にシステムを安定稼働させるには、以下の監視の仕組みが必要でした。

    • 常駐プロセスの監視 常駐プロセス起動時にロックをかけ、二重起動を防止したり、プロセスが起動しているかどうかを監視する
    • ログ 常駐プロセスの処理状況や発生したエラーを記録し、処理が行われているどうかを監視する

    IRISの場合、Interoperabilityにはこれらの機能が装備されています。したがって、Interoperabilityの機能を使えば、簡単に常駐プロセスを起動、監視することができます。

    常駐プロセスの作り方

    常駐プロセスの作成には以下の作業を行います。

    1. ビジネスサービスの作成 定期的に処理を行うビジネスサービスと呼ばれるクラスの作成
    2. 常駐プロセスの処理の記述 作成したビジネスサービスに、実施したい処理を記述
    3. プロダクションの作成 起動したい常駐プロセスを設定、監視するプロダクションの作成

    1.ビジネスサービスの作成

    スタジオを起動、常駐プロセスを実行するネームスペースに接続し、「ファイル」メニューの「新規作成...」をクリックします。

    0
    0 632
    記事 Minoru Horita · 7月 24, 2020 1m read

    この連載記事では、InterSystemsデータプラットフォーム用のPython Gatewayについて説明します。 また、InterSystems IRISからPythonコードなどを実行します。 このプロジェクトは、InterSystems IRIS環境にPythonの力を与えます。

    • 任意のPythonコードを実行する
    • InterSystems IRISからPythonへのシームレスなデータ転送
    • Python相互運用アダプタでインテリジェントな相互運用ビジネスプロセスを構築する
    • InterSystems IRISからのPythonコンテキストの保存、調査、変更、復元

    その他の記事

    現時点での連載計画です(変更される可能性があります)。

    はじめに

    前回はターミナルからPython Gatewayを試しましたが、今回は相互運用性プロダクションを介してPythonゲートウェイを使ってみましょう。 この記事では、Pythonの重要な相互運用性インターフェースである isc.py.ens.Operation について説明します。 このインターフェースにより、次のことが可能になります。

    • Pythonコードを実行してリクエストされた変数を返す(文字列/ストリーム)
    • コンテキストを保存/復元する
    • Pythonにデータを読み込む

    一般的に言えば、これは isc.py.Main の相互運用ラッパーです。 相互運用アダプタである isc.py.ens.Operationは、相互運用性プロダクションからPythonプロセスと対話する機能を提供します。 現在、5つのリクエストがサポートされています。

    • isc.py.msg.ExecutionRequest を介してPythonコードを実行します。 リクエストされた変数値を含む isc.py.msg.ExecutionResponse を返します。
    • isc.py.msg.StreamExecutionRequest を介してPythonコードを実行します。 リクエストされた変数値を含む isc.py.msg.StreamExecutionResponse を返します。 上記と同じですが、文字列ではなくストリームを受け付けて返します。
    • isc.py.msg.QueryRequest を使用してSQLクエリからデータセットを設定します。 Ens.Response を返します。
    • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest を使用してグローバル/クラス/テーブルからより高速にデータセットを設定します。 Ens.Response を返します。
    • isc.py.msg.SaveRequest を介してPythonコンテキストを保存します。 コンテキストIDを含む Ens.StringResponse を返します。
    • isc.py.msg.RestoreRequest 経由でPythonコンテキストを復元します。

    ただし、isc.py.ens.Operation には次の2つの設定があります。

    • Initializer - isc.py.init.Abstract を実装するクラスを選択します。 関数、モジュール、クラスなどを読み込むために使用できます。 プロセスの開始時に実行されます。
    • PythonLib - (Linuxのみ)読み込みエラーが表示される場合、これを libpython3.6m.so か共有ライブラリのフルパスに設定します。

    ビジネスプロセスの記述

    次のような、ビジネスプロセスの開発を容易にする2つのユーティリティクラスがあります。

    • isc.py.ens.ProcessUtilsを使用すると、変数を置換してアノテーションを取得できます。
    • isc.py.util.BPEmulator を使用すると、Pythonの相互運用ビジネスプロセスを簡単にテストできます。 現在のジョブで、ビジネスプロセス(Python部分)を実行できます。

    変数の置換

    isc.py.ens.ProcessUtils を継承するすべてのビジネスプロセスは、GetAnnotation(name) メソッドを使用し、アクティビティ名を指定してアクティビティのアノテーションを取得できます。 アクティビティのアノテーションには、Pythonに渡される前にObjectScript側で計算される変数を含めることができます。 以下は、変数置換の構文です。

    • ${class:method:arg1:...:argN} - メソッドを実行します
    • #{expr} - ObjectScriptコードを実行します

    例えば、Correlation Matrix: Graph アクティビティ: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png') でテスト isc.py.test.Process ビジネスプロセスをチェックします。

    この例の場合:

    • #{process.WorkDirectory} は、isc.py.test.Process クラスと現在のビジネスプロセスのインスタンスである process オブジェクトの WorkDirectory プロパティを返します。
    • ${%PopulateUtils:Integer:1:100}1100 の引数を渡す %PopulateUtils クラスの Integer メソッドを呼び出し、 1...100 の範囲でランダムな整数を返します。

    ビジネスプロセスのテスト

    テスト相互運用性プロダクションとテストビジネスプロセスは、デフォルトでPythonゲートウェイの一部として使用できます。 これらは以下の手順で使用できます。

    1. OSのbashシェルで、pip install pandas matplotlib seaborn を実行します。
    2. do ##class(isc.py.test.CannibalizationData).Import() を実行してテストデータを生成します。
    3. isc.py.test.Production プロダクションを起動します。
    4. 空の Ens.Request メッセージを isc.py.test.Process に送信します。

    これらがどのように連携するか見てみましょう。 isc.py.test.Process をBPLエディタ(またはStudio)で開いてください。

    コード実行の呼び出し

    以下は、Python コードを実行するのに最も重要な呼び出しです。

    リクエストは isc.py.msg.ExecutionRequest であり、プロパティは次のとおりです。

    • Code - 実行するPythonコードです。
    • SeparateLines - 受信メッセージを実行用に複数の行に分割します。 $c(10) (\n) が行の分割に使用されます。 メッセージ全体を一度に処理することはお勧めしません。この機能は、def や同様の複数行式の処理にのみ使用できます。 デフォルト値は0です。
    • Variables - 応答メッセージで取得する変数をカンマで区切ったリストです。
    • Serialization - 返したい変数のシリアライズ方法です。Str / Repr / JSON / Pickle / Dill のオプションがあり、デフォルト値は Str です。

    この例では Code プロパティのみを設定していますので、残りのプロパティはすべてデフォルト値になっています。 私たちはこれを、実行時に変数置換を実行した後にアノテーションを返す process.GetAnnotation("Import pandas") を呼び出して設定しました。 最終的には、import pandas as pd 文字列がPythonに渡されます。 GetAnnotation は複数行のPythonスクリプトをセットアップするのに役立ちますが、制限はありません。 Code プロパティは好きなように設定できます。

    変数取得の呼び出し

    他にも isc.py.msg.ExecutionRequest を使用する Correlation Matrix: Tabular という興味深い呼び出しがあります。

    これはPython側でCorrelation Matrixを計算して corrmat を取得し、次のようにリクエストにプロパティを設定してInterSystems IRISにJSON形式で返します。

    • Variables: "corrmat"
    • Serialization: "JSON"

    結果は次のように視覚的なトレースで確認できます。

    また、これが今後ビジネスプロセスで必要な場合は、callresponse.Variables.GetAt("corrmat") を使って保存できます。

    データ転送の呼び出し

    次に、InterSystems IRISからPythonへのデータ転送について説明します。すべてのデータ転送リクエストは、以下の共通プロパティを提供する isc.py.msg.DataRequest を拡張します。

    • Variable - 設定するPython変数です。
    • Type - 変数の型。現在は、dataframe(pandasのデータフレーム)と list がサポートされています。
    • Namespace - データを取得するネームスペースです。 'isc.py' パッケージをこのネームスペースで使用できる必要があります。

    その上に以下の4つの具象クラスがあります。

    • isc.py.msg.QueryRequest - SQL結果セットを転送するために Query プロパティを設定します。
    • isc.py.msg.ClassRequest - クラスデータを転送するために Class プロパティを設定します。
    • isc.py.msg.TableRequest - テーブル全体を転送するために Table プロパティを設定します。
    • isc.py.msg.GlobalRequest - グローバルを転送するために Global プロパティを設定します。

    このテストプロセスでは、RAW 呼び出しをチェックして isc.py.msg.QueryRequest の動作を確認します。

    Pythonコンテキスト呼び出しの保存/復元

    最後に、PythonコンテキストをInterSystems IRISに永続化します。そのためには、次を指定して isc.py.msg.SaveRequest を送信してください。

    • Mask - Mask を満たす変数のみが保存されます。 ワイルドカード * および ? を使用できます (例:"Data*,Figure?")。 デフォルト値は * です。
    • MaxLength - 保存される変数の最大長です。 変数をシリアライズした結果がこの値よりも長い場合、結果は無視されます。 すべてを取得するには、0に設定してください。 デフォルト値は $$$MaxStringLength です。
    • Name - コンテキスト名です(任意)。
    • Description - 拡張コンテキスト情報です(任意)。

    例えば、テストプロセスでは Save Context の呼び出しをチェックします。 保存されたコンテキストの Id を含む Ens.StringResponse を返します。

    対応する isc.py.msg.RestoreRequest はInterSystems IRISからPythonにコンテキストを読み込みます。

    • ContextId - 復元するコンテキストの識別子。
    • Clear - 復元前にコンテキストをクリアします。

    要約

    Python Gatewayを使用すると、InterSytems IRISとPythonをシームレスに統合できます。 これを使用し、Pythonの機能を相互運用性プロダクションに追加してください。

    リンク

    イラスト付きガイド

    ML Toolkitユーザーグループには、イラスト付きのガイドもあります。 ML Toolkitユーザーグループは、InterSystems社のGitHub組織の一部として設定されている非公開GitHubリポジトリです。 このリポジトリは、Python Gatewayを含むML Toolkitコンポーネントをインストール、学習、またはすでに使用している外部ユーザーを対象としています。 ML Toolkitユーザーグループに参加するには、以下の内容を含む簡単なメールを MLToolkit@intersystems.com 宛に送信してください(グループメンバーが議論中にあなたを認識して特定するために必要です)。

    • GitHubのユーザー名
    • 氏名(英文字表記の名前、姓の順)
    • 組織(勤務先、通学先、または在宅勤務)
    • 役職(組織での実際の役職、「学生」、または「無所属」)
    • 国(本拠地としている国)
    0
    0 200