#InterSystems IRIS for Health

0 フォロワー · 887 投稿

InterSystems IRIS for Health™は、世界で最も重要なデータを管理する医療アプリケーションの迅速な開発を目的に特別に設計された世界初、かつ唯一のデータプラットフォームです。 トランザクションの処理と分析、拡張可能な医療データモデル、FHIRベースのソリューション開発、医療情報の相互運用性に関わる標準規格への対応など、すぐに使える強力な機能を搭載しています。 これらすべての機能により、開発者は価値を実現し、画期的なアプリケーションをすばやく構築することができます。 詳細はこちらをご覧ください

お知らせ Mihoko Iijima · 4月 4, 2022

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

2021年10月に4回シリーズで開催した「InterSystems IRIS 開発者向けウェビナー」第3回目の「SQLから始める機械学習 ~IntegratedMLのご紹介~」のアーカイブをYouTubeに公開いたしました。

InterSystemsは、アプリケーション開発者の方々が、IRIS data platformに保存されているデータとSQLを用いて、機械学習を容易に利用できる仕組み「IntegratedML」を開発しました。
このビデオでは、IntegratedMLの概要についてご紹介いたします。

ぜひご覧ください!

(IRIS 2021.1新機能全体のご紹介については、こちらのYouTubeをご参照ください。)

【目次】

0:00 機械学習の概要と課題、AutoMLについて

8:30 IntegratedMLについて

13:20 IntegratedMLの文法

18:32 デモ

26:50 まとめ

0
0 90
お知らせ Mihoko Iijima · 4月 3, 2022

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

2021年10月に4回シリーズで開催した「InterSystems IRIS 開発者向けウェビナー」第2回目の「Python Gateway のご紹介」のアーカイブをYouTubeに公開いたしました。

InterSystems IRIS / IRIS for Health バージョン2021.1より、External Language Gateway に Python のサポートが追加されました。また、External Language Gateway の機能強化により外部ストアドプロシージャが利用できるようになり、Java、.Net、Python のコードを SQL から直接実行できるようになりました。

ウェビナーでは、Python からの利用法のついて、デモを交えながらご紹介しています。

ぜひご覧ください!

(IRIS 2021.1新機能全体のご紹介については、こちらのYouTubeをご参照ください。)

【目次】

0:00 ご紹介内容の説明

2:26 PythonからIRISにアクセスする方法

5:07 キーバリュー形式でIRISにアクセスできる「Native API」とは

12:04 Python Gatewayのご紹介

16:21 Python Gateway 使用例

22:12 デモ

30:15 まとめ

0
0 118
お知らせ Mihoko Iijima · 3月 31, 2022

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

2021年10月に4回シリーズで開催した「InterSystems IRIS 開発者向けウェビナー」第1回目の「InterSystems Adaptive Analytics のご紹介」のアーカイブをYouTubeに公開いたしました。

「InterSystems Adaptive Analytics」とは、どのような機能であるのか、メリットや差別化要因は何であるか、実際の操作性はどのような感じであるかをデモを交えながらご紹介しています。

ぜひご覧ください!

(IRIS 2021.1新機能全体のご紹介については、こちらのYouTubeをご参照ください。)

【目次】

00:00 InterSystems IRIS BIのアーキテクチャ(以前よりご提供している組み込み型のBI機能についての復習)

01:34 Adaptive Analytics とは

02:21 BI環境の成長過程について

05:34 Adaptive Analyticsが目指す姿

06:10 (改めて)Adaptive Analytics とは

11:10 デモ

28:40 まとめ

0
0 108
記事 Megumi Kakechi · 3月 31, 2022 1m read

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


Windowsでは、変更することはできませんが、Unix系プラットフォームでは、iris rename コマンドを使用することで変更できます。

iris rename instname(現インスタンス名) newname(新インスタンス名)


iris rename コマンドの詳細は、以下ドキュメントをご参照ください
iris コマンドについて
 

0
0 241
記事 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 528
記事 Mihoko Iijima · 3月 29, 2022 11m read

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

データベースの空き容量は、システムモニタを使用して監視することができます。

システムモニタは、システム開始時に自動開始され、予め設定された閾値に対してアラートが通知されます。

システムの閾値については以下ドキュメントをご参照ください。
システム・モニタのステータスおよびリソース・メトリック【IRIS】
システム・モニタのステータスおよびリソース・メトリック

データベースの空き容量については、システムデフォルトでは 50 MBを下回る場合にアラートが通知され、メッセージログ(コンソールログ)にアラート(深刻度 2)として記録され、alerts.log ファイルにも出力されます。

データベースの空き容量を任意サイズで監視したい場合、システムモニタに含まれる「アプリケーションモニタ」を利用して設定します。
注意:アプリケーションモニタでは、アラート対象となる情報があってもメッセージログ(コンソールログ)に出力しないため、メール通知/メソッド実行 を使用して通知するように設定します。

例えば、空き容量が 100MB を下回った時にアラートを通知したい場合は、アプリケーションモニタが提供する %Monitor.System.Sample.Freespace(空き容量メトリック)を利用します。

0
0 231
InterSystems公式 Maki Hashizawa · 3月 24, 2022

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

"Innovation in Data - データによるデジタル変革の推進" をテーマに、DX推進に不可欠な健全なデータの提供とデータプラットフォームの最新情報をお届けしました「InterSystems Japan Virtual Summit 2022」の全てのセッションを、4月22日(金)までオンデマンドで配信しております。

見逃した方や、もう一度セッションをご覧になりたい方など、是非、この機会にご覧いただければと思います。

お申込み・視聴はこちらから

 

  

■テーマ:Innovation in Data - データによるデジタル変革の推進

■オンデマンド配信:2022年4月22日(金)まで

■参加:無料(登録制)

お申込み・視聴はこちらから
 

《技術セッション》

  ■Embedded Python で広がる InterSystems IRISの世界

  ■SQLでどこまでできる? ~データロードから機械学習まで~

  ■オープンソースだけで IRIS on Kubernetesを動かそう

  ■VSCode、Jenkinsを使用したCICD環境の構築

  ■FHIR SQL Builder 

         ■ストレージの節約方法について

   ■ミラーリングを使用したHAおよびDR構成例

皆様のご参加をお待ちしております。

0
0 171
記事 Megumi Kakechi · 3月 23, 2022 3m read

これは、InterSystems FAQサイトの記事です。
ジャーナル・ファイルの処理でジャーナルファイルに記録されるタイプが、それぞれどのような状況下で記録されるのかについて説明します。

0
0 267
記事 Hiroshi Sato · 3月 23, 2022 2m read

もし現在ご使用のデータベース技術で壁に突き当たっていると感じておられるならば、是非InterSystems IRIS Data Platformへの移行をご検討ください。

(以下IRIS)

IRISに移行するに際して、現行のプログラム資産を全て書き換える必要はありません。

IRISに移行する際には、以下の手順で進めることを推奨しております。

アプリケーションコードをそのまま流用し、動作させるために、現在のデータベースからIRISへの移行を行います。

既存のRDBMSのデータ定義(DDL文で記述されたもの)をIRISに取り込むことで、リレーショナルとオブジェクトの両モデルからアクセスが可能となるため、必要に応じてオブジェクト・アクセスが妥当である処理に対しては、アプリケーションプログラムの修正など、対応策が選択できます。

さらにXMLやJSONなどのドキュメント形式のデータの取り扱いも容易ですので、RestFullなアプリケーション構築にも向いています。

また、IRISには習得が容易でデータベースエンジンと一体化したスクリプト言語「InterSystems ObjectScript」が用意されているので、処理の一部をサーバ側ロジックとしてストアドプロシージャ化することによってデータベース処理を効率化するなど、様々な対応策を検討することができます。

0
0 210
記事 Hiroshi Sato · 3月 23, 2022 2m read

質問

現在使っているリレーショナルデータベースからInterSystems IRIS Data Platformに移行することは可能ですか?

答え

InterSystems IRIS Data Platform(以下IRISと表記)は、SQLをサポートしていますので、多くの場合リレーショナルデータベースで構築されたアプリケーションは、大部分のコードを変更することなくIRISに移行することができます。

ただしSQLの各実装毎にSQL標準を拡張した仕様等があり、それにIRISが全て対応していませんので、コードの書き換えが必要なケースもあります。

また各実装が独自に用意した標準でない通信系API等にも対応していませんので、その場合にはJDBC、ODBCなどの標準的な通信APIに置き換える必要があり、かなり書き換えが必要になります。
(使用されているSQL文等はそのまま流用可能な場合が多いです。)

さらにそのままコードを移行できるケースであっても動作保証はできませんので、必ず動作確認のためのテスト作業は必要になります。

以上のことから他データベースシステムからIRISシステムへの移行には相応の移行コストがかかるため、移行は必ずしも容易とは言えませんが、それでも移行を決断されたお客様はたくさんおられます。

そしてほとんどのお客様は移行したシステムの性能、開発生産性、保守性、運用の容易さ等に満足されております。

0
0 136
記事 Hiroshi Sato · 3月 23, 2022 1m read

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

以下のコードは、https://www.intersystems.com/assets/intersystems-logo.png をダウンロードし、c:\temp\test.pngとしてファイルを保存する例になります。

以下のコードを動作させるためには、SSLTESTという名前のSSL定義を作成しておく必要があります。

0
0 197
InterSystems公式 Toshihiko Minamoto · 3月 21, 2022

InterSystems Kubernetes Operation (IKO) バージョン 3.3 が WRC ダウンロードページ やInterSystems Container Registry よりダウンロード可能となりました。

IKO は、使いやすい irisClusterリソース定義を提供することにより、Kubernetesにおける InterSystems IRIS やInterSystems IRIS for Health との連携を簡素化します。 簡単なシャーディング、ミラーリング、ECP構成などの機能一覧は ドキュメント をご覧ください。

IKO 3.3の主な修正点:

  • InterSystems IRIS 、 IRIS for Healthのバージョン 2021.2 、 2022.1 のサポート
  • Kuberentes 1.21のサポート
  • irisCluster の一部として共通のSystem Alerting and Monitoring (SAM) コンフィグレーションのデプロイ
  • irisCluster の一部として InterSystems API Manager (IAM) のデプロイや管理
  • ミラーリングのアクティブ側の自動タグ付けにより、サービスは常にアクティブなミラーメンバーを指すことができます。
0
0 122
InterSystems公式 Toshihiko Minamoto · 3月 15, 2022

インターシステムズ社は、ObjectScript ルーチンのコンパイルが正しく行われない不具合を修正しました。

この不具合は、最近リリースされた 2021.1.1 バージョンのみに存在します。

            InterSystems IRIS

            InterSystems IRIS for Health

            HealthShare Health Connect

インターシステムズでは、2021.1.1 を使用しないことを推奨しています。ルーチンのコンパイルが正しく行われず、予測不可能なロジックの実行が発生する可能性があります。2021.1.1 のバージョンは、配布チャネルから削除されました。  インターシステムズ社は、この不具合を修正したバージョン 2021.1.2 をご利用ください。

ご参考までに、この修正プログラムはCDS3299として識別されます. この問題の影響を受けるのは2021.1.1 のみです。

このアラートについてご質問がございましたら、サポートセンター Worldwide Response Center までお問い合わせください。

0
0 109
記事 Toshihiko Minamoto · 3月 8, 2022 8m read

InterSystemsを使用してExcelファイルを生成する方法はたくさんあります。ZENレポートやIRISレポート(Logiレポートまたは正式にはJReportsと呼ばれるレポート)のほか、サードパーティのJavaライブラリを使用するなど、可能性はほぼ無限です。

しかし、Caché ObjectScriptだけで単純なスプレッドシートを作成したい場合はどうでしょうか。 (サードパーティアプリケーションを使用せずに、です)

私の場合、大量の生データを含むレポート(金融関係の人たちが好むレポート)を生成する必要がありますが、私のZEN/IRISでは対応できません。私が呼ぶところの「ゼロバイトファイル」が生成され、基本的にJavaのメモリ不足となり、レポーティングサーバーに大きな負荷を生じてしまいます。

これは、Office Open XML(OOXML)を使って実現できます。 Office Open XML形式は、多数のXMLファイルで構成されるZIPパケージです。 つまり基本的には、これらのXMLファイルを生成してZIP圧縮し、.xslxに名前を変更すればよいのです。 それくらい単純です。

ファイルは、Open Packaging Conventionsという単純な命名規則に従っています。 パーツのコンテンツタイプを宣言し、消費するアプリケーションにどこから開始するかを指示する必要があります。

単純なスプレッドシートを作成するには、少なくとも5つのファイルが必要です。

  • workbook.xml
  • worksheet.xml
  • [Content_Types].xml
  • styles.xml
  • _rels
    • .rels
    • workbook.xml.rels

workbook.xml
workbookは、様々なワークシートをまとめるコンテナーです。 workbookでは、スタイルパーツ、共有文字列テーブル、およびスプレッドシートファイル全体に適用するその他の情報を参照できます。

ClassMethod GenerateWorkbookXML(){
    set status =$$$OK
    set xmlfile = tempDirectoryPath_"workbook.xml"
    try{
    set stream = ##class(%Stream.FileCharacter).%New()
    set sc=stream.LinkToFile(xmlfile)
    do stream.WriteLine("<?xml version='1.0' encoding='UTF-8' standalone='yes'?>")
    do stream.WriteLine("<workbook xmlns='http://schemas.openxmlformats.org/spreadsheetml/2006/main' xmlns:r='http://schemas.openxmlformats.org/officeDocument/2006/relationships'>")
    do stream.WriteLine("<sheets> <sheet name='"_workSheetName_"' sheetId='1' <span style="color:#2ecc71;">r:id='rId1'</span>/>")
    do stream.WriteLine("</sheets> </workbook>")
    
        do stream.%Save()
    }catch{
        set status=$$$NO
    }
    kill stream
    return status
}

_rels/workbook.xml.rels
workbook.xmlパーツからの参照に一致するように、rId1というIDを持つリレーションを作成する必要があります。

ClassMethod CreateRelsXML(){
set status =$$$OK
    
    set isunix=$zcvt($p($zv," ",3,$l($p($zv," (")," ")),"U")["UNIX"
    if isunix {
        set ext="/"
    }else{
        set ext="\"
    }
    set xmlfile = fileDirectory_"_rels"_ext_"workbook.xml.rels"
    set stream = ##class(%Stream.FileCharacter).%New()
    set sc=stream.LinkToFile(xmlfile)
    do stream.WriteLine("<?xml version='1.0' encoding='UTF-8' standalone='yes'?>")
    do stream.WriteLine("<Relationships xmlns='http://schemas.openxmlformats.org/package/2006/relationships'>")
      do stream.WriteLine("<Relationship Id='rId1' Type='http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet' Target='worksheet.xml'/>")
      do stream.WriteLine("<Relationship Id='rId2' Type='http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles' Target='styles.xml' />")
    do stream.WriteLine("</Relationships>")
    try{
        do stream.%Save()
    }catch{
        set status=$$$NO
    }
    kill stream
    set xmlfile = fileDirectory_"_rels"_ext_".rels"
    set stream = ##class(%Stream.FileCharacter).%New()
    set sc=stream.LinkToFile(xmlfile)
    
    do stream.WriteLine("

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>")
    do stream.WriteLine("<Relationships xmlns='http://schemas.openxmlformats.org/package/2006/relationships'>")
      do stream.WriteLine("<Relationship Id='rId1' Type='http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument' Target='workbook.xml'/>")
    do stream.WriteLine("</Relationships>")
    try{
        do stream.%Save()
    }catch{
        set status=$$$NO
    }
    kill stream
    return status
}

[Content_Types].xml
静的ファイル(現時点では、ワークシートの数に応じた動的ファイル)はworkbookのワークシートとスタイルを紐づけます。Office Open XMLファイルごとに、ZIPパッケージ使用されるコンテンツタイプを宣言する必要があります。 これは、[Content_Types].xmlファイルで行います。  

ClassMethod GenerateConntentTypesXML(){
    set status =$$$OK
    set xmlfile = tempDirectoryPath_"[Content_Types].xml"
    set stream = ##class(%Stream.FileCharacter).%New()
    set sc=stream.LinkToFile(xmlfile)
    try{
        do stream.WriteLine("<?xml version='1.0' encoding='UTF-8' standalone='yes'?>")
        do stream.WriteLine("<Types xmlns='http://schemas.openxmlformats.org/package/2006/content-types'>")
          do stream.WriteLine("<Default Extension='rels' ContentType='application/vnd.openxmlformats-package.relationships+xml'/>")
        do stream.WriteLine("<Override PartName='/workbook.xml' ContentType='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml'/>")
          do stream.WriteLine("<Override PartName='/worksheet.xml' ContentType='application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml'/>")
          do stream.WriteLine("<Override PartName='/styles.xml' ContentType='application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml' />")
        do stream.WriteLine("</Types>")
        do stream.%Save()
    }catch{
        set status=$$$NO
    }
    kill stream
    return status
}

styles.xml
すべてのフォーマットがこのファイルに含まれます。現時点では、静的スタイルが追加されています(より動的なworkbook固有のスタイルに変換する予定です)。

<th>
  スタイル
</th>

<th>
  Excelフォーマット
</th>
<td>
  デフォルト
</td>

<td>
  テキスト
</td>
<td>
  #;[Red]-#
</td>

<td>
  数値
</td>
<td>
  #.##;[Red]-#.##
</td>

<td>
  数値
</td>
<td>
  yyyy/mm/dd
</td>

<td>
  日付
</td>
<td>
  hh:mm
</td>

<td>
  日付
</td>
<td>
  ヘッダーと中央揃え
</td>

<td>
  テキスト
</td>
<td>
  ヘッダー2左寄せ
</td>

<td>
  テキスト
</td>
<td>
  良い(緑ハイライト)
</td>

<td>
  全般
</td>
<td>
  悪い(赤ハイライト)
</td>

<td>
  全般
</td>
<td>
  どちらでもない(オレンジハイライト)
</td>

<td>
  全般
</td>
<td>
  yyyy/mm/dd hh:mm
</td>

<td>
  日付
</td>
Excelスタイル
ID
1
2
3
4
5
6
7
8
9
10
11
ClassMethod CreateStylesXML(){
    set status =$$$OK
    set xmlfile = tempDirectoryPath_"styles.xml"
    try{
        set stream = ##class(%Stream.FileCharacter).%New()
        set sc=stream.LinkToFile(xmlfile)
         do stream.WriteLine("<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>")
        do stream.WriteLine("<styleSheet xmlns=""http://schemas.openxmlformats.org/spreadsheetml/2006/main"" xmlns:mc=""http://schemas.openxmlformats.org/markup-compatibility/2006"" mc:Ignorable=""x14ac x16r2 xr"" xmlns:x14ac=""http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"" xmlns:x16r2=""http://schemas.microsoft.com/office/spreadsheetml/2015/02/main"" xmlns:xr=""http://schemas.microsoft.com/office/spreadsheetml/2014/revision"">")
        do stream.WriteLine("<numFmts count=""4"">")
        do stream.WriteLine("<numFmt numFmtId=""166"" formatCode=""#,##0;[Red]\-#,##0""/>")
        do stream.WriteLine("<numFmt numFmtId=""168"" formatCode=""#,##0.00;[Red]\-#,##0.00""/>")
        do stream.WriteLine("<numFmt numFmtId=""169"" formatCode=""dd\/mm\/yyyy;@""/>")
        do stream.WriteLine("<numFmt numFmtId=""170"" formatCode=""dd/mm/yyyy\ hh:mm""/></numFmts>")
        do stream.WriteLine("<fonts count=""5"" x14ac:knownFonts=""1"">")
        do stream.WriteLine("<font><sz val=""10""/><color theme=""1""/><name val=""Calibri""/><family val=""2""/><scheme val=""minor""/></font>")
        do stream.WriteLine("<font><sz val=""10""/><color rgb=""FF006100""/><name val=""Calibri""/><family val=""2""/><scheme val=""minor""/></font>")
        do stream.WriteLine("<font><sz val=""10""/><color rgb=""FF9C0006""/><name val=""Calibri""/><family val=""2""/><scheme val=""minor""/></font>")
        do stream.WriteLine("<font><sz val=""10""/><color rgb=""FF9C5700""/><name val=""Calibri""/><family val=""2""/><scheme val=""minor""/></font>")
        do stream.WriteLine("<font><b/><sz val=""10""/><color theme=""1""/><name val=""Calibri""/><family val=""2""/><scheme val=""minor""/></font></fonts>")
        do stream.WriteLine("<fills count=""5"">")
        do stream.WriteLine("<fill><patternFill patternType=""none""/></fill>")
        do stream.WriteLine("<fill><patternFill patternType=""gray125""/></fill>")
        do stream.WriteLine("<fill><patternFill patternType=""solid""><fgColor rgb=""FFC6EFCE""/></patternFill></fill>")
        do stream.WriteLine("<fill><patternFill patternType=""solid""><fgColor rgb=""FFFFC7CE""/></patternFill></fill>")
        do stream.WriteLine("<fill><patternFill patternType=""solid""><fgColor rgb=""FFFFEB9C""/></patternFill></fill></fills>")
        do stream.WriteLine("<borders count=""1""><border><left/><right/><top/><bottom/><diagonal/></border></borders>")
        do stream.WriteLine("<cellStyleXfs count=""4"">")
        do stream.WriteLine("<xf numFmtId=""0"" fontId=""0"" fillId=""0"" borderId=""0""/>")
        do stream.WriteLine("<xf numFmtId=""0"" fontId=""1"" fillId=""2"" borderId=""0"" applyNumberFormat=""0"" applyBorder=""0"" applyAlignment=""0"" applyProtection=""0""/>")
        do stream.WriteLine("<xf numFmtId=""0"" fontId=""2"" fillId=""3"" borderId=""0"" applyNumberFormat=""0"" applyBorder=""0"" applyAlignment=""0"" applyProtection=""0""/>")
        do stream.WriteLine("<xf numFmtId=""0"" fontId=""3"" fillId=""4"" borderId=""0"" applyNumberFormat=""0"" applyBorder=""0"" applyAlignment=""0"" applyProtection=""0""/></cellStyleXfs>")
        do stream.WriteLine("<cellXfs count=""12""><xf numFmtId=""0"" fontId=""0"" fillId=""0"" borderId=""0"" xfId=""0""/>")
        do stream.WriteLine("<xf numFmtId=""49"" fontId=""0"" fillId=""0"" borderId=""0"" xfId=""0"" quotePrefix=""1"" applyNumberFormat=""1""/>")
        do stream.WriteLine("<xf numFmtId=""166"" fontId=""0"" fillId=""0"" borderId=""0"" xfId=""0"" applyNumberFormat=""1""/>")
        do stream.WriteLine("<xf numFmtId=""168"" fontId=""0"" fillId=""0"" borderId=""0"" xfId=""0"" applyNumberFormat=""1""/>")
        do stream.WriteLine("<xf numFmtId=""169"" fontId=""0"" fillId=""0"" borderId=""0"" xfId=""0"" applyNumberFormat=""1""/>")
        do stream.WriteLine("<xf numFmtId=""20"" fontId=""0"" fillId=""0"" borderId=""0"" xfId=""0"" applyNumberFormat=""1""/>")
        do stream.WriteLine("<xf numFmtId=""49"" fontId=""4"" fillId=""0"" borderId=""0"" xfId=""0"" applyNumberFormat=""1"" applyFont=""1""/>")
        do stream.WriteLine("<xf numFmtId=""49"" fontId=""4"" fillId=""0"" borderId=""0"" xfId=""0"" applyNumberFormat=""1"" applyFont=""1"" applyAlignment=""1""><alignment horizontal=""center""/>")
        do stream.WriteLine("</xf>")
        do stream.WriteLine("<xf numFmtId=""49"" fontId=""1"" fillId=""2"" borderId=""0"" xfId=""1"" applyNumberFormat=""1""/>")
        do stream.WriteLine("<xf numFmtId=""0"" fontId=""2"" fillId=""3"" borderId=""0"" xfId=""2""/>")
        do stream.WriteLine("<xf numFmtId=""0"" fontId=""3"" fillId=""4"" borderId=""0"" xfId=""3""/>")
        do stream.WriteLine("<xf numFmtId=""170"" fontId=""0"" fillId=""0"" borderId=""0"" xfId=""0"" applyNumberFormat=""1""/></cellXfs>")
        do stream.WriteLine("<cellStyles count=""4""><cellStyle name=""Bad"" xfId=""2"" builtinId=""27""/>")
        do stream.WriteLine("<cellStyle name=""Good"" xfId=""1"" builtinId=""26""/><cellStyle name=""Neutral"" xfId=""3"" builtinId=""28""/>")
        do stream.WriteLine("<cellStyle name=""Normal"" xfId=""0"" builtinId=""0""/></cellStyles><dxfs count=""0""/>")
        do stream.WriteLine("<tableStyles count=""0"" defaultTableStyle=""TableStyleMedium2"" defaultPivotStyle=""PivotStyleLight16""/>    ")
        do stream.WriteLine("<extLst><ext uri=""{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}"" xmlns:x14=""http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"">")
        do stream.WriteLine("<x14:slicerStyles defaultSlicerStyle=""SlicerStyleLight1""/></ext><ext uri=""{9260A510-F301-46a8-8635-F512D64BE5F5}"" xmlns:x15=""http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"">")
        do stream.WriteLine("<x15:timelineStyles defaultTimelineStyle=""TimeSlicerStyleLight1""/></ext></extLst>")
        do stream.WriteLine("</styleSheet>")
        do stream.%Save()
    }catch{
        set status=$$$NO
    }
    kill stream
    return status
}

worksheet.xml
このファイルに日付が含まれます。 シートの最初の行は列のタイトルです。 次の行には、最初の列にのみデータが含まれます。
デフォルトで列が自動調整されない場合は、ここで各列の列幅を定義します。

サンプルworksheet.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="https://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="https://schemas.openxmlformats.org/officeDocument/2006/relationships">
<sheetData>
<row>
    <c t="inlineStr">
        <is>
            <t>Name</t>
        </is>
    </c>
    <c t="inlineStr">
        <is>
            <t>Amount</t>
        </is>
    </c>
</row>
<row>
    <c t="inlineStr">
        <is>
            <t>Jhon Smith</t>
        </is>
    </c>
    <c>
        <v>1000.74</v>
    </c>
</row>
<row>
    <c t="inlineStr">
        <is>
            <t>Tracy A</t>
        </is>
    </c>
    <c>
        <v>6001.74</v>
    </c>
</row>
</sheetData>
</worksheet>

サンプルExcel

_worksheet内の数式は、関数 タグ_を使って表現できます。
 

<c >
<f>B2*0.08</f >
</c >
<c >
<f>B2+C2</f >
</c>

そして最後にそれらをzip圧縮し、名前を.xlsxに変更します(unix zipを使用)。

set cmd ="cd "_fileDirectory_" && find . -type f | xargs zip .."_ext_xlsxFile

 

Excelドキュメントを生成します。

以下のサンプルコードは、Excelドキュメントを生成します。

set file = "/temp/test.xlsx"
set excelObj = ##class(XLSX.writer).%New(file)
do excelObj.SetWorksheetName("test1")
set status = excelObj.BeginWorksheet()
set row = 0
set row = row+1
;----------- excelObj.Cells(rowNumber,columnNumber,style,content)

set status = excelObj.Cells(row,1,1,"Header1")
set row = row+1
set status = excelObj.Cells(row,1,2,"Content 1")
set status = excelObj.EndWorksheet()
W !,excelObj.fileName

ExcelのWriterクラスは、こちらのxlsx.writer.xml.zipにあります。

0
0 457
InterSystems公式 Toshihiko Minamoto · 3月 3, 2022

注意事項:前回リリースしましたビルド2021.1.1.324.0には問題があります。  2021.1.1 メンテナンスリリースはWRCから削除し、ビルド2021.1.2.336.0 に更新しています。2021.1.2のコンテナ版はまもなくリリースする予定です。

2種類のメンテナンスリリースが利用可能です。  

  • Caché  2018.1.6, Ensemble 2018.1.6,  HSAP 2018.1.6
  • InterSystems IRIS 2020.1.2, IRIS for Health 2020.1.2, HealthShare Health Connect 2020.1.2 

インストレーションキットやコンテナはWRC ソフトウェア配布サイト からダウンロードできます。 Container images for the Enterprise Editions of InterSystems IRISや IRIS for Health の Enterprise Editionのコンテナイメージ、すべての関連コンポーネントはInterSystems Container Registry から取得できます。

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

これは、InterSystems FAQサイトの記事です。
ある処理において、データを無期限に保存する必要がなくグローバルの強力な性能が必要になる場合に、IRISTEMP/CACHETEMP データベースに保存される一時グローバルが使用されます。
IRISTEMP/CACHETEMPデータベースはジャーナルされないので、一時グローバルの使用ではジャーナルファイルは作成されません。

IRISTEMP/CACHETEMP データベースは、システムで一時ストレージ用に使用され、ユーザも同じ用途で使用することができます。

一時グローバルとIRISTEMPデータベースの詳細については、以下のドキュメントをご覧ください。
一時グローバルと IRISTEMP データベース


一時グローバルとして使用されるグローバルには以下のようなものがあります。

0
1 444
記事 Tomoko Furuzono · 3月 1, 2022 2m read

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

オブジェクトに対する一般的な処理をサポートする各種関数を提供しています。
詳細は以下ドキュメントをご参照ください。
オブジェクトへの動的アクセス【IRIS】
オブジェクトへの動的アクセス


サンプルクラス(Sample.Person)を使用して、利用例をご紹介します。

【InterSystems IRIS でご確認いただく場合】
InterSystems IRISでは、サンプル定義の一部を GitHub 上に公開しています。
ダウンロード情報やインポート、データ作成手順については、下記の記事をご参照ください 。
サンプル(Sample.Person)のクラス定義ダウンロードとサンプルデータの作成について

【Caché/Ensemble/HealthShare でご確認いただく場合】
SAMPLES ネームスペースへ移動してご確認ください。

(1) クラス名の取得:$CLASSNAME(インスタンス

SAMPLES>set p=##class(Sample.Person).%OpenId(1)
SAMPLES>write $CLASSNAME(p)
Sample.Person
SAMPLES>write $CLASSNAME(p.Home)  // オブジェクト参照のプロパティ
Sample.Address
SAMPLES>
0
0 514
記事 Tomoko Furuzono · 3月 1, 2022 1m read

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

マップされたクラス・ルーチンも含めてコンパイルする場合は、コンパイラ修飾子に "/mapped=1" もしくは "/mapped" を指定します。 例えば、以下のように行います。

【例1】クラスリストを取得してコンパイル 

 do $System.OBJ.GetClassList(.list,"/mapped")
 // build your list starting from .list
 do $System.OBJ.Compile(.list) 

【例2】全てのクラスをコンパイル 

 do $system.OBJ.CompileAll("/mapped") 
0
0 171
記事 Tomoko Furuzono · 3月 1, 2022 2m read

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

ミラー構成削除時に、ミラー・データベースのミラー属性を削除するオプションを指定しないと、通常データベースに戻すことができず、次回マウント時に読み取り専用でデータベースがマウントされます。 読み書き可能なデータベースに戻すためには、システムルーチン ^MIRROR を使用してミラー属性を削除する必要があります。
手順は以下のとおりです。(%SYSネームスペースで実行します。)

0
0 262
記事 Mihoko Iijima · 2月 28, 2022 7m read

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

今回は、スーパーやコンビニでもらうレシートを写真で撮り、OCR を使ってレシートの画像から文字列を切り出して IRIS に登録する流れを試してみました。

サンプルでは、Google の Vision API を利用してレシートの JPG 画像から購入物品をテキストで抽出しています。

サンプルコード一式 👉 https://github.com/Intersystems-jp/iris-embeddedpython-OCR
 

最初、オンラインラーニングで使っている 「tesseract-OCR」を使ってみようと思ったのですが、レシートには半角カナが混在していたりで、半カナがなかなかうまく切り出せず、あきらめました・・(半角カナがなかったら日本語もばっちり読めていたのですが・・)

もし、tesseract-OCR で半カナを切り出す良い方法をご存知の方いらっしゃいましたら、ぜひ教えてください!

今回試すにあたり、Vision API の使い方を詳しく書いているページがありましたのでコードなど参考させていただきました。ありがとうございました。

​​【Google Colab】Vision APIで『レシートOCR』

0
1 1425
記事 Megumi Kakechi · 2月 23, 2022 1m read

これは、InterSystems FAQサイトの記事です。
現ジャーナルファイル名の取得は、ジャーナリング API を利用します。

##class(%SYS.Journal.System).GetCurrentFileName()


現ジャーナルファイルの使用量bytesの取得は、ジャーナリング API を利用します。

##class(%SYS.Journal.System).GetCurrentFileOffset()


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

%SYS>Write ##class(%SYS.Journal.System).GetCurrentFileName()
c:\journal\20110223.001
%SYS>Write ##class(%SYS.Journal.System).GetCurrentFileOffset()
1213012

あわせて、以下の関連記事も是非ご覧ください。

0
0 218
InterSystems公式 Toshihiko Minamoto · 2月 15, 2022

更新: 開発者プレビュー・リリース3が公開されました

これはインターシステムズにとって初めての開発者プレビュー・リリースであるため、これらがどのようなものであるかを説明します。 開発者プレビュー・プログラムは、従来のIRISプレビュー・プログラムを強化したもので、約2週間ごとにリリースされ、準備が整うと機能が追加されます。 これにより、機能や機能拡張に関するフィードバックを得ることができます。 2022.1に向けた機能拡張のリストは以下の通りです。これらは最初の開発者プレビューには含まれていません。 これらは今後数週間のうちに公開される予定です。

一般公開に先立ち、皆様からのご意見をお待ちしています。より良い製品を一緒に作っていくために、開発者コミュニティを通じてフィードバックを共有してください。

InterSystems IRIS Data Platform 2022.1 は、エクステンデッド・メンテナンス (EM) リリースです。2022.1 には、前回の EM リリースである 2021.1 以降、継続的デリバリー (CD) リリースである 2021.2 で追加された多くの重要な新機能や拡張機能が追加されています。これらの機能強化の概要については、2021.2 のリリース・ノートをご参照ください。

0
0 195
記事 Megumi Kakechi · 2月 13, 2022 2m read

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

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

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

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

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


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

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


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

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

0
0 294
InterSystems公式 Toshihiko Minamoto · 2月 9, 2022

インターシステムズは、2018年からInterSystems IRISで2ストリームのリリースサイクルを採用しています(開始時のお知らせをご覧ください)。  

  • Continuous delivery (CD) リリース —このリリースは、新機能を迅速に提供し、継続的に更新され、新機能を直ちに利用するアプリケーションの開発、およびデプロイに最適です。
  • Extended maintenance (EM) リリース — このリリースは、CDリリースよりも頻度は低いですが、メンテナンス・リリースの安定性を提供します。新機能をいち早く利用することよりも、メンテナンスリリースでの修正が容易であることが重要な大規模エンタープライズアプリケーションに最適です。

このアプローチについては非常に好意的なフィードバックをいただいており、人々は「鈍行列車(slow train)」と「快速列車(fast train)」という言葉を使うようになりました。 EMリリースは、大規模なオンプレミスの顧客基盤をs持つお客様やパートナーに好まれる「鈍行列車」です。 CDリリースは、最新かつ最高の機能を求めるお客様やパートナーに好まれる「快速列車」です。

0
0 275
InterSystems公式 Maki Hashizawa · 2月 7, 2022

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

インターシステムズジャパンは、3/8(火)~ 3/9日(水)に、オンラインカンファレンス「InterSystems Japan Virtual Summit 2022」を開催致します。

"Innovation in Data - データによるデジタル変革の推進" をテーマに、DX推進に不可欠な健全なデータの提供とデータプラットフォームの最新情報をお届け致します。ご参加をお待ちしております!

⚡️ 現在、事前登録受付中 ⚡️

   

【InterSystems Japan Virtual Summit 2022 開催概要】

■テーマ:Innovation in Data - データによるデジタル変革の推進

■開催日時:2022年3月8日(火)・9日(水)13:30 - 15:45 (予定)

■開催形式:オンラインライブ配信

■参加:無料(事前登録制)

お申込み・詳細はこちらから

《ゲストスピーカー講演》

  「物流業界における真の課題を解決― 運ばない物流を支えるロジスティクス変革システム「Jobs」のご紹介」

   株式会社 ビーイングホールディングス 事業開発本部 部長 北川 徹也 様

  「情報連携基盤を活用した医療情報二次利用の経験」

  岩手医科大学 総合情報センター センター長 田中 良一 様

《技術セッション》

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

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

ドキュメントをみながら IRIS 2021.2 に追加された Embedded Python を試してみました!

IRIS にログインしてるのに Pythonシェルに切り替えできて Python のコードが書けたり、Python で import iris するだけで SQL を実行できたりグローバルを操作できるので、おぉ!✨という感じです。

ぜひ、みなさんも体感してみてください!

では早速。

まず、IRISにログインします。Windows ならターミナルを開きます。Windows 以外は以下実行します。

IRIS のインストール方法を確認されたい方は、【はじめての InterSystems IRIS】セルフラーニングビデオ:基本その1:InterSystems IRIS Community Edition をインストールしてみよう!をチェックしてみてください!

iris session iris
0
1 838
記事 Minoru Horita · 2月 2, 2022 6m read

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

最近リリースされた InterSystems IRIS 2021.2 の目玉機能のひとつが Embedded Pythonです。Embedded Pythonは、PythonのランタイムをIRISに組み込むことによって、IRISのメソッドをPythonで記述したり、PythonのコードからIRISのクラスにアクセスしたりなどなど、IRISのObjectScriptとPythonとで相互に呼び出しを行なえる機能です。

しかも、Pythonのランタイムを埋め込んでいるため、ネットワークのオーバーヘッドがなく、パフォーマンスへの影響は最小限です。

IRISのプログラマの方には、Pythonの豊富なライブラリをストレスなく利用して頂けます。

Pythonのプログラマの方には、ObjectScriptを学ぶことなく、IRISの高速なデータベースやインターオペラビリティ機能などをストレスなく活用して頂けます。

今回の記事では、Embedded Pythonの機能をほんの一部だけ紹介します。

メソッドをPythonで書く

次のコードは、日付を表す文字列を2つ渡して、2つの日付の間の日数を返すメソッドです。

0
0 1287
InterSystems公式 Yoichi Miyashita · 1月 31, 2022

インターシステムズは、InterSystems IRIS data platform、InterSystems IRIS for Health、HealthShare Health Connect の バージョン 2021.2 をリリースしました。

【新機能のご紹介】
InterSystems IRIS data platform 2021.2 には、以下の新機能が含まれます。

(1) アプリケーション および インターフェース開発者向け機能
・Embedded Python
・Python を利用した Interoperability プロダクション
・Visual Studio Code の ObjectScript 拡張機能
・必要最小限のコードで SQL 実行を可能にする、新しいビジネス・サービスおよび ビジネス・オペレーション

(2) 分析 および AI 機能
・CSV や JDBC 経由のデータを効率よくロードする新しい SQL LOAD コマンド
・Adaptive Analytics の機能強化

(3) クラウド および システム運用者向け機能
・InterSystems IRIS アプリケーションからクラウド・サービスへのより簡単な接続や利用を容易にする、新しいクラウド・コネクタ
・IKO による Kubernetes リソース管理機能の向上

0
0 400
記事 Megumi Kakechi · 1月 30, 2022 1m read

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

TRY-CATCHで行うことが可能です。
以下のように行ってください。

 #dim ex As %Exception.AbstractException
 TRY {
    "<何かエラーを発生させる処理>"
  }
  CATCH ex {
     do ex.Log()
  }


^%ETNを使用する場合は、^%ETNを呼び出す際にBACKエントリ(BACK^%ETN)から呼び出してください。


あわせて、以下の関連記事も是非ご覧ください。

アプリケーションエラー(^ERRORS)をコマンドで取得する方法
【FAQ】アプリケーションから明示的にエラー詳細情報をログ出力する方法を教えてください。

0
1 342