みなさん、こんにちは。
今回はInterSystems Container Registryを発表できることをうれしく思います。 これはコンテナベースのリリースやプレビューにアクセスする新たな配布チャンネルです。すべてのコミュニティエディションのイメージはログイン不要の公開リポジトリにあります。すべてのリリースイメージ(IRIS, IRIS for Health, Health Connect, System Alerting and Monitoring, InterSystems Cloud Manager) やユーティリティイメージ(アービター、 Web Gateway、PasswordHash等) にはWRCアカウントの認証情報から生成されるログイントークンが必要です。
これは InterSystems FAQ サイトの記事です。
アプリケーションに求められる要件は日々複雑化しています。
しかし、複雑化するからといって開発のスピードおよび実行時のスピードが遅くなることは許されません。
複雑な要件を満たすために現在主流の手法ではソフトウェアスタック上の様々な部品(ミドルウェア、ライブラリ、フレームワークなど)を組み合わせる方法を取ります。
この方法は、様々なものを学習するための時間、それらを連携する方法、経年で様々なものが進化していくことに伴って各部品間の関係性が変化するためにそれらを維持管理していくための手間など様々な付帯的な作業が必要です。
結果として本来行いたいことに集中して取り組む前に付随する作業に忙殺されることになり開発生産性があがりません。
しかも実行時にも様々な部分が連携するためのオーバーヘッドを避けることができず期待する性能を確保することも困難になります。
一方インターシステムズのプラットフォームには上記要件を満たすのに必要十分な機能がひとつの首尾一貫した形で提供されており上記の様な手間がほとんど必要ありません。
さらにこのプラットフォームにはインターシステムズ独自の高性能、スケーラビリティの高いデータベースエンジンが内蔵されており様々なデータ処理を効率良く高速に処理します。
結果として本来行いたい作業に集中でき、アプリ
これは InterSystems FAQ サイトの記事です。
ユーザ定義エラーとして使用したいエラーコードと対応するメッセージを記述したXMLを用意します。
なお、エラーコードは負の整数で設定してください。
<?xml version="1.0" encoding="UTF-8" ?>
<MsgFile Language="ja">
<MsgDomain Domain="UserErrors">
<Message Id="-111" Name="MyError">エラーが発生しました</Message>
<Message Id="-222" Name="MyError2">エラーが発生しました2</Message>
</MsgDomain>
</MsgFile>
XML ファイルが作成できたら使用したいネームスペースにロードします。
set x=##class(%MessageDictionary).Import("error.xml")
ロード完了後、次のようなコマンドでユーザ定義エラーを取得、表示することができます。
USER>set error=$system.Status.Error(-111) // エラーコード -111 を指定してエラーを作成
USER>write $system.Staこれは InterSystems FAQ サイトの記事です。
ルーチン(*.mac)の場合
ソースプログラムのコンパイル後に生成される *.obj のみをエクスポート/インポートすることでソースの隠蔽化を実現できます。
コマンド実行例は、EX1Sample.mac と EX2Sample.mac のコンパイルで生成される EX1Sample.obj と EX2Sample.obj をエクスポート対象に指定し、第2引数のファイルにエクスポートしています。
別ネームスペースに移動したあと、エクスポートした XML ファイルを利用してインポートを実行しています。
USER>do $system.OBJ.Export("EX1Sample.obj,EX2Sample.obj","/opt/app/routine.xml")
XMLエクスポートの開始 04/22/2021 18:18:32
オブジェクトコードをエクスポート中: EX1Sample.obj
オブジェクトコードをエクスポート中: EX2Sample.obj
エクスポートが正常に完了しました。
USER>zn "test" // ネームスペース移動
TEST>do $system.OBJ.Load("/opt/app/routine.xml")
ロード開始 04/22/2021 18はじめに (および本記事を書いた動機) {#RobustErrorHandlingandCleanupinObjectScript-IntroductionandMotivation}
ObjectScript コードのユニット (ClassMethod など) を実行する場合、そのスコープ外にあるシステムの諸部分と対話するときに適切なクリーンアップを行えないことが原因で、様々な予期せぬ副作用が発生することがあります。 以下にその一部を紹介します。
- トランザクション
- ロック
- I/O デバイス
- SQL のカーソル
- システムフラグと設定
- $Namespace
- 一時ファイル
ObjectScript のこういった重要な機能を、クリーンアップのコーディングや防御的なコーディングを適切に行わずに使用すると、普段は正常に動作しても、予期せぬかたちで、またデバッグが困難なかたちで失敗し得るアプリケーションができてしまう可能性があります。 想定できるすべてのエラーケースにおいてクリーンアップコードが正常に動作することは、極めて重要です。表面的なテストではエラーを見落とす可能性が高いことを考えるとなおさらです。 この記事では、既知の落とし穴をいくつかご紹介し、信頼性の高いエラー処理とクリーンアップを実現するための 2 種類の対処法について説明いたします。
確実にすべてのエッジケースをテストしたい
先日、永続クラスとシリアルクラスからSwagger仕様を生成する必要がありました。そこで、その時のコードを公開することにします(完全なコードではないため、アプリケーション固有の部分を変更する必要がありますが、まずは出発点として使用できます)。 こちらからご利用ください。
次のクラスがあるとしましょう。
*この動画は、2021年2月に開催された「InterSystems Japan Virtual Summit 2021」のアーカイブです。
ソフトウェア開発技術において、プロセスの自動化、サイクルの短縮による生産性の向上を目指す考え方が普及してきました(CI/CD)。CI/CDの中核をなす技術の一つが、Dockerに代表されるコンテナです。
InterSystemsでは、Dockerコンテナで動作するIRIS data platformをリリースして、いち早く最新機能を皆様にお届けしています。この動画をご覧になって、DockerコンテナでIRISをスムーズに利用する第一歩としてください。
セッションで紹介しているリリースサイクルについては、こちらの記事をご覧ください。
セッションではデモを行っています。デモをご覧になりたい方は 12:49 からご覧ください。
開発者の皆さん
こんにちは。
先日、RESTのクラスを使って、PDFなどのファイルをアップロード、ダウンロードするサンプルをお送りしたお客さんからご質問を頂きました。
ダウンロード機能を使ってmp4などの動画を表示させた場合、以下のようにvideoの画面下のスライダーを移動しても、再生を進めたり戻したりができませんでした 。
やはり、以下のようにスライダを動かすと、その時点の画像が表示されたほうが良いですね。
そこでgoogleで調べてみると、Http Range requestへの対応が必要ということですのでObjectScriptで作成してみました。
表示用html
ブラウザで動画を表示するための簡単なhtmlファイルは以下の通りです。sourceタグのURLにGETメソッドでアクセスし動画データを受信します。
<html> <head> <title>ストリーム再生 </title> </head> <body> ストリーム再生<br> <video controls width="800" > <source src="http://localhost:52773/csp/storage/River.mp4"type="video/mp4"> </video> </body> </html>
RESTク
こんにちは、皆さま
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ファイルを開き編集したが、読み取り専用と表示。
.png)
VSCODEでCSPファイルを編集する方法をご存じの方は、教えて頂けないでしょうか?
みなさん、こんにちは!
Visual Studio Code 用のエクステンション、 InterSystems Server Manager のバージョン2.0がリリースされました。
このバージョンでは、弊社製品に同梱されているコードエディタ Studio と同じように、「サーバ上にあるクラス定義やルーチンを、サーバに接続して、直接編集&コンパイル」することが簡単にできます。この記事では、「Visual Studio Code を、Studio と同じように、気軽に使う」ための設定をご紹介いたします。
1. ObjectScript用エクステンションのインストール
まずは Visual Studio Code に、InterSystems IRIS (Caché) に接続するためのエクステンションを入れましょう。この記事を参考に、3つのエクステンションを導入します。
- InterSystems ObjectScript
- InterSystems Language Server
- InterSystems Server Manager
2. 接続するサーバの登録
左のサイドバーに InterSystems Tools という道具箱のアイコンがインストールされます。ここで接続先のサーバ情報を定義します。All Servers にカーソルをあわせ
.png)
こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。
InteroperabilityのRecordMapの仕組みを利用した、ファイル取り込みについて、
取り込み時のエラー内容を独自のログ出力グローバルに吐き出したいと考えております。
管理ポータル上だと以下のように表示されている内容を
文字列として取得したいだけなのですが、何か方法はありませんでしょうか?
.png)
Ent_Util.Logの中を見ると上記の内容は確認できたのですが、
わざわざシステムが吐いているログを見なくとも、
ビジネス・サービスの結果として取得できる情報があるのでは?と考えております。
++更新日:2018年8月1日
Cachéデータベースミラーリングに組み込まれているInterSystems仮想IP(VIP)アドレスの使用には、特定の制限があります。 具体的に言うと、ミラーメンバーが同じネットワークサブネットに存在する場合にのみ使用できるというところです。 複数のデータセンターを使用した場合は、ネットワークの複雑さが増すため、ネットワークサブネットが物理的なデータセンターを越えて「延伸」されることはさほどありません(より詳細な説明はこちらです)。 同様の理由で、データベースがクラウドでホストされている場合、仮想IPは使用できないことがよくあります。
ロードバランサー(物理的または仮想)などのネットワークトラフィック管理のアプライアンスを使用して、クライアントアプリケーションやデバイスに単一のアドレスを提示することで、同レベルの透過性を実現できます。 ネットワークトラフィックマネージャは、クライアントを現在のミラープライマリの実際のIPアドレスに自動的にリダイレクトします。 この自動化は、災害後のHAフェイルオーバーとDRプロモーションの両方のニーズを満たすことを目的としています。
クラスの中で配列プロパティを使い、その要素 (キーと値の両方) によってスピーディに検索を実行できると非常に便利な場合があります (EAV モデルの場合は特に重宝します)。
それでは、簡単な例を見てみましょう。
開発者の皆さん、こんにちは!
第11回 InterSystems IRIS プログラミングコンテスト: 開発者ツール の投票が開始されました!
🔥 これだ!と思う一押し作品に投票お願いします! 🔥
投票期間:4月19日~26日 (1週間)
投票方法は?
コミュニティメンバーはどなたでも投票いただけます!
投票種別は、Expert Nomination と Community Nomination に分かれています。コミュニティメンバーは、Community Nomination を選択いただき、どの作品がどの順位になるかを指定しながら投票してください!
Community Leaderboard:
開発者コミュニティのメンバーは、お好みのアプリケーションに対して1位~3位を指定しながら投票できます。
|
開発者コミュニティでのあなたの状態 |
順位 | ||
| 1位 | 2位 | 3位 | |
| 開発者コミュニティに記事を掲載したり、OpenExchange(OEX)にアプリをアップロードしたことがある方 | 9点 | 6点 | 3点 |
|
開発者コミュニティに1つの記事を掲載した、または 1アプリケーションを OEX にアップロードしたことがある方 |
6点 | 4点 | 2点 |
| 開発者コミュニティへコメントや質問を投稿したことがある方 | 3点 | ||

開発者の皆さん、こんにちは。
このシリーズでは、IRIS for Healthの使い方ではなく、関連技術として、FHIRプロファイル作成ツールであるSUSHIの握り方使い方を紹介していきたいと思います。
このツールをうまく使うことで、FHIRプロジェクトのプロファイル情報(仕様や制限、拡張などの情報)をうまく整理し、公開することができます。
その前にSUSHIとは何でしょうか?簡単にですが、順番に説明していきたいと思います。
FHIR って?
FHIRとは Fast Healthcare Interoperability Resources の略であり、Web通信の一般的技術であるRESTを使用して、可読性が高く取り扱いがし易いJSON/XML形式のデータの集合(=リソース)をやり取りする短期間で実装可能な医療情報交換標準規格、という定義になっています。
簡単に言えば、医療のデータの表現方法として皆で共通したフォーマットを使うことによって、システム間や施設間などでの情報の伝達や交換をやりやすいようにしよう!ということですね。
FHIRには様々なリソースが定義されています。例えば患者さんの情報にはPatientリソースという定義があり、これを使って表現されます。
FHIR公式サイトには多くのサンプルが掲載されていますので、一部抜粋してみます。 例えばこのようなJSON形式で表現されま

これは InterSystems FAQ サイトの記事です。
ジャーナル切り替えのタスクが実行時にエラー(例:FILEFULL)となり、その原因となるエラーを解消後も一時停止(Suspend Leave)状態となっているのであれば、以下の操作により復旧可能です。
管理ポータル: [システムオペレーション] > [タスクマネージャ] > [タスクスケジュール表示] より、以下の操作を行います。
- ジャーナル切り替え(Switch Journal) "詳細" をクリック
- "一時停止" をクリック
- タスク実行が一時停止された場合にタスクを再スケジュールしますか? はい
- "すぐに実行する" をクリック
- "再開" をクリック
- "すぐに実行する"
タスク詳細にて "一時停止:"が空欄になり、"次回スケジュール時刻:" が再開後の次のスケジュール(例えば2021-04-17 00:00) になっていれば、復旧完了です。
こちらの方法で一時停止状態が解消しない場合は、診断レポート※(^SystemCheck/^Buttons)とタスクの情報(以下の手順で取得)をサポート宛てにお送りいただいた上、ご連絡ください。
※
InterSystems IRISトラブル対応ガイド~情報収集編~(^SystemCheck/IRISHungの使い方)
Caché/Ensembleトラブ
開発者の皆さん、こんにちは。 以前の記事でIRIS for Health上でFHIRリポジトリを構築し、OAuth2認証を構成する方法をご紹介しました。
この代行認証編では、IRIS for HealthのFHIRリポジトリに組み込まれた認証機能ではなく、IRISの代行認証機能+ZAUTHENTICATEルーチンを使用して認証を行う方法をご紹介します。
前回記事でご紹介したように、標準のFHIRリポジトリの認証機構では、アクセストークンの発行先を追加するためのAudienceの指定(aud=https://~) や、アクセストークンだけではなくベーシック認証の情報を送付するなどの対応が必要でした。
スクラッチでFHIRクライアントを開発するのではなく、既成の製品やアプリケーションからアクセスする場合、上記のような処理の実装ができないことがあるかもしれません。 そのような場合には、この代行認証+ZAUTHENTICATEルーチンを使用して、カスタマイズした認証の仕組みを構築することができます。
この記事に含まれる情報のドキュメントについて
この記事で記載されている情報はIRIS for Healthのドキュメントにも含まれている内容をわかりやすく再構成したものです。
RESTサービスの保護:RESTアプリケーションおよびOAuth2.0

これは InterSystems FAQ サイトの記事です。
このエラーが発生する原因としては、アプリケーションの中で既に他のプロセスからロック対象リソースがロックされていて、何らかの理由でそのロックが解放されていないケースが考えられます。
他のプロセスがロックしている兆候がない場合は、ロックテーブルの空き領域が不足しているケースが想定されます。
その場合は、メッセージログ(コンソールログ)に LOCK TABLE FULL のメッセージが出力されます。
トランザクション処理を行なっている場合には、ロック解放の延期が影響しているケースも考えられます。
トランザクションとロック解放の延期については、以下のドキュメントをご参照下さい。
また、トランザクション中に、同一テーブルに対する大量レコードのSQL 文による更新がある場合、ロックしきい値(既定値は1000)に到達してロックエスカレーションが発生し、その結果として、テーブルロック状態になっている可能性もあります。
このように、ロックタイムアウトエラーの原因は幾つか考えられますので、まずは、管理ポータル(バージョン2010.2以前では、[システム管理ポータル])の、ロックメニューにて、現在のロックの状態をご確認下さい。
【バージョン2011.
これは InterSystems FAQ サイトの記事です。
クラスに定義されたプロパティの情報については、以下システムクラスを利用して情報を取得できます。
%Dictionary.PropertyDefinition
コード記述例は以下の通りです。
Class ISJ.Sample
{
ClassMethod getPropInfo(classname As %String)
{
set cls=##class(%Dictionary.ClassDefinition).%OpenId(classname,,.status)
if $$$ISERR(status) {
write "指定クラスは存在しません",!
quit // または return
}
set x=cls.Properties
for i=1:1:x.Count() {
// プロパティ情報を取得(%Dictionary.PropertyDefinition)
set prop=x.GetAt(i)
if prop="" {
continue
}
こんにちは、皆さま。
JOBの実行監視について、いい方法があれば教えてください。
現在Interoperablity上にファイル検知(PassthroughService)をトリガーにした
Serviceを作成しており、このServiceがデイリーで正しく動作しているかどうかを
監視する仕組みを作りたいと考えています。
例)
「A」というServiceが、毎日20時までに実行されているか?
を監視し、実行されていなければエラーメールを送信する。
今考えている案では、タスクスケジューラを用いて
JOBが実行されたかを見に行くしかないのかなと考えているのですが、
他にいい実現方法をご存じな方がいらっしゃれば、情報頂けますと幸いです。
開発者の皆さん、こんにちは。
以前の記事でIRIS for Health上でFHIRリポジトリを構築し、OAuth2認証を構成する方法をご紹介しました。 IRIS for Health 2020.4がリリースされ、FHIRリポジトリのアクセストークンをチェックする機能が追加になりました。
ドキュメントはAccess Token Scopesです。
この記事ではドキュメントの記載も抜粋しながらこの機能を紹介していきます。
Basic Processing
The access token that accompanies a request must include at least one patient clinical scope or user clinical scope, or else the request is rejected with an HTTP 403 error. If an access token contains both a patient clinical scope and a user clinical scope, the FHIR server enforces the patient clinical scope while ignoring the user clinical scope.
(訳)リクエストに添付されるアクセストー

皆さん、こんにちは!
皆さんに私のプロジェクトをご紹介したいと思います。
かつて私は、職場でドキュメントを作成し、それに氏名、誕生日、住所など、人に関する情報を挿入するといった、平凡なタスクを担当していました。 そこで、簡単に処理しようと考えた私は、アプリケーションを書きました。
このアイデアは斬新でないどころか、他の言語ですでに実装されていました。 そこで私は、似たようなツールを Cache Object Script で開発しようと考えたのです。 コンセプトは以下のとおりです。
特殊なセマンティクスを用いて、LibreOffice か Microsoft Word でテンプレートを作成します。
そして、テンプレートで使用されるすべての変数が定義されるメソッドまたはプロシージャを書きます。 メソッドは、[ProcedureBlock = 0] キーワードを使って宣言する必要があります。そうしないと、テンプレートを表示する最中に未定義のエラーが出てしまいます。
メソッドの中で、以下のコマンドを使ってドキュメントをレンダリングします。
set error = ##class(DocumentTemplate).RenderDocumentFromTemplate("<full-path-to-your-template>",
.png)
*この動画は、2021年2月に開催された「InterSystems Japan Virtual Summit 2021」のアーカイブです。
インターシステムズでは、昨年7月に日本語版の開発者コミュニティを正式にオープンしました。
この動画では開発者コミュニティの内容や活用方法、アプリケーションやサンプルなどのプログラムを公開するOpen Exchangeの活用方法についてご説明します。また、記事、質問等を投稿することでポイントが得られるグローバルマスターズについてもご説明します。
開発者コミュニティはこちらです。ぜひアクセスしてみてください。
https://jp.community.intersystems.com/
また、開発者コミュニティ内でも使い方や活用方法をご紹介しています。合わせてご覧ください。
これは、InterSystems FAQサイトの記事です。
以下ドキュメントは、IRIS 最新バージョンと Caché/Ensemble2018.1 でサポートしているクラウドプラットフォームの一覧です。
※Amazon EC2 は、2010.2.0以降でサポートしています。
Microsoft Azureは、2014.1.0以降でサポートしています。
Google クラウドプラットフォームは、IRIS2018.1以降でサポートしています。
Caché/Ensemble2018.1のサポートクラウドプラットフォーム
他バージョンの対応については、弊社サポートページからバージョン毎の説明ページをご参照ください。
クラウド環境を利用するにあたり、別途ライセンスの追加購入は必要はありません。
必要なライセンスは、InterSystems製品が稼働する仮想サーバのOSで必要なライセンス(Windows 64/32bit、Linux 64bit、Core数等に依存)となります。
クラウド上に環境構築するにあたり検討・考慮すべき点として、AWS では、2015.1 より前のバージョンをインストールする場合には制限があります。詳細は関連トピックをご覧ください。
構成については、以下の記事をご覧ください。
これは、InterSystems FAQサイトの記事です。
SQLクエリーの文字列を監査ログに残すことができます。
詳細は、以下のドキュメントをご参照下さい。
※%SQLで始まるイベントをご覧ください。
※監査関連ページをご覧ください。
これは、InterSystems FAQサイトの記事です。
iris.exeを使用し、以下のようにして確認できます。
※up:起動中、dn:停止中
c:\InterSystems\IRIS\bin>iris all nodisplay > c:\temp\test.txt
c:\InterSystems\IRIS\bin>type c:\temp\test.txt
Instance Version ID Port Directory
------------- ---------- ---- ---------
dn iris 2019.1.0.510.0 51773 c:\intersystems\iris
dn iris20191 2019.1.0.398.0 51774 c:\intersystems\iris20191
c:\InterSystems\IRIS\bin>
(1NF/2NF/3NF)露 からの引用
行と列で特定される位置には、それぞれアプリケーションドメインの値が 1 つだけあります (それ以外は何もない)。 その目的によって、同じ値がアトミックであったり、なかったりします。 例えば、「4286」という値は、
- 「クレジットカードの PIN コード」を意味するのであれば、アトミックとなります (破損している場合や並び替えられている場合は、使用できません)。
- 単に「連続する番号」であれば、非アトミックとなります (いくつかに分割されていたり、並び替えられていても、値は意味を成します)。
この記事では、文字列や日付、($LB 形式の) 単純なリスト、「list of <...>」、「array of <...>」といったフィールドの型を伴う SQL クエリのパフォーマンスを向上させる標準的な方法にして検証します。
これは InterSystems FAQ サイトの記事です。
INFORMATION_SCHEMA スキーマを使用して取得できます。
INFORMATION_SCHEMA はシステム用スキーマのため、デフォルトでは管理ポータルのSQLメニューに表示されません。
表示させる方法は以下の通りです。
- 管理ポータル→システムエクスプローラ→SQL メニューを開きます。
- スキーマのプルダウン左にある「システム」をチェックします。
- スキーマのプルダウンから INFORMATION_SCHEMA を選択します。
.png)
指定のテーブル(ISJ.Class1)に対するID、フィールド名(COLUMN_NAME)、データタイプ(DATA_TYPE)、説明(DESCRIPTION)を取得するSQLは以下の通りです。
SELECT ID,COLUMN_NAME,DATA_TYPE,DESCRIPTION
FROM INFORMATION_SCHEMA.COLUMNS
where TABLE_SCHEMA='ISJ' AND TABLE_NAME='Class1'これは InterSystems FAQ サイトの記事です。
グローバル変数毎のデータベースキャッシュ使用量を確認するツール(^GLOBUFFユーティリティ)が用意されています。
%SYSネームスペースにて、ユーティリティを直接実行する方法と、プログラムで実行する方法があります。
ユーティリティを直接実行する方法は以下のようになります。
%SYS>do ^GLOBUFF
Find which globals are using the most buffers.
Display the top <25>: → Enter押下 // デフォルトは上位25グローバルを表示
Total buffers: 102400 Buffers in use: 6926 PPG buffers: 77 (1.112%) // グローバル名とデータベース名、バッファに占める割合が出力されます
Item Global Database Percentage (Count)
1 oddDEF IRISLIB 34.551 (2393)
2 rOBJ
これは InterSystems FAQ サイトの記事です。
引数名の後ろに ... をつけることで可変の引数を渡すことができます。
ObjectScript では、配列を使って任意の数の引数を渡すことができます。
例文は以下の通りです。
例文では、メソッド実行後に確認しやすいように、グローバル変数(=データベースに格納される変数)に引数の情報を設定しています。
Class TEST.ARGTEST1 Extends %RegisteredObject
{
ClassMethod NewMethod1(Arg... As %String) As %Boolean
{
kill ^a
merge ^a = Arg
}
}
ターミナルで実行した結果は以下の通りです。
USER>DO ##class(TEST.ARGTEST1).NewMethod1(1,2,3,4,5)
USER>ZWRITE ^a
^a=5
^a(1)=1
^a(2)=2
^a(3)=3
^a(4)=4
^a(5)=5
