検索

クリアフィルター
記事
Megumi Kakechi · 2024年12月26日

別の場所に保存したジャーナルを見る方法

これは InterSystems FAQ サイトの記事です。 ジャーナルファイルの中身を参照したい場合、通常は管理ポータルで参照します。 管理ポータル:[システムオペレーション] > [ジャーナル] : (該当ジャーナルの名前)参照 リンクをクリック こちらのページで、外部に保存したジャーナルファイルも参照することができることをご存じでしょうか? 以下のように、ID= の後ろにジャーナルのファイルパスを指定することで、ジャーナルファイルの中身を管理ポータルで参照することが可能です。 http://localhost/iris/csp/sys/op/UtilSysJournal.csp?$ID1=C:\temp\20240826.002z ジャーナルファイルは、YYYYMMDD.001 の形式でも、YYYYMMDD.002z のような圧縮形式のどちらでも参照可能です。(ジャーナル圧縮対応バージョン:2022.1 及び 2021.2~) また、ミラージャーナルファイル(例:C:\temp\MIRROR-MIRRORSET-20240826.001z)も同様に参照可能です。 是非お試しください。 【ご参考】ジャーナルファイルの内容を管理ポータル以外で参照する方法
記事
Tomoko Furuzono · 2025年1月17日

組み込みPython(Embedded Python)でのPythonバージョンの選択

これは、InterSystems FAQサイトの記事です。 2024.1以降のバージョンにおいて、組み込みPython実行時のPythonのバージョンを自由に選択できるようになりました。(フレキシブル Python ランタイム機能)これにより、新しいPythonバージョンへアップグレードや、特定のディストリビューションを使用する、などということが可能になります。ドキュメント:フレキシブル Python ランタイム機能の概要但し、オペレーションシステム及びIRISのバージョンによってサポート状況は異なります。詳細は、下記ドキュメントページをご確認ください。IRIS/IRIS for Health 2024.1最新バージョン※間のバージョンについては、それぞれ各バージョンのドキュメントをご確認ください。  また、Embedded Pythonの最新情報については、下記セミナー動画もご参考になさってください。開発者向けオンラインセミナー:Embedded Pythonの新機能※フレキシブルPythonランタイムについては、3'40"あたり~
記事
Hiroshi Sato · 2025年3月3日

計算プロパティの使用方法1

これは InterSystems FAQ サイトの記事です。 IRISには、データ項目の値を実体として持たずに、何らかの演算処理の結果として提供する機能があります。 これを計算プロパティまたは計算フィールドといいます。 計算プロパティを定義するためには、最低限以下の手順を実行します。 プロパティ定義にSqlComputedキーワードを含めます。 プロパティ定義にSqlComputedCodeを含めて、値を算出するための処理ロジックとして含めます。 または、SqlComputedCodeを含めずに、代わりに<プロパティ名>Computationという名前のクラスメソッドを記述します。 以下は、Age(年齢)プロパティを計算プロパティとして定義した例になります。 Class Sample.Person Extends %Persistent {            Property FirstName As %String;          Property LastName As %String;          Property DOB As %Date;        Property Age As %Integer [ SqlComputed ]; // ... ClassMethod AgeComputation(cols As %Library.PropertyHelper) As %Integer { set today = $zdate($now(),8) set bdate = $zdate(cols.getfield("DOB"), 8) return $select(bdate = "":"", 1:(today - bdate) \ 10000) } } 計算フィールドの詳細は、以下を参照してください。計算プロパティの定義
質問
Kota Torikai · 2021年3月5日

Ubuntu 20.04.2でのDocker, IRIS(DL製品版)導入-起動までのメモ

<Ubuntu-Docker> https://qiita.com/tkyonezu/items/0f6da57eb2d823d2611d 手順を参照 手順2.1-2.5までを実行→Docker環境ができる <Docker-IRIS> 1. 端末などでディレクトリ /home/usr/docker/iris2020.3 を作成(ディレクトリ名は任意) 2. 上記ディレクトリに、インターシステムズから送られるDLサイトからダウンロードしたirishealth_ml-2020.3.0.304.0-docker.tar.gz を置く 2.1 上記ディレクトリに、データベース・設定を保存するディレクトリを作成(/home/usr/docker/iris2020.3/mgr とする) 3. 上記ディレクトリに、ライセンスされたキーであるiris.keyを置き、端末コマンドcdで上記ディレクトリに移動 4. コマンド実行(tar.gzのままimageのload) sudo docker load -i /home/usr/docker/iris2020.3/irishealth_ml-2020.3.0.304.0-docker.tar.gz 5. コマンドdocker imagesでREPOSITORY:TAG名称を確認 sudo docker images intersystems/irishealth-ml:2020.3.0.304.0 runで使用する名称はREPOSITORYとTAGの間を : で繋いだものになる 6. コマンド実行(run) ポート、ディレクトリ、image名称を正確に入力する --env ISC_DATA_DIRECTORY で2.1で作成したディレクトリを指定 sudo docker run --name iris --detach --publish 52773:52773 --volume /home/usr/docker/iris2020.3:/external --env ISC_DATA_DIRECTORY=/external/mgr intersystems/irishealth-ml:2020.3.0.304.0 --key /external/iris.key --name iris の"iris"は起動名(任意) 7.コマンド実行(start) 起動名を合わせる sudo docker start iris 8. docker psコマンドで起動したかを確認 sudo docker ps 9.Webブラウザ(UbuntuデフォルトはFireFox)のURLに以下を入力して初期起動 http://localhost:52773/csp/sys/UtilHome.csp デフォルトログインは login: _SYSTEM, pass: SYS で、起動時に変更を求められるため、これを変更すると管理ポータルが表示される (52773 ポートはデフォルト、もし変更していれば適宜合わせる) 10.docker exec によるIRISターミナル接続方法sudo docker exec -ti iris iris terminal iris (最初のirisは起動名、後ろ2つのirisは指定されたプログラム名であることに注意) 鳥飼先生、 貴重なご投稿ありがとうございます。これからDockerに取り組もうとしているコミュニティの方々に大変役に立つ記事だと思います。 さて、すでにご存知かもしれませんが、1点念のためにお伝えした方が良いと思い、返信します。 docker環境でのシステムデータベースや設定ファイルは、コンテナの内部に作成されますので、docker rm コマンドでコンテナを削除すれば、コンテナstartから更新された設定などもなくなってしまいます。また、dockerコンテナ内のファイルとして作成したデータベースも同様です。 システムデータベースをコンテナの外部に構築し、コンテナのライフサイクルを越えてシステムデータベースや各種設定を維持するには、"Durable %SYS"と呼ばれる仕組みを使います。 具体的には、 sudo docker run --name iris --detach --publish 52773:52773 --volume /home/usr/docker/iris2020.3:/external --env ISC_DATA_DIRECTORY=/external/iris intersystems/irishealth-ml:2020.3.0.304.0 --key /external/iris.key と ISC_DATA_DIRECTORY環境変数に外部ファイルシステムのディレクトリを指定します。そうすると、コンテナをrmした場合や、イメージを更新して新たにコンテナを作成した場合も、システムデータベースや設定ファイルの内容はが引き継がれます。 自分でデーターベースを作成する際に、/externalファイルシステムに作成すると、そのデータベースもコンテナのライフサイクルを越えて保持されます。 以上、念のためご確認ください。 堀田様、 お忙しい所フォローありがとうございます。実はご指摘の(データベース等をdockerサイクルによらず保存する方法)について質問をしようとしていたところで、大変助かります。 利用法のデフォルトで記載されているとよい内容と思いますので、編集して追記させていただきます。
記事
Toshihiko Minamoto · 2023年12月14日

IRIS コンテナに VSCode を追加する

# IRIS コンテナに VSCode を追加する 繰り返し利用できる開発環境をセットアップするには、環境用のコンテナを起動するのが最も簡単な方法の 1 つです。 素早く繰り返す際には、自分の開発コンテナ内に vscode インスタンスをホストするのが非常に便利なことが分かりました。 そこで、ブラウザベースの vscode を IRIS コンテナに追加するための簡易コンテナスクリプトを作成しました。 これは、ほとんどの 2021.1+ のコンテナで動作するはずです。 [私のコードリポジトリはこちらにあります](https://github.com/nickmitchko/Hosting-vscode-in-a-container)。 > vscode を含み事前に接続された InterSystems IRIS コンテナ | 認証情報 | 値 | | ----- |:-------:| | ユーザー | _SYSTEM | | パスワード | SYS | ![画像](/sites/default/files/inline/images/hostedvscodebanner.gif) ## 概要 このプロジェクトでは、ホストされた(Web ベース)バージョンの vscode を同じコンテナ内で利用できる IRIS コンテナを作成します。 これには、以下が含まれます。 * 同じコンテナコードの編集 * コンテナの IRIS インスタンスへの事前接続 * 管理ポータルからのリンク * コンテナによる IDE の自動起動 # クイックスタート 1. [ダウンロード](https://github.com/nickmitchko/Hosting-vscode-in-a-container/archive/refs/heads/master.zip)するか、`git clone https://github.com/nickmitchko/Hosting-vscode-in-a-container.git` を実行します。 2. プロジェクトのルートで次を実行します: `docker build . -t vscode-irishealth-ml:latest --no-cache` 3. `docker-compose up` を実行します。 * Docker Compose を使用していませんか? [こちら](#No-Docker-Compose)をご覧ください。 4. [管理ポータル](http://localhost:52773/csp/sys/%25CSP.Portal.Home.zen)に移動します。 5. このガイドの始めにあるユーザーとパスワードを使ってログインします。 6. お気に入りのペインで VSCODE リンクをクリックします。 7. プロンプトが表示されたら、vscode で同じパスワードを使用して IRIS インスタンスに接続します。 ```bash # プロジェクト用の新しいフォルダ mkdir vscode-iris cd vscode-iris # ここでリポジトリをクローン git clone https://github.com/nickmitchko/Hosting-vscode-in-a-container.git . # イメージをビルド docker build . -t vscode-irishealth-ml:latest --no-cache # (A) または (B) のいずれかを実行 # # (A) Compose ファイルを実行 docker-compose up # または (B) デーモンを使用する場合 docker-compose up -d ``` ## 永続性を追加する 永続的な IRIS インスタンスを使用する場合は、docker-compose.yml ファイルの 16 行目から 20 行目のコメントを解除します。 これにより、コンテナに永続ストレージマウントが追加されます。 ```yml volumes: - "./durable/:/durable/" environment: - ISC_DATA_DIRECTORY=/durable/iconfig ``` ## ベースイメージを変更する このイメージは、InterSystems 開発者コミュニティ zpm イメージに基づいてビルドされています([こちらにあります](https://hub.docker.com/r/intersystemsdc/iris-community/tags))。 これらのイメージには、パッケージリポジトリから簡単にインストールれきる zpm コマンドが含まれていますが、90 日間のコミュニティライセンスしか付帯していません。 ビルドに使用されているイメージタグは以下のとおりです。 ```dockerfile FROM intersystemsdc/irishealth-ml-community:latest ``` イメージを変更する場合は、Docker ファイルの最初の行を希望するイメージタグ(カスタム IRIS インスタンスか[サポートされているインスタンス](https://docs.intersystems.com/components/csp/docbook/DocBook.UI.Page.cls?KEY=PAGE_containerregistry#PAGE_containerregistry_public)のいずれか)に変更してください。 以下に例を示します。 ```dockerfile FROM containers.intersystems.com/intersystems/irishealth-community:2021.2.0.651.0 ``` # Docker-Compose を使用しない場合 Docker Compose を使用しない場合でも、以下のようにしてコンテナを実行できます。 ```bash # コンテナをビルドした後 # --after コマンドは必須 docker run --name vscode -d \ --publish 1972:1972 \ --publish 52773:52773 \ --publish 51773:51773 \ --publish 53773:53773 \ --publish 8080:8080 \ --publish 8888:8888 \ vscode-irishealth-ml:latest \ --after "/bin/bash /install/boot.sh" ```
記事
Toshihiko Minamoto · 2023年7月24日

Embedded Python を使ってストアドプロシージャを作成する

Python は世界で最も使用されているプログラミング言語になり(出典: https://www.tiobe.com/tiobe-index/)、SQL はデータベース言語としての道をリードし続けています。 Python と SQL が連携して、SQL だけでは不可能であった新しい機能を提供できれば、素晴らしいと思いませんか? 結局のところ、Python には 380,000 を超える公開ライブラリがあり(出典: https://pypi.org/)、Python 内で SQL クエリを拡張できる興味深い機能が提供されています。 この記事では、Embedded Python を使用して、InterSystems IRIS データベースに新しい SQL ストアドプロシージャを作成する方法を詳しく説明します。 ## サンプルとして使用する Python ライブラリ この記事では、IRIS で SQL を扱う人にとって非常に便利な GeoPy と Chronyk という 2 つのライブラリを使用します。  Geopy は、ジオコーディング(住所と地理座標の修飾)を住所データに適用するために使用するライブラリです。 これを使用すると、通りの名前から郵便番号と完全な住所を郵便局の形式で取得することができます。 多くのレコードには住所が含まれるため、非常に便利です。 Chronyk は、人間の言語で日付と時刻を処理するために使用されます。 これは、IRIS と Python の両方において、日付は内部的に最初の日付から経過した時間を表す数字でたるため、非常に便利です。 人間の場合、日付は 7 月 20 日、または昨日や明日、または 2 時間前と表現しますが、 Chronyk では、このような日付を受け取って、ユニバーサル日付形式に変換します。 ## InterSystems IRIS への Python サポート バージョン 2021.1 より、Python を使用してクラスメソッド、ストアドプロシージャ、相互運用プロダクション、Python と IRIS(ObjectScript)間の双方向のネイティブ呼び出しを作成できるようになりました。 Python とこれほど深く連携するデータプラットフォームを他に知りません。 これが機能するためには、要件として、Python が IRIS と同じ同じ物理マシンか仮想マシンまたはコンテナにインストールされている必要があります。 詳細は、https://docs.intersystems.com/iris20221/csp/docbook/DocBook.UI.Page.cls?KEY=AFL_epython をご覧ください。 Python をインストールするには、以下を実行します。 # install libraries required for python and pip RUN apt-get -y update \     && apt-get -y install apt-utils \     && apt-get install -y build-essential unzip pkg-config wget \     && apt-get install -y python3-pip   ## InterSystems IRIS への Python ライブラリサポート InterSystems IRIS が Python ライブラリを使用できるようにするには、Python ライブラリが <installdir>/mgr/python にインストールされている必要があります。 installdir は IRIS がインストールされているフォルダです。 新しいパッケージをインストールするには、以下を実行します。 # use pip3 (the python zpm) to install geopy and chronyk packages RUN pip3 install --upgrade pip setuptools wheel RUN pip3 install --target /usr/irissys/mgr/python geopy chronyk Pip3 は Python の最も一般的なパッケージマネージャーおよびインストーラー Pip です。 ## Python 言語でストアドプロシージャを作成する InterSystems IRIS で Python を使用する可能性の 1 つは、Python を使用してストアドプロシージャを作成することです。 以下の 2 つの可能性があります。 1. Create 関数またはプロシージャの SQL 文を使用したストアドプロシージャ Python の作成。 2. sqlProc タグと language=Python タグを使用した ObjectScript クラス内での ClassMethod の作成。 ### Create プロシージャの SQL 文を使用したストアドプロシージャ Python の作成 InterSystems ドキュメントによると、以下に示すとおり、CREATE ステートメントに LANGUAGE PYTHON 引数を指定することで、Embedded Python を使って SQL 関数またはストアドプロシージャを記述することもできます(出典: https://docs.intersystems.com/iris20221/csp/docbook/DocBook.UI.Page.cls?KEY=AEPYTHON#AEPYTHON\_runpython\_sql)。 CREATE FUNCTION tzconvert(dt TIMESTAMP, tzfrom VARCHAR, tzto VARCHAR) RETURNS TIMESTAMP LANGUAGE PYTHON { from datetime import datetime from dateutil import parser, tz d = parser.parse(dt) if (tzfrom is not None): tzf = tz.gettz(tzfrom) d = d.replace(tzinfo = tzf) return d.astimezone(tz.gettz(tzto)).strftime("%Y-%m-%d %H:%M:%S") } この新しい SQL 関数を実行する場合: SELECT tzconvert(now(), 'US/Eastern', 'UTC') 関数は以下のようなものを返します。 2022-07-20 15:10:05 ### sqlProc タグと language=Python タグを使用した ObjectScript クラス内での ClassMethod の作成 正直に言うと、sqlProc タグと language=Python タグを使って ClassMethod を作成するこのアプローチが私のお気に入りです。 私の意見では、管理しやすく、十分な文書化で明確に示されており、ソースコードバージョンの管理もうまく行えます。 このアプローチのためのサンプルアプリケーションを公開しました(https://openexchange.intersystems.com/package/Python-IRIS-SQL-Procedures-Sample)。 これを使用して、この 2 番目のアプローチを詳しく説明します。 ## サンプルアプリケーションのインストール サンプルアプリケーションをインストールするには、以下の手順に従います。 1. リポジトリを任意のローカルディレクトリに Clone/git pull します。 $ git clone https://github.com/yurimarx/iris-sql-python-sample.git このディレクトリで Docker ターミナルを開き、以下を実行します。 $ docker-compose build IRIS コンテナを実行します。 $ docker-compose up -d もう 1 つのインストール方法は、ZPM を使用する方法です。 zpm "install iris-sql-python-sample" ## Python を使用したストアドプロシージャのサンプル 最初の例は、住所のジオコーディングを処理するストアドプロシージャです。ソースコードを参照してください。 ClassMethod GetFullAddress(Street As %String, City As %String, State As %String) As %String [ Language = python, SqlName = GetFullAddress, SqlProc ] {     import geopy.geocoders     from geopy.geocoders import Nominatim     geopy.geocoders.options.default_timeout = 7     geolocator = Nominatim(user_agent="intersystems_iris")     location = geolocator.geocode(Street + ", " + City + ", " + State, country_codes="US")     return location.address } ClassMethod が [ Language = python, SqlProc] タグで(dc.pythonsql.Company クラス内に)宣言されているのが分かります。 SqlName タグによって、新しいストアドプロシージャの名前を SQL 分に設定できます。 管理ポータルの[システム]>[SQL]に移動し、以下のコードを実行します。 SELECT ID, City, Name, State, Street, Zip, dc_pythonsql.GetFullAddress(Street, City, State) As FullAddress FROM dc_pythonsql.Company 結果が表示されます。 ![Geopy](https://github.com/yurimarx/iris-sql-python-sample/raw/main/screen1.png "Geopy SQL ストアドプロシージャの実行") 不完全な住所から「完全な」住所(完全修飾)が返されるようになりました。 _注意: 何も返されない場合は、#class(dc.pythonsql.Company).CreateFiveCompanies() を実行してください。 テストに使用する 5 つの会社が作成されます。_ このパッケージは、主なオープンのジオコーディングサービスと有料のサービスと連携できます。 この例では、Nominatim というオープンサービスを使用していますか、Bing、Google、ArcGIS などを使用することも可能です。 利用可能なサービスについて、https://geopy.readthedocs.io/en/stable/#module-geopy.geocoders をご覧ください。 2 つ目の例は、人間が読み取れる形式による Chronyk という日付と時刻のパッケージです。 「明日」、「昨日」、「今から 4 時間後」、「2022 年 7 月 4 日」などの文を送信し、ユニバーサル日付形式の結果を取得できます。 ストアドプロシージャの作成を参照してください。 ClassMethod GetHumanDate(Sentence As %String) As %String [ Language = python, SqlName = GetHumanDate, SqlProc ] {     from chronyk import Chronyk     t = Chronyk(Sentence)     return t.ctime() } 管理ポータル >[システム]>[SQL]で、以下の呼び出しを実行します。 SELECT ID, City, Name, State, Street, Zip, dc_pythonsql.GetHumanDate('yesterday') As Datetime FROM dc_pythonsql.Company 結果が表示されます。 ストアドプロシージャを呼び出すだけの場合は、この SQL 分を使用できます。 select dc_pythonsql.GetHumanDate('yesterday') as Datetime このライブラリには、人間が読み取れる日付と時刻の例が複数含まれています。https://github.com/KoffeinFlummi/Chronyk をご覧ください。 Python ストアドプロシージャは簡単に作成できます。ぜひ試してみてください!  
記事
Mihoko Iijima · 2021年6月17日

【GettingStarted with IRIS】チュートリアルページのご紹介

開発者のみなさん、こんにちは! 2023/2/20追記 チュートリアルページが新しくなり「Developer Hub」に変わりました! チュートリアルの種類や使い方については、「InterSystems Developer Hub:クリック1回で開始できるチュートリアル(4種)のご紹介」をご参照ください。 以下にご紹介しているチュートリアルページは、現在非公開となりますので、Developer Hub をご利用ください! この記事では、ちょっと IRIS を使ってみたい・・と思う方にピッタリのチュートリアルやビデオをまとめたページ「Getting Started with InterSystems IRIS Data Platform」についてご紹介します。 Getting Started with InterSystems IRIS Data Platform (以下、GettingStarted ページと略します)では、ユーザ登録後からすぐに操作できる無料の体験環境(以降、Sandbox)をご利用いただけます。 Sandbox では、GettingStarted ページの各種チュートリアルをブラウザ上で操作できる Sandbox 専用 IDE からお試しいただけ、お手元環境の準備不要!すぐに体験を開始できます!💨 以下の順序で GettingStarted ページについての紹介記事を掲載します。 GettingStarted ページですが、翻訳機能が含まれていないページであるため(ブラウザの翻訳機能はご利用いただけます)英語による解説が中心となりますが、このシリーズ記事では、画面の使い方などを日本語でご紹介していきます。 オリジナルの英語ページに変更があった場合、このシリーズ記事でご紹介している日本語例と異なる内容が出てくる場合もありますので、その際は、ぜひコミュニティの返信欄でお知らせいただけると助かります。 チュートリアルには順番はありませんので、気になる項目から読み始めていただき、ぜひ Sandbox で操作をご体験ください! (1) GettingStarted ページでできることについて ≪👈この記事でご紹介します≫ (2) 無料体験環境:Sandbox 開始手順について (3) チュートリアルを始めよう! その1:Full Stack チュートリアル その2:マルチモデルチュートリアル その3:Interoperability(相互運用性)チュートリアル その4:各言語からのアクセスを試すチュートリアル その5:MQTT を使った遠隔モニタリング(IRIS の MQTT アダプタを試してみよう!) ※ その2、その4 のチュートリアルの使い方解説は、近日公開予定です。 (1) GettingStarted ページでできることについて GettingStarted ページでは、これから IRIS の操作を開始する方を対象に、ご興味の内容に合わせて操作をご体験いただけるチュートリアルと、チュートリアルに沿った解説ビデオをご用意しています(日本語字幕への表示切替があるビデオもあります)。 チュートリアルは、サンプルコードが用意されていますので、コード解説を読みながら実行を試したり、コードの一部がコメント化されていたり、貼り付けながら完成させていく流れになっていますので、ざっくりとどんな流れで開発が進んでいくのか?を確認されたい場合にもピッタリな内容です。 コードを実行する環境は、GettingStarted ページで作成いただける無料体験環境(Sandbox)をご利用いただけます。 GettingStarted ページの Sandbox には利用期限があり、3日(72時間)を経過すると自動消去されます。 体験メニューについて GettingStarted ページを開くと、画面左に目的別体験メニューが表示されます。上から順番にご紹介していきます。 フルスタックチュートリアル フルスタックチュートリアルでは、小さな製造会社(焙煎したてのコーヒーを販売する会社)の基本的な情報管理インフラを作成していくテーマを用意しています。 チュートリアルでは、在庫管理を行うためのテーブルを作成し、SQL でデータを登録する流れや在庫調整、販売情報表示など行えるように RESTful サービスを作成していきます。 チュートリアルの最終ステップでは JavaScript フレームワークを利用して、職人が焙煎したコーヒー豆を販売するオンラインストアを構築していきます。 チュートリアルを試す手順については [その1:Full Stack チュートリアル] の記事でご紹介しています。ぜひご参照ください。 サンプル:https://github.com/intersystems/quickstarts-full-stack パフォーマンスの向上(ビデオとPDFのみ) InterSystems IRIS を利用して大量データをリアルタイムに取り込むスピードとパワーについてをご紹介するデモを含めたビデオをご用意しています。 チュートリアルは含まれていませんが、パフォーマンステストのサンプルは Open Exchangeで公開されています。お手元の環境でお試しいただくこともできます。 あらゆるデータモデルに対応(マルチモデルのチュートリアル) IRIS のマルチモデルに対応できるデータモデルを利用することで、アプリケーションの各タスクに合わせて最適なアクセス方法をご選択いただけます。 一般的によく利用される SQL はもちろん、オブジェクトやキーバリューでのアクセスをご選択いただけます。 マルチモデルのアクセスは、各言語(Python/Node.js/Java/.Net)から利用でき、このメニューの中では、お好みの言語からのアクセス方法をご体験いただけるチュートリアルをご用意しています。 各言語ごとにサンプルは用意されています。詳しくは、Multi-Model QuickStart 言語別の説明をご参照ください。 システム間の接続(Interoperability) 異なるシステム同士でデータ共有したり、処理を連携させる仕組みを作成することができる IRIS の Interoperability(相互運用性)メニューの利用例の解説ビデオや、システム連携をご体験いただけるチュートリアルをご用意しています。 チュートリアルでは「信号無視の違反を自動検出する仕組み」をテーマとして違反者が緊急車両かどうかを判断し、緊急車両以外に違反チケットを発行する流れを体験できます。 簡単に流れを体験いただくため、ファイル入力による情報入力を利用し、違反チケットの発行にはファイル出力を利用しています。 チュートリアルを試す手順については [その3:Interoperability(相互運用性)チュートリアル] の記事でご紹介しています。ぜひご参照ください。 サンプル:https://github.com/intersystems/Samples-Integration-RedLights 機械学習の活用(ビデオ中心) IRIS の AutoML である Integrated ML を利用することで、SQL に似た構文を利用して機械学習を開始することができます。 このメニューの中では、Integrated ML 概要をご紹介するビデオと、Integrated ML を活用した再入院を予測するデモをご紹介するビデオをご用意しています。 再入院予測のサンプルも公開されています。Docker / docker-compose / Git がインストールされた環境であれば、お試しいただけます。 詳細は、オンラインラーニングページをご参照ください。 IRISにアクセスできる言語の確認 このメニューでは、各言語(Java、C#/.NET、Node.js、Python、ObjectScript)から IRIS へアクセスする方法を体験できるチュートリアルをご用意しています。 各種設定について IRIS を利用して開発を開始するために必要な開発環境セットアップのための情報をまとめたページです。 チュートリアルには順番はありません!気になる項目からぜひ開始してください! GettingStarted ページの Sandbox を開始する手順については、次の記事をご参照ください。
記事
Toshihiko Minamoto · 2021年11月11日

GitHub Codespaces と IRIS

しばらく前、GitHubは[GitHub Codespaces](https://github.com/features/codespaces)という新しい機能を発表しました。 ブラウザでVSCodeを実行する機能があります。マシンでローカルに実行するのとほぼ同じ性能がありますが、クラウドの能力も備わっているため、最大32CPU、64 GB RAMのマシンタイプを選択することが可能です。 ![](/sites/default/files/inline/images/images/image(2535).png) 素晴らしいことですね。 でも、このことは、InterSystems IRISで駆動するプロジェクトで作業する上で、どのように役立つのでしょうか。 それをどのように構成するのか見てみましょう。 ### あらゆるリポジトリに対応できる基本の出発点 この機能を使用すると、[Code]ボタンを押せば、クラウド内のあらゆるリポジトリを編集できるようになります。 この機能はまだベータ段階にあるため、すべての人が利用できるわけではないことに注意してください。ベータ期間が終了すれば、有料アカウントでのみ利用できるようになります。 ![](/sites/default/files/inline/images/images/image(2537).png) このリポジトリは、VSCodeのみに準備されているだけであり、Codespaces用として特別に用意されたものではありません。 [New codespace]ボタンを押すと、自分だけの環境を作成できます。 ![](/sites/default/files/inline/images/images/image(2538).png) 私の場合、以前のCodespacesの使用においてObjectScript拡張機能をインストールし、Codespacesからプロンプトでグローバルに有効にしています。 毎回インストールされるため、ObjectScriptコードはすでにハイライト表示されています。 しかし、IRISはまだ利用できないため、 まずはdocker-composeから始めましょう。 ![](/sites/default/files/inline/images/images/image(2539).png) それが済むと、IRIS Terminalに接続し、コードをコンパイルできるようになります。 ![](/sites/default/files/inline/images/images/image(2540).png)![](/sites/default/files/inline/images/images/image(2541).png) docker-composeのポートは自動的に認識され、ブラウザで開くことができるため、システム管理ポータルを開くことも可能です。 ![](/sites/default/files/inline/images/images/image(2543).png) ### 準備済みのリポジトリでの使用 VSCodeとIRISをクラウドで実行することはできましたが、準備段階で手動での作業がいくつかありました。 しかし、開始直後にリポジトリを開発できるようにすることもできます。 [devcontainer.json](https://docs.github.com/jp/codespaces/customizing-your-codespace/configuring-codespaces-for-your-project)を使うと可能です。 私の最近のプロジェクトの1つである[Realworld](https://github.com/daimor/realworld-intersystems-iris)に基づく例を紹介します。 このプロジェクトは非常に複雑で、バックエンドとフロントエンドがあり、docker-composeを使用してすべてをまとめて起動します。  devcontainerはdocker-composeも使用する可能性があるため、私の構成は次のようになりました。 {   "name": "IRIS RealWorld example",   "dockerComposeFile": "docker-compose.yml",   "service": "server",   "extensions": [     "intersystems-community.vscode-objectscript"   ],   "forwardPorts": [     80,     52773   ],   "workspaceFolder": "/home/irisowner/conduit",   "remoteUser": "irisowner",   "postCreateCommand": "iris start iris",   "settings": {     "terminal.integrated.defaultProfile.linux": "bash",     "terminal.integrated.profiles.linux": {       "bash": {         "path": "bash",         "icon": "terminal-bash"       },       "iris": {         "path": "iris",         "args": ["session", "iris"]       }     },     "intersystems.servers": {       "/ignore": true     },     "objectscript.ignoreInstallServerManager": true,     "objectscript.ignoreInstallLanguageServer": true,     "objectscript.conn": {       "active": true,       "host": "localhost",       "port": 52773,       "ns": "CONDUIT",       "username": "demo",       "password": "demo",       "links": {         "Conduit APP": "http://localhost:80/",         "Conduit API": "http://${host}:${port}/conduit/"       }     }   } } ここでは多くの事項が構成されています。 * 主としてCodespacesのためのカスタムdocker-compose.ymlへのパス * 開発が行われるメインサービスの名前  * VSCodeにデフォルトでインストールされる拡張機能のリスト * 公開する必要のあるポート。この場合はIRIS用とフロントエンド用のWebサーバーポート * 作業ディレクトリへのパス * コンテナ内のユーザー。IRISコンテナに入るときに、irisownerユーザーが必要です。  * デフォルトのエントリポイントであるiris-mainを使用せずに、単に無限にスリープし、環境が起動した後に自分でIRISを起動するように構成されたdocker-compose内のIRISコンテナ * 最後に、VSCodeの設定もここで構成可能です。これはマシンレベルの設定です。 必ず.vscode/settings.jsonでオーバーライドまたはアペンドできます。 このようなリポジトリ向けのCodespacesを起動するには、すべての必要なコンテナをビルドして開始する必要があるため、もう少し時間がかかります。 GitHubは、このようなイメージをリポジトリにプッシュした後にプリベイクして、起動を高速化することが可能だと述べています。 ![](/sites/default/files/inline/images/images/image(2544).png) そして、それが開始すると、何の操作も必要なく、開発の準備が完了しています。 ![](/sites/default/files/inline/images/images/image(2545).png) このプロジェクトには、用意されたPostmanテストを使用してREST APIをテストするオプションがあるため、IRISでバックエンドコンテナ内にnpmとnewmanをインストールしました。 そこでテストを実行することができます。 すべて合格です。よくできました。 ![](/sites/default/files/inline/images/images/image(2546).png) そしてフロントエンド部分を使用できます。 ![](/sites/default/files/inline/images/images/image(2547).png) GitHubでは、ローカルのVSCodeからでもCodespacesに接続できるようになっています。 隅にある緑色のCodespacesを押すと、VC Codeで開くことを選択できます(GitHub Codespaces 拡張機能がインストールされている必要があります)。 ![](/sites/default/files/inline/images/images/image(2548).png) これは、ローカルのVSCodeで開いたプロジェクトですが、ifconfigの結果からわかるように、クラウドで実行されています。私は今、絶対にシンガポールにはいません。 ![](/sites/default/files/inline/images/images/image(2549).png) ### GitHub Codespacesなしでブラウザーで実行 Codespaces機能にアクセスできない場合、またはこの方法では使用したくないが、ブラウザーでVSCodeを試してみたい場合は、どうすればよいでしょうか。 もう1つのプロジェクトである[code-server](https://github.com/cdr/code-server)を使えば可能です。 このVSCodeを次のコマンドで実行するだけです。 `docker run -it -p 8080:8080 codercom/code-server --auth=none` デフォルトバージョンのVSCodeが実行されます。フォルダがマッピングされていないため、任意のフォルダをマウントし、それをworkdirに設定すると、内部を見れるようになります。  ``docker run -it -p 8080:8080 -v `pwd`:/opt/realworld -w /opt/realworld codercom/code-server --auth=none`` ![](/sites/default/files/inline/images/images/image(2550).png) これはデフォルトのVSCodeで、ObjectScript拡張機能はインストールされていません。 拡張機能の制限があり、元のVSCodeマーケットプレイスへのアクセスがありませんが、代わりにopen-vsx.orgという別のプレイスを使用しています。また、メインのObjectScript拡張機能もそこに[提供されています](https://open-vsx.org/extension/intersystems-community/vscode-objectscript)。 このようなDockerfileを使用すると、そこに何でもインストールされ、一部の拡張機能もすでにインストールされた独自のCode Serverをベイクすることができます。 FROM codercom/code-server USER root RUN curl -fsSL https://deb.nodesource.com/setup_15.x | bash - && \     apt-get install -y jq nodejs python3-pip python3-dev unixodbc-dev && \     rm -rf /var/lib/apt/lists/* && \     pip3 install pyodbc && \     npm install -g yarn && \   sudo chown -R 1000:1000 /home/coder COPY extensions extensions COPY settings.json /root/.local/share/code-server/User/settings.json ENV SERVICE_URL=https://open-vsx.org/vscode/gallery ENV ITEM_URL=https://open-vsx.org/vscode/item RUN \   code-server --install-extension ms-python.python && \   code-server --install-extension intersystems-community.vscode-objectscript && \   find extensions -type f -exec code-server --install-extension {} \; WORKDIR /opt/intersystems CMD [ "--auth=none", "--disable-telemetry" ] 一部のユーザーレベルのデフォルトのsettings.jsonを定義し、必要な拡張機能がopen-vsxにない場合は、手動でダウンロードして、Dockerfileの隣にあるextensionsフォルダに配置すれば、インストールできます。 これで、必要なすべての拡張機能がインストールされた新しいcode-serverを実行できるようになりました。 docker run -it -p 8080:8080 -v `pwd`:/opt/realworld -w /opt/realworld <strong>caretdev/code-server</strong> --auth=none また、構文ハイライトもすでに存在しています。後はIRIS自体を実行するだけですが、拡張docker-composeを使って行えます。code-serverはIRISに並ぶ単なるもう1つのサービスとして扱われます。 ![](/sites/default/files/inline/images/images/image(2551).png)  
質問
Mitsuru Amano · 2021年3月3日

VSCODEのCSPの編集について

こんにちは、皆さま IRISとVSCODE環境を日頃から愛用しています。 普段は使用しませんが、実験的にCSPファイル(*.CSP)をVSCODEで編集してみようと思い試みましたが上手く行きませんでした。 VSCODEの拡張は、「InterSystems ObjectScript Extension Pack」を使用しています。 具体的は2つの方法を試しました。 1.DBからworkspaceにExportして編集+Import&Compile ObjectScriptのソースTree-コンテキストメニューにExportが無いため動作を確認できず。 clsのExprot cspのExportが…ない 2.DBの*.CSPを直接編集。 ObjectScriptのソースTree-からcspファイルを開き編集したが、読み取り専用と表示。 VSCODEでCSPファイルを編集する方法をご存じの方は、教えて頂けないでしょうか? Amanoさん、こんにちは。 settings.json に以下1行追記すると、サーバ側コードを直接VSCodeから編集できます(ローカルにExportせずサーバ側コードを操作できます)。 "objectscript.serverSideEditing": true, 全体だとこんな感じです。 { "objectscript.serverSideEditing": true, "objectscript.conn": { "server": "test", "active": true, "ns": "USER", }, "intersystems.servers": { "test": { "webServer": { "scheme": "http", "host": "localhost", "port": 52773 }, "username": "_SYSTEM", }, } } CSPのExportのボタンですが、うまく動かないそうで(6つ目の箇条書き) 非表示になってるようでした。 その他、クラスやルーチンのように、ワークスペースで書いたCSPファイルをファイル保存の動作でサーバ側にインポート+コンパイルできるようにしてほしい!のリクエストは上がっていたのですが、まだできてないようでした。 進捗あったらお知らせします! Iijimaさん 出来ました!! エンコードは、サーバ側のOSに依存している感じですね。 Shift-JISは、問題なく編集できましたが、UTF-8(BOM付き)は文字化けしました。 ※サーバのCSPファイル(UTF8BOM付き)をテキストエディタで作成して、VSCODEで編集すると保存後の再表示で文字化け。(仕組み上しょうがないですね。) CSPファイル自体での開発頻度は、少なくなると思うので問題なしって感じです。 返信ありがとうございました。 Amanoさん、さっそくお試しいただきありがとうございます! Amano さん、 最近アップデートされた、InterSystems Server Manager エクステンションでは、簡単に「サーバ上のCSPファイル」を編集できるようになりました。以下に手順を投稿しましたので、もしご参考になれば幸いです。 VSCode を使ってみよう (2021年4月20日版)
記事
Mihoko Iijima · 2021年5月23日

VDOC (仮想ドキュメント)とは?

これは InterSystems FAQ サイトの記事です。 仮想ドキュメント(以降VDOC)とは複雑な構造のドキュメント(メッセージ)を効率良く高速に処理するために考えられたメッセージ処理の仕組みです。 HL7に代表される EDI 標準は電子データ交換のための汎用的なかなり複雑なメッセージ形式を含んでいます。 また、メッセージの種類を増やすと運用が複雑になってしまうため、1 つのメッセージに様々なデータを詰め込む傾向があります。 その結果 1 つのメッセージは複雑かつデータ量が多いものになりがちです。 一方、実際のメッセージ交換では、メッセージの全てのデータを処理することはまれで一部のデータのみが必要となるケースがほとんどです。 複雑なメッセージ構造から必要な項目を抽出して処理する際、メッセージを InterSystems IRIS data platform のオプジェクト指向フレームワークに基づき一度オブジェクトとしてインスタンス化することで処理を簡潔に記述できます。 しかし、データ量の多いメッセージを解析しオブジェクトにインスタンス化する処理は非常に負荷のかかる処理で、しかも大量のメッセージを処理しなければならない場合は求められるスループットを満たせない状況になりがちです。 しかも必要なデータは「全体の中のほんの少し」という状況の場合、無駄の多い処理となります。 この課題を解決するために考えられたのが VDOC (Virtual Document) です。 VDOC のメッセージは、オブジェクトとしてインスタンス化せずそのままの形式で読み込みますが、メッセージを処理するコードの中ではオブジェクトの操作と同様の表記で記述が行えます。 記述したコードがコンパイルされるとき、予め用意されたメッセージ形式に関するスキーマ情報と突き合わせることで実際のメッセージ上の位置や文字数などの情報を特定し、その情報に基づいてメッセージ項目にアクセスするコードを自動生成します。 こうすることでプログラム実行時、オブジェクトをインスタンス化せず直接メッセージ上の特定の位置からデータを取得することができます。
記事
Hiroshi Sato · 2021年3月3日

SQLのUPDATEやDELETEで、ある程度の数のレコードを一括更新するとSQLエラー -110 が発生します。

これは InterSystems FAQ サイトの記事です。 通常SQLCODE -110(Locking conflict in filing)のエラーはロックが競合した場合に発生します。 大量レコードが一度に更新された場合、その件数がロック閾値を超えてロックエスカレーションを起こしてテーブルロックとなる可能性があり、そのためにロックの競合が起きやすくなっていることが考えられます。 このロック閾値を上げることにより、この競合を回避できる可能性もあります。 しかしこの閾値を上げることにより、システムが必要とするロック管理用のメモリが増えるという副作用がありますので、慎重な検討が必要です。 あるいはテーブルロックになる可能性を排除できずに、更新タイミング等アプリケーションの仕様を見直す必要があるかもしれません。 またSQLCODE -110はロックテーブルの空き容量が不足した場合にも発生する可能性があります。 コンソールログファイル(※)をご確認いただき、「LOCK TABLE FULL!!!」のエラーが記録されているようであれば、ロックテーブルの容量不足が原因です。 ※ InterSystems IRIS のコンソールログファイル名は messages.log、Caché/Ensemble/HealthShare コンソールログファイル名は cconsole.log この場合は、 ロックテーブルのサイズを増やす ロック閾値を小さくして、より少ない件数でテーブルロックに移行するように設定する などの対応が考えられます。 各種設定は管理ポータルの以下メニューで行うことができます。 ロックテーブルサイズの設定: 【バージョン2011.1~】 [ホーム] > [システム管理] > [構成] > [追加の設定] > [メモリ詳細設定] gmheap(KB 単位) と locksiz(バイト単位) 【バージョン2009.1~2010.2】 [ホーム] > [構成] > [メモリ詳細設定] gmheap(KB 単位) と locksiz(バイト単位)【バージョン5.1~2008.2】  [ホーム] > [構成] > [詳細設定] カテゴリ:Memory GenericHeapSize と LockTableSize ロック閾値の設定:【バージョン2011.1~】 [ホーム] > [システム管理] > [構成] > [SQL設定] > [一般SQL設定] : ロック閾値 【バージョン2009.1~2010.2】 [ホーム] > [構成] > [SQL設定] > [一般SQL設定] : ロック閾値 【バージョン5.2~2008.2】 [ホーム] > [構成] > [SQL設定] : ロック閾値 【バージョン5.1】 バージョン5.1では、ロック閾値は以下メソッドを使用して変更します。 // 第1引数に指定したい閾値、第2引数は参照渡しで現在の閾値が設定されます。// 処理が成功すると、1が返ります。set st=$system.SQL.SetLockThreshold(1001,.oldval)
記事
Seisuke Nakahashi · 2022年7月11日

Embedded Python: 日本語PDFを IRISから作成しよう

IRIS 2022.1では Embedded Python が導入されました。Embedde Python によって、IRISの独自言語である ObjectScript と Python の親和性の良さをぜひ実感いただけると嬉しいです。今回の記事では、日本語PDFをPythonライブラリを利用して作成し、さらに ObjectScript と融合するところまで見ていただこうと思います。 【事前準備】 Pythonの ReportLab ライブラリ を Embedde Python にインストールしておきます。コマンドプロンプトで <IRISdir>\bin に移動し、以下を実行します。 C:\InterSystems\IRIS\bin>irispip install --target ..\mgr\python ReportLab 【PDF作成 by Python】 クラスに以下のクラスメソッドを作成し、実行します。そのまま Python のロジック、ですね。[Language=Python] と宣言するだけで、特に接続を定義する必要もなく、Pythonコードを IRISサーバ上で直接動かすことが出来ます。 ClassMethod createPDF() [ Language = python ] { from reportlab.pdfgen import canvas from reportlab.lib import pagesizes from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase import ttfonts # A4 PDF FILENAME = 'C:/temp/HelloWorld.pdf' pdfsize = pagesizes.portrait(pagesizes.A4) c = canvas.Canvas(FILENAME, pdfsize) # Font FONTNAME = 'Meiryo UI' FONTFILE = 'C:/Windows/fonts/Meiryo.ttc' FONTSIZE = 24 pdfmetrics.registerFont(ttfonts.TTFont(FONTNAME, FONTFILE)) c.setFont(FONTNAME, FONTSIZE) # put letters xpos = 100 ypos = 500 c.drawString(xpos, ypos, 'IRISから簡単にPythonを呼び出そう') c.save() } 【PDF作成 by ObjectScript】 このロジックを、ObjectScriptのロジックに完全に移行することも簡単です。次のクラスメソッドをご覧ください。ReportLabライブラリの Import 、変数のセット、メソッドの実行の構文が少しだけ違いますが、先ほどのクラスメソッドと、1行ずつの実行内容がまったく同じになっていますね。PythonとObjectScriptの親和性の良さを感じていただけると思います。 ClassMethod createPDF2() { set canvas=##class(%SYS.Python).Import("reportlab.pdfgen.canvas") set pagesizes=##class(%SYS.Python).Import("reportlab.lib.pagesizes") set pdfmetrics=##class(%SYS.Python).Import("reportlab.pdfbase.pdfmetrics") set ttfonts=##class(%SYS.Python).Import("reportlab.pdfbase.ttfonts") ; A4 PDF set FILENAME="C:/temp/HelloWorld.pdf" set pdfsize=pagesizes.portrait(pagesizes.A4) set c = canvas.Canvas(FILENAME, pdfsize) ; Font set FONTNAME = "Meiryo UI" set FONTFILE = "C:/Windows/fonts/Meiryo.ttc" set FONTSIZE = 24 do pdfmetrics.registerFont(ttfonts.TTFont(FONTNAME, FONTFILE)) do c.setFont(FONTNAME, FONTSIZE) ; Put letters set xpos = 100 set ypos = 500 do c.drawString(xpos, ypos, "IRISから簡単にPythonを呼び出そう") do c.save() } このように、Embedded Pythonによって、世の中に星の数ほどある Pythonライブラリ や 既存のPythonコードを、そのままIRISで実行するだけでなく、ObjectScriptに移行してIRISの既存データや既存ロジックと連携することも簡単にできます。 ぜひ Embedded Python を活用いただき、これまで以上に IRIS と世界をつなげてみてください! ★お知らせ Embedded Pythonのセルフラーニングビデオを順次公開しています。Embedded Python概要や利用前準備、対象者別の使い方も含めて、ぜひ、以下の開発者コミュニティ記事をあわせてご参照ください。 【はじめてのInterSystems IRIS】Embedded Python セルフラーニングビデオシリーズ公開!
記事
Tomoko Furuzono · 2023年5月14日

オペレーティング・システム・ベースの認証について

これは InterSystems FAQ サイトの記事です。 オペレーティング・システム・ベースの認証(OS認証)では、OSのユーザ ID を使用して、IRISを使用するユーザを識別します。 インストール時に選択する初期セキュリティ設定=最小の場合は、予め、OSログインユーザと同一名のユーザをInterSystems IRIS に作成する必要があります。(パスワードは異なっていても構いません。)初期セキュリティ設定=通常以上の場合は、インストールユーザ名(OSログインユーザ名)で、ユーザが作成されていますので、このユーザを使用することができます。別のログインユーザで実行したい場合は、同様にIRISユーザを同名で作成してください。 ​​ [インストール時の初期セキュリティ設定画面] ​​OS認証は、以下の3つのサービスに使用できます。 ・コールイン (%Service_Callin)・コンソール (%Service_Console) ※Windowsのローカル接続・ターミナル (%Service_Terminal) ※Linux/Unixのローカル接続 ※iris run(runw)/ccontrol run(runw) ではパスワード認証は使用できませんが、OS認証を使用してシステムにログインすることが可能となります。 OS認証を行うための設定手順は以下の通りです。 1.[認証/Web セッション・オプション] ページ ([システム管理] > [セキュリティ] > [システム・セキュリティ] > [認証/ウェブセッションオプション]) ページで、[OS認証を許可] を選択します。※ご使用のバージョンにより、"OS認証"、"オペレーティングシステム認証"など、表記が違う場合があります。​​​​​​ 2.[サービス] ページ ([システム管理] > [セキュリティ] > [サービス]) で、[名前] 列からサービスを選択します。選択したサービスの [サービス編集] ページが表示されます。 3.[サービス編集] ページで、[オペレーティングシステム] チェック・ボックスにチェックを付けてオペレーティング・システム・ベースの認証を選択します。(例では、%Service_Consoleの設定を編集しています。) ※初期セキュリティ設定=通常以上の場合は、デフォルトで[パスワード]がチェックされていますが、 OS認証のみを実行したい場合は、​[パスワード]のチェックは外しておく必要があります。 [保存] をクリックすると、選択した設定内容が使用されます。 以上の設定で、指定したサービスで、OS認証が可能となります。 ドキュメントは以下のページとなります。併せてご確認ください。オペレーティング・システム・ベースの認証構成について
記事
Mihoko Iijima · 2021年8月31日

ジャーナルファイルが長時間消されずに残ってしまう原因

これは InterSystems FAQ サイトの記事です。 24時間停止しないシステムの場合、「ジャーナルファイルの削除設定」に合わせて 0時30分 に古いジャーナルファイルを削除します。 「ジャーナルファイルの削除設定」より古いジャーナルファイルが残っている原因として、オープンされたままのトランザクションが存在していることが考えられます。 その場合、トランザクション実行中プロセスを探し、トランザクションを確定させることでジャーナルファイルを削除できるようになります。 以下のサンプルは、オープンされたままのトランザクションの存在確認と、存在する場合は対象ファイル名とジャーナルレコード情報が出力されます。 (サンプルは、https://github.com/Intersystems-jp/CheckOpenTransaction からダウンロードできます) ※注意※確認対象のジャーナルファイルサイズが大きい場合、ジャーナルファイルが多数ある場合は、実行に時間がかかるため、弊社サポートセンターまでご連絡ください。 Class ISJ.JournalUtility { ClassMethod GetOpenTransaction() As %Status { set status=$$$OK #dim ex As %Exception.AbstractException #dim rset As %ResultSet try { //現在のジャーナルファイル write !,"現在のジャーナルファイル名:", ##class(%SYS.Journal.System).GetCurrentFileName(),!! // Open中トランザクション調査 // WIJに記録されているジャーナルの情報を取得 $$$ThrowOnError(##class(%SYS.Journal.System).GetImageJournalInfo(.filename,.jrnoffset,.jrnfilecount,.opentranoffset,.opentranfilecount)) if $get(opentranoffset)="" { write !,"オープン中トランザクションはありません",! return status } //ファイルカウントに差(jrnfilecount-opentranfilecount>0 )がある場合 // 古いジャーナルファイルにオープン中トランザクションがあるため、対象ファイル名を探す if jrnfilecount-opentranfilecount>0 { set loopcnt=jrnfilecount-opentranfilecount for i=1:1:loopcnt { set currentfile=filename $$$ThrowOnError(##class(%SYS.Journal.File).GetPrev(currentfile,.filename)) } } write "〇〇 オープン中の対象ジャーナルレコード一覧 〇〇",! set rset=##class(%ResultSet).%New("%SYS.Journal.Record:List") do rset.%Execute(filename,,,,$LB("Address","=",opentranoffset)) write !,"=== File Name : ",filename," ===",! write "Address : TimeStamp : ProcessID : RemoteSystemID : TypeName : Transaction",! while rset.%Next() { write rset.%Get("Address")," : ", rset.%Get("TimeStamp")," : ", rset.%Get("ProcessID")," : ", rset.%Get("RemoteSystemID")," : ", rset.%Get("TypeName")," : ", rset.%Get("InTransaction"),! } } catch ex { set status=ex.AsStatus() } return status } } 実行例は以下の通りです。 USER>do ##class(ISJ.JournalUtility).GetOpenTransaction() 現在のジャーナルファイル名:/usr/irissys/mgr/journal/20210330.002 〇〇 オープン中の対象ジャーナルレコード一覧 〇〇 === File Name : /usr/irissys/mgr/journal/20210330.001 === Address : TimeStamp : ProcessID : RemoteSystemID : TypeName : Transaction 1834156 : 2021-03-30 13:19:00 : 5194 : 1073741824 : BeginTrans : 1 関連する記事もご参照ください。 ジャーナルファイルを削除する方法
記事
Megumi Kakechi · 2025年4月22日

ADO.NET Managed Provider を使用してクラスクエリを実行し、結果セットを取得するサンプル

先日、お客様よりタイトルのご質問をいただき、サンプルコードを作成しました。せっかくですので、こちらでも共有したいと思います。 今回は、データベースの空き容量情報を取得する、%SYS.DatabaseQueryクラスのFreeSpaceクエリを使用したサンプルとします。 C#.Net と VB.Net で作成してみました。 ★C#.Net using System; using InterSystems.Data.IRISClient; { class Program { static void Main(string[] args) { IRISConnection IRISConnect = new IRISConnection(); IRISConnect.ConnectionString = "Server=localhost;Port=1972;Namespace=USER;User ID=_SYSTEM;Password=SYS"; IRISConnect.Open(); String queryString = "select * from %SYS.DatabaseQuery_FreeSpace(?)"; // call %SYS.DatabaseQuery_FreeSpace(?) でもOK IRISCommand cmd = new IRISCommand(queryString, IRISConnect); IRISParameter p1 = new IRISParameter("Mask", IRISDbType.NVarChar); p1.Value = "*"; cmd.Parameters.Add(p1); IRISDataReader Reader = cmd.ExecuteReader(); while (Reader.Read()) { // Select values : DatabaseName:0, Directory:1, MaxSize:2, Size:3, ExpansionSize:4, Available:5, %Free:6, DiskFreeSpace:7, Status:8, SizeInt:9, AvailableNum:10, DiskFreeSpaceNum:11, ReadOnly:12 Console.WriteLine(Reader.GetValue(0).ToString() + ", " + Reader.GetValue(3).ToString() + ", " + Reader.GetValue(5).ToString()); } Reader.Close(); cmd.Dispose(); IRISConnect.Close(); } } } ★VB.Net Imports System Imports InterSystems.Data.IRISClient Module Program Sub Main(args As String()) Dim conn As New IRISConnection conn.ConnectionString = "Server=localhost;Port=1972;Namespace=USER;User ID=_SYSTEM;Password=SYS" conn.Open() Dim queryString As String = "select * from %SYS.DatabaseQuery_FreeSpace(?)" ''call %SYS.DatabaseQuery_FreeSpace(?) でもOK Dim cmd As IRISCommand = New IRISCommand(queryString, conn) Dim p1 As IRISParameter = New IRISParameter("Mask", "*") cmd.Parameters.Add(p1) Dim reader As IRISDataReader = cmd.ExecuteReader() Do While (reader.Read()) '' Select values : DatabaseName : 0, Directory:1, MaxSize:2, Size:3, ExpansionSize:4, Available:5, %Free:6, DiskFreeSpace:7, Status:8, SizeInt:9, AvailableNum:10, DiskFreeSpaceNum:11, ReadOnly:12 Console.WriteLine(reader.GetValue(0).ToString() + ", " + reader.GetValue(3).ToString() + ", " + reader.GetValue(5).ToString()) Loop reader.Close() cmd.Dispose() conn.Close() End Sub End Module ※参照の追加手順 Visual Studioの [プロジェクト] > [プロジェクト参照の追加] をクリックします参照マネージャにて、参照より以下を追加します(.Netのバージョンにあわせて選択してください)例)C:\InterSystems\IRIS\dev\dotnet\bin\net8.0\InterSystems.Data.IRISClient.dll なお、ストアドプロシージャ(ストアド)の場合も、同様に実行することが可能です。 ともに、 SqlProc キーワードを指定して、SQL ストアドプロシージャとして呼び出すことができるようにする必要があります。 例(クラスクエリのサンプル):select * from Sample.SP_Sample_By_Name(?) または call Sample.SP_Sample_By_Name(?) Query ByName(name As %String = "") As %SQLQuery(CONTAINID = 1, SELECTMODE = "RUNTIME") [ SqlName = SP_Sample_By_Name, SqlProc ] { SELECT ID, Name, DOB, SSN FROM Sample.Person WHERE (Name %STARTSWITH :name) ORDER BY Name } 例2(ストアドプロシージャのサンプル):call Sample.Stored_Procedure_Test(?,?) ClassMethod StoredProcTest(name As %String, ByRef response As %String) As %Integer [ SqlName = Stored_Procedure_Test, SqlProc ] { // Set response to the concatenation of name. Set response = name _ "||" _ name QUIT 29 } 例2 の場合は以下のような C# コードになります(一部省略) String queryString = "? = call Sample.Stored_Procedure_Test(?,?)"; IRISCommand cmd = new IRISCommand(queryString, IRISConnect); IRISParameter p1 = new IRISParameter(); p1.Direction = ParameterDirection.ReturnValue; p1.IRISDbType = IRISDbType.Int; IRISParameter p2 = new IRISParameter(); p2.Direction = ParameterDirection.Input; p2.Value = "InterSystemsJapan"; IRISParameter p3 = new IRISParameter(); p3.Direction = ParameterDirection.Output; cmd.Parameters.Add(p1); cmd.Parameters.Add(p2); cmd.Parameters.Add(p3); cmd.ExecuteReader(); Console.WriteLine("Return value = " + p1.Value + ", " + "ByRef response = " + p3.Value); ご利用の機会がありましたら、ぜひ参考になさってください。 以下のドキュメントもあわせてご覧ください。ADO.NET Managed Provider の使用法InterSystems IRIS デモ : ADO.NET を使用した接続