開発者の皆さん、こんにちは!
1つ前の記事では、VSCodeのObjectScriptエクステンションに追加されたRESTサービスのデバッグツールについてご紹介しましたが、この記事では、RESTクライアントなどからHTTP要求を実行し、処理中のIRIS内プロセスにアタッチしながらデバッグを行う方法についてご紹介します。
InterSystems IRIS for Health™は、世界で最も重要なデータを管理する医療アプリケーションの迅速な開発を目的に特別に設計された世界初、かつ唯一のデータプラットフォームです。 トランザクションの処理と分析、拡張可能な医療データモデル、FHIRベースのソリューション開発、医療情報の相互運用性に関わる標準規格への対応など、すぐに使える強力な機能を搭載しています。 これらすべての機能により、開発者は価値を実現し、画期的なアプリケーションをすばやく構築することができます。 詳細はこちらをご覧ください
開発者の皆さん、こんにちは!
1つ前の記事では、VSCodeのObjectScriptエクステンションに追加されたRESTサービスのデバッグツールについてご紹介しましたが、この記事では、RESTクライアントなどからHTTP要求を実行し、処理中のIRIS内プロセスにアタッチしながらデバッグを行う方法についてご紹介します。
これは InterSystems FAQ サイトの記事です。
JDBCクライアントからのアクセスでエラーが発生した場合、返ってきたエラーメッセージやコンソールログ上の情報だけでは原因がよくわからない場合があります。
そのような場合にJDBCドライバのクライアントログを取得することで、エラーについての詳細情報を取得することができます。
JDBCログの取得方法については以下をご参照ください。
ログを指定する際に、ディレクトリ名を含まずに直接ファイル名を指定した場合、そのアプリケーションのディレクトリにその指定したファイル名でログが出力されます。
ODBCログの様にPID毎に取得する方法は用意されていません。
JDBCログが正常に取得できている場合、以下の様な内容が書き込まれます。
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Started At: 2025/03/27 11:52:16
Driver Name: com.intersystems.jdbc.IRISDriver
Jar File Name: intersystems-jdbc-3.9.0.jar
Client Version: 3.9.0.これは InterSystems FAQ サイトの記事です。
ODBCクライアントからのアクセスでエラーが発生した場合、返ってきたエラーメッセージやコンソールログ上の情報だけでは原因がよくわからない場合があります。
そのような場合にODBCドライバのクライアントログを有効にすることで、エラーについての詳細情報を取得することができます。
ODBCログの有効化については以下をご参照ください。
UNIX系のシステムの場合、上記に記載されている通り、2種類のログが取得できます。
export IRISODBCTRACE=1
export IRISODBCTRACEFILE=/Users/user1/work/odbcclient.log
[ODBC Data Sources]
IRIS ODBC User = IRIS iODBC Driver
[IRIS ODBC User]
Driver = /opt/iris/bin/libirisodbc35.これは InterSystems FAQ サイトの記事です。
ダイナミックオブジェクトの%FromJSONFileメソッドを利用すると簡単にJSON形式のファイルの内容をダイナミックオブジェクトにコピーすることができます。
以下の形式のJSONファイルをそのメソッドを使用して取り込む例は以下のようになります。
{
"ShipTo": {
"City": "Tokyo",
"Street": "Ginza",
"PostalCode": "160-0001"
},
"CustomerId": 1,
"Items": [
{
"ProductId": "MNT001",
"Amount": 2
},
{
"ProductId": "PC001",
"Amount": 2
}
]
} set tempobj = {}.%FromJSONFile("c:¥temp¥sample.json")
set customerid = tempobj.これは InterSystems FAQ サイトの記事です。
ODBCクライアントからのアクセスでエラーが発生した場合、返ってきたエラーメッセージやコンソールログ上の情報だけでは原因がよくわからない場合があります。
そのような場合にODBCドライバのクライアントログを有効にすることで、エラーについての詳細情報を取得することができます
ODBCログの有効化については以下をご参照ください。
Windowsの場合は、上記に記載されている通り、2種類のログが取得できます。
変更の反映にはODBCクライアントアプリケーションを再起動する必要があります。
既定のODBCクライアントログファイル名は IRISODBC.log で、既定の場所は C:¥Users¥Public¥Logs です。
既定のトレースログ名は、SQL.logで、既定の場所は、c:¥Users¥<ユーザー名>AppData¥Local¥Temp¥です。
これは InterSystems FAQ サイトの記事です。
「Maximum/Minimum_Server_Connections」の設定で、ApacheのMPM(Multi Processing Module)設定が、prefork になっている場合、Apache ワーカープロセスあたり2つ以上の IRIS/Caché コネクションを設定しても意味がないために、設定自体出来なくなっております。
※ preforkでは1つのプロセスが1つのスレッドを持ちます。
preforkの詳細は以下をご参照ください
これは InterSystems FAQ サイトの記事です。
InterSystems IRIS では、シャドウイングは非推奨機能となりました。
こちらのトピックでは、これまでにCachéでシャドウイングを使用していたお客様に対して、IRISへの移行後に、代わりに使用できるミラーリングの構成方法をご紹介します。
ミラーリングには機能的に2つの種類があります。
1.同期ミラーによるフェールオーバー(常にデータベースが同期されて複製、障害時に自動でフェールオーバー) 2.非同期ミラー(シャドウイングと同様の機能を提供) - DR非同期(DR構成で利用、フェールオーバーへの昇格が可能、複製DBへの書き込み不可) - レポーティング非同期(データマイニング/BIアプリでの利用、複製DBへの書き込み可能)
シャドウイングに代わって、IRISでは「プライマリ・フェイルオーバー」+「非同期ミラー」でミラーリングを構成する機能を利用することができます。
以下は、シャドウイングとミラーリングのサーバ役割の対比表になります。
※ミラー構成内の1つのインスタンスを “ミラーメンバ” または単に “メンバ” と呼びます。
インターシステムズは、InterSystems IRIS®データプラットフォーム、InterSystems IRIS® for HealthTM、HealthShare® Health Connect のメンテナンスバージョン 2025.1.1 をリリースしました。製品の品質改善のために、開発者コミュニティを通じてぜひご意見をお聞かせください。
詳細な変更リストとアップグレードチェックリストはこちらのドキュメントをご参照ください(すべて英語です):
多くの 早期アクセスプログラムをご用意しております。こちらの ページ からご興味のあるプログラムにお申込みいただけます。
InterSystems IRIS と InterSystems IRIS for Health の通常インストーラパッケージ形式のキットは WRC Direct の IRIS ダウンロードページ から、HealthShare Health Connect のキットは HealthShare ダウンロードページ からそれぞれ入手してください。
これは InterSystems FAQ サイトの記事です。
「定期的にプロセスを監視し、あるイベントが発生したときにのみ処理を実行したい」ような場合に使用できる、便利な機能をご紹介します。
もちろん、Forループを行う常駐プロセスを作成してその中で Hang XX しながらIf文にてイベントを検知したり、タスクスケジュールでルーチンを定期実行してその中でIf文にてイベントを検知して処理することも可能です。
今回ご紹介する、%SYSTEM.Event クラスを使用することで、よりシンプルに処理を作成することが可能となります。
【こんな時に便利】
・テーブルやグローバルに、あるデータが全て格納されたら処理を行いたい
・あるエラーを検知したときにのみ、^SystemCheck情報を取得したい
・処理が必要なものがデータベースに入ったら順番に処理を行いたい(pythonだとQueueモジュールのような感じ)
【使用方法】
準備(任意のプロセス)
do $SYSTEM.Event.Create("test")
これで、testというイベントがシステムワイドで作成されます。
パターンA=単純な常駐プロセス
(1) 待機プロセス側
do $SYSTEM.Event.Wait("test")
このコマンドの瞬間、このプロセスは待ち状態になります。
(2) 起こす側
do $SYSTEM.Event.
.png)
こんにちは。
7月16日~18日に東京ビックサイトで開催された「国際モダンホスピタルショウ」のインターシステムズのブースにて様々な展示やミニセッションを行いました。その中で弊社製品の最新情報について”モダンホスピタルショウ「おさらいウェビナー」”と題して、2回にわたりお届けします。
第1回は8月6日(水) 「ホスピタルショウ注目技術をざっくり解説!インターシステムズの最新情報」と題し、展示では伝えきれなかった技術や背景、導入効果などをご紹介します。第一回の本ウェビナーでは以下のトピックを取り上げます。
【こんな方にお勧め】
医療機関でICTやデータ利活用を推進されているご担当者
地域連携・医療デバイスの統合に関心のある方
<お申し込みはこちら>
第1回 8月6日 「ホスピタルショウ注目技術をざっくり解説!インターシステムズの最新情報」
ホスピタルショウに来場された方、されなかった方、どちらも歓迎です!是非ご視聴くださいますよう、ご案内いたします。
これは InterSystems FAQ サイトの記事です。
IRISのプロセスを終了したい場合、管理ポータルから行う方法と、ターミナルからユーティリティやコマンドを使用して行う方法があります。
こちらのトピックでは、以下の3つの方法で停止する方法をご紹介します。
【プロセスの停止方法】 1.管理ポータルから停止する方法 2.ユーティリティーで停止する方法(RESJOB、JOBEXAM) 3.プログラムで停止する方法
【注意】
IRIS外から(Windowsならタスクマネージャーなど)、プロセスの終了は絶対に行わないでください。
IRIS外からプロセス終了してしまうと、IRIS内部ではプロセスの削除を検知できなかったりすることで、IRISの動作が不安定になったり、システム全体がハングする危険性がありますので、ご注意ください。
外部から停止の例外が一つだけあります。
$ZF コマンドによって起動された子プロセスが、何らかの問題で応答を返さなかった場合、$ZF コマンドを実行した親プロセスはそのまま残り続けます。
そのような親プロセスを終了したい場合、通常の上記1~3の方法では停止できません。
その際は、先に外部から子プロセスを停止する必要があります。子プロセスを特定するためには、以下の方法があります。
例:Windowsの場合 1. process explorer(マイクロソフト製) 2.
これは InterSystems FAQ サイトの記事です。
InterSystems 製品の Windows 版インストールキットでは、IIS に対して Web ゲートウェイをインストールするインストールキットの提供はありますが、Windows にインストールした Apache に対するインストールキットが提供されていないため、以下の手順で Web ゲートウェイを構成します。
3、Windows 版 Web ゲートウェイのインストール(※)
5、Apache を Windows サービスにインストールし開始する
(※)Windows 版 Web ゲートウェイのインストールキットは WRC よりダウンロードいただけます。
以下、手順詳細です。
インストール時、インスタンス名を IRISTEST、インストールディレクトリを c:\InterSystems\IRISTEST に設定した流れでの図解で解説しています。
例では、http://Webサーバ/インスタンス名/csp/sys/UtilHome.csp で管理ポータルへアクセスできるようにするための設定例で記載しています。
これは InterSystems FAQ サイトの記事です。
これらすべての操作は $ZCONVERT()関数を利用して操作できます。
詳しくは、ObjectScript CookBook に記載の説明をご参照ください。
これは InterSystems FAQ サイトの記事です。
一般的に、500番台はサーバー側で発生したエラーを表していて、503番エラーはサーバーが何らかの理由で機能を停止していてクライアントの要求に回答できない場合に出現するエラーです。
外部サイトの説明:503エラー 【HTTP 503 Service Unavailable】
以下、InterSystems 製品の使用で発生する503エラーの考えられる原因について一覧します。
原因:ライセンスが割り当てられない場合に発生します(ライセンスが「同時接続ユーザ」での購入である場合、ユーザ数が制限を迎えたためライセンスが割り当てられずこのエラーが発生します)。
アプリケーションが「認証なし」アクセスを使用している場合、以下の原因により503エラーが発生します。
これは InterSystems FAQ サイトの記事です。
各InterSystems製品のサポートOS情報は、製品ドキュメントの「サポートプラットフォーム」情報で確認できます。
製品ドキュメントは、弊社ホームページ > サポート > ドキュメント よりご確認いただけます。
確認したい製品バージョンのドキュメント(例えば、InterSystems IRIS Version 2025.1)を開いていただき、「サポート対象プラットフォーム」リンクからご確認いただけます。
↓↓↓
※Cache & Ensemble の場合は(例えば、Cache & Ensemble Version 2018.1)、ドキュメント上部の Supported Platforms リンク
※過去のバージョンは、
IRIS:
InterSystems IRIS 過去一覧 > バージョン > Supported Platforms > サポート対象プラットフォーム
Cache:
Caché & Ensemble 過去一覧 > バージョン > Supported Platforms > サポート対象プラットフォーム 各OSをサポートするInterSystems製品の一覧は用意しておりませんので、製品バージョンごとのサポートOSをご確認いただく必要があります。 例:
IRIS 2025.
これは InterSystems FAQ サイトの記事です。
InterSystems 製品では、ファイルオープン時に文字コードを指定すれば指定の文字コードで正しくファイルの中身を処理できます。
文字コードを指定しない場合、InterSystems 製品をインストールした OS に合わせて設定されたファイル I/O 用文字コードを利用してファイルをオープンします(Linux 系は UTF8、Windows は SJIS)。
また、文字列については文字コードが判明していれば $ZCONVERT() 関数を使用して指定文字コードで文字列を処理することができます。
例)$ZCONVERT(文字列,"I","IRIS内文字コード")
文字コードが不明な場合、残念ながら InterSystems 製品だけでそのコードを判別することができないため、例えば Embedded Python で Python の chardet パッケージを使用して文字コード判別し、IRIS 内文字コードを取得しファイルオープン、文字列の文字コード変換をすることができます。
chardetパッケージについては、外部サイトですが参考となります。ぜひご参照ください。
参考ページ:[解決!Python]テキストファイルのエンコーディングを調べて、その内容を読み込むには(chardetパッケージ)
以下、具体的な処理内容です。
インターシステムズは、以下の製品が Red Hat Enterprise Linux 10 に対応したことをお知らせします。
今回のリリースでは、Red Hat Enterprise Linux 10 オペレーティング・システムのサポートが追加されました。 RHEL 10 には、Linux カーネル 6.12.0、セキュリティの改善、パフォーマンスの最適化、および開発者ツールの改善が含まれています。
ソフトウェアの入手方法
インストール・パッケージは、 WRC Direct の 製品ダウンロードページ ページから入手できます。 また、評価用キットは、 評価サービス ウェブサイトからも入手できます。
これは InterSystems FAQ サイトの記事です。
ObjectScript で日付の比較を行う場合、一旦 $HOROLOG 形式(内部数値)に変換することで算出しやすくなりますが、SQL 関数を利用して算出することもできます。
ObjectScript から SQL 関数を実行するには、%SYSTEM.SQL.Functions クラスを使用します。
※ 2021.1以前のバージョンでは、%SYSTEM.SQL クラスを使用します。
%SYSTEM パッケージは、システム・オブジェクトと呼ばれ ObjectScript では $SYSTEM 特殊変数を利用して以下の構文で実行します。
$SYSTEM.サブパッケージ名.クラス名.メソッド名() または $SYSTEM.クラス名.メソッド名()
以下、SQL 関数 DATEDIFF を使用して日付の比較を行う例です。
USER>write $system.SQL.Functions.DATEDIFF("dd","2025-01-20","2025-03-20")
59分での比較
USER>write $system.SQL.Functions.DATEDIFF("mi","2025-01-20","2025-03-20")
84960秒での比較
USER>write $systemSQL.Functions.これは InterSystems FAQ サイトの記事です。
管理ポータルのシステム管理やシステムエクスプローラーなど最上位のメニューについては、事前定義ロールをユーザに付与することでアクセスを制限することができます。
最下位のメニュー、例えば [システム管理] > [構成] > [システム構成] > [ネームスペース] などは、事前定義ロールの %Manager を付与されたユーザであれば、全てのユーザが利用できてしまいます。
このページに対して、「%Manager ロールを持っているが、あるユーザは使用でき あるユーザは使用できない」のようにユーザ毎のアクセス制限を追加したい場合は、カスタムリソースを作成し再下位メニューに対して作成したカスタムリソースを付与することで制限を追加することができます。
手順は以下の通りです。
具体的な設定の流れは以下の通りです。
これは InterSystems FAQ サイトの記事です。
InterSystems 製品インストール時に用意されている事前定義ロールを利用して、ログインユーザ毎に管理ポータルメニュー(システム管理/システムエクスプローラー/システムオペレーション など)のアクセスを制限することができます。
管理ポータルメニューに対するアクセス制限を行うためには、管理ポータルへの「認証なし(UnknownUser)」アクセス(※1)を使用しない環境が必要です。
管理ポータル上部の「ログアウト」をクリックしてログイン画面が表示されない場合は、関連記事「管理ポータル/スタジオ/ターミナルにパスワード認証を設定するにはどうしたらいいですか?」をご覧いただき必要な設定を行ってください。
以下、インストールデフォルトで管理ポータルへのフルアクセスが許可されている事前定義ユーザ(※2): SuperUser や _SYSTEM アカウントを使用して管理ポータルにログインした状態の設定例でご説明します。
これらユーザのパスワードはインストール時に設定しています(インストール時の「初期セキュリティ」を「最小」でインストールした環境では、パスワードは大文字の SYS が設定されています)。
InterSystems 製品はロールベースのセキュリティを使用しています。
これは InterSystems FAQ サイトの記事です。
こちらの記事では、非ミラー環境にミラー環境でオンラインバックアップしたバックアップファイルをリストアする方法をご紹介します。
手順は大きく分けて2つになります。
以下は、^DBREST ユーティリティによる対話形式のリストア方法になります。
%SYS>do ^DBREST
Cache DBREST Utility
Restore database directories from a backup archive
Restore: 1. All directories
2. Selected and/or renamed directories
3. Display backup volume information
4.このたび InterSystems IRIS 2025.1 の日本語ドキュメントが完成しました。以下のURLでご参照いただけます。
| IRIS 2025.1 | https://docs.intersystems.com/iris20251/csp/docbookj/DocBook.UI.Page.cls |
| IRIS for Health 2025.1 | https://docs.intersystems.com/irisforhealth20251/csp/docbookj/DocBook.UI.Page.cls |
| Health Connect 2025.1 | https://docs.intersystems.com/healthconnect20251/csp/docbookj/DocBook.UI.Page.cls |
| Supply Chain Orchestrator 2025.1 | https://docs.intersystems.com/supplychain20251/csp/docbookj/DocBook.UI.Page.cls |
|
勧告 ID
|
影響を受ける製品と
|
リスクカテゴリー &
|
明示的な発生条件
|
|
DP-439649
|
製品:
バージョン:
|
運用:
システム安定性:
この問題はセキュリティ上の脆弱性ではありません。ユーザーの権限チェックを無効にしたり、承認されたネームスペース外のデータアクセスを可能にするものではありません。 |
暗黙のネームスペースの使用、管理ポータル または データベースに対する読み取り専用/読み取り書き込み混合アクセス。 |
上記にリストされたInterSystems製品において、以下の機能のいずれかを使用している環境で、ネームスペースを切り替えたりグローバル変数にアクセスしたりする際、予期しない <PROTECT> エラーが発生する可能性があります。
InterSystems は、以下のサポート対象製品バージョン 2025.1.0、2024.1.4、2023.1.6、および 2022.1.7 に影響する不具合を解決するために、新しいポイント アップデートをリリースしました。
この問題により、以下の機能を使用する際、予期しない <PROTECT> エラーやアクセス異常が発生する可能性があります:
これらの問題によりアクセス制御やユーザー権限が損なわれることはありませんが、複数のシナリオにおいて、システムの想定された動作に影響を及ぼします。
修正は次のポイントリリースに含まれています。
これは InterSystems FAQ サイトの記事です。
InterSystems 製品では、ユーザが持つロールによって「InterSystems 製品内で何ができるのか」が決まります。
では、ロールには何が含まれているのでしょうか。
ロールには、複数の特権を含めることができます。特権とは、リソース(保護対象)に対する許可の設定を指しています。
本記事では、IRIS の開発者である山田さん(Yamada) を例に、以下の内容をご説明します。
1) ロールから付与される特権(=リソースに対する許可)について具体例を利用した確認方法
《ご参考》
ビデオでの解説もあります。ラーニングパスの「InterSystems IRIS 管理の基本」の「4. セキュリティの構成と管理」をご参照ください。
ラーニングパスには、管理者ではないけれど管理概要も知っておきたい方向けの「開発者向け InterSystems IRIS の管理概要」もあります。ぜひご参照ください。
山田さんは開発者であるため、VSCode から T1 ネームスペースにアクセスし開発をしています。
これは InterSystems FAQ サイトの記事です。
ロックテーブルを参照する方法として、主に以下の3つの方法が挙げられます。
1. 管理ポータルで参照する方法
⇒ 管理ポータル:システムオペレーション > ロック > ロックを表示(または管理)
2. ^LOCKTAB ユーティリティ を使用する方法
⇒ %SYS> do ^LOCKTAB
3. プログラムで参照する方法
⇒ プログラム内でロック情報を取得する方法
こちらの記事では、ロックテーブルで参照できる情報について、以下の3つのケースに分けて、かかるロックとその意味をご説明します。
1.トランザクションで更新クエリ実行時、他のプロセスで更新・参照した状態 2.デッドロックとなった状態 3.テーブルロックがかかった状態
目視で一番わかり易いのは、1の 管理ポータルで参照する方法 になるので、こちらで説明したいと思います。
最初に、
1.トランザクションで更新クエリ実行時、他のプロセスで更新・参照をすると、どのようなロックがかかるのか見ていきます。
a. プロセスA(PID=10044)にてトランザクションで、Sample.Personテーブルの ID=1 を更新します。 ⇒ Exclusive_e->Delock ロック
[SQL]TL1:USER>>update Sample.これは InterSystems FAQ サイトの記事です。
InterSystems製品では、複数のプロセスが同時に同じデータにアクセスする場合、排他制御を行うためにロックを使用できます。
ロックは、データの更新を正しく行い整合性を保つための仕組みで、あるデータに対する更新処理を制御するために使用します。
ロックを操作するには、LOCK(L)というコマンドが使用できます。
こちらの記事では、InterSystems製品で使用できるロックの種類、LOCKコマンドの使い方をご紹介します。
★ロックの種類
| 増分 | 単純 | |
| 排他(既定) | LOCK +^A | LOCK ^A |
| 共有 | LOCK +^A#"S" | LOCK ^A#"S" |
プラス記号 (+) をつけると、増分ロックになります。1つのプロセスで複数の増分ロックを追加できます。
プラス記号 (+) をつけないと、単純ロックになります。こちらは、1つのプロセスで1つのロックのみ所有できます。単純ロックコマンド実行時に既存のロックがあった場合、そのプロセスが保持している既存のロックをすべて削除し、新しいロックを追加します。
排他ロック:
データを更新するために使用するロックです。
プロセスが特定のロック名の付いた排他ロックを所有している時、その他のプロセスは、そのロック名の付いたロックを取得できません。
インターシステムズは、InterSystems IRIS、InterSystems IRIS for Health、HealthShare Health Connect のポイントリリース 2025.1 をリリースしました。
新しいバージョン番号は 2025.1.0.225.1 となります。
本リリースは、SDS対応ビジネスホストを利用するユーザに影響を与える、深刻な相互運用性の問題に対応するために行われました。
しばらくの間、私はワークフロー機能について何らかの概念実証を行おうと計画していましたが、これは IRIS に存在する他の多くの機能と同様に、お客様にほとんど気付かれないまま終わってしまう傾向があります(その点については申し訳ありません)。 そこで数日前、この機能を構成して、Angular で開発したユーザーインターフェースに接続して使用するための例を作成することに決めました。
記事が非常に長くならなずに読みやすくするために、3 部に分けて説明しようと思います。 この最初の記事では、Workflow の機能とこれから解決する例について説明します。 2 つ目の記事では、Workflow の管理を担うプロファクションの構成と実装について詳しく説明します。 最後に、ウェブアプリケーションを通じて Workflow にある情報にアクセスする方法を説明します。
この Workflow 機能を説明するには、IRIS ドキュメントに記載の説明をコピーするのが一番でしょう。
ワークフロー管理システムは、ユーザーへのタスクの分配を自動化します。 事前定義済みの戦略に従ってタスクの分配を自動化することによって、より効率的にタスクを割り当て、タスクの実行に対する責任感を高めることができます。