検索

クリアフィルター

#CSP

37 投稿0 フォロワー
記事
Mihoko Iijima · 2022年7月4日

Embedded Python:ExcelからPDFに変換する方法(Windows環境のみ)

開発者の皆さん、こんにちは! 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 どちらでも利用できます。​​​​ c:\InterSystems\IRISHealth\bin>irispip install --target c:\InterSystems\IRISHealth\mgr\python pywin32 Collecting pywin32 Using cached pywin32-304-cp39-cp39-win_amd64.whl (12.2 MB) Installing collected packages: pywin32 Successfully installed pywin32-304 // 以下省略 pywin32モジュールインストール後、以下の作業を行うことで、Embedded Python でExcelからPDFへの変換を実行できるようになりました。 専用DLL(pythoncom39.dll とpywintypes39.dll)を c:\windows\system32以下にコピー pywin32のパス2種(<IRISインストールディレクトリ>\mgr\python\win32\lib と <IRISインストールディレクトリ>\mgr\python\win32)を sys.pathに追加 IRISのサービスアカウントを管理者ユーザに変更:ご参考「サービスアカウントの変更について【IRIS】」 それぞれの手続きをご紹介します。 1. 専用DLL(pythoncom39.dll とpywintypes39.dll)を c:\windows\system32以下にコピー インストール後、さっそく import win32com.client を実行したいところですが、IRISターミナルから起動するPythonシェルで実行すると以下のエラーが出てしまいます。 >>> import win32com.client Traceback (most recent call last): File "<input>", line 1, in <module> File "c:\intersystems\irishealth\mgr\python\win32com\__init__.py", line 5, in <module> import win32api, sys, os ModuleNotFoundError: No module named 'win32api このエラーをググりますと、以下の投稿に辿り着き、 How to fix "ImportError: DLL load failed" while importing win32api 👆52番の回答を試してみると、インポートできるようになりました。 具体的な手続きは以下の通りです。 irispipでインストールしたpywin32の2種類のDLL(pythoncom39.dll とpywintypes39.dll)を c:\windows\system32にコピーします。 irispipでインストールされる場所:<IRISインストールディレクトリ>\mgr\python\pywin32_system32 例)C:\InterSystems\IRISHealth\mgr\python\pywin32_system32 2. pywin32のパス2種を sys.pathに追加 import win32com.client を行うため、sys.pathにpywin32のインストールで用意される以下2つのディレクトリを追加する必要がありました。 参考記事:http://blog.livedoor.jp/blackcode/archives/python-win32api-import-error.html <IRISインストールディレクトリ>\mgr\python\win32\lib <IRISインストールディレクトリ>\mgr\python\win32 例は以下の通りです。 import sys sys.path += ['C:\InterSystems\IRISHealth\mgr\python\win32\lib','C:\InterSystems\IRISHealth\mgr\python\win32'] 3. IRISのサービスアカウントを管理者ユーザに変更 1、2までで、import win32com.client は成功しますが、肝心のExcelからPDFへ変換する流れでエラーが出ます😢。 どうやら、ExcelからPDF変換の流れを管理者権限で実行する必要があり、IRISのサービスアカウントが規定(SYSTEMアカウント)である場合に失敗します。 IRISのサービスアカウントを管理者に変更します(管理者権限でコマンドプロンプトを起動した後、以下のコマンドを実行します)。 例)<IRISインストールディレクトリ>\bin> irisinstall setserviceusername 構成名 ユーザ名 パスワード c:\InterSystems\IRISHealth\bin>irisinstall setserviceusername IRISHealth userx passwordx サービスアカウント変更後、IRISの再起動が必要となります。 サービスアカウントの変更について【IRIS】 ※サービスアカウントを変更した場合の注意点 サービスアカウントを LOCAL_SYSTEM から変更すると、権限が不足するため、IRIS開始時の共有メモリの取得に Large Page (※)が使用できなくなります。※Windows上でのCaché共有メモリの割り当てについて Large Pageを使用するためには、変更したアカウントに対して"メモリ内のページのロック" 特権を付与する必要があります。“メモリ内のページのロック” 特権の付与は、ローカルセキュリティポリシー(secpol.msc)より実施します。 1~3までの手続きを行った後、以下のPythonスクリプトファイルを実行できるようになります。 スクリプト例では、2つ関数を用意しています。以下それぞれの概要です。 関数:CreateExcel(ファイルフルパス) では、Test.Personテーブルを作成し、テストデータを4件登録し、Excel出力しています。(関数最後にTest.PersonをDropしています) Excel出力の為、openpyxlとpandasのインストールが必要です。irispipでインストールしてから実行してください。 例)c:\InterSystems\IRISHealth\bin\irispip install --target c:\InterSystems\IRISHealth\mgr\python openpyxlc:\InterSystems\IRISHealth\bin\irispip install --target c:\InterSystems\IRISHealth\mgr\python pandas 関数:Output(エクセルファイルフルパス,PDFファイルフルパス) では、関数CreateExcel()を呼び出し、Excelファイルを準備してから、PDF変換を行っています。 第1引数:出力したいエクセルファイル名をフルパスで指定します。例)c:\\temp\\Book4.xlsx 第2引数:Excelから変換するPDF保存名でフルパスで指定します。 例)c:\\temp\\Book4.pdf サンプルコードは以下の通りです。 import sys sys.path += ['C:\InterSystems\IRISHealth\mgr\python\win32\lib','C:\InterSystems\IRISHealth\mgr\python\win32'] # 以下 python.exeから実行する時のパス sys.path+=['c:\intersystems\irishealth\mgr\python','c:\intersystems\irishealth\lib\python'] import iris #-------------------------------------------- import win32com.client import pandas as pd import openpyxl from openpyxl.utils.dataframe import dataframe_to_rows def CreateExcel(filename): sql="create table Test.Person (Name VARCHAR(50),Email VARCHAR(50))" rs=iris.sql.exec(sql) rs=iris.sql.exec("insert into Test.Person (Name,Email) VALUES('テスト1','test1@mail.com')") rs=iris.sql.exec("insert into Test.Person (Name,Email) VALUES('テスト2','test2@mail.com')") rs=iris.sql.exec("insert into Test.Person (Name,Email) VALUES('テスト3','test3@mail.com')") rs=iris.sql.exec("insert into Test.Person (Name,Email) VALUES('テスト4','test4@mail.com')") df=iris.sql.exec("select Name,Email from Test.Person").dataframe() #df.to_excel(filename) wb=openpyxl.Workbook() ws = wb.create_sheet(title="シート1") ws.append(['行番号', '名前', 'メール']) for i,row in enumerate(dataframe_to_rows(df,header=False)): if i==0: continue ws.append(row) wb.save(filename) wb.close() rs=iris.sql.exec("drop table Test.Person") def Output(filename,pdfname): CreateExcel(filename) excel = win32com.client.Dispatch("Excel.Application") wb=excel.WorkBooks.Open(filename) wb.WorkSheets("シート1").Select() wb.ActiveSheet.ExportAsFixedFormat(0,pdfname) excel.quit() 上記コードを c:\WorkSpace\TryPython\ExcelToPDF.py に配置した状態とします。 ObjectScritpからの実行例は以下の通りです。 set sys=##class(%SYS.Python).Import("sys") do sys.path.append("c:\WorkSpace\TryPython") set e=##class(%SYS.Python).Import("ExcelToPDF") do e.Output("c:\\temp\\Book5.xlsx","c:\\temp\\Book5.pdf") Pythonシェルからの実行例は以下の通りです。 C:\WorkSpace\TryPython> python Python 3.9.10 (tags/v3.9.10:f2f3f53, Jan 17 2022, 15:14:21) [MSC v.1929 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.path+=['C:\WorkSpace\TryPython'] >>> import ExcelToPDF as e >>> e.Output("c:\\temp\\Book6.xlsx","c:\\temp\\Book6.pdf") 少し前準備が多いですが、Pythonの機能を活用してIRISにあるデータをExcel出力+PDF変換までできました🐍 Pythonとても便利ですね!
記事
Minoru Horita · 2020年7月6日

Python Gateway パート II:インストール 

この連載記事では、InterSystemsデータプラットフォーム用のPython Gatewayについて説明します。 また、InterSystems IRISからPythonコードなどを実行します。 このプロジェクトは、InterSystems IRIS環境にPythonの力を与えます。 任意のPythonコードを実行する InterSystems IRISからPythonへのシームレスなデータ転送 Python相互運用アダプタでインテリジェントな相互運用ビジネスプロセスを構築する InterSystems IRISからのPythonコンテキストの保存、調査、変更、復元 その他の記事 現時点での連載計画です(変更される可能性があります)。 パート I:概要、展望、紹介 パート II:インストールとトラブルシューティング <-- 現在、この記事を参照しています パート III:基本機能 パート IV:相互運用アダプタ パート V:Execute関数 パート VI:動的ゲートウェイ パート VII:プロキシゲートウェイ パート VIII:使用事例とML Toolkit インストール この記事はPython Gatewayをインストールするのに役立ちます。Python Gatewayをインストールして使用する方法はいくつか存在します。 ホスト Windows Linux Mac Docker 作成済みのイメージをプルする 独自のイメージをビルドする インストール方法に関係なく、コードが必要になります。 コードはリリースページでしかダウンロードできません。 リリースページにはテスト済みの安定版リリースが公開されていますので、最新のものを入手してください。 現在のバージョンは0.7ですが、将来的には新しいものになるでしょう。 リポジトリをクローンまたはダウンロードせず、最新のリリースをダウンロードしてください。 ホスト ホストOSにPython Gatewayをインストールする場合は、先に(OSに関係なく)Pythonをインストールする必要があります。 Python 3.6.7(64ビット版)をインストールします。 Pythonはデフォルトの推奨場所にインストールすることをお勧めします。 dill モジュールを、pip install dill でインストールします。 ObjectScript コード(すなわち、do $system.OBJ.ImportDir("C:\InterSystems\Repos\Python\isc\py\","*.cls","c",,1))をProduction(Ensembleが有効な)名前空間に読み込みます。 既存の名前空間呼び出しを本番環境で有効にする場合は、write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1) にします。 コールアウトDLL/SO/DYLIBをInterSystems IRISインストール環境の bin フォルダに置きます。 ライブラリファイルは write ##class(isc.py.Callout).GetLib() によって返されるパスに置く必要があります。 Windows PYTHONHOME 環境変数がPython 3.6.7を参照していることを確認します。 SYSTEM PATH 環境変数に PYTHONHOME 変数(またはその参照先ディレクトリ)が含まれていることを確認します。 Linux SYSTEM PATH 環境変数に /usr/lib および /usr/lib/x86_64-linux-gnu が含まれていることを確認します(最初にあるのが望ましい)。 /etc/environment ファイルを使用して環境変数を設定します。 undefined symbol: _Py_TrueStruct というエラーが発生した場合はTroubleshooting(トラブルシューティング)セクションを確認して PythonLib プロパティを指定してください。 Mac Python.orgのPython 3.6.7のみが現在サポートされています。 PATH 変数を確認してください。 環境変数を変更した場合は、InterSystems製品を再起動してください。 Docker コンテナを使用することには次のような多くのメリットがあります。 - 移植性 - 効率性 - 分離 - 軽量 - 不変性 Dockerの詳細については、こちらの連載記事をご覧ください。 Python GatewayのDockerビルドはすべて2019.1のコンテナをベースにしています。 作成済みのイメージをプルする docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy:latest を実行してプルし、Python GatewayをInterSystems IRIS Community Edition上で実行してください。 それだけです。 独自のイメージをビルドする Dockerイメージをビルドするには、リポジトリのルートで次を実行します:docker build --force-rm --tag intersystemscommunity/irispy:latest イメージはデフォルトで intersystems/iris:2019.1.0.510.0-1 イメージにビルドされますが、これは IMAGE 変数を指定することで変更できます。InterSystems IRIS Community Editionからビルドするには、次を実行します:docker build --build-arg IMAGE=store/intersystems/iris:2019.1.0.510.0-community --force-rm --tag intersystemscommunity/irispy:latest その後、次のコマンドでDockerイメージを実行できます。 docker run -d \ -p 52773:52773 \ -v /<HOST-DIR-WITH-iris.key>/:/mount \ --name irispy \ intersystemscommunity/irispy:latest \ --key /mount/iris.key InterSystems IRIS Community Editionベースのイメージを実行している場合はキーの指定を省略できます。 Dockerの注意事項 Dockerに関するいくつかの情報を掲載しておきます。 テストプロセス isc.py.test.Process はイメージのアーティファクトを一時ディレクトリに保存します。 このパスはマウントされているディレクトリに変更できます。 そのためには Correlation Matrix: Graph 呼び出しのアノテーションを編集し、f.savefig 関数に有効なファイルパスを指定してください。 ターミナルアクセスの場合は、docker exec -it irispy sh を実行します。 SuperUser/SYS または Admin/SYS のユーザー名/パスワードの組み合わせでSMPにアクセスしてください。 コンテナを停止するには、docker stop irispy && docker rm --force irispy を実行してください。 インストールの検証 Python Gatewayをインストールした後は動作確認を行います。 以下のコマンドを実行してください。 set sc = ##class(isc.py.Callout).Setup() set sc = ##class(isc.py.Main).SimpleString("x='HELLO'", "x", , .var) write var Python 変数 xの値 HELLO が出力されるはずです。 戻り値のステータスがエラーの場合、または var が空の場合はreadmeのtroubleshooting(トラブルシューティング)セクションを確認してください。 まとめ Python Gatewayは迅速かつ簡単にインストールできます。 Dockerに精通している方は最新のイメージを入手してください。そうでない場合は、InterSystems IRISの主なOS(Windows、Linux、Mac)用のキットがあります。 次の記事では、Python Gatewayの使用を開始します。 図解入りガイド ML Toolkitユーザーグループには、図解入りのインストールガイドもあります。 ML Toolkitユーザーグループは、InterSystems社のGitHub組織の一部として設定されている非公開GitHubリポジトリです。 このリポジトリは、ML Toolkitコンポーネントをインストール、学習、またはすでに使用している外部ユーザーを対象としています。 ML Toolkitユーザーグループに参加するには、以下の内容を含む簡単なメールを MLToolkit@intersystems.com 宛に送信してください(グループメンバーが議論中にあなたを認識して特定するために必要です)。 GitHubのユーザー名 氏名(英文字表記の名前、姓の順) 組織(勤務先、通学先、または在宅勤務) 役職(組織での実際の役職、「学生」、または「無所属」) 国(本拠地としている国) 続けて「Python Gateway パート III:基本機能」をお読みください。 また、前のパート「Python Gateway パート I:はじめに」も確認してください。 InterSystems Open Exchangeで関連アプリケーションを確認してください。
記事
Minoru Horita · 2020年8月6日

Python Gateway パート VI: Jupyter

この連載記事では、InterSystemsデータプラットフォーム用の[Python Gateway](https://openexchange.intersystems.com/package/PythonGateway)について説明します。 また、InterSystems IRISからPythonコードなどを実行します。 このプロジェクトは、InterSystems IRIS環境にPythonの力を与えます。 * 任意のPythonコードを実行する * InterSystems IRISからPythonへのシームレスなデータ転送 * Python相互運用アダプタでインテリジェントな相互運用ビジネスプロセスを構築する * InterSystems IRISからのPythonコンテキストの保存、調査、変更、復元 その他の記事 現時点での連載計画です(変更される可能性があります)。 * [パート I:概要、展望、紹介](https://jp.community.intersystems.com/post/python%C2%A0gateway%C2%A0%E3%83%91%E3%83%BC%E3%83%88%C2%A0i%EF%BC%9A%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB) * [パート II:インストールとトラブルシューティング](https://jp.community.intersystems.com/post/python%C2%A0gateway%C2%A0%E3%83%91%E3%83%BC%E3%83%88%C2%A0ii%EF%BC%9A%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%C2%A0) * [パート III:基本機能](https://jp.community.intersystems.com/post/python-gateway-%E3%83%91%E3%83%BC%E3%83%88iii%EF%BC%9A%E5%9F%BA%E6%9C%AC%E6%A9%9F%E8%83%BD) * [パート IV:相互運用アダプタ](https://jp.community.intersystems.com/post/python-gateway-%E3%83%91%E3%83%BC%E3%83%88-iv%EF%BC%9A%E7%9B%B8%E4%BA%92%E9%81%8B%E7%94%A8%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF) * パート V:Execute関数 * パート VI: Jupyter Notebook 現在、デフォルトのPython 3のexecutorが使用されています。 この拡張機能はアノテーションにPythonコードが含まれていることを前提としており、アクティビティ名を先行する読み取り専用の見出しとして使用します。 最近、私はJupyterのサポートを拡張しました。 これで、JupyterからPythonGatewayのビジネスプロセスを開発できるようになりました。 以下のように何でも対応できます。 * 新しいビジネスプロセスを作成する * ビジネスプロセスを削除する * 新しいアクティビティを作成する * アクティビティを変更する * アクティビティを削除する
記事
Megumi Kakechi · 2025年7月6日

サポートOSはどこを見て確認したらよいか?サポートされているプラットフォームについて

これは 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.1 の サポートプラットフォームIRIS 2024.3 の サポートプラットフォームIRIS 2024.1 の サポートプラットフォームCache 2018.1 の サポートプラットフォームCache 2017.2 の サポートプラットフォーム ドキュメント URL の バージョン情報を確認したいバージョンに変えていただくと、そのバージョンのドキュメントをご確認いただけます。 ☆IRISの場合:https://docs.intersystems.com/iris20241/csp/docbook/DocBook.UI.Page.cls?KEY=ISP_technologies#ISP_platforms↓ 2023.1が見たいときは以下に変更https://docs.intersystems.com/iris20231/csp/docbook/DocBook.UI.Page.cls?KEY=ISP_technologies#ISP_platforms ☆Cacheの場合:https://docs.intersystems.com/ens20181j/csp/docbook/DocBook.UI.Page.cls?KEY=ISP_technologies#ISP_platforms↓ 2017.1が見たいときは以下に変更https://docs.intersystems.com/ens20171j/csp/docbook/DocBook.UI.Page.cls?KEY=ISP_technologies#ISP_platforms ※Cacheの場合、2016.1より前のバージョンのドキュメントは、PDF形式のものしかありません。 この場合は、 [ドキュメントトップ] > [はじめに] > [Cache サポート対象プラットフォーム] より辿れます。 例:Cache 2016.2 ドキュメントCache 2016.1 ドキュメントCache 2015.1 ドキュメントCache 2014.1 ドキュメントCache 2013.1 ドキュメント また、以下に Q2-2025 に発表された最新情報を載せております。こちらもぜひ参考になさってください。InterSystems サポートプラットフォーム最新情報 Q2-2025
記事
Mihoko Iijima · 2020年7月21日

【はじめてのInterSystems IRIS】セルフラーニングビデオ:アクセス編:(REST)APIファーストで作成するRESTディスパッチクラス

IRIS で REST サーバを作成する際に準備する REST ディスパッチクラスを API ファーストの手順で作成する方法を解説します。(OpenAPI 2.0に基づいて作成したアプリケーション定義を使用してディスパッチクラスを作成する手順を解説します) このビデオには、以下の関連ビデオがあります。 IRISの基本操作についてのビデオ(索引ページ) InterSystems開発者コミュニティ biginnerタグ一覧 もくじ 最初~ 復習ビデオ/関連ビデオについて など IRIS で 作成する REST サーバの仕組み IRISでのJSON操作について 手動によるRESTディスパッチクラスの作成 2:36~ 作成するディスパッチクラスの内容 4:15~ RESTディスパッチクラス:APIファーストで作成する方法(手順説明) 5:55~ アプリケーションの仕様を定義する (例) 6:19~ IRISにアプリケーション仕様を登録する(説明)など 7:40~ POST要求の実行 (例) 8:24~ 実演  ↓実演で使用したURL↓ http://localhost:52773/api/mgmnt/v2/user/crud2 10:32~ (POST要求の)実行結果 11:50~ ベースURLの設定(管理ポータルでの設定)+ 実演 13:23~ curd2.implクラスの実装方法(スタジオとVSCodeで確認) 16:30~ curd2.implクラスの実装方法  ↓ドキュメントへのリンク↓ https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=GREST_implementation 18:02~ VSCode:curd2.implクラスの変更方法 18:40~ GET要求:全件取得 GetAllPerson()の実装 実演 24:44~ GET要求:全件取得 Postmanでテスト 25:20~ POST要求:Test.Person(1件)の実装 実演 29:37~ POST要求:Postmanでテスト 31:10~ GET要求:IDを指定したTest.Personの取得 GetPerson()の実装 実演 33:42~ GET要求:IDを指定したTest.Person Postmanでテスト 34:02~ PUT要求:IDを指定してTest.Personの修正 UpdatePerson()の実装 実演 36:12~ PUT要求:Postmanでテスト 36:50~ DELETE要求:IDを指定してTest.Personを削除 DeletePerson()の実装 実演 38:00~ DELETE要求:Postmanでテスト 38:30~ まとめ 38:57~ ビデオで確認できたこと ※YouTubeでご覧いただくと、もくじの秒数にジャンプできます。 サンプルコード一式(Git)(コンテナでサンプル環境を開始できます。詳細は Readme をご参照ください。) impl クラスコード例
記事
Tomohiro Iwamoto · 2020年8月13日

AWS上にて稼働中のInterSystems IRISの管理ポータルとの通信を暗号化(https)する方法

本記事について InterSystems IRISは、管理ポータルへのアクセス方法がデフォルトではhttpとなっており、クライアントが社内、サーバがクラウドという配置の場合、なんらかの方法でトラフィックを暗号化したいと考える方も多いかと思います。そこで、AWS上にて稼働中のIRISの管理ポータル(あるいは各種RESTサービス)との通信を暗号化する方法をいくつかご紹介したいと思います。 本記事では、アクセスにIRIS組み込みのapacheサーバを使用しています。ベンチマーク目的や本番環境のアプリケーションからのアクセス方法としては使用しないでください。短期間・少人数での開発・動作検証・管理目的でのアクセスを暗号化する事を想定しています。 ドメイン名とメジャーな認証局発行のSSLサーバ証明書を用意できればベストなのですが、上記のような用途の場合、コスト面でなかなか難しいと思います。ですので、下記の証明書の使用を想定しています。- 自己署名(いわゆるオレオレ証明書)- 自分で建てた認証局で署名した証明書(いわゆるオレオレ認証局) また、下記のような実行環境を想定しています。 手元のPC環境 O/S Windows10 ブラウザ Chrome/FireFox/Edge IDE vscode+ObjectScript拡張 ローカルPCで未使用のポート番号 8888 EC2インスタンス作成時に使用したキーペアの秘密鍵 aws-secret.pem AWS環境 IRISホストの公開ホスト名 ec2-54-250-169-xxx.ap-northeast-1.compute.amazonaws.com IRISのウェブサーバポート番号 52773 O/S Ubuntu 18.04LTS O/Sユーザ名 ubuntu 直接アクセス 1) ポートフォワーディングを使う 最もお手軽な方法です。セキュリティグループで、SSH用のポート(22)をインターネットからのインバウンド許可する必要があります。 C:\Users\xxxx>ssh -i aws-secret.pem -L 8888:localhost:52773 ubuntu@ec2-54-250-169-xxx.ap-northeast-1.compute.amazonaws.com このコマンドを実行中は、SSHを実行したPCからは、IRISホストに http://localhost:8888/csp/sys/%25CSP.Portal.Home.zen でアクセスできます。sshでログインした状態になっているので、開発時に行うような端末操作(IRISの起動・停止、IRISセッション開始など)に利用できます。この方法は、スーパーサーバ・ポート(51773)にも有効ですので、Studioによる通信の暗号化にも使用できます。 注意)Windowsの場合、ssh用の秘密鍵(aws-secret.pem)を%USERPROFILE%\に配置しないと、エラーになります。 C:\Users\xxxx>dir %USERPROFILE%\aws-secret.pem 2020/07/14 17:10 1,692 aws-secret.pem 1 個のファイル 1,692 バイト 0 個のディレクトリ 108,323,176,448 バイトの空き領域 vscodeの設定(settings.json)は下記のようになります。 { "objectscript.conn": { "host": "localhost", "https": false, "port": 8888, "ns": "USER", "username": "xxx", "password": "xxx", "active": true } } 2) SSL設定を施したReverse Proxyを使う IRISホストに自己証明書を適用したapacheやnginxをReverseProxy設定で配置します。セキュリティグループで、HTTPS用のポート(443)をインターネットからのインバウンド許可する必要があります。 apache及びnginxの設定を行うスクリプトをこちらに掲載しています。これにより、ブラウザからIRISホストに https://ec2-54-250-169-xxx.ap-northeast-1.compute.amazonaws.com/csp/sys/%25CSP.Portal.Home.zen でアクセスできます。 vscodeの設定(settings.json)は下記のようになります。 { "objectscript.conn": { "host": "ec2-54-250-169-xxx.ap-northeast-1.compute.amazonaws.com", "https": true, "port": 443, "ns": "USER", "username": "xxx", "password": "xxx", "active": true } } 踏み台ホスト経由 検証用とはいえ、ユーザデータやコードを含むEC2インスタンスのSSHやHTTPSポートをインターネット解放するのは不安がある場合は、踏み台ホスト(Bastion Host)を使用しますが上記の方法は、踏み台ホストがある場合でも同様です。セキュリティグループで、踏み台ホストとIRISホスト間のTCPトラフィックをインバウンド許可する必要があります。 下記のような実行環境であると想定します。 AWS環境 IRISホストの公開ホスト名 なし IRISホストの内部IPアドレス 10.0.1.81 踏み台ホストの公開ホスト名 ec2-54-250-169-yyy.ap-northeast-1.compute.amazonaws.com 1) ポートフォワーディングを使う セキュリティグループで、SSH用のポート(22)をインターネットからのインバウンド許可する必要があります。 下記のコマンドを、踏み台ホストに対して実行します。 C:\Users\xxxx>ssh -i aws-secret.pem -L 8888:10.0.1.81:52773 ubuntu@ec2-54-250-169-yyy.ap-northeast-1.compute.amazonaws.co 以下、同様です。 2) SSL設定を施したReverse Proxyを使う セキュリティグループで、HTTPS用のポート(443)をインターネットからのインバウンド許可する必要があります。同じ作業を、踏み台ホストで実行します。転送先のURLをIRISホストの内部IPアドレス:10.0.1.81に変更します。 ProxyRequests Off ProxyPass / http://10.0.1.81:52773/ ProxyPassReverse / http://10.0.1.81:52773/ 以下、ホスト名が踏み台ホスト名に変わる事以外は、同様です。 AWS/ALB経由 あまり一般的ではないかもしれませんが、AWS/ALBに自己証明書を適用することができます。この場合、ALBにてSSL終端させるので、別途SSL有効化したapacheを用意する手間が省けます。 ALBの作成には、最低2つのAZの指定が必要なので、ここではICM(InterSystems Cloud Manager)にて、DM(2台)をMIRROR:trueで作成した環境を使用しました。(ICMについては、icmを利用してIRISクラスターを構成する方法をご覧ください) default.json (抜粋) { "Zone": "ap-northeast-1a,ap-northeast-1c", "Mirror": "true", } definitions.json [ { "Role": "DM", "Count": "2", "MirrorMap": "primary,backup", "ZoneMap": "0,1" } ] setup.shで作成した証明書ファイルを使用します。これらのファイルをACM(Certificate Manager)にインポートします。証明書本文:server.crtの内容証明書のプライベートキー:server.keyの内容証明書チェーン:inca.pemの内容 補足)awscliを使える環境であれば、setup.shの最後の行をアンコメントすれば自動登録されます。 下記設定でALBを新規作成します。 手順 1: ロードバランサーの設定名前:任意スキーム:インターネット向けIP アドレスタイプ:ipv4リスナー:https(port:443)アベイラビリティーゾーン:ap-northeast-1a,ap-northeast-1c 手順 2: セキュリティ設定の構成デフォルトの証明書の選択:ACM から証明書を選択する証明書の名前:(先ほどACMにインポートした証明書を選択) 手順 3: セキュリティグループの設定セキュリティグループの設定:新しいセキュリティグループを作成する→https(port:443)のみを許可。 手順 4: ルーティングの設定ターゲットグループ:新しいターゲットグループ名前:任意ターゲットの種類:インスタンスプトロコル:httpポート:52773 ヘルスチェック プトロコル:httpパス:/csp/bin/mirror_status.cxwヘルスチェックの詳細設定ポート:上書き→52773 手順 5: ターゲットの登録先ほど作成したEC2インスタンスを登録済みに追加 作成したALBの状態がactiveになれば、ALBのDNS名を使ってhttpsアクセスできるようになります。 https://[DNS名]/csp/sys/exp/%25CSP.UI.Portal.SQL.Home.zen
記事
Megumi Kakechi · 2021年5月27日

Windows上での共有メモリの割り当てについて

これは InterSystems FAQ サイトの記事です。 InterSystems Data Platformは、データベースキャッシュやルーチンキャッシュなどの共有メモリを、起動時に割り当てます。 バージョン2007.1以降をWindows上で動作させる際、Windows特有の共有メモリに関する問題が生じることが判明しています。 詳細については、以下の技術資料をご参照ください。 Windows上での共有メモリの割り当てについて また、以下の記事もあわせてご覧ください。 コンソールログに "Failed to allocate xxxMB shared memory using large pages..." のエラーメッセージが出ているとき IRISが使用するワーキングセット(メモリ)について

#ビジネスルール

0 投稿0 フォロワー

#Ensemble

358 投稿1 フォロワー
お知らせ
Rie Tokue · 2025年3月20日

インターシステムズ 第2回ソリューションウェビナー「InterSystems IRIS data platform 2025.1 EMリリース:新機能と改善点について」のご案内

本年よりスタートしたインターシステムズ ソリューションウェビナー、第2回は以下の日時・内容で開催いたします。 日時:4月24日(木)13時30分~14時15分(45分間) 参加費無料・事前登録制 ご登録はこちらから ウェビナー概要:このウェビナーでは、InterSystems IRIS data platform の2025.1 EM(Extended Maintenance)リリースに搭載される新機能と改善点を包括的に紹介します。EMリリースは長期サポートが提供され、安定性が重視されるため、多くのお客様が本番環境で採用されるバージョンです。2024.1 EMリリース以降の機能強化も含め、技術者の皆様が新バージョンを最大限に活用できるよう情報をお届けします。 本ウェビナーでは、製品の新機能や改善点について、実際の実行環境での画面を共有しながら解説します。理論的な説明だけでなく、具体的なコード例や実際の動作デモンストレーションを通して、新機能の実用的な活用方法を分かりやすく紹介します。これにより、参加者の皆様はすぐに実践できる知識を得ることができます。 こんな方にお勧め: IRIS data platform開発者 データベース管理者 前提となる知識: IRIS data platformの基本的な知識 過去のバージョン(特に2024.1以降)の使用経験があると望ましい ご多用中とは存じますが皆様のご参加をお待ち申し上げております。
記事
Megumi Kakechi · 2022年4月17日

Embedded Python で Excel のデータを IRIS グローバルに格納する方法

InterSystems IRIS 2021.2 のバージョンより、Embedded Python を使用できるようになりました。Embedded Python については、「Embedded Pythonを簡単にご紹介します」の記事をぜひご覧ください。 こちらでは、Embedded Python を使用して Excel のデータを IRIS グローバルに出力する方法をご紹介します。 最初に、irispip コマンドで必要なライブラリをインストールします。今回は、pandas、xlrd、openpyxl の3つのライブラリをインストールします。 >cd C:\InterSystems\IRIS\bin C:\InterSystems\IRIS\bin>irispip install --target C:\InterSystems\IRIS\mgr\python pandas C:\InterSystems\IRIS\bin>irispip install --target C:\InterSystems\IRIS\mgr\python xlrd C:\InterSystems\IRIS\bin>irispip install --target C:\InterSystems\IRIS\mgr\python openpyxl Excel ファイルは次のような test.xslx を用意します。 Name Age Address 佐藤 50 東京 加藤 40 大阪 伊藤 30 京都 VSCode または IRISスタジオで次のようなクラスを作成します。メソッドの宣言部に [ Language = Python ] と指定することで、クラスのメソッドに直接 Pythonコードを書くことができます。 Class User.PythonTest Extends %Persistent { ClassMethod fromPythonString(in As %String) { set ^ISJ($increment(^ISJ))=$LISTFROMSTRING(in,",") } ClassMethod PythonPrint(fname as %String) [ Language = python ] { import iris import pandas df=pandas.read_excel(fname, header=None) for key,row in df.iterrows(): moji=",".join(list(map(str, row))) #iris.cls('User.PythonTest').fromPythonString(moji) iris.cls(__name__).fromPythonString(moji) } } 上の IRIS クラスでは、以下のような処理を行っています。 ① Python プログラム(PythonPrint)で、拡張子「.xlsx」のエクセルファイルを pandas データフレームに読み込む  ↓② Dataframe のデータを行単位で読み込み、iris モジュールの cls() メソッドで文字列をグローバルに格納するクラスメソッド(fromPythonString)に渡す  ↓③ クラスメソッドの中で $LISTFROMSTRING() を使用して ^ISJ グローバルにセットする。 IRISターミナルから正しく実行できているかを確認します。 USER>kill ^ISJ USER>do ##class(User.PythonTest).PythonPrint("c:\temp\test.xlsx") USER>zw ^ISJ ^ISJ=4 ^ISJ(1)=$lb("Name","Age","Address") ^ISJ(2)=$lb("佐藤","50","東京") ^ISJ(3)=$lb("加藤","40","大阪") ^ISJ(4)=$lb("伊藤","30","京都") USER> Pythonプログラムのデバッグを行いたい場合は、 Python シェルに切り替えて確認することができます。 USER>kill ^ISJ USER>do ##class(%SYS.Python).Shell() Python 3.9.5 (default, Jan 31 2022, 17:55:36) [MSC v.1927 64 bit (AMD64)] on win32 Type quit() or Ctrl-D to exit this shell. >>> import iris >>> import pandas >>> df=pandas.read_excel('c:\\temp\\test.xlsx', header=None) >>> for key,row in df.iterrows(): ... moji=','.join(list(map(str, row))) ... iris.cls('User.PythonTest').fromPythonString(moji) ... >>> exit() USER>zwrite ^ISJ ^ISJ=4 ^ISJ(1)=$lb("Name","Age","Address") ^ISJ(2)=$lb("佐藤","50","東京") ^ISJ(3)=$lb("加藤","40","大阪") ^ISJ(4)=$lb("伊藤","30","京都") USER> 上のサンプルでは、IRISのクラスメソッドを呼び出して操作していますが、Python プログラムで直接 IRIS のグローバルに書き込むことも可能です。その場合は、iris.gref("^ISJ") のように、^ISJ へのグローバル参照を取得して書き出しが行えます。詳細は以下のドキュメントをご覧ください。https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=AFL_epython#AFL_epython_irisapi_gref USER>do ##class(%SYS.Python).Shell() Python 3.9.5 (default, Jan 31 2022, 17:55:36) [MSC v.1927 64 bit (AMD64)] on win32 Type quit() or Ctrl-D to exit this shell. >>> import pandas >>> glo=iris.gref('^ISJ') >>> glo.kill([None]) >>> df=pandas.read_excel('c:\\temp\\test.xlsx', header=None) >>> for key,row in df.iterrows(): ... moji=','.join(list(map(str, row))) ... glo[key]=moji ... >>> exit() USER>zw ^ISJ ^ISJ(0)="Name,Age,Address" ^ISJ(1)="佐藤,50,東京" ^ISJ(2)="加藤,40,大阪" ^ISJ(3)="伊藤,30,京都" USER> 以下の関連記事も、ぜひご覧ください。 PandasデータフレームをIRISに保存する - 簡易メモInterSystems IRIS グローバル($LB) を pandas.DataFrame に変換する @Megumi.Kakechi さん、役に立つ記事ありがとうございます! 細かい点ですが、クラスメソッドから、同じクラスの別のクラスメソッドを呼ぶときに、 iris.cls("User.PythonTest").fromPythonString(moji) のように呼んでますが、クラス名を繰り返さずに、 iris.cls(__name__).fromPythonString(moji) で呼べるようです。(参考:英語のコミュティティ記事) Pythonなら、clsという変数で自分のクラスへの参照が入って欲しいのですが、これは将来の改善を待たないといけないみたいです。 @Minoru.Horita さん 情報ありがとうございます!__name__で呼べるとは、スマートでいいですね。早速記事に反映させていただきました。
記事
Mihoko Iijima · 2021年1月29日

グローバルのサイズをプログラミングで取得する方法

これは InterSystems FAQ サイトの記事です。 システム提供の %SYS.GlobalQueryクラス の Size クエリーを使用することで取得できます。 使用例は、以下のサンプルコードをご参照ください。※カラムやパラメータの指定はクラスリファレンスをご確認ください。 set dir="C:\intersystems\iris\mgr\user" // IRIS.DAT(またはCACHE.DAT)フォルダ set rs = ##class(%ResultSet).%New("%SYS.GlobalQuery:Size") do rs.Execute(dir) // 第3引数でマスク指定も可 while (rs.Next()) { set gname= rs.Get("Name") // グローバル名 set gsize= rs.Get("Used MB") // グローバルサイズ(MB) write gname," : ",gsize,! } グローバル変数のサイズが大きい場合、取得時間がかかる場合もあります。その場合、Size クエリー 実行時、第 6 引数に 1 を指定してクエリを再実行してみてください。 第 6 引数の指定により、簡易モードでサイズを取得します。簡易モードのため「Used MB」は取得できませんが、「Allocated MB」は取得できます。 以下、第 6 引数を指定した場合の実行例です(Used MB ではなく、Allocated MB を取得しています)。 set dir="C:\intersystems\iris\mgr\user" // IRIS.DAT(またはCACHE.DAT)フォルダ set rs = ##class(%ResultSet).%New("%SYS.GlobalQuery:Size") do rs.Execute(dir,,,,,1) // 第3引数でマスク指定も可 while (rs.Next()) { set gname= rs.Get("Name") // グローバル名 set gsize= rs.Get("Allocated MB") // グローバルサイズ(MB) write gname," : ",gsize,! }
記事
Megumi Kakechi · 2025年6月20日

非ミラー環境に、ミラー環境でオンラインバックアップしたバックアップファイルをリストアする方法

これは InterSystems FAQ サイトの記事です。こちらの記事では、非ミラー環境にミラー環境でオンラインバックアップしたバックアップファイルをリストアする方法をご紹介します。 手順は大きく分けて2つになります。 1.バックアップファイルからリストアを行う 2.データベースファイルのミラー属性を削除する 1.バックアップファイルからリストアを行う 以下は、^DBREST ユーティリティによる対話形式のリストア方法になります。 %SYS>do ^DBREST Cache DBREST Utility Restore database directories from a backup archive Restore: 1. All directories 2. Selected and/or renamed directories 3. Display backup volume information 4. Exit the restore program 1 => 2 // <-- <Enter> ミラー環境でバックアップしたバックアップファイルを、ミラー環境ではない環境にリストアする場合は、2 を選択する必要があります // ※『1. All directories』を選択した場合、リストア対象はミラーデータベースのみになるため、ミラーでなければリストアはされません Do you want to set switch 10 so that other processes will be prevented from running during the restore? Yes => // <-- <Enter> // Yes の場合、リストア中に他のプロセスがグローバルデータにアクセスできないように制御するスイッチ10を設定します。 Specify input file for volume 1 of backup 1 (Type STOP to exit) Device: C:\Backup\FullDBList_20250402_001.cbk // <-- バックアップファイルパス This backup volume was created by: IRIS for Windows (x86-64) 2024.1 The volume label contains: Volume number 1 Volume backup APR 2 2025 09:50AM Full Previous backup DEC 23 2024 12:21PM Full Last FULL backup DEC 23 2024 12:21PM Description Full backup of all databases that are in the backup database list. Buffer Count 0 Mirror name TESTMIRROR Failover Member MACHINEA Is this the backup you want to start restoring? Yes => // <-- <Enter> Restoring a mirror backup but this system is not a mirror member For each database included in the backup file, you can: -- press RETURN to restore it to its original directory; -- type X, then press RETURN to skip it and not restore it at all. -- type a different directory name. It will be restored to the directory you specify. (If you specify a directory that already contains a database, the data it contains will be lost). c:\intersystems\iris\mgr\mirrordata\ (:mirror:TESTMIRROR:MIRRORDATA) => // <-- 同じで良ければ <Enter> Directory c:\intersystems\iris\mgr\mirrordata\ does not contain a database or it can't be accessed. Do you want to create this database? Yes => // <-- <Enter> IRIS.datがないときは作成する Do you want to change this list of directories? No => // <-- <Enter> Restore will overwrite the data in the old database. Confirm Restore? No => y // <-- y+<Enter> ***Restoring c:\intersystems\iris\mgr\mirrordata\ at 10:22:10 84 blocks restored in 0.0 seconds for this pass, 84 total restored. ***Restoring c:\intersystems\iris\mgr\mirrordata\ at 10:22:10 2 blocks restored in 0.0 seconds for this pass, 86 total restored. ***Restoring c:\intersystems\iris\mgr\mirrordata\ at 10:22:10 2 blocks restored in 0.0 seconds for this pass, 88 total restored. Specify input file for volume 1 of backup following APR 2 2025 09:50AM (Type STOP to exit) Device: STOP <-- STOP+<Enter> Do you have any more backups to restore? Yes => N // <-- 他になければ N+<Enter> Mounting c:\intersystems\iris\mgr\mirrordata\ which is a mirrored DB c:\intersystems\iris\mgr\mirrordata\ ... (Mounted) There are mirrored DBs restored, please make sure the mirror journal files are copied to a specific directory in order to let system restore the journal records. Please enter the directory contains the mirror journal files: <C:\InterSystems\IRIS\mgr\journal\>? // <-- 特になければ <Enter> *** WARNING **** Failed to restore the journal records for the mirrored DBs // バックアップからリストアした後、さらに現時点のDBまでミラージャーナルファイルを使用してキャッチアップするかどうかの選択 // バックアップ時点までで良ければ、そのまま<Enter>するとディレクトリ内にリストア対象のミラージャーナルがないため、上記Warningが出てリストアは終了する %SYS> 2.データベースファイルのミラー属性を削除する ミラー環境で取得したバックアップを、非ミラー環境にリストアすると、そのままではDB書き込みができません。これは、リストアされたデータベースは、読み取り専用でマウントされるためです。(ミラーデータベースについては、別ミラー環境やミラー構成でない環境にリストアすると読み取り専用になります)この為、リストア完了後に以下の操作にてデータベースファイルのミラー属性を削除する必要があります。 手順は、以下のようになります。 %SYS>do ^MIRROR This instance is not initialized as a mirror member 1) List mirrored databases 2) Remove one or more mirrored databases 3) Create a Mirror 4) Join Mirror as Failover Member // ミラーが有効になっている場合、この設定が表示されます 5) Join Mirror as Async Member  // ミラーが有効になっている場合、この設定が表示されます Option? 2 // Mirror DBからMirror 属性を削除します There are xxx mirrored databases on this system Remove (O)ne mirrored database, (A)ll mirrored databases or (Q)uit? <quit> A // A + <Enter> すべてのMirror DBを対象とします // ミラーDBが1つしかないときは以下のようになります。Yでミラー属性を削除します // There is one mirrored database on this system // Remove it? <No> // Y + <Enter> Removing c:\intersystems\iris\mgr\mirrordata\ ...succeeded : Press <enter> to return to the main menu... // <Enter> で抜けます 1) List mirrored databases 2) Remove one or more mirrored databases 3) Enable Mirror Service : Option? %SYS> これで、リストアは完了です。 詳細は以下のドキュメントをご覧ください。ミラーリングされたデータベースのフルバックアップ・リストア
お知らせ
Yoichi Miyashita · 2021年6月18日

勧告: 非推奨および廃止されたテクノロジーと機能について

InterSystems は、より新しく優れたオプションが利用可能になったときに従来のテクノロジーの開発を中止することがあります。ただし、それら機能は最小サポートバージョン以後の製品であれば他の機能と同等にサポートします。 非推奨とは、InterSystems が現在積極的に開発を行っておらず、より優れたオプションが存在する機能またはテクノロジーを意味します。非推奨の機能やテクノロジーを使用されているお客様はそれらを使用しないように計画していただく必要がございます。InterSystems は非推奨の製品機能をサポートするためのスタッフの専門知識を維持しております。例: Zen, Zenレポート, Cache Server Pages (CSP) 廃止されたとはその機能またはテクノロジーが既存アプリケーションであっても今後利用できなくなることを意味します。InterSystems はそのような技術を使用し続けることがお客様のリスクであると考えます。理由には以下が挙げられますが、これらに限定するものではありません。 使用するのが少数のお客様に限られる 現在のテクノロジーやセキュリティ対策と互換性がなくなる 現在の製品実装との非互換性によりアプリケーションのメンテナンスが困難である サードパーティの廃止された機能に依存している 例: DCP (Distributed Cache Protocol; ECPにより置き換え), WebLink, Cache Direct (Visual M/VISM)