記事 Akio Hashimoto · 12月 22, 2024 2m read

​ UDL形式でのインポート・エクスポートが出来ない古いCahceバージョンのソースを保守していたり、古くからのバージョン管理下においてXMLでのバージョン管理を行っている環境であったりと、未だにXMLでのエクスポート・インポートが必要になる場面はまれにあるかと思います。 今回、そういった環境下でもわざわざ管理ポータルを開かずとも、VSCodeでXML形式でエクスポートする拡張機能をリリースしましたので、共有させて頂きます。

機能について

編集画面、あるいは、VSCodeのエクスプローラータブ内からクラスを選択し、コンテキストメニューの「XML形式でエクスポート」を実行します。

XMLファイルは所定の場所に保存されます。保存先は設定で指定が出来ます。

複数のクラスを選択した場合、初期値では1対1でXMLファイルが保存されます。

image  

設定を変更する事で、1つのXMLファイルとして保存する事も可能です。

image  

利用方法

  1. 拡張機能の検索窓から"ObjectScript To XML"を検索し、インストールします。
  1. READMEに記載されているソースをダウンロードし、IRISへインポートします。

  2. ウェブ・アプリケーションを作成します。

  3. 必要な場合、拡張機能の設定値を変更します。

image   

0
0 0
質問 Akio Hashimoto · 12月 4, 2024

Pythonでは、拡張モジュールのバージョン違いが混同されないように、venv を使って仮想環境に拡張モジュールをインストールする事を推奨されてたりしますが、IRISから使用する場合に、このvenvで作られた仮想環境を利用する事は可能でしょうか?

PythonPathに仮想環境のパスを指定してはみましたが、プロジェクトから、あるいはimportで、その場所を指定する等出来るでしょうか?

何方か御存知の方がおられましたら、その方法などを教えて下さい。

0
0 0
質問 Akio Hashimoto · 11月 28, 2024

ここ最近になって、VSCodeで以下のようなエラーが出るようになり、波線だらけになってしまいます。
IRISサーバーとは連携出来ていて、コンパイルも通るので大きな問題ではないのですが、ソースが真っ赤っ赤になってとっても見辛いです。
これらを消す方法があれば教えて下さい。
VSCode、拡張モジュール共に最新です。

Avoid using legacy if/else flow control statements (cachequality:OS0089)

鍋蓋カッコを使わない1行のIF文のところで真っ赤な波線が出まくります。
例:if (a = "") set b = "c"
 

Consider using an If statement instead of a postconditional (cachequality:OS0039)

コマンドの後付条件を記載しているところで、青い波線が出まくります。
例:quit:var=""
 

This QUIT invocation exits the current method; consider using RETURN instead (cachequality:OS0031)

処理の途中で、Quitと書いていることろが黄色い波線が出まくります。

ちなみに、以下のようなメッセージも出ます。

0
0 0
記事 Akio Hashimoto · 10月 4, 2024 3m read

IRISはPythonの豊富なライブラリや既存のPythonプログラムをそのまま利用する事も、COS内でネイティブにコーディングする事も可能となりました。 しかし開発において、いくつかの問題点があります。

1. Pythonのバージョン

Pythonを使ったプロジェクトを構築していると、バージョンの問題にあたる時があります。 古いバージョンで開発していたところに、使いたいライブラリが対応していなかった等です。 しかし、IRISのEmbedded Pythonを利用する場合には、Pythonランタイムのバージョンに影響される為、プロジェクトで使用するバージョンは、プロジェクト単位はなく、IRISのバージョン単位で決まってしまいます。 また、現時点ではこのPythonランタイムをアップグレードする事はできません。

2. 外部Pythonファイルの利用

0
0 0
記事 Akio Hashimoto · 7月 5, 2024 2m read

IRISでPythonを扱う時に、既存の%DynamicObject型の値をそのまま利用したいと思うのですが、Embedded Pythonは自動で%DynamicObjectをdict型にはしてくれません。親和性はとてもあるのですが。。。

そこで、既存プログラムで生成した%DynamicObject型の値をPython側、特に外部のPythonファイル側でdict型を期待している関数に利用するにはどうすれば良いか。

少しスマートではありませんが、%DynamicObjectを一旦JSON文字列に置き換え、Embedded Python 内でJSON文字列からdict型に変換する方法しかないようです。
以下が、その手順です。

Set data = {}
Set data.name = "hanako"
Set data.age = 20

Do ..testPython(data)

ClassMethod testPython(arg As %DynamicObject) [ Language = python ]
{
    import json
    import pythonfile

    data = json.loads(arg._ToJSON())
    pythonfile.test(data)
}

pythonfile.py

0
0 0
記事 Akio Hashimoto · 10月 22, 2023 4m read

開発者の皆さんこんにちは。 これは筆者がDocker上でIRISを動かす時の、構築手順を示した備忘録です。 以前投稿した「Dockerを利用した開発環境下でのIRISへのSSL接続方法」と「IRISサーバーのバックアップと再構築の手順」も合わせて参考にして頂けると良いと思います。

筆者環境

本ドキュメントは筆者の環境に合わせた内容となりますので、以下の環境下でのドキュメントとなります。

  • ホストOS:macOS Sonoma 14.0
  • CPU:Apple M2 Pro
  • Docker:v24.0.6(Docker Desktop for Mac v4.24.2)
  • IRIS:IRIS for UNIX (Ubuntu Server LTS for ARM64 Containers) 2023.2 (Build 227U)

IRISサーバーの構築

Dockerイメージの入手

IRISのDockerイメージファイルを入手します。 入手手順は、Developer Community サイトのメニュー「InterSystems Container Registry」を開き、左側ツリーの "InterSystems IRIS Community Edition" -> "iris-community" -> バージョン を選択。筆者の場合はarm64版のコマンドを実行します。

2
1 562
お知らせ Akio Hashimoto · 7月 28, 2023

こんにちは。
VSCodeでObjectScriptにコメントを挿入する拡張機能を作成してみましたので、共有させて頂きたいと思います。


使い方はとても簡単で、コンテキストメニューから「コメントの追加」を選択するだけです。
カーソル位置に合ったコメントが挿入されます。
挿入するコメントの定型文は設定で自由に指定できます。

クラスの説明文を挿入する

 

パラメーターやプロパティの説明文を挿入する

 

メソッドの説明文を挿入する

 

3
0 109
記事 Akio Hashimoto · 3月 16, 2023 3m read

DockerコンテナでIRISサーバーを構築していた時に、Dockerのバージョンアップによって、IRISサーバーが消滅してしまう事がありました。 その経験から、IRISサーバーを復元する為の方法と、事前のバックアップについて共有したいと思います。

###IRISのバックアップ手順

全ての構築が完了したら、事前にバックアップを取っておきます。 クラスやルーチン、グローバルのバックアップは別途、バックアップを取っておく事をお勧めします。

  1. ユーザー定義をエクスポートする。   IRISサーバーで定義したユーザーの設定内容を全てエクスポートします。
zn "%SYS"
write ##class(Security.Users).Export({出力先フルパス})
  1. アプリケーション定義をエクスポートする。   IRISサーバーに定義したアプリケーションの設定内容を全てエクスポートします。
zn "%SYS"
write ##class(Security.Applications).Export({出力先フルパス})
  1. IRISサーバーを停止する。   起動しているIRISサーバーのインスタンス名を指定してIRISサーバーを停止します。
iris stop {IRISインスタンス名}
0
1 215
質問 Akio Hashimoto · 2月 3, 2022

皆さん
こんにちは。

最近ではVSCodeでIRISのプログラミングを行っている方も多いと思います。
クラスメソッドなんかをコーディングし、実行してエラーとなった場合に、以下のようなエラーメッセージが取得できると思います。

> <UNDEFINED> zNewMethod+32^ClassName.1

これは、NewMethodというメソッド内の32行目でUNDEFINEDが発生した事を指していますが、これは実際にはClassName.clsのNewMethod内の32行目ではなく、ClassName.1というルーチン(int)のzNewMethodでの32行目を示しています。
.clsから生成されるintは空行が削られたり、複数ルーチンに分割されたりしますので、実際のClassName.clsを開いてNewMethodの32行目を見ても実際のエラー箇所では無い場合があります。
VSCodeで開発をしていると、これが結構面倒なのですが、エラーメッセージに出力される行番号を .clsや、.mac 上での行番号に変える方法があれば教えて頂きたく、よろしくお願い致します。

2
0 509
質問 Akio Hashimoto · 2月 1, 2022

Windows端末でCachéやIRIS等を開発環境として使っています。

Windows11での動作状況について、インターシステムズからの正式な対応はまだのようですので、

下記のバージョンで既にインストールをされている方が居られれば、状況などを教えて頂けないでしょうか。

特に問題無く動いていますでしょうか?

・Caché 2017.1

・IRIS for Health 2019.1

この他のバージョンについても情報が御座いましたらよろしくお願い致します。

2
0 366
記事 Akio Hashimoto · 10月 25, 2020 5m read

Docker環境下でWebアプリのコンテナとIRISのコンテナをRESTfulAPIで連携した時の SSL化方法。
ちなみにこの方法で管理ポータル等もSSL通信が可能になります。

参考サイト:

構成

※ Vue.jsはローカル上でホットリロードを利用した開発環境。 ※ IRISはローカル上に構築したDockerコンテナ下で稼働中。

今回、IRISをDockerコンテナで稼働させる方法は割愛します。

WebアプリケーションをHTTPSで利用する

Vue.jsで開発中のアプリケーションをhttpsでホットリロード利用出来るように起動する。

npm run serve -- --https

これで開発中のデバッグ画面をhttpsで呼び出して利用する事ができるようになるが、このままでは、httpsからhttpにアクセスする事が出来ない為、IRISのRESTを呼び出すことが出来ない。

Nginxでプロキシサーバーを立てる

Nginxでプロキシサーバーを立てて、httpsでアクセスされたら全てIRISのサーバーにリダイレクトするようにする。

2
0 1380
質問 Akio Hashimoto · 10月 19, 2020

Vue.jsのホットリロードを使った環境においてWebアプリケーションを開発しています。Webアプリケーションから開発環境と同じローカルPCにあるDocker上のIRISへ%RESTを使用しRESTfulAPI通信をしていますが、Webアプリケーションをhttpsで利用した場合は、httpsからhttpへはAPI通信ができないので、間にプロキシサーバーを立ててリダイレクトしないといけないと思います。しかし上手くいきません。

○ npm run serve で起動したWebアプリ http -> httpでIRISの%RESTを呼び出せる。

× npm run serve -- --https で起動した場合  https -> http は呼び出しできない。

  https -> プロキシサーバ(https-httpへリダイレクト)-> httpでIRISの%RESTが呼びさせるはず。

環境

Webアプリ:Vue.js 例)https://localhost:3014/

IRIS:Docker上のコンテナで稼働 例)http://localhost:9091 -> 57772

やってみた事

1. Docker上にnginxのコンテナを作成。openssl にてSAN付きオレオレ証明書の作成

2. リダイレクトの定義を作成

現象

7
0 1311
ディスカッション Akio Hashimoto · 9月 3, 2020

前提条件

  • InterSystems ObjectScriptエクステンション 0.9.0
  • Visual Studio Code でローカルにルーチンのファイルを作成している。

問題点

ルーチンをGit等でバージョン管理する等の理由で、IRIS(/Cache)サーバー間でファイル連携している場合に、新規ルーチンをファイルから作成し、サーバーへ「Import and Compile」等を実行するとエラーが出てインポートに失敗する事がある。(xxxxxxxxxxはルーチン名)

ERROR #16006: Document 'xxxxxxxxxx' name is invalid

解決方法

先にサーバーからインポートした事があればお気づきの方もいるかもしれないが、InterSystems ObjectScript エクステンションを使用してルーチンをインポートする場合、ルーチンの先頭行に以下のように1行必要となっている。これが無いと上記のようにエラーとなってしまう。

ROUTINE xxxxxxxxxx

INTやINCファイルの場合は、Type属性が必要。Type属性を省略するとMACファイルとしてインポートされる。

ROUTINE xxxxxxxxxx [Type=INC]
2
0 474