0 フォロワー · 9 投稿

Extensible Markup Language(XML)は、人間と機械の両者が読み取れる形式でドキュメントをエンコードするための一連のルールを定義するマークアップ言語です。 詳細はこちら

新着
記事 Hiroshi Sato · 5月28日 7m read

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

これらのファイルを個別にエクスポートする最も簡便で確実な方法は、VSCodeを利用してIRISのソースファイルを管理することです。

VSCodeの利用方法は、以下をご参照ください

VSCodeを使ってみよう

VSCode以外のツールとしての提供はありませんので、是非VSCodeのご利用をご検討ください。


VSCodeをご利用できない場合は、IRISが提供するAPIを使用して、個別にプログラミングする必要があります。

1) クラス定義

%SYSTEM.OBJクラスのExportAllClassesIndividualメソッドを使用してクラス毎にファイル出力できますが、その出力形式がXML形式です。

XML形式での出力は、可読性も低く、クラス数が多量にある場合には、インポートの時間も余計にかかるため、複数クラスを1ファイルにまとめる目的以外では、推奨しておりません。

可読性の高いUDL形式で出力するためには、

該当ネームスペースに存在するクラス名をクエリーで抽出し、クラス定義をUDL形式でエクスポートするメソッドで出力することができます。

以下はClaude Codeで生成したサンプルコードです。

Class Samples.ExportUDLAll
{

/// 指定されたネームスペース内のすべてのクラス定義を
/// 個別のUDL形式ファイルとして指定ディレクトリに出力する
///
/// @param pDirectory 出力先ディレクトリ名
/// @return %Status ステータスコード
ClassMethod Export(pDirectory As %String) As %Status
{
Set tSC = $$$OK
Try {
// %SYSTEM.OBJ の GetClassList メソッドでクラス名一覧を取得
// items はローカル多次元配列として ByRef で返る
// 第一サブスクリプトにクラス名が格納される
Set tSC = $SYSTEM.OBJ.GetClassList(.items, "/application=1")
If $$$ISERR(tSC) Quit

// items 配列をサブスクリプト順に走査してクラス数分繰り返す
Set tClassName = ""
For {
Set tClassName = $Order(items(tClassName))
Quit:tClassName=""

Write "class name = ", tClassName, !
Set tFileName = pDirectory _ "/" _ tClassName _ ".cls"
Write "file name = ", tFileName, !

// ExportUDL の第一パラメータ(itemname)はクラス名に ".cls" を付加
Set tSC = $SYSTEM.OBJ.ExportUDL(tClassName _ ".cls", tFileName)
If $$$ISERR(tSC) Quit

Write "Exported: ", tClassName, " -> ", tFileName, !
}
} Catch ex {
Set tSC = ex.AsStatus()
}
Quit tSC
}

}
0
0 4
記事 Saori Murata · 2024年9月30日 19m read

開発者の皆さん、こんにちは! InterSystems IRIS(以下、IRIS)を使用したアプリケーション開発において、皆さんは環境設定をどうされていますか? 私は最近になって、「インストールマニフェスト」という機能があることを知りました。 これは、管理ポータルでポチポチしていた作業をコード化・自動化できる強力なツールです! 最初こそとっつきづらかったものの良いところがたくさんあるなと思ったので、簡単にではありますが皆さんにその良さと始め方をご紹介したいと思います。

なお、私が使用しているIRISバージョンは以下です。

2022.1

バージョンが異なる場合、違う書き方になっているもの等が存在する場合がありますので、 公式ドキュメント等を参照し適宜読み替えていただければと思います。

0
1 383
記事 Tomoko Furuzono · 2024年3月18日 3m read

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

【任意のXMLドキュメントの読み込み】
任意のXMLドキュメントの読み込みを行うには、%XML.TextReaderクラスを使用します。
Parseメソッド(※ドキュメントがファイルの場合はParseFile())を使用してドキュメントをパースし、各ノードのプロパティを取得します。

例えば、下記のXMLの場合、

 <emp empid="1">
    <name>Suzuki</name>
    <address>Tokyo</address>
 </emp>

 
各赤枠が、"ノード"の単位となり、


 下記のようなイメージで取得することができます。

0
0 247
記事 Toshihiko Minamoto · 2021年8月16日 22m read

Office ドキュメント(docx ドキュメント、xlsx 表計算、pptx プレゼンテーション)を処理するタスクは非常に複雑です。 この記事では、XSLT と ZIP のみを使用してドキュメントを解析、作成、および編集する方法を紹介します。

このトピックを記事にしたのは、 docx が最も一般的に使用されているドキュメント形式であり、この形式を生成して解析する機能は必ず役に立つからです。 「既製ライブラリ」によるソリューションでは、次の理由により面倒になる可能性があります。

  • ライブラリが存在しない
  • プロジェクトに別のブラックボックスは必要ない
  • ライブラリの制限: プラットフォーム、機能など
  • ライセンス
  • 処理速度

この記事では、基本ツールのみを使用して、docx ドキュメントを操作します。

0
0 1674
記事 Toshihiko Minamoto · 2021年6月29日 5m read

RESTフレームワークの有用な機能の1つに、ディスパッチクラスがリクエストのプレフィックスを識別して別のディスパッチクラスに転送するという機能があります。 URLマップをモジュール化するこの手法により、コードの可読性が向上し、インターフェースの個別のバージョンが管理しやすくなります。また、特定のユーザーのみがアクセスできるように、API呼び出しを保護する手段も得ることができます。

概要

CachéインスタンスにRESTサービスをセットアップするには、専用のSCPアプリケーションを定義して、それに関連付けられた、受信リクエストを処理するディスパッチクラスを作成する必要があります。 ディスパッチクラスは、%CSP.RESTを拡張し、URLマップを含むXDataブロックを含めます。 こうすることで、システムに、特定のリクエストを受信したときにどのメソッドを呼び出すのかを指示します。

以下に、例を示します。

XDataXMLNamespace"http://www.intersystems.com/urlmap"

<

0
0 473
記事 Mihoko Iijima · 2021年5月23日 2m read

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

仮想ドキュメント(以降VDOC)とは複雑な構造のドキュメント(メッセージ)を効率良く高速に処理するために考えられたメッセージ処理の仕組みです。

HL7に代表される EDI 標準は電子データ交換のための汎用的なかなり複雑なメッセージ形式を含んでいます。

また、メッセージの種類を増やすと運用が複雑になってしまうため、1 つのメッセージに様々なデータを詰め込む傾向があります。

その結果 1 つのメッセージは複雑かつデータ量が多いものになりがちです。

一方、実際のメッセージ交換では、メッセージの全てのデータを処理することはまれで一部のデータのみが必要となるケースがほとんどです。

複雑なメッセージ構造から必要な項目を抽出して処理する際、メッセージを InterSystems IRIS data platform のオプジェクト指向フレームワークに基づき一度オブジェクトとしてインスタンス化することで処理を簡潔に記述できます。

しかし、データ量の多いメッセージを解析しオブジェクトにインスタンス化する処理は非常に負荷のかかる処理で、しかも大量のメッセージを処理しなければならない場合は求められるスループットを満たせない状況になりがちです。

しかも必要なデータは「全体の中のほんの少し」という状況の場合、無駄の多い処理となります。

0
0 1135
記事 Toshihiko Minamoto · 2021年3月25日 6m read

HealthShare HealthConnect と Information Exchange のバージョン 15.03 では、C-CDA 2.1 から SDA へのインポートトランスフォーメーションをサポートしています。 こういったプログラムのビルドは、インストレーションパッケージの  csp/xslt/SDA3 ディレクトリにあります。 インポートトランスフォーメーションの概要は、Overview of Health Connect の「CDA Documents and XSL Transforms in HealthShare」をご覧ください。

C-CDA 2.1 サポートに関連するインポート機能の強化の 1 つとして、 C-CDA ファイルをインポートする前に前処理を実行できる機能が追加されました

前処理サポートの導入により、トランスフォーメーションは大幅に簡素化され、その合計処理時間も削減されます。 考えられるユースケースは以下の 2 つです。

0
0 225
記事 Mihoko Iijima · 2021年2月12日 5m read

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

XMLファイルの内容を格納する永続クラス定義を作成し、%XML.Adaptor を追加で継承します。

例は以下の通りです(右端の %XML.Adaptorクラスを追加で継承します)。

Class ISJ.Class1 Extends (%Persistent, %Populate, %XML.Adaptor

次に、%XML.Reader クラスを使用して格納先のインスタンスへ、タグとクラスの関連付け(Correlate())を行い、reader.Next() でXMLを取り込みます。

set sc=reader.OpenFile(filename)
do reader.Correlate(tag,class)
while reader.Next(.x,.sc) { do x.%Save() } 

サンプルコードは以下の通りです。

Class ISJ.Class1 Extends (%Persistent, %Populate, %XML.Adaptor)
{
Property a As %String;

Property b As %String;

/// 引数:入力するXMLファイルのフルパス
ClassMethod Import(filename As %String)
{
    if $get(filename)="" {
        write "入力ファイルを引数に指定してください",!
        quit
    }
    // クラス名指定(..%ClassName()でクラスメソッドの存在するクラス名を返します)
    set class=..%ClassName(1)
    
    // XMLタグ指定
    set tag="test"
    set reader = ##class(%XML.Reader).%New()
    set sc=reader.OpenFile(filename)  
    If $$$ISERR(sc) {
        write $system.Status.GetErrorText(sc),!
        Quit
    }   
    // クラスとの関連付け
    do reader.Correlate(tag,class)
    while reader.Next(.x,.sc) {
        set sc=x.%Save()
        If $$$ISERR(sc) {
            write $system.Status.GetErrorText(sc),!
            Quit
        }
    }
    quit
}
}
0
0 2258
記事 Toshihiko Minamoto · 2020年10月22日 7m read

InterSystems IRIS 2019.1は公開されてからしばらく経ちますが、気づかれていない可能性のある、JSONの処理の強化機能について説明したいと思います。 最新のアプリケーションを構築する際、特にRESTエンドポイントを操作する際は、JSONをシリアル化形式として扱うことが重要です。

0
0 665