これはInterSystems FAQサイトの記事です。
サーバのIPアドレスやマシン名は、%SYSTEM.INetInfoクラスのメソッドで取得することが出来ます。
set hostname=$System.INetInfo.LocalHostName() //マシン(ホスト)名
set ip=$system.INetInfo.HostNameToAddr($system.INetInfo.LocalHostName()) //IPアドレス InterSystems ObjectScriptは、InterSystemsデータプラットフォームの任意のデータモデル(オブジェクト、リレーショナル、Key-Value、ドキュメント、グローバル)を使用してデータを操作し、InterSystemsデータプラットフォーム上のサーバーサイドアプリケーションのビジネスロジックを開発するためのスクリプト言語です。 ドキュメント
これはInterSystems FAQサイトの記事です。
サーバのIPアドレスやマシン名は、%SYSTEM.INetInfoクラスのメソッドで取得することが出来ます。
set hostname=$System.INetInfo.LocalHostName() //マシン(ホスト)名
set ip=$system.INetInfo.HostNameToAddr($system.INetInfo.LocalHostName()) //IPアドレス 2022年5月30日より、外部アプリからGmailを送信するには OAuth 2.0が必須になりました (リンク) そのため、IRIS から Gmail を送信したい 場合は、今後は OAuth 2.0 を利用して Gmailアカウントに接続する 必要があります。 そこで、IRIS コード ObjectScript を使って、OAuth 2.0 でGmailアカウントに接続&メール送信するサンプルを作成しました。 ぜひご活用ください!
これはInterSystems FAQサイトの記事です。
指定した文字列式のうち指定したフィールド幅(半角での文字数)に収まる文字数を取得する関数:$ZPOSITIONと、部分文字列を返す関数:$EXTRACTを組み合わせることによって、全角/半角混在文字列から、指定された幅の文字列を取得することが出来ます。
※$Extractは文字単位で処理を行いますので、全角/半角を区別した取り扱いはできません。
構文:
$ZPOSITION(<文字列式>, <フィールド幅>, <全角文字に使用するピッチ値(デフォルトは2)>)
$EXTRACT(<文字列>, <開始位置>, <終了位置>)
例:
//指定した文字列(str)のうち、全角=2/半角=1 の幅として、フィールド幅10(半角10文字分)に含まれる文字数を取得
USER>set str="あい1234うえお"
USER>write $ZPOSITION(str,10,2)
7
//指定した文字列(str)のうち、全角=2/半角=1 の幅として、フィールド幅10(半角10文字分)に含まれる文字列を取得
USER>write $extract(str,1,$zposition(str,10,2))
あい1234う
$ZPOSITION、$EXTRACTの詳細については、下記各ドキュメントページをご確認ください。
これは、InterSystems FAQ サイトの記事です。
小数点桁数を指定しない単純な整数への切り上げ・切り捨ては、それぞれ、以下の関数で実行できます。
(SQL関数)
(ObjectScript関数)
切り上げ: $system.SQL.Functions.CEILING()
切り捨て: $system.SQL.Functions.FLOOR()
※バージョン2021.1以前は以下のメソッドを使用します。
切り上げ: $system.SQL.CEILING()
切り捨て: $system.SQL.FLOOR()
小数桁数を指定して切り上げ・切り捨てを行いたい場合は、2つの関数を組み合わせ、以下のようなメソッドを作成して対応します。
Class Sample.以前公開している こちら の記事では、「OAuth 2.0 を利用して IRIS から Gmail を送信する」方法をご紹介しています。
本記事では、
外部アプリからGmailを受信するには OAuth 2.0が必要となるため、こちらの手順 に従ってAccessToken を取得しておきます。
また、「2.【準備】IRIS で、SSLクライアントの設定をする : 手順(4)」の手順に従って、GMAILSSL(任意の名前)の構成を作成しておきます。
以下のサンプルでは、
1.Gmailの受信サーバ(servername = pop.gmail.com)に、ユーザ名(user = xxx@gmail.com)、パスワード(pass = パスワード)、AccessTokenを使用して接続し、
Set status=server.Connect(servername,user,pass,accesstoken)2.メールボックスの情報を取得し、
Do ..ShowMailbox(server)3.Fetch() メソッドを使用して、添付ファイルを含むメールの内容の取得し、
(添付は server.AttachDir で指定したディレクトリに保存)
Do これは InterSystems FAQ サイトの記事です。
ObjectScriptの%Netパッケージのライブラリクラスを利用して、ファイルを他のサーバーにアップロードすることができます。
以下のCurl コマンドと同じことを ObjectScript で実現する方法を紹介します。
curl -X POST "http://localhost/api/upload/csv?a=123&b=999" -F file=@"C:/temp/a.csv":/temp/a.csv"クライアントのObjectScriptコードを以下の様に作成します。
Class User.MyRestClient Extends %Base
{
ClassMethod readMimeData() As %Status
{
// form-data (for CSV)
set msg= ##class(%Net.MIMEPart).%New()
set msg.ContentType = "multipart/form-data"
set inputstream=##class(%Stream.FileBinary).%New()
set sc=inputstream.LinkToFile("c:¥temp¥a.これは 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 %Librar開発者の皆さん、こんにちは。
この記事では、複雑なJSON形式の文書を「JSONテンプレートエンジン」を利用して生成させる方法をご紹介します。
「JSONテンプレートエンジン」については、6月のウェビナーで使用例をご紹介しましたが、JSON生成対象として医療情報交換標準規格であるFHIRリソースのJSON(例:Patientリソース)を例に解説しています。
このエンジンは、JSON形式の文書であればどのような種類のデータでもご利用いただけますので、一般的なJSON形式の文書を利用して使い方をご紹介します。
例に使用するJSONはこちら👉 https://api.openbd.jp/v1/get?isbn=978-4-7808-0204-7&pretty
このサンプルから以下の部分を抜き出して、ObjectScriptでJSON形式の文書を組み立てていく方法をご紹介します。
開発者コミュニティのみなさま、2025年もよろしくお願いします!今年も素晴らしい製品やニュースをみなさまにお届けいたします。本日は VS Code の InterSystems Language Server 拡張機能の最新バージョンをご紹介します。Language Server 拡張機能の多くは、ObjectScript 拡張機能を通じてご提供することが多いです。そのため、コード補完機能やホバー機能といった、2024年に追加された Language Server 拡張機能の新機能には、なかなか気づきにくいかもしれません。ぜひ Language Server 変更履歴 で、見逃していたかもしれない新機能がないかご確認ください。最新バージョン2.7.0では、Windows ARMプラットフォームがサポートされたので、Surface Pro 11 (私はこの記事をウキウキしながら書いています) のようなデバイスをお持ちの方は、お使いのマシンで素晴らしい ObjectScript 開発を体験いただけます。Language Server 拡張機能をお試しいただき、何かありましたらぜひコメントをお寄せくださいませ。お待ちしております。
これは InterSystems FAQ サイトの記事です。
SQLでのストリームフィールドの取得についてはこちらのドキュメントに記載されております。
例: キャラクターストリームデータの50文字取得する
select substring(field1,1,50) from sample.streamtable%SQL.Statement を使用したクエリでそのストリームオブジェクトのOREF値を取得して、ストリームデータにアクセスすることもできます。
set stmt=##class(%SQL.Statement).%New()
set status = stmt.%Prepare("select field1 from sample.streamtable")
set rs=stmt.%Execute()
write rs.%Next()
set clob=rs.%GetData(1)
write clob.Read(50)埋め込みSQLを使用する場合は、そのストリームオブジェクトのOREFではなくストリームIDが返ってくるので、以下のようにストリームをオープンする処理を追加する必要があります。
&sql(select field1 into :outpic from sample.これは InterSystems FAQ サイトの記事です。
Question:
使用中のプログラムをコンパイルして保存すると、現在そのプログラムを実行中のプロセスに影響しますか?
Answer:
実行中のルーチンはその旧バージョンをメモリー上に保持しているため、コンパイルして新しいルーチンが保存されても影響なく実行を継続できます。
クラスのメソッドについても同様です。 再度そのルーチンが呼び出された時点でコンパイルされた新しいルーチンが使用されるようになります。
IRIS サーバ側で JSON の操作を行う方法を解説します(3つのビデオに分かれています)。
ビデオ② :ダイナミックエンティティで利用できるメソッドの練習
ビデオ③ :SQL関数と %JSON.Adapter の使い方
なお、このビデオには、以下の関連ビデオがあります。ぜひご参照ください。
このビデオの目次は以下の通りです。
最初~ 復習ビデオ/関連ビデオについて など
2:05~ JSONとは?
3:26~ JSONオブジェクト:ダイナミックエンティティの作成
//%DynamicObjectを使用した例
set json=##class(%DynamicObject).%New()
set json.Name="テスト太郎"
set json.Address="東京都新宿区"
write json.インターシステムズは、特定の $List シンタックスを使用することで不正なデータベースとジャーナルレコードが作成される問題を修正しました。この問題が発生する可能性は非常に低いものですが、発生した場合の影響は非常に大きなものとなります。
この問題は、以下の製品およびそれらベースとしたその他のインターシステムズ製品に存在します:
この問題はUnicode版の製品でのみ発生します。
以下のシンタックスでグローバル上のリスト形式データに新しい要素を追加する際に問題が発生します。
これは InterSystems FAQ サイトの記事です。
POST要求で受信したBodyのJSON文字列を、REST ディスパッチクラス内メソッドでダイナミックオブジェクト(%DyamicObject)に変換する際、以下エラーが発生する場合があります。
開発者の皆さん、こんにちは。
試していたWebAPIでは、POST要求時クエリパラメータとボディの両方を送る必要がありましたので、HTTPアウトバウンドアダプタが提供するメソッド:Post()/PostFormDataArray()/PostURL() 辺りをドキュメントで確認していたのですが、残念ながら両方を渡せるように作成された丁度良いメソッドがありませんでした。
ドキュメント:HTTPアウトバウンドアダプタが提供するメソッド
では、どのように送ったかというと、SendFormDataArray()の第3引数を利用して両方の情報を送付してみました。
具体的には、SendFormDataArray()の第2引数にはHTTPメソッド(GET、POST、PUT、DELETEなど)第3引数に%Net.HttpRequestのインスタンスが渡せる仕様になっていましたので、クエリパラメータとボディを%Net.HttpRequestのインスタンスに設定し、第3引数に指定して実行する方法をとりました。
set status=..Adapter.SendFormDataArray(IRISを起動しようとするとエラーとなり起動できません。
どなたか解決策をご存知でしょうか?よろしくお願い致します。
環境:Windows11
事前作業:
下記URLと同症状が発生し、アップグレードインストールを行っています。
https://jp.community.intersystems.com/post/iris%E3%82%B3%E3%83%9F%E3%83…
操作:
1.タスクトレイアイコンから「InterSystems IRIS 開始(S)[IRIS]」を選択。
2.エラーメッセージが表示される。
.png)
イベントビューアのエラー:
- <Event xmlns="http://schemas.microsoft.
ほとんどの方が @Daniel Tamajon の CachéQuality プロジェクトをご存知かと思います。 まだご存知でない方のために説明すると、InterSystems 製品用に記述されたコードの静的構文アナライザーです。 コード内の様々な種類の問題や潜在的なバグがお客様のプロダクション環境で見つかる前に、それらを検出して解決するのに役立てられます。 つまり、CachéQuality を使用することで、より優れた製品を提供できるようになります。 ObjectScript コードのチェックに使用されるルールの完全なリストは、こちらをご覧ください。
生成AIを活用したアプリケーション開発は、Python、JavaScriptなどのメジャー言語による体験記事がよく見られます。一方、IRISのObjectScriptの開発に言及された記事は比較的少ないのが現状です。そこで、本記事では生成AIがObjectScriptの開発にどこまで活用できるのかを検証しました。
特にDevOpsのプロセスにおいて、生成AIは様々なシーンでの活用が期待できます。今回は開発工程に注目し、以下の観点から生成AIの有効性を調査しました。
本記事の検証は以下の環境で行いました。
開発環境
開発ツール IRISの開発にはStudioやVSCodeなどが利用可能ですが、今回は生成AIの活用に特化したエディタ「Cursor」を使用しました。
Cursorを選定した理由 Cursorは、生成AIによる支援機能に特化したコードエディタで、以下の特徴があります:
生成AIの支援:コードの自動生成や提案、バグの検出、修正提案を行います。また、外部のドキュメントや複数のソースを指定し、生成内容に反映させる簡易なRAG機能も搭載されています。
Git を使用してIRIS でソリューションを構築することは、素晴らしいことです! 単にローカルの git リポジトリにVSCodeを使用し、サーバーに変更をプッシュする... それは非常に簡単です。
でも、次の場合はどうでしょうか。
このような状況では、あまり簡単なオペレーションとは言えませんでし
通常、Caché でエクスポートしたクラスやルーチンをIRISにインポートすることは可能ですが、IRISよりエクスポートしたクラスやルーチンを Caché にインポートすることはできません。
Caché にインポートしようとすると、以下のようなエラーになります。
USER>do $system.OBJ.Load("C:\temp\test.xml")
ロード開始 07/23/2024 16:50:42
ファイル C:\temp\test.xml を xml としてロード中
ERROR #6301 行: 2 オフセット: 117 これはCacheエクスポートファイルではありません。インポートできません。
読込時に 1 個のエラーを検出しました。
どうしても、古いバージョンにインポートする必要がある場合、「/exportversion」というエクスポート修飾子を使用することが可能です。
使用方法は以下のようになります。/exportversion には、エクスポートしたルーチンをインポートしたい環境のCacheバージョンを指定します。
USER>write $SYSTEM.OBJ.Export("test.mac","c:\temp\test2.xml","/exportversion=cache2018.これは、InterSystems FAQサイトの記事です。
既定では、InterSystems製品で表すことのできる日時の最小値は、1840年12月31日 0時0分0秒 です。
USER>write $ZDATETIME("0,0")
12/31/1840 00:00:00 ですが、アプリ内での用途や、他DBからの登録などで、それよりも前の日付時刻を登録する必要がある場合があります。
その場合には、日付日時のプロパティに、MINVAL(最小値)を設定することでサポートできます。
下記は、%DateTime型、%TeimaStamp型のプロパティに、最小値:西暦1年1月1日0時0分0秒と設定したものです。
Property TestDateTime As %DateTime(MINVAL = "0001-01-01 00:00:00");
Property TestTimeStamp As %TimeStamp(MINVAL = "0001-01-01 00:00:00");※2023.3および2024.1以降のバージョンでは、%DateTime型のMINVALの設定は必要なく、1840年12月31日 0時0分0秒より前の日時でも問題なく登録できます。%TimeStamp型の場合は、引き続き設定が必要です。
こんにちは。
VSCodeでObjectScriptにコメントを挿入する拡張機能を作成してみましたので、共有させて頂きたいと思います。
使い方はとても簡単で、コンテキストメニューから「コメントの追加」を選択するだけです。
カーソル位置に合ったコメントが挿入されます。
挿入するコメントの定型文は設定で自由に指定できます。
クラスの説明文を挿入する
パラメーターやプロパティの説明文を挿入する
メソッドの説明文を挿入する
これは InterSystems FAQ サイトの記事です。
管理ポータル > [システム管理] > [セキュリティ] 以下の設定は、%SYSネームスペースにあるSecurityパッケージ以下クラスが提供するメソッドを利用することでプログラムから作成することができます。
以下シナリオに合わせたセキュリティ設定例をご紹介します。
シナリオの中で使用するソースを2種類インポートします。
アプリケーション用RESTディスパッチクラスをインポートします。
Class Test.REST Extends %CSP.REST
{
Parameter CHARSET = "utf-8";
Parameter CONTENTTYPE = "application/json";
Parameter CONVERTINPUTSTREAM = 1;
XData UrlMap [ XMLNamespace = "http://www.intersystems.これは InterSystems FAQ サイトの記事です。
管理ポータル > [システム管理] > [セキュリティ] 以下の設定は、%SYSネームスペースにあるSecurityパッケージ以下クラスが提供するメソッドを利用することでプログラムから作成することができます。
ユーザ設定については、Security.UsersクラスのCreate()メソッドを使えば作成できますが、ユーザを作成するだけでは適切な権限が付与されずに目的のデータにアクセスできない状況もあります。
例)testAユーザ作成
%SYS>set st=##class(Security.Users).Create("testA",,"testA","これはテストユーザです","USER")
%SYS>write st
1上記メソッドで作成した結果は以下の通りです。(ロール付与無し、テーブルに対する権限の割り当てもなしの状態)

以降の解説では、以下のシナリオをもとにした設定を行っていきます。
シナリオ:アプリケーション開発者用ロールとユーザを作成する
1) アプリケーション開発者のtestAは、USERネームスペースにログインするアプリケーション開発者です(=%DevelopmentリソースのUse許可を与えます)。
これは InterSystems FAQ サイトの記事です。
監査ログはシステムDB内テーブル(%SYS.Audit)に記録されていますので、そのテーブルに対するクエリを実行して抽出したり、%SYS.Auditテーブルに用意されていストアドプロシージャを利用して情報を取得しファイル出力するようにプログラムを用意することもできます。
以下にご紹介する内容は「監査ログをプログラムで出力(ユーザやイベント指定など)する方法」に関連した内容で、監査ログのファイル出力を管理ポータルの機能を利用した例とプログラムを利用した例でご紹介します。
管理ポータル > [システムエクスプローラ] > [SQL]を開き、%SYSネームスペースに接続します。
システムのチェックを入れ、スキーマに%SYSを指定した後、プロシージャの階層を展開するとプロシージャリストが参照できます。
%SYS.Audit_ で始まるプロシージャが監査ログに対して実行できるプロシージャです。
SQL文例)InterSystems製品内ユーザのSuperUserに対する監査ログをストアドプロシージャ:%SYS,Audit_ListByUser を利用して出力しています。
call %SYS.Audit_ListByUser(,,,,,'SuperUser')引数については、クラスリファレンス:%SYS.
これは InterSystems FAQ サイトの記事です。
PythonスクリプトファイルやPythonで記述されたIRIS内メソッドを呼び出す際、エラーが発生した場合の対応方法をご紹介します。
説明使用するコードや資料PDFは公開しています👉 test1.py、FS.Utilsクラス、コードのコピー元、ビデオで解説している資料PDF
Embedded Python 自習用ビデオをご用意しています(項目別にYouTubeプレイリストをご用意しています)。
各プレイリストについて詳しくはこちらをご参照ください👉【はじめてのInterSystems IRIS】Embedded Python セルフラーニングビデオシリーズ公開!
これは InterSystems FAQ サイトの記事です。
InterSystems製品のサーバサイドでファイル入出力を行うと、文字列はシステムで設定されたファイル入出力用文字コードに自動変換され、文字単位でREADします。
ファイルから入力する文字をバイト単位で操作するためには、自動変換を行わない無変換の状態でファイル入力を行い指定バイトずつ読みながら読んだ分だけUnicodeに手動で変換していく必要があります。
変換には$ZCONVERT()関数を使用します。($ZCONVERT()には省略形があり$ZCVT()でも同様の操作が行えます。)
なお、READした指定バイトを変換する際、文字の全バイトが含まれない場合もあるため、途中までの読み取りになった文字列を第4引数に指定する変数に設定できるようになっています。
次回読み取り時に途中だった文字を自動的に先頭に追加し、$ZCONVERT()の処理を実行します。
《メモ》ファイル入出力の文字コードについては、以下管理ポータルの画面で確認できます。
管理ポータル > 構成 > 国際言語設定 > 構成したデフォルト値
入力/出力テーブルの表の「ファイル」
以下の文章がファイルにUTF8で保存されているとします。
無変換でファイル入力を行うには、%Stream.
これは InterSystems FAQ サイトの記事です。
現時点(2024年3月)では、コミュニティに掲載されているPythonライブラリ「iris-dollar-list」を利用することでIRISの$LIST()形式のデータをPythonのリストとして利用することができます。
※標準ツールではありませんがご利用いただけます。詳細はコミュニティの記事「もう1つの $ListBuild() の実装:Pythonライブラリ「iris-dollar-list」」をご参照ください。
WindowsにインストールしたIRISで使用する場合は、以下の方法で「iris-dollar-list」をインストールしてください。
※Windows以外にインストールしたIRISでは、pipコマンドを利用した通常の方法でインストールできます。
コマンドプロンプトを開き、以下実行します。(IRISをデフォルトインストールしたときのディレクトリで掲載しています)
> cd C:\InterSystems\IRIS\bin
> irispip install --target C:\InterSystems\IRIS\mgr\python iris-dollar-list実行例は以下の通りです。
「30 秒も経ってるのにサービスを受けられないなんて、 あり得ない! もう結構!」
「大変申し訳ございません。 次回からはご予約なさってはいかがでしょうか。」
お気に入りのレストランでこんなコメントを聞いたら、そんな発言はばかばかしいと思うのではないでしょうか。 でも、API のコンテキストでは、まったく合理的な意見です。 お気に入りのレストランと同じように、API にも常連客がいます。よく訪問するユーザーのことです。 同じように繰り返し予約が可能であればよいと思いませんか?
これには、IRIS の基本機能がいくつか関わってきます。 まず、%SYSTEM.License インターフェースを理解する必要があります。 これは、IRIS インスタンスのライセンス使用状況に関する情報を取得するために提供されているインターフェースです。 次に、%CSP.SessionEvents クラスについて学ぶ必要があります。 このクラスを使うと、CSP セッションのライフサイクル全体で呼び出される様々なメソッドをオーバーライドできます。
まずは、%SYSTEM.License インターフェースから見ていきましょう。 このクラスには、$SYSTEM.License を使って呼び出せるメソッドもあれば、##class(%SYSTEM.License) で呼び出す必要のあるメソッドもあります。
我々には、Redditユーザーが書いた、おいしいレシピデータセット がありますが, 情報のほとんどは投稿されたタイトルや説明といったフリーテキストです。埋め込みPythonやLangchainフレームワークにあるOpenAIの大規模言語モデルの機能を使い、このデータセットを簡単にロードし、特徴を抽出、分析する方法を紹介しましょう。
まず最初に、データセットをロードするかデータセットに接続する必要があります。
これを実現するにはさまざまな方法があります。たとえばCSVレコードマッパーを相互運用性プロダクションで使用したり csvgenのようなすばらしい OpenExchange アプリケーションを使用することもできます。
今回、外部テーブルを使用します。これは物理的に別の場所に保存されているデータをIRIS SQLで統合する非常に便利な機能です。
まずは外部サーバ(Foreign Server)を作成します。
CREATE FOREIGN SERVER dataset FOREIGN DATA WRAPPER CSV HOST '/app/data/'
その上でCSVファイルに接続する外部テーブルを作成します。
CREATE FOREIGN TABLE dataset.