#ヒントとコツ

4 フォロワー · 371 投稿

特定の問題をエレガントまたは異常な方法で解決するためのInterSystems テクノロジーの一連の経験。

記事 Hiroshi Sato · 9月 26, 2021 3m read

これは InterSystems FAQ サイトの記事です。
リストコレクション(Property XXX As list of %String;)で定義したプロパティは、SQL関数: $LISTBUILD() 、$LISTFROMSTRING() を使用して操作できます。


各SQL関数については、下記ドキュメントページをご参照ください。

InterSystems SQL リファレンス - $LISTBUILD() 【IRIS】
IRIS SQL リファレンス - $LISTFROMSTRING() 【IRIS】
Caché SQL リファレンス - $LISTBUILD()
Caché SQL リファレンス - $LISTFROMSTRING()
 

/// クラス定義例
Class ISJ.ListOfData Extends %Persistent
{
Property listdata As list Of %String;
}

SQL文実行例は以下の通りです。 
 


USER>do $system.SQL.Shell()
--- 表示省略 ---
USER>>insert into ISJ.ListOfData (listdata) values($LISTBUILD('あ','い','う'))
10.     insert into ISJ.
0
0 303
記事 Megumi Kakechi · 2月 13, 2022 2m read

これは、InterSystems FAQサイトの記事です。
各プロセスが消費しているメモリの内容は、Windowsリソースモニタの項目のワーキングセット、共有可能、プライベートで確認できます。

これらの内容は以下になります。

ワーキングセット プロセスが使用する物理メモリです。
         ワーキングセット(プライベート)とワーキングセット(共有可能)との合計です。

共有可能               プロセスが使用する物理メモリ内で他のプロセスと共有可能なメモリです。

プライベート       プロセスが使用する物理メモリ内で他のプロセスと共有不可能なメモリです。


例えば、以下のようにメモリを使用しているプロセスがある場合、ほとんどは共有メモリになっているといえます。

ワーキングセット 5,341,472 = 共有可能 5,328,664 + プライベート12,808 (kb)


プロセスがアクセスする共有メモリは、データベースキャッシュおよびルーチンキャッシュで使用されているメモリ領域になります。

プロセスが大量にグローバルへのアクセスを行うと、データベースキャッシュへのアクセス量も多くなり、メモリ使用量の共有可能の数値が大きくなります。

0
0 325
記事 Megumi Kakechi · 9月 9, 2022 3m read

これは InterSystems FAQ サイトの記事です。
外部バックアップ機能と、SANソリューションが提供するスナップショット(スナップクローン、ミラークローンなど呼び方はベンダ毎に異なります)などのテクノロジを利用することで、バックアップ時のインスタンス停止時間を最短にすることができます。

操作手順概要は以下の通りです。

  1. 外部バックアップ用ユーティリティを利用して、データベースファイルへの書き込みを一時中断します(%SYSネームスペースで実行します)。
    %SYS>set status=##class(Backup.General).ExternalFreeze()
  2. 外部のスナップショットユーティリティを使用して、ファイルシステムのスナップショットを作成します。    
  3. データベースファイルへの書き込みを再開するため、外部バックアップ用ユーティリティを使用します。
    %SYS>set status=##class(Backup.General).ExternalThaw()
  4. バックアップメディアにスナップショットをコピーします。


【ご参考】
ExternalFreeze() の処理は以下のようになります。

 1.  ジャーナルファイルの切り替え
 2.  データベースバッファ上の書き込み待ちバッファをすべてデータベースファイルに書き出す
 3.

0
0 314
記事 Megumi Kakechi · 11月 3, 2022 1m read

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

Question:

IRISという製品名を選んだのはなぜですか?

Answer:

IRISは、インターシステムズの製品開発者がソフトウェアを開発する際に常に念頭に置くべき以下の4つの原則の先頭文字を表しています。

  [ I ]   Interoperable:他のソフトウェアと連携して動作すること
  [ R ] Reliable:信頼性が高いこと
  [ ]   Intuitive:直観的に使用できること
  [ S ] Scalable:スケール(拡張性が高い)すること

0
1 230
記事 Megumi Kakechi · 11月 12, 2023 1m read

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

iris list などのコマンドで、IRISインスタンスの情報を表示すると、下記のように、stateが「warn」となっていることがあります。

Instance 'IRIS'   (default)
    directory:    /usr/irissys
    versionid:    2022.1.1.374.0
    datadir:      /usr/irissys
    conf file:    iris.cpf  (SuperServer port = 1972, WebServer = 52773)
    status:       running, since Wed Jan 25 15:05:32 2023
    state:        warn
    product:      InterSystems IRISHealth


これは、直近のシステムログ(messages.log/cconsole.log)にエラーが記録されたことによるもので、InterSystems製品を再起動した場合、もしくは、一定時間エラーが無ければ、「ok」になります。
※元になったエラーの原因については、messages.logを確認してください。

0
0 116
記事 Hiroshi Sato · 3月 10, 2025 1m read

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

大量のレコードが含まれるテーブルに対して、select count(*) from テーブル名の応答が遅い、または応答がタイムアウトする場合には、ビットマップ・エクステント・インデックスを追加することで問題を解消することができます。 

ビットマップ・エクステント・インデックスを追加する方法は、以下をご参照ください。 

ビットマップ・エクステント・インデックスの追加方法

クラス定義に以下のような定義を行うことで、ビットマップ・エクステント・インデックスを追加することもできます。

Index IndexName [ Extent, Type = bitmap ];
0
0 203
記事 Megumi Kakechi · 1月 12 4m read

これは InterSystems FAQ サイトの記事です。
こちらのトピックでは、ミラー環境でECPを行う場合の設定方法注意すべき点について、ご案内します。

【設定方法】

手順は以下になります。


(1) 両方のフェイルオーバーメンバおよび任意の DR 非同期メンバで、ECPを有効にします

(2) ECP アプリケーションサーバ(ECPクライアント)で、ECPの設定を行います

(3) ECP アプリケーションサーバ(ECPクライアント)で、リモートデータベースの作成を行います

(4) 動作確認&リダイレクトのテストを行います


今回作成するECP構成は、ドキュメントにある以下のイメージの赤丸のインスタンスによる構成になります。




  A:プライマリ・
フェイルオーバーメンバ
B:バックアップ・
フェイルオーバーメンバ
C:DR非同期 ECPアプリケーションサーバ
(クライアント)
ミラー名 TESTMIRROR TESTMIRROR TESTMIRROR  
ミラーメンバ名 MACHINEA MACHINEB MACHINEC  
IPアドレス 10.0.0.244 10.0.0.151 10.0.0.60 10.0.0.
0
0 43
記事 Mihoko Iijima · 11月 6, 2020 4m read

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

テーブルチューニングを行った際に、フィールドに値がほとんど登録されていない(Null)場合や、特定の値がほとんどを占める場合、その値を[外れ値] として除外して選択性計算を行います。 また、外れ値が全レコードの何 % を占めているかの値[外れ値の選択性] として記録されます。

InterSystems 製品のクエリオプティマイザは、選択性数値とエクステントサイズを使用してクエリの経路を決定しますが、クラスクエリ、埋め込み SQL に使用しているクエリに外れ値が含まれる場合は、外れ値の選択性が自動的に考慮され、インデックスの使用有無を決定しています。

ダイナミック SQL 、ODBC/JDBC 経由でのクエリについては、外れ値が Null である場合、自動的に外れ値の選択性が考慮されますが、Null 以外の特定の値が外れ値に検出される場合は、明示的に指示を与えるまで考慮しません。

詳細は、ドキュメント(異常値に対する述語条件【IRIS】異常値に対する述語条件【Caché/Ensemble】)をご参照ください。

SAMPLES ネームスペースの Sample.

0
0 583
記事 Mihoko Iijima · 6月 1, 2021 6m read

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

InterSystems 製品を利用した REST/JSON の操作方法を、簡単なサンプルを利用して解説します。

サンプルでは、REST クライアント、HTML、ターミナルからデータ(JSON)を送信し、サーバ(InterSystems製品)で JSON 形式のデータを返す REST ディスパッチクラスを使った簡単な流れになっています。

サンプルは、https://github.com/Intersystems-jp/FAQ-REST-SimpleSample からダウンロードいただけます。

サンプルの利用手順

RESTディスパッチクラスとサンプルHTMLファイルが含まれています


(1) サンプルファイル(XML)のインポート

管理ポータルからインポートします(スタジオを利用されている場合は、スタジオでもインポートできます)。

管理ポータルは http://localhost:52773/csp/sys/UtilHome.csp でアクセスできます。

※ ポート番号はお使いの環境に合わせて変更してください。

管理ポータルにアクセスできたら以下メニューでインポートを行ってください。

0
0 7822
記事 Mihoko Iijima · 8月 31, 2021 5m read

これは 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.
0
0 385
記事 Hiroshi Sato · 10月 14, 2021 2m read

これはInterSystems FAQ サイトの記事です。
文字コードの変換に利用できる変換テーブル名は、以下のシステム関数で取得できます。 

 Write $$GetIONames^%SYS.NLS()

現在のロケールにおいて各デバイス(ファイル、ターミナル等)のデフォルトの変換テーブル名を取得するには、%SYS.NLS.Table クラスを使用します。

確認方法は以下の通りです。

(1) システムデフォルト設定を取得するため、%SYS.NLS.Table のインスタンスを生成します。(引数に、"System" を指定します。) 

 set obj=##class(%SYS.NLS.Table).%New("System")

(2) GetIOTable() メソッドを使用して、確認したいデバイスの現在の変換テーブル名を取得します。

メソッドの引数には、デバイス名に対応した番号を指定します。(詳細はクラスリファレンスをご参照ください。)

【ご参考】クラスリファレンスは、ドキュメントトップ > クラスリファレンス または、スタジオ→表示→クラスドキュメント から参照できます。

// ファイル入出力に使用する変換テーブル名を取得
 write obj.GetIOTable(3)

【ご参考】

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


%SYS.NLS.Tableについて【IRIS】
%SYS.NLS.

0
0 594
記事 Megumi Kakechi · 5月 6, 2022 1m read

これは、InterSystems FAQサイトの記事です。
InterSystems IRIS Data Platform(以下IRISと表記)はSQLのサポートをはじめ、リレーショナルデータベースとの高い互換性を有します。

さらに、IRISは多次元データエンジンをベースにしており、通常のリレーショナルデータベースシステムに比べて柔軟なデータ構造を持つことができ、一般的にパフォーマンス、スケーラビリティ、データ保守性に優れています。

また完全なオブジェクト指向をサポートしており、Javaなどのオブジェクト指向開発環境との親和性という点でも優れています。

0
0 363
記事 Mihoko Iijima · 3月 4, 2024 9m read

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

永続クラス定義(またはテーブル定義)に対してオブジェクト操作でデータの参照・更新を行うとき、オブジェクトオープンで使用する%OpenId()、オブジェクトの削除に使用する%DeleteId()の第2引数を使用して並行処理の制御方法を選択できます。

ご参考:オブジェクト同時処理のオプション

既定値は1です。(永続クラスのDEFAULTCONCURRENCYクラスパラメータでデフォルト値を指定できます。特に変更していない場合は 1を使用します)

並行処理の基本事項は以下の通りです。

  • アトミックな書き込みを保証したい場合は並行処理の値は0より大きい値を指定する必要があります。
  • 並行処理の値が0より大きい場合、オブジェクトの保存や削除処理中は、ロックの取得と解放を実施します。

並行処理の値別の動作の違いは以下の通りです。(ドキュメントの「並行処理の値」に表がありますので併せてご覧ください)

  • 値1の場合は、新規にオブジェクト生成したときにはロックを取得しません。既存オブジェクトを開く際に複数グローバルノードがある場合のみ共有ロックを取得し、開くのが終わったら開放します。(複数グローバルノードを持たないオブジェクトを開く場合はロックしません。)オブジェクトの保存時はロックを取得して保存処理が完了するとロックを解放します。
0
0 221
記事 Megumi Kakechi · 7月 28, 2024 2m read

これは InterSystems FAQ サイトの記事です。
通常SQLCODE -114(一致する行が既に別のユーザにロックされています)のエラーはロックが競合した場合に発生します。

こちらはレコードロック競合があったり、ロック閾値を超える更新を行いテーブルロックに昇格した際に、そのテーブルレコードに対して別のプロセスよりSelectを行い共有ロックを取ろうとして失敗した(ロック待ちがタイムアウトとなった)場合に発生します。

Selectで共有ロックを取る場合というのは、IRIS の ISOLATION LEVEL がREAD COMMITTED(デフォルトはREAD UNCOMMITTED)で、Selectを行った場合です。

例:Sample.Personテーブルにテーブルロックがかかった状態で以下を実行する場合

USER>:sql
SQL Command Line Shell
----------------------------------------------------
 
The command prefix is currently set to: <<nothing>>.
Enter <command>, 'q' to quit, '?' for help.
0
0 195
記事 Megumi Kakechi · 7月 6, 2025 2m read

これは 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.

0
1 77
記事 Megumi Kakechi · 12月 17, 2020 1m read

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

選択性(または Selectivity)の数値とは、カラムに対するユニークデータの割合を示す数値です。

例) Person テーブルの個別値である PID カラム、住所のうち都道府県名が入る Pref カラム
 Pref カラムの選択性 = 約 2%
 PID カラム(ユニーク属性のカラム)の選択性 = 1

InterSystems製品のクエリオプティマイザは、クエリ実行経路(プラン)とインデックスの選択を決定するため、エクステントサイズ(テーブル内のレコード数)と選択性の数値を使用します。

詳細は下記ドキュメントページをご参照ください。

テーブルの最適化【IRIS】

テーブルの最適化

なお、選択性の数値は、テーブル単位に計算するまで設定されていません。

計算方法については関連トピックをご参照ください。

【関連情報】(コミュニティ/FAQトピックをリンクしています)

0
0 408
記事 Mihoko Iijima · 4月 9, 2021 1m read

これは 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
0
0 399
記事 Toshihiko Minamoto · 6月 23, 2021 10m read

この記事では、InterSystems Cachéにおけるマクロについて説明します。 マクロは、コンパイル中に一連の命令に置き換えられるシンボリック名です。 マクロは、渡されたパラメーターとアクティブ化したシナリオに応じて、呼び出されるたびに一連の命令セットに「展開」されます。 これは、静的コードの場合もあれば、ObjectScriptを実行して得られる結果である場合もあります。 それでは、アプリケーションでマクロをどのように使用できるのかを見てみましょう。

0
0 399
記事 Mihoko Iijima · 4月 17, 2023 1m read

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

以下の状態の時、ReadOnlyでマウントされます。

0
0 309
記事 Mihoko Iijima · 5月 16, 2024 9m read

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

この記事では、InterSystems製品のバックアップ方法(4種類)のご紹介と、バックアップを行う前に確認しておきたい内容について解説します。

また、この記事に続くシリーズ記事では、それぞれのバックアップの仕組みと操作例を交えたバックアップとリストア手順を解説していきます。

シリーズ記事の中で行っているバックアップ練習、リストア練習の内容については、インターシステムズの講師付きトレーニングコースの中でも取り入れている内容で、一人1環境の演習環境内で実際にお試しいただいています。

参加者の皆さんと一緒に演習を進めて行きますと、データベースリストアの後に行うジャーナルリストアについては、ユーティリティから出力される確認項目が多いため、皆さん慎重に確認されながらリストアの指示を入力されています。そのため、リストア開始前の手続きや準備に意外と時間がかかっています。

0
0 182
記事 Mihoko Iijima · 1月 9, 2025 2m read

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

InterSystems製品では、システム開始時に任意の処理を追加できます。

データベースミラーリングを構成していない環境では、%ZSTARTルーチンのSYSTEMラベルを作成することで任意の処理を実装できますが、データベースミラーリングを構成している環境では、このルーチンでは動作しない処理があります。

ご参考:^%ZSTART ルーチンと ^%ZSTOP ルーチンによる開始動作と停止動作のカスタマイズ

理由として、ミラーリング構成の場合、ミラーデータベースへのアクセスはミラーリングサービスが開始されプライマリメンバとなるまでReadOnlyとなります。

ミラーリングの開始処理は、%ZSTARTの処理とは別プロセスで実施している為、%ZSTARTの実行時にミラーデータベースへ書き込みアクセスができる状態とは限りません。

そのため、InterSystems製品開始時にミラーデータベースにアクセスするような任意処理を追加する場合は、ルーチン:ZMIRRORの NotifyBecomePrimary()を使用します。

ご参考:^ZMIRROR ルーチンの使用法

なお、ルーチン:ZMIRROR は、%ZSTART と同様に既定では存在しませんので%SYS上に新規で作成する必要があります。

例:ZMIRROR.

0
0 136
記事 Megumi Kakechi · 12月 16, 2025 2m read

これは InterSystems FAQ サイトの記事です。
こちらの記事では、コマンド・パイプデバイスを使用して、外部コマンドの出力を取得する方法をご紹介します。

以下のように行います。
★コマンド出力を取得する例:

USER>kill
USER>set cmd="netstat -anp tcp"
USER>set pipe=##class(%File).%New(cmd)
 
USER>write pipe.Open("rq")
1
USER>while 'pipe.AtEnd { write !,pipe.ReadLine() }
アクティブな接続
  プロトコル  ローカル アドレス          外部アドレス        状態
  TCP    0.0.0.0:23             0.0.0.0:0              LISTENING
  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING
(中略)
  TCP    192.168.172.1:139      0.00.
0
0 52
記事 Toshihiko Minamoto · 8月 17, 2020 25m read

この記事では、スナップショットを使用したソリューションとの統合の例を使って、_外部バックアップ_による Caché のバックアップ方法を紹介します。 このところ私が目にするソリューションの大半は、Linux の VMware にデプロイされているため、この記事の大半では、例として、ソリューションが VMware スナップショットテクノロジーをどのように統合しているかを説明しています。

Caché バックアップ - すぐ使えますか?

Caché をインストールすると、Caché データベースを中断せずにバックアップできる Caché オンラインバックアップが含まれています。 しかし、システムがスケールアップするにつれ、より効率的なバックアップソリューションを検討する必要があります。 Caché データベースを含み、システムをバックアップするには、スナップショットテクノロジーに統合された_外部バックアップ_をお勧めします。

外部バックアップに関して特別な考慮事項はありますか?

詳しい内容は外部バックアップのオンラインドキュメンテーションに説明されていますが、 主な考慮事項は次のとおりです。

「スナップショットの整合性を確保するために、スナップショットが作成される間、Caché はデータベースへの書き込みをfreezeする方法を提供しています。

0
0 756
記事 Megumi Kakechi · 5月 13, 2021 1m read

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

Webアプリケーションの開発・運用には、高性能・高スケーラビリティ・開発生産性の良さが求められます。

IRIS Data Platformには、高性能で軽量なデータベースエンジンとそのエンジンの性能を最大限活用するアプリケーションサーバ機能、および、Webアプリケーションを迅速に開発するためのREST/JSON対応、API管理機能が用意されています。

さらに、マルチコア・マルチCPUシステムに最適化したアーキテクチャや、複数サーバでのスケールアウト手法による高スケーラビリティを提供するECP、シャーディングと呼ばれる技術を提供します。

0
0 166
記事 Mihoko Iijima · 3月 29, 2022 3m read

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

メール送付のコードを記述する前に、管理ポータルで SSL/TLS 構成を作成します。

管理ポータル > システム管理 > セキュリティ > SSL/TLS 構成

メール送付までの流れは以下の通りです。

  1. メールメッセージ用クラス:%Net.MailMessage のインスタンスを作成し、送信元メールアドレス、宛先メールアドレス、件名、本文を設定します。
  2. 認証情報設定用クラス:%Net.Authenticator のインスタンスを作成し、メール送付時に使用する認証情報を設定します。
  3. SMTP用クラス:%Net.SMTP のインスタンスを作成し、SMTP サーバの設定、管理ポータルで作成した SSL/TLS 構成名の指定、2で作成した認証情報と 1で作成したメールメッセージを使用して、メールを送信します。

ターミナルからの実行例は以下の通りです(Gmail を利用しています)。

《メモ》
現在(2022年5月30日以降)、Gmailを利用したメール送付を行う場合 OAuth2.0 の利用が必須となりました。Gmailを利用する場合の手順ついては、「OAuth 2.0 を利用して IRIS から Gmail を送信する」をご参照ください。

0
0 577
記事 Mihoko Iijima · 6月 1, 2025 7m read

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

InterSystems 製品では、ユーザが持つロールによって「InterSystems 製品内で何ができるのか」が決まります。

では、ロールには何が含まれているのでしょうか。

ロールには、複数の特権を含めることができます。特権とは、リソース(保護対象)に対する許可の設定を指しています。

本記事では、IRIS の開発者である山田さん(Yamada) を例に、以下の内容をご説明します。

1) ロールから付与される特権(=リソースに対する許可)について具体例を利用した確認方法

2) ロールを利用したセキュリティ設定について

《ご参考》

ビデオでの解説もあります。ラーニングパスの「InterSystems IRIS 管理の基本」の「4. セキュリティの構成と管理」をご参照ください。

ラーニングパスには、管理者ではないけれど管理概要も知っておきたい方向けの「開発者向け InterSystems IRIS の管理概要」もあります。ぜひご参照ください。

1) ロールから付与される特権(=リソースに対する許可)について具体例を利用した確認方法

山田さんは開発者であるため、VSCode から T1 ネームスペースにアクセスし開発をしています。

0
0 94
記事 Mihoko Iijima · 6月 14, 2021 1m read

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

接続先クライアントのIPアドレス取得するには、以下の方法で %SYS.ProcessQuery クラスを使用します。

(a) 対象プロセス ID を指定して、ClientIPAddress プロパティ を参照します。

 Set Process=##CLASS(%SYS.ProcessQuery).%OpenId("8656")
 Write Process.ClientIPAddress

(b) 全てのプロセスの情報を知りたい場合は、必要な情報のみ取得する SQL クエリを作成し、クラス内で実行することができます。

例) SELECT * FROM %SYS.ProcessQuery で詳細情報を取得できます。

詳細は、以下ドキュメントをご参照ください。
%SYS.ProcessQueryについて【IRIS】
%SYS.ProcessQueryについて

0
0 170
記事 Hiroshi Sato · 9月 9, 2021 2m read

これは InterSystems FAQ サイトの記事です。
システムクラス  Config.MapGlobals を使用して登録することができます。

ネームスペース USER からデフォルトデータベース以外のデータベース SAMPLES にある ^Sample.PersonD をグローバルマッピングする方法は以下の通りです(ターミナルでの実行例)。

USER>zn "%SYS"  %SYS>set ns="USER"  %SYS>set glo="Sample.PersonD"
 
%SYS>set vals("Database")="SAMPLES"
 
%SYS>set st=##class(Config.MapGlobals).Create(ns,glo,.vals) ※ Config.MapGlobals クラスの Create()メソッドの第3引数は参照渡しのため、変数名前にピリオド(.)を付与して指定します。

Config.MapGlobals クラスを使用する方法以外に、インストールマニフェストクラスを利用して定義することもできます。

インストールマニフェストクラスの作成方法詳細については添付をご参照ください。

以下例は、インストールマニフェストでの定義例です(クラス定義は添付内に含まれています)。

0
0 402
記事 Mihoko Iijima · 7月 4, 2022 7m read

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

PythonでExcelからPDFへ変換を行うには、pywinを使うとできるらしいので、IRISにあるデータをDataframeに設定した後Excelに出力し、ExcelからPDFに変換する流れを、Embedded Pythonで試してみました。

メモ:pywinはWindows環境下で動くモジュールのようです。

Excelに出力するデータですが、例では、SELECTの結果をDataframeに格納する方法を利用しています。グローバル変数の情報をDataframeに格納する方法については、以下の記事で詳しくご紹介しています。ぜひご参照ください。
Embedded Python で IRIS グローバル($LB) を Pandas Dataframe に変換する方法

まずは、必要なモジュールをインストールする必要があるので、pywin32 モジュールを irispipを使ってインストールします。

以下の例では、IRIS for Health が c:\InterSystems\IRISHealth にインストールされている状態で実行しています。

Embedded Pythonは、IRIS/IRIS for Health どちらでも利用できます。

0
0 1358
記事 Mihoko Iijima · 3月 13, 2023 3m read

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

永続クラス定義では、データを格納するグローバル変数名を初回クラスコンパイル時に決定しています。
グローバル変数名は、コンパイル後に表示されるストレージ定義(Storage)で確認できます。

例)

Class Training.Person Extends %Persistent
{
Property Name As %String; Property Email As %String; Storage Default
{
<Data name="PersonDefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>Name</Value>
</Value>
<Value name="3">
<Value>Email</Value>
</Value>
</Data>
<DataLocation>^Training.PersonD</DataLocation>
<DefaultData>PersonDefaultData</DefaultData>
<ExtentSize>0</ExtentSize>
<IdLocation>^Training.PersonD</IdLocation>
<IndexLocation>^Training.
4
0 456