検索

クリアフィルター
記事
Mihoko Iijima · 2021年3月9日

アプリケーションエラー(^ERRORS)をコマンドで取得する方法

これは InterSystems FAQ サイトの記事です。 SYS.ApplicationError クラスの ErrorList クエリを使用します。 注意1:%SYS ネームスペースで実行します。 注意2:ストアド化していないユーティリティのため %SQL.Statement ではなく %ResultSet クラスを利用します。 コマンド実行例は以下の通りです。 USER>set $namespace="%SYS" //または zn "%SYS" %SYS>set rset=##class(%ResultSet).%New() %SYS>set rset.ClassName="SYS.ApplicationError" %SYS>set rset.QueryName="ErrorList" // クエリの第1引数はネームスペース名、第2引数は日付を指定します(形式:MM/DD/YYYY) %SYS>do rset.Execute("USER","08/17/2020") // 画面に結果を表示させる場合は %Display()メソッドを実行します。 %SYS>do rset.%Display() Error # Error message Time Process DisplayPID Username Code line 1 <DIVIDE> 02:43:10 2536 2536 irisowner 1 Rows(s) Affected %SYS>do rset.Close() 行移動しながら、SELECT の 列の値を取得する方法は以下の通りです。 行移動には Next() メソッドを使用します(行が存在すると 1 を返します)。 列の取得には Get("列名") を使用します。列名詳細については、クラスドキュメントから ErrorList クエリの説明文をご参照ください。ErrorListクエリの列名について %SYS>do rset.Execute("USER","08/17/2020") %SYS>while rset.Next() { write rset.Get("Error #"),"-",rset.Get("Error message"),"-",rset.Get("Time"),"-",rset.Get("Code line"),!} 1-<DIVIDE>-02:43:10- ターミナルで表示する場合は、^%ER ルーチンも利用できます。 参照したいネームスペースに移動した状態で以下実行します(例は USER ネームスペースで実行しています)。下線付き緑色の太字は入力箇所です。 USER>do ^%ER For Date: ?L Thu 09/17/2020 (T) 2 Errors Mon 09/07/2020 (T-10) 3 Errors Mon 08/31/2020 (T-17) 1 Error Mon 08/24/2020 (T-24) 1 Error For Date: 09/17/2020 17 Sep 2020 2 Errors Error: ?L 1. " *a" at 9:05 am. $I=|TRM|:|13484 ($X=0 $Y=15) $J=13484 $ZA=0 $ZB=$c(13) $ZS=262144 ($S=268271680) 2. "^%ETN" at 9:05 am. $I=|TRM|:|13484 ($X=0 $Y=17) $J=13484 $ZA=0 $ZB=$c(13) $ZS=262144 ($S=268263368) %ETN ;%STACK-related error log Error: 1 1. " *a" at 9:05 am. $I=|TRM|:|13484 ($X=0 $Y=15) $J=13484 $ZA=0 $ZB=$c(13) $ZS=262144 ($S=268271680) Variable: Error: For Date: USER> For Date: には発生したエラー日を mm/dd/yyyy の形式で指定します。 Error: には、エラー番号を指定します。 表示を終了したい場合は、Enter を押して終了します。
記事
Hiroshi Sato · 2021年9月23日

タスクスケジュールを別環境にコピーする方法

これは InterSystems FAQ サイトの記事です。 タスクスケジュールを別環境にコピー(エクスポート/インポート)するには、以下の2つの方法があります。 個別にエクスポート/インポートする場合(管理ポータルで行う方法) 複数のタスクスケジュールをエクスポート/インポートする場合(%SYS.TaskSuperクラスを使用する方法) 1.個別にエクスポート/インポートする場合 管理ポータルから行うことが可能です。 個別のスケジュールを開くと、エクスポートボタンがあるので、そちらからエクスポートしてください。 インポートも同じく管理ポータルから行えます。 2.複数のタスクスケジュールをエクスポート/インポートする場合 タスクスケジュールのエクスポートには、%SYS.TaskSuper クラスの ExportTasks() メソッドをお使いいただけます。 実行例は以下のようになります。 %SYS>do ##class("%SYS.TaskSuper").ExportTasks($lb(1,2,3,4,5),"c:\temp\exportedTasks.xml") エクスポートするタスクID を $LB形式で指定します。複数指定する場合は、$lb(1,2,3,4,5) のようにカンマ区切りで指定します。 タスクIDはシステム管理ポータルシステムオペレーション > タスクマネージャ > タスクスケジュールのIDカラムになります。 インポートは以下のように行います。 USER>do ##class(%SYS.TaskSuper).ImportTasks("c:\temp\exportedTasks.xml")TEST imported. 尚、インポートは管理ポータルから行うことも可能です。 タスクマネージャの電子メール設定は、インポートでは移行できませんので、タスクのインポートが完了したら、ターゲット・サーバでタスク・マネージャの電子メール設定を構成する必要があります。 管理ポータルで、[システム管理] > [構成] > [追加設定] > [タスクマネージャEメール]に移動して、これを行うことができます。 ソースサーバの同じ画面から各フィールドをコピーして貼り付けます。
記事
Hiroshi Sato · 2021年9月17日

スタジオ、ターミナル、管理ポータルのライセンス消費ユーザをまとめる方法

これは InterSystems FAQ サイトの記事です。※ IRIS Data Platformのサーバーライセンス(プロセッサーコア単位の課金)では以下の内容は適用されませんので、ご注意お願いします。 2012.1以降のバージョンより、ライセンス管理が厳格化されたために、管理ポータルでもライセンスを消費するようになりました。 デフォルトでは、管理ポータルは独立したID(CSPセッション)単位でライセンスを消費するために同一ユーザが複数ライセンスを消費するようになります。 スタジオ、ターミナル、管理ポータル全ての消費ライセンスをに同一ユーザにまとめる方法は以下になります。 (1) スタジオ、ターミナル、管理ポータルに共通ユーザでログイン 管理ポータル: [システム管理] > [セキュリティ] > [サービス] 以下3つを「パスワード」認証のみに変更 %Service_Bindings%Service_Telnet%Service_Console 管理ポータル: [システム管理] > [セキュリティ] > [アプリケーション] > [ウェブ・アプリケーション] 以下6つを「パスワード」認証のみに変更 /csp/sys/csp/sys/bi/csp/sys/exp/csp/sys/mgr/csp/sys/op/csp/sys/sec (2) %ZSTARTルーチンのSYSTEMラベルを作成し以下を実行 SYSTEM set dummy=$SYSTEM.License.UserNameLicensing(1) quit ターミナルから set dummy=$SYSTEM.License.UserNameLicensing(1) を実行すると、ライセンスは <ユーザ名@IP> でまとまります。 (1)のあとに、上記コマンドを実行することで、次のログインより消費ライセンスを同一ユーザにまとめることが可能になります。 ただし、こちらの設定はインスタンスを停止するまで有効ですが、再起動するとクリアされてしまいます。 再起動ごとにコマンドを実行する手間を省くためには、(2)の SYSTEM^%ZSTART にて実行する方法を使用します。 ※この設定は管理ポータルで行うことはできません。 詳細については、以下ドキュメントをご参照ください。 ライセンスの消費を<ユーザ名@IP>に変更する方法について【IRIS】 ライセンスの消費を<ユーザ名@IP>に変更する方法について
記事
Megumi Kakechi · 2021年6月30日

管理ポータルのライセンス消費に関する仕様変更について(2012.1以降)

これは InterSystems FAQ サイトの記事です。 2012.1以降管理ポータルの使用もライセンスを消費する様にシステムを変更しました。 これはインターシステムズが定める製品のライセンスポリシーとシステムの動作をできるだけ合わせる一連の措置の1つとして行われました。 この変更に伴いライセンス使用に関わる思わぬトラブルが発生する可能性がありますので注意が必要です。 特にライセンスの解放が管理ポータルページの操作法によって異なるため、その違いを十分認識して対処する必要があります。 管理ポータルのライセンスの解放はページの切断の仕方により以下の様に変わります。 a) ポータルを開き何らかの操作を行った後にログアウトを行うとライセンスは即時解放されます。 b) ポータルのページを開いた後、他に何も操作せずにログアウトを行うと一定の待ち時間の後にライセンスの解放が行われます。 この待ち時間はライセンスの意図的な規約違反を防ぐための措置であるため、設定等で変更できないようになっています。 c) ポータルを開き、ブラウザのXボタンやAlt+F4等のショートカットでページを強制的に閉じた場合は、デフォルトでは8時間後にライセンスの解放が行われます。 ライセンスの解放の時間は以下の操作で変更することができます。 管理ポータル: [システム管理] > [セキュリティ] > [アプリケーション] > [ウェブ・アプリケーション] で /csp/sys/ 以下の全てのアプリケーションを編集してセッションタイムアウトをデフォルトの 28800 秒から変更します。 また、以下のドキュメントもあわせてご参照ください。 CSP ライセンス使用
記事
Megumi Kakechi · 2021年9月3日

文字列の中から数値だけを抜き出す方法

これは InterSystems FAQ サイトの記事です。 $ZSTRIPコマンドは、指定された文字列から文字のタイプと文字を削除します。このコマンドを使用することで文字列から数値部分のみを抽出することが可能です。 $ZSTRIP(string,action,remchar,keepchar) 第1引数(string) :対象文字列第2引数(action) :string から削除する対象。アクションコードとマスクコードで構成。第3引数(remchar) :削除する特定の文字を指定。第2引数のマスクコードに含まれない文字も指定可能。【オプション】第4引数(keepchar):削除しない特定の文字を指定。【オプション】 以下はその例です。 // 第2引数:アクションコード "*" を指定しすべて削除(E)// 第4引数:.0123456789- を削除しないUSER>write $zstrip("ABC-0.100g","*E",,".0123456789-")-0.100 ★マスクコード---------------------------------------------------- E すべてを削除しますA すべてのアルファベット文字を削除しますP 空白スペースと、句読記号文字を削除しますC 制御文字 (0-31、127-159) を削除しますN 数字を削除しますL アルファベットの小文字を削除しますU アルファベットの大文字を削除しますW 空白を削除します ($C(9)、$C(32)、$C(160))---------------------------------------------------- ★アクションコード---------------------------------------------------- * マスク・コード (複数可) に一致するすべての文字を削除します< マスク・コード (複数可) に一致する先頭の文字を削除します> マスク・コード (複数可) に一致する末尾の文字を削除します<> マスク・コード (複数可) に一致する先頭および末尾の文字を削除します= マスク・コード (複数可) に一致する繰り返し文字を削除します<=> マスク・コード (複数可) に一致する先頭、末尾、および繰り返し文字を削除します---------------------------------------------------- $ZSTRIPの詳しい使用方法については、以下のドキュメントをご覧ください。$ZSTRIPについて 以下の関連トピックもあわせてご覧ください。文字列の前後の半角スペース及び全角スペースを取り除く方法
記事
Tomohiro Iwamoto · 2022年7月11日

oAuth2認証対応のIMAP,SMTPアダプタ

オリジナルの[「InterSystems IRIS で Python を使って IMAPクライアントを実装する」](https://jp.community.intersystems.com/node/512311)は、埋め込みPythonを使用してIMAPインバウンドアダプタを実装されていますが、最近メールプロバイダがあいついでoAuth2認証しか受け付けなくなってきているので、その対応をしてみました。 本稿の[GitHub](https://github.com/IRISMeister/iris-imap-inbound-adapter-demo.git)はこちらです。 # 変更点 GMAILに対してメールの送受信を可能とするためにオリジナルに以下の修正を施しています。 1. IMAP(Python版)インバウンドアダプタにoAuth2認証およびRefreshTokenによるAccessTokenの更新を追加 2. oAuth2認証およびRefreshTokenによるAccessTokenの更新機能を持つSMTPアウトバウンドアダプタを新規作成 3. IMAPにバイナリの添付ファイルの処理を追加 4. メッセージ削除に、推奨APIであるclient.uid("STORE")を使用するように変更 5. ClientIdなど、センシティブな情報をコンテナ起動時に動的に適用するように変更 6. 日本語使用時の文字化けに対処 > 3.添付ファイルが存在する場合、追加設定/ファイル・パスで指定したファイルパス(既定値は/var/tmp/)上に保存します。 > 5.の実現は、プロダクション([IMAPPyProduction.cls](src/dc/demo/imap/python/IMAPPyProduction.cls))起動の際に実行されるコールバックOnStart()で、準備したjsonファイルの取り込みを行っています。 > zpmパッケージの内容はオリジナルのままです。 # 事前準備 実行には、以下のパラメータの準備が必要です。 |パラメータ|取得方法| |:---|:---| |GMAILアカウント|認証対象となるGMAILアカウント。xxxx@gmail.com等| |ClientID|GCPで発行されるclient_id| |ClientSecret|GCPで発行されるclient_secret| |TokenEndPoint|GCPで発行されるtoken_uri| |RefreshToken|下記のoauth2.py等を使用して取得| これらの値を[gmail_client_secret.template](gmail_client_secret.template)を参考に、gmail_client_secret.jsonに設定してください。 ClientID, ClientSecret, TokenEndPointは、GCPのコンソールで、デスクトップクライアント用にoAuth2を発行した際にダウンロードできるJSONファイルから取得すると便利です。 ``` $ cat client_secret_xxxxxx.apps.googleusercontent.com.json | jq { "installed": { "client_id": "xxxxx.apps.googleusercontent.com",
記事
Megumi Kakechi · 2022年10月26日

IRIS が起動時に必要とするポート

これは InterSystems FAQ サイトの記事です。 IRISが起動時に必要とするポートは、次のとおりです。(ポート番号はデフォルト設定の場合です。)1. 1972 : IRIS のスーパーサーバポート(管理ポータルで変更可能) IRIS 起動のために、必須のポートです。 このポートが使用できないと IRIS は正常に起動しません。 ※IRIS 2019.2以前のバージョンでは、スーパーサーバーポートは 51773 でした。 2. 4002 : IRIS ライセンスサーバポート(管理ポータルで変更可能) IRIS がライセンスサーバになる場合、必要なポートです。 このポートが使用できないと、正しいライセンス情報が取得できません。 ライセンスクライアントについては、このポートは必須ではありません。 ※リモートライセンスサーバがファイアウォールで保護されている場合、UDP トラフィックに対してライセンスサーバポートが開かれている必要があります。   ライセンスサーバの構成について 3. 23 :IRIS Telnetポート(管理ポータルで変更可能) IRIS サーバが Windows で、かつ、クライアントから IRIS ターミナルによる操作を行う場合にのみ、必要なポートです。 4. 52773 : 管理用Webサーバポート(管理ポータルで変更可能) IRIS 管理ポータル用に自動起動する、Webサーバポートです。 ※ユーザアプリで使用する場合は、 ApacheやIISなどのウェブサーバで使用されるポート 80 (既定)となります。 5. 2188 : ISCAgentポート(管理ポータルで変更可能) ミラーリングを使用するときにのみ、必要なポートです。 IRIS のスーパーサーバポートについては、IANAのPort番号一覧で明記されております(Cacheでの登録になります)。 intersys-cache 1972/tcp Cacheintersys-cache 1972/udp Cache 以下ページをご参照ください。 iana.orgのページ ※2.IRIS ライセンスサーバポート を修正しました(修正前:4001、修正後:4002)IRISでは、ライセンスサーバの既定のポート番号は「4002」になります。Cacheの場合は「4001」でした。
記事
Megumi Kakechi · 2023年2月2日

並列クエリについて(%PARALLEL)

これは InterSystems FAQ サイトの記事です。 クエリパフォーマンスを最適化するための方法の一つとして、クエリ単位またはシステム全体でクエリの並列処理を使用することができます(標準機能)。 こちらは、特定のクエリに対しマルチプロセッサシステムでクエリの実行をプロセッサ間で分割して行うものです。並列処理の効果が得られる可能性がある場合のみ、クエリオプティマイザは並列処理を実行します。並列処理の対象はSELECT文のみとなります。 なお、並列プロセスの数は、CPUの数に応じて自動で調整するため、数の指定は行えません。現在のシステムのプロセッサ数は以下のコマンドで確認することができます。 USER>write $SYSTEM.Util.NumberOfCPUs() 8 以前は、クエリに %PARALLEL キーワードを付与することで並列処理が有効となっておりましたが、IRIS2019.1以降のバージョンより既定で「常時有効」となりました。 管理ポータル: システム管理 > 構成 > SQLとオブジェクトの設定 > SQL 単一プロセス内でクエリを実行 ※チェックを入れると並列処理は行わない(既定はチェックなし) クエリ単位で並列処理を行わないようにする場合は、%NOPARALLEL キーワードを指定します。 例: SELECT * FROM %NOPARALLEL Sample.Person WHERE ... 【注意】%PARALLEL を指定すると、クエリによってはパフォーマンスが低下する可能性があります。たとえば、複数の同時ユーザがいるシステム上で %PARALLEL を指定してクエリを実行すると、全体的なパフォーマンスが低下する場合があります。その場合は、%NOPARALLELで個別に並列処理を行わないようにするか、システム全体で「単一プロセス内でクエリを実行」するように設定します。 詳細は以下のドキュメントをご覧ください。クエリの並列処理
記事
Mihoko Iijima · 2023年3月9日

機械学習を試せるチュートリアル:IntegratedML

開発者の皆さん、こんにちは! 前の記事では、開発者向け情報を集めた「Developer Hub」をご紹介しましたが、この記事では Developer Hub のチュートリアルの中から「機械学習」をテーマとしたチュートリアル:IntegratedML についてご紹介します InterSystems IRISには、機械学習を行うために必要なプロセスのいくつかを自動化するAutoMLの機能が組み込まれていて、機能名として「IntegratedML」と呼んでいます。機能概要については、末尾のビデオをご参照さい。 チュートリアルを始めるための準備は不要で、 ボタンをクリックするだけでチュートリアルを開始できます。 機械学習のテーマは「再入院のリスクの予測」で、1万2千件のデータを利用してモデルを学習させています。 実際に使用するデータはCSVで用意され、こちらに公開されています。 実際のモデル作成、学習、検証、予測に使う構文はSQL文に似ていて、以下の構文を使用しています。 <モデル作成時の構文例> CREATE MODEL ReadmissionModel PREDICTING (MxWillReAdmit) FROM Readmission <学習時の構文例> 全体で1万4千件程度のレコードがあるので、先頭1万2千件を学習用データ、残りを検証用データに使用しています。 学習用データの準備 CREATE VIEW ReadmissionTraining AS SELECT * FROM Readmission where ID<=12000 学習時の構文 TRAIN MODEL ReadmissionModel FROM ReadmissionTraining <検証時の構文> 検証用データの準備 CREATE VIEW ReadmissionValidation AS SELECT * FROM Readmission where ID>12000 検証時の構文 VALIDATE MODEL ReadmissionModel FROM ReadmissionValidation <予測時の構文> SELECT PREDICT(ReadmissionModel) As PredictedReadmission, MxWillReAdmit, * FROM Readmission WHERE ID=1 <予測結果の確率を算出する構文> SELECT PROBABILITY(ReadmissionModel) As PredictedReadmission, * FROM Readmission WHERE ID=1 それぞれの構文は、IRISとCSVがあればどこでも実行できますが、お手元の準備無しにすぐに始めることのできる IntegratedMLチュートリアル をぜひご利用ください! IntegratedMLの機能概要については以下のビデオもぜひご参照ください。 【目次】 0:00 機械学習の概要と課題、AutoMLについて 8:30 IntegratedMLについて 13:20 IntegratedMLの文法 18:32 デモ 26:50 まとめ
記事
Tomoko Furuzono · 2023年4月11日

監査データベースの閲覧のみを許可する

これは、InterSystems FAQサイトの記事です。管理ポータルの監査メニューを使用する場合、ユーザに監査データベースの閲覧のみを許可するということはできません。管理ポータルから監査データベースを閲覧する場合は、そのユーザに、・%Admin_Secure:U(監査以外にもセキュリティ関連の操作が可能となる)・%DB_IRISAUDIT:RW(監査データベースへの読み込み/書き込み権限)等のリソースへの権限が必要になりますが、これを与えることにより、監査データベースの閲覧以外の操作も可能となってしまいます。 監査データベースの閲覧のみを許可したい場合には、管理ポータルの監査メニューは使用せず、外部ツール等からSQLで監査テーブルを参照するようにします。このとき、ユーザに必要な権限は以下の通りです。※他の権限は与えないようにします。・IRISAUDITデータベースへのRW権限 ⇒ %DB_IRISAUDITロールの付与・%SYS.AuditテーブルへのSelect権限 1.新規ロールの作成必要な2つの権限のみを含むロールを作成します。 (1)新規作成システム管理>セキュリティ>[新規ロール作成]>名前入力>[保存]↓(2)作成したロールに%DB_IRISAUDITロールを割り当てるロールの定義編集>Assigned Toタブ>%DB_IRISAUDITを選択して[割り当てる] (3)作成したロールに%SYS.AuditテーブルへのSelect権限を付与するロールの定義編集>SQL Tablesタブ>「システムアイテムを含む」にチェック>[テーブル追加] ↓%SYS.Auditを選択して適用 2.ユーザに作成したロール(AuditCheck)を付与] ユーザ定義編集-RolesタブでAuditCheckを選択して[割り当てる] ユーザ設定が完了したら、このユーザで外部ツール等からログインし、SQLで必要な情報を取得します。(SQL実行例) SELECT UTCTimeStamp, Event, Username, TO_CHAR(%EXTERNAL Authentication) Authentication, Description, EventData, Namespace, CSPSessionIDFROM %SYS.AuditORDER BY UTCTimeStamp DESC ※Authenticationカラムは、特殊なデータタイプであるため、外部ツールからはそのまま参照できません。 上記のように変換して取得してください。(この制限は、以降のバージョンで改善される予定です。)
記事
Megumi Kakechi · 2020年9月30日

コンソールログに出力される [SYSTEM MONITOR] DBLatency... の警告について

これはInterSystems FAQ サイトの記事です。 DBLatency の Warning メッセージは、ヘルス・モニタプロセスが定期的にデータベースからのランダム読み取りが完了するまでに要した時間(ミリ秒)を計測していて、設定されている閾値(1000 msec)を超えた場合に出力されます。 mm/dd/yy-18:31:15:060 (2932) 1 [SYSTEM MONITOR] DBLatency(c:\xxx\) Warning: DBLatency = 1510 ( Warnvalue is 1000). 上記例では、C:\xxx\IRIS.DAT(または C:\xxx\CACHE.DAT)へのディスク読み取り I/O に 1510 msec かかったことを示していて、メッセージ出力時のディスク I/O 応答速度が遅いことが考えられます。 ディスク I/O 応答速度が遅い原因としては、ディスク I/O 負荷が高いことが考えられます。 大量のデータ登録や変更を行う処理が実施されていた。 弊社製品以外のソフト(アンチウイルスソフト、バックアップソフト)が動作していた。 弊社製品以外のアプリケーションによるディスク負荷など。 その他、RAID構成のメンバディスクで障害が発生している なども考えられます。 原因調査のためには、現象発生中の情報収集が必要となります。情報収集方法については、【FAQ】トラブル発生時、管理者が最初に行うべきことを教えてください をご覧ください。 なお、コンソールログのメッセージの深刻度ですが、0 は Information、1 は Warning、2 は Alert を示します。 ヘルスモニタでは、深刻度の数値を以下のように分けて出力しています。 【Alert の場合】ある期間のセンサの読み取り値が 3 回連続してセンサの最大値を上回った場合にアラート(深刻度 2 の通知)を生成 【Warning の場合】ある期間のセンサの読み取り値が 5 回連続してセンサの警告値を上回った場合にワーニング (深刻度 1 の通知)を生成 ヘルスモニタについて詳細は以下ドキュメントをご参照ください。ヘルスモニタについて【IRIS】Cachéヘルスモニタについて
記事
Mihoko Iijima · 2023年6月1日

ワークフローコンポーネントを使ってみよう!~使用手順解説~

開発者の皆さん、こんにちは! この記事では、システム連携の自動的な流れの中にユーザからの指示を介入できる「ワークフローコンポーネント」のサンプル でご紹介した内容を、お手元のIRIS、IRIS for Healthを利用して体験いただくための手順を解説します。 なお、ワークフローコンポーネントでどんなことができるのか?の概要説明については、ウェビナー(オンデマンド再生)をご参照ください。 A.事前準備 1) InterSystems IRIS または、IRIS for Healthのインストール環境をご用意ください。 まだインストール環境がない場合は、コミュニティエディション(コンテナ版かキット版)をご利用ください。 コンテナをご利用いただく場合は、InterSystemsコンテナレジストリにあるIRISご利用ください。(ページ使用方法は、InterSystemsコンテナレジストリ Webユーザインターフェースのお知らせ をご参照ください。) インストールキットをご利用いただく場合は、InterSystems IRIS/InterSystems IRIS for Health コミュニティエディションのダウンロード方法 をご参照ください。 インストール方法については、【はじめての InterSystems IRIS】セルフラーニングビデオ:基本その1:InterSystems IRIS Community Edition をインストールしてみよう! をご参照ください。 2) サンプルのダウンロード サンプル(https://github.com/Intersystems-jp/WorkFlow-DC)を git clone またはZipでダウンロードします。 ISJFoodsディレクトリ以下を使用します。 3) ネームスペース、データベースの用意(コミュニティエディションの場合は不要) コミュニティエディションをご利用の場合は、インストール時用意されるUSERネームスペースをご利用いただけますので準備不要です。 製品版をインストールされている場合は、任意のネームスペース、データベースの作成をお願いします。 ネームスペース、データベースの作成について詳しくは、【はじめての InterSystems IRIS】セルフラーニングビデオ:基本その2:InterSystems IRIS で開発をはじめよう! をご参照ください。 4) サンプルのインポート 2)でダウンロードしたサンプルの中から、ISJFoodsディレクトリ以下のクラス定義を 3)で確認したネームスペースにインポートします。 (コミュニティエディションの場合はUSERをご利用ください) インポート方法は、IDE(VSCode/スタジオ)または管理ポータルから行えます。4-1)~4-3) の中からお好みの方法を選択してインポートを行ってください。 IRIS接続時に使用するログインユーザは、SuperUserや_systemをご利用ください。 パスワードはインストール時に指定された文字列をご利用ください。インストール時にパスワードを指定されていない場合は、SYS(すべて大文字)をご利用ください。 4-1) VSCodeの場合 VSCodeでWorkFlow-DCディレクトリを開きます。IRISに接続後、ISJFoodsフォルダを右クリックし「Import and Compile」をクリックします。 VSCodeでIRISに接続する方法は、VSCode を使ってみよう! をご参照ください。 4-2) スタジオの場合 スタジオを起動し、接続先ネームスペースに切り替え、ISJFoods以下のサブディレクトリも含め、すべての *.clsをドラッグ&ドロップしてインポートします。 4-3) 管理ポータルの場合 管理ポータルを開きます。👉 http://localhost:52773/csp/sys/UtilHome.csp ※ポート番号はお使いの環境に合わせてご変更ください。 管理ポータル > [システムエクスプローラ] > [クラス] を開き、画面左側で使用するネームスペースを選択します(下図はUSERを選択しています) インポートボタンをクリックし、「ディレクトリ」を指定してインポートを選択し、ダウンロードしたサンプルのISJFoodsディレクトリを指定します。 インポートボタンをクリックすると、以下の画面が表示されます。 「バックグラウンドタスクを参照するには・・・」のリンクをクリックすると、コンパイルが正常終了しているかどうか確認できます。 5) ワークフロータスク用データ作成(POPメッセージ候補の作成) ワークフローユーザポータルで審査ができるように、POPメッセージ候補を登録するテーブルに予め4件データを登録します。 ISJFoods.Utilsクラスの CreateData() メソッドを実行します。 WindowsにIRISをインストールされている場合は、タスクバー上のIRISランチャー をクリックし、ターミナルを選択します。 Windows以外でお試しいただいてる場合は、iris session iris コマンドでIRISにログインしてください。 ※ iris session インスタンス名 (インスタンス名=インストール時に指定した名称) iris session iris ログイン後、対象ネームスペースに移動します。 ※コミュニティエディションを利用されている場合はUSERネームスペースを使用します。ログイン時のデフォルトネームスペースがUSERネームスペースのため、移動は不要です。 set $namespace="TEST" //TESTネームスペースに移動する例 メソッドを実行します。 do ##class(ISJFoods.Utils).CreateData() データの確認には、管理ポータルのSQLメニューを利用します。 管理ポータルを開きます。👉 http://localhost:52773/csp/sys/UtilHome.csp [システムエクスプローラ] > [SQL] > ネームスペース選択 (例:USER)に移動し、「クエリ実行」タブに以下SELECT文を入力し「実行」ボタンをクリックします。 商品情報用テーブル​​​​ select * from ISJFoods_Tbl.Product POPメッセージ候補テーブル select * from ISJFoods_Tbl.POP ビジネス・サービスで一定間隔にレコードを抽出するときに使用しているSELECT文は以下の通りです。 SELECT Product->PID,Product->ProductName,POPID,Status,Message,TO_CHAR(StartDate,'YYYY-MM-DD') As StartDate, Period,RejectedReason, Done FROM ISJFoods_Tbl.POP 暗黙結合(矢印構文)を使用しています。詳細はドキュメントをご参照ください。 6) テーブルへの接続に使用するDSNの設定 サンプルの中では、5)で用意したテーブルに対して、ODBC/JDBC接続を利用して定期的にSELECT文を実行します。 サンプルコードの設定では、DSN名「Test」で登録していますので、ODBC/JDBC接続用DSN名を環境にご用意ください。 ODBC接続の場合(Windowsの例) ODBCデータソースアドミニストレーター(64bit)で「システムDSN」として作成します。 ドライバ名は「InterSystems IRIS ODBC35」を選択して、DSN名「Test」で作成します。​​​ IPアドレス、ポート、ネームスペース、ユーザ名、パスワード を接続対象IRISに合わせて記入します。 「テスト接続」ボタンをクリックし、接続が成功することを確認してから、OKボタンをクリックして画面を閉じてください。 JDBC接続の場合 ※サポートしているバージョンについて最新はこちらのドキュメントをご参照ください。 管理ポータルを開きます。👉 http://localhost:52773/csp/sys/UtilHome.csp [システム管理] > [構成] > [接続性] > [SQLゲートウェイ接続] > 新規接続作成 をクリックし、接続名に「Test」と設定します。 ドライバ名は com.intersystems.jdbc.IRISDriver URLは、jdbc:IRIS://localhost:1972/USER (ポート番号、ネームスペース名は環境に合わせて変更してください) クラスパスは、.:usr/irissys/dev/java/lib/1.8/intersystems-jdbc-3.7.1.jar (JARファイルは、IRISインストールディレクトリ/dev/java/lib/ 以下にあります) ※インストール環境のポート番号(上記設定では「スーパーサーバポート」)を確認する場合は管理ポータルの「概要」ページをご参照ください。 設定が完了したら「テスト接続」ボタンをクリックして接続を確認します。 成功したら「保存」ボタンをクリックして設定を保存します。 以上で事前準備は完了です! B.ワークフローコンポーネントを使用するための設定 次はいよいよ、ワークフローコンポーネントを使用するための設定を行っていきます。以下の手順で進めていきます。 ワークフロータスクを処理するユーザを作成する ワークフローロールを作成する ビジネス・オペレーションを追加する ビジネス・プロセスからワークフローオペレーションを呼び出す 3、4については、サンプルクラスのインポートで準備済ですが、コードを参照しながら流れをご確認いただきます。 1. ワークフロータスクを処理するユーザを作成する ワークフロータスクを処理するユーザは、IRISのユーザポータルにログインする必要があるため、IRIS内ユーザとして登録が必要です。 この記事の中では、ワークフロータスクの処理だけが行えるユーザとして登録していきます。(管理ポータルにログインできないけれども、ワークフロータスクを処理するため、ユーザポータルにはアクセスできるユーザを作成していきます。) IRIS内ユーザは、ロールを付与することで管理ポータル内メニューやデータベース、ターミナルへのアクセス許可を得ます。 ロールにはリソース(保護対象:データベース、接続経路であるサービス、ターミナル、スタジオ、管理ポータルメニューなど)に対する許可の組み合わせを登録できます。 ロールは自分で作成することも、インストール時用意される事前定義のロールを使用することもできます。​ 手順は以下の通りです。 1-1) ユーザポータルだけにアクセスできるロールを作成する 1-2) ユーザを作成し、1-1)で作成したロールのメンバーに設定する。 1-3) 作成したユーザを「ワークフローユーザ」として設定する 1-1) ユーザポータルだけにアクセスできるロールを作成する ロール名は任意に決定できますが、この手順では、WorkFlowSystemRole の名称で作成し、ユーザポータルのUSE許可を持つロールとして作成します。 管理ポータルを開きます。👉 http://localhost:52773/csp/sys/UtilHome.csp [システム管理] > [セキュリティ] > [ロール] > [新規ロール作成]ボタンをクリックします。 「名前」に WorkFlowSystemRole を設定し、「保存」ボタンをクリックします。(一度名前を付けて保存した後、リソースに対する許可を設定します) 保存ボタンクリック後、リソースの追加が行えます。 追加ボタンをクリックし、表示される子画面の中から「%DeepSee_Portal」を選択し、OKボタンをクリックします。 デフォルトでUSE許可の「U」が設定されます。 これでロールの作成は完了です。 1-2) ユーザを作成し、1-1)で作成したロールのメンバーに設定する。 管理ポータル > [システム管理] > [セキュリティ] > [ユーザ] > [新規ユーザ作成] ボタンをクリックします。 サンプルコードでは、ユーザ:ManagerA に対してワークフロータスクを依頼するため、ManagerAは必須で作成してください。 「名前」に ManagerA を設定します。 「パスワード」と「パスワード(再入力)」に、お好みのパスワードを指定してください。 名前、パスワード、パスワード(再入力)の設定が完了したら「保存」ボタンをクリックします。 保存後、「ロール」タブが表示されます。 ロールタブに移動し、「利用可能」から作成したロール:WorkFlowSystemRole を選択し、「選択済み」に移します。 「付与する」ボタンをクリックすることで、ManagerAに WorkFlowSystemRole ロールが付与されます。 同様の手順で、ユーザ:ManagerBを作成します。 WorkFlowSystemRoleのメンバにManagerAとManagerBが所属していれば、設定完了です。 1-3) 作成したユーザを「ワークフローユーザ」として設定する 作成したManagerA、ManagerBをワークフローユーザとして設定します。 管理ポータル > [Interoperability] > 使用するネームスペース選択 > [管理] > [ワークフロー] > [ユーザ] ※コミュニティエディションを利用している場合は、USERネームスペースを指定します。製品版を使用している場合は、用意したネームスペースを選択します。 画面右の「名前」のプルダウンから、ManagerAを選択します。「アクティブ?」のチェックボックスにチェックを入れ、保存ボタンをクリックします。 同様に、ManagerBも設定します。 2. ワークフローロールを作成する 1で作成したワークフローユーザをメンバに持つワークフローロールを作成します。 この名称は、ワークフロービジネス・オペレーションのコンポーネント登録名として利用する名前になります。サンプルコードでは「POP審査ワークフロー」としているので、この名称でワークフローロールを作成します。 管理ポータル > [Interoperability] > ネームスペース選択 > 管理 > ワークフロー > ワークフロー・ロール ※コミュニティエディションを利用している場合は、ネームスペースはUSERを選択してください。それ以外の環境はサンプルコードをインポートされたネームスペースを指定してください。 まずは、「名前」に「POP審査ワークフロー」を設定し「保存」ボタンをクリックします。 保存ボタンクリック後、ロール名が画面中央に表示されます。 画面中央のロール名をクリックし、画面右の「追加」ボタンから、ワークフローユーザを追加します。 ManagerAとManagerBをメンバとして設定します。 設定後の確認で、「ユーザ」ボタンをクリックすると、ワークフローロールのメンバが表示されます。 3. ビジネス・オペレーションを追加する サンプルコードのインポートでプロダクションにオペレーションが追加されています。 どのように追加したか、プロダクション構成画面を参照しながら確認します。 管理ポータル > [Interoperability] > [構成する] > [プロダクション] に移動します。「開く」のボタンをクリックし、ISJFoods > Production を選択します。 開いた画面の「開始する」ボタンをクリックします。 開始中の画面が表示され、「完了しました」が表示されたことを確認しOKボタンをクリックすると、以下の表示に変わります。(〇の色が濃い緑色に変わります) ※もし、〇 の色が赤くなっている場合は、データベースへの接続に失敗していることなどが考えられます。お困りのことがありましたら、返信欄でお知らせください。 今回使用しているワークフロービジネス・オペレーションは、1つ前の手順で作成したワークフローロール名「POP審査ワークフロー」と一致させる規則があります。 「POP審査ワークフロー」の字の部分をクリックすると右画面に設定画面が表示されます。 ワークフロービジネス・オペレーションは予め用意されたクラス:EnsLib.WorkFlow.Operation を使用して登録されています。 (画面右の「設定」タブにある「情報を提供する設定」を展開すると「クラス名」に使用しているクラス名が表示されます) これで、ワークフローロールのメンバにタスクを渡す準備が整いました。 後は、ビジネス・プロセスからワークフロービジネス・オペレーションを呼び出すだけとなりました。 4.ビジネス・プロセスからワークフローオペレーションを呼び出す ワークフロービジネス・オペレーションを呼び出すビジネス・プロセスの定義を確認します。 開いているプロダクション構成画面にある「POP審査」がサンプルで使用しているビジネス・プロセスです。コードを開くには、「POP審査」の字の部分をクリックし、「設定」タブの「情報を提供する設定」を展開し、「クラス名」に欄の右横にある🔍のアイコンをクリックします。 ビジネス・プロセスエディタが開き、定義を確認できます。 「判断ワークフロー呼び出し」の箱(アクティビティ)がワークフロービジネス・オペレーションの呼び出しを設定しているアクティビティです。 アクティビティをクリックすると、画面右側に設定内容が表示されます。 画面右の設定欄で「ターゲット」に設定されているのは、呼び出し先となるワークフロービジネス・オペレーションの名称「POP審査ワークフロー」です。 「要求メッセージ・クラス」に設定されているのは、ワークフロービジネス・オペレーションに渡すメッセージクラスでEnsLib.Workflow.TaskRequestが設定されています。 その下の「要求アクション」には、ユーザが審査する際使用するユーザポータルに表示させるボタン表示名(callrequest.%Actionsの設定)や、件名(callrequest.%Subject)、依頼するユーザ名(callrequest.%UserName)が設定されていることが確認できます。 この後、ユーザからの指示が来るまで、「ワークフローの応答待機」のところでフローは待機します。 ユーザからの指示が来た場合、「応答アクション」にある応答メッセージでユーザが押したボタンの情報など、取得できます。 ユーザからの回答は、応答メッセージ:EnsLib.Workflow.TaskResponse に設定され、押したボタンの情報は callresponse.%Actionsで確認できます。 以上で、設定は完了です。 C.ワークフローユーザによるタスクの審査 次は、いよいよ、ワークフローユーザによるタスクの審査を行ってみます。以下の手順で確認していきましょう。 処理対象POPメッセージのトレースを開く ユーザポータルにログインし、ワークフロータスクを処理する タスク処理後のメッセージのトレースを確認する ​​​​ 1. 処理対象POPメッセージのトレースを開く 管理ポータル > [Interoperability] > [構成する] > [プロダクション] に移動します。 ビジネス・サービス「POPメッセージSQL抽出」は、定期的にPOPメッセージ候補が格納されたテーブルに対してSELECT文を実施しています。 画面左下の「POPメッセージ抽出​​​​」の字の部分をクリックし、「設定」タブを参照します。 「Data」を展開し「クエリ」欄を確認します。POPメッセージ候補が格納されているテーブルの未処理(Done=0)のレコードを抽出するためのSELECT文が登録されています。 select StartDate,Period,Message,Product,POPID,Product,Product->PID As PID from ISJFoods_Tbl.POP WHERE Done=0 また、「削除クエリ」欄では、以下UPDATE文が登録されています。 UPDATE ISJFoods_Tbl.POP SET Done=1 WHERE POPID=? 「削除クエリ」は、「処理したレコードを処理対象から削除する」と考えていただくとわかりやすいと思います。 サンプルの設定では、SELECT対象テーブルのDoneカラムが0のレコードを処理対象とし、処理済レコードはDoneを1に変更することで、何度も同じレコードを処理対象としないように設定しています。 また、UPDATE文の条件となる値は、「キー・フィールド名」の指定したPOPIDの値を利用するように設定しています。 なお、このビジネス・サービスは EnsLib.SQL.Service.GenericService クラスを使用しています(IRISインストール時に用意されるクラスを利用しています)。このクラスを利用して登録したビジネス・サービスは、取得できたレコードをJSON文字としてメッセージに設定し、次のコンポーネントに送信します。(詳細はメッセージのトレースを参照すると確認できます)​​​ ということで、メッセージを確認してみましょう。 画面左下の「POPメッセージ抽出​​​​」の字の部分をクリックします。画面向かって右側で「メッセージ」タブをクリックすると、4件のメッセージが送信されていることが確認できます。 ヘッダ列にある番号をクリックするとトレース画面が開きます。以下の画面は一番上にある(8)のメッセージを選択した状態です。 [1] の箱を選択し、右画面の「コンテンツ」タブを選択すると送信されているメッセージの情報を確認できます。 取得できたレコードがJSON文字として送信されていることが確認できます。 [2] の箱をクリックします。[2]は、ワークフロービジネス・オペレーションに送付している情報を確認できます。ワークフローを処理するユーザが使用するユーザポータルに表示させるボタン名などが指定されています。 図の設定ですと、ボタン名は 承認/却下/保留、サブジェクトに「商品ID:P001 新着POPメッセージ​​​​​」、メッセージとして「運動会のおかずにどうでしょう」という情報がユーザポータルに表示される予定です。 また、ManagerAに審査を依頼していることも確認できます。 この後、ユーザポータルを利用してManagerAがボタンを選択しタスクを処理します。ユーザが押したボタンの情報は、このトレースの続きの情報として確認できる予定です。 (この画面は、ワークフロータスクを処理した後にも参照しますので、消さずに残しておいてください。)​​​​ 2.ユーザポータルにログインし、ワークフロータスクを処理する ManagerAでユーザポータルにログインします。 ※管理ポータルの表示に利用しているブラウザではない別の種類のブラウザで開くことをお勧めします。(ManagerAはユーザポータルしかアクセスできないユーザであるため、管理ポータルを表示するために毎回ログインが必要となります。別の種類のブラウザを利用することで、セッションが別管理となるためいちいちログインしなおす必要がありません) USERネームスペースを利用している場合は、以下URLでアクセスできます(ポート番号はアクセスされる環境に合わせてご変更ください)。 http://localhost:52773/csp/user/_DeepSee.UserPortal.Home.zen TESTネームスペース利用されている場合は、 http://localhost:52773/csp/test/_DeepSee.UserPortal.Home.zen IRIS for Healthで任意のネームスペースを作成された場合は(例:TEST) http://localhost:52773/csp/healthshare/test/_DeepSee.UserPortal.Home.zen アクセスできない場合は、管理ポータルを開き http://localhost:52773/csp/sys/UtilHome.csp、一旦SuperUserか_SYSTEMでログインします。 管理ポータル > [Analytics] > ネームスペース選択 > [ユーザポータル] に移動後、ログアウトします。 ManagerAでログイン後、「ワークフロー受信箱」を選択します。 メッセージのトレースで確認した情報を探し、一覧の中から選択します。 画面下にタスク詳細が表示されます。メッセージに設定していたボタン名が表示されていることを確認できます(右3つのボタン)。また、サブジェクトとメッセージにもトレースで確認した情報が表示されていることが確認できます。 では、承認ボタンを押してみましょう。(ボタンクリック後、一覧から情報が消えます) 3. タスク処理後のメッセージのトレースを確認する 1で確認していたメッセージのトレース画面をリロードしてみましょう。 ユーザが押したボタンの情報が [3]の箱をクリックすると確認できます。 また、次の処理に進んでいることも確認できます。 ここまでの流れを通して、ワークフローコンポーネントを利用することで自動的に流れる処理の途中にユーザからの指示待ちの動作を入れたり、ユーザからの回答内容に合わせて処理を変えていくなど、自動的な流れとユーザの動作を統合させることができることを確認できました。 サンプルコードの流れでは、ユーザの押したボタンに合わせ、POPメッセージが承認されたか、却下されたか、ステータスを更新する処理だけで終了していますが、この後、POP登録者用Teamsチャネルに通知を出すおまけの動作も含めています。 お試しいただく場合は、システム連携の自動的な流れの中にユーザからの指示を介入できる「ワークフローコンポーネント」のサンプルの「POPメッセージ審査完了通知(Teams)をご利用いただく場合」をご参照ください。 続いて、未処理のタスクを他のユーザにアサインする方法をご紹介します。 別ユーザへのアサインは、管理ポータルを利用しますので、スーパーバイザーとしてのユーザを用意する必要がありますが、この記事の中ではSuperUserまたは_SYSTEMユーザを利用して試してみます。 SuperUserまたは_Systemでログインした管理ポータルを利用して、以下メニューにアクセスします。 管理ポータル > [Interoperability] > [管理] > [ワークフロー] > [ワークフロー・タスク] ManagerAにアサインされているタスクを、ManagerBに変更してみます。 タスクの一覧が表示されるので、ステータスが「Assigned」の行を選択し、「タスクの割り当て」ボタンをクリックします。 表示される子画面の「ユーザ名」のプルダウンから、ManagerBを選択し、OKボタンをクリックします。 ユーザポータルをManagerBでログインしなおし、1件だけタスクが表示されることを確認してください。 ユーザポータルは、管理ポータル > [Analytics] > [ユーザポータル] で遷移できます。一旦ログアウトし、ManagerBでログインしなおしてください。 ManagerBの画面にタスクが1件表示されることが確認できます。 これで、担当者が急なお休みに入ってしまっても担当者の切り替えができるので安心です。 最後に、ユーザポータルの表示についてですが、標準のポータルはこれ以上の加工ができません。 ユーザが処理する際、補足的な情報をもっと表示させたりお好みのデザインのWebアプリに埋め込みたい!などのご要望もあるかと思います。 そんな時には、開発者コミュニティのサンプル公開サイトであるOpen Echange に公開されている「ワークフローREST API」が最適です! 次の記事では、ワークフローREST API の使い方をご紹介する予定です。 サンプルWebアプリは、1つ前の記事システム連携の自動的な流れの中にユーザからの指示を介入できる「ワークフローコンポーネント」のサンプル でご紹介しています。
記事
Megumi Kakechi · 2020年10月25日

ネットワーク共有フォルダ/ネットワークプリンタの参照方法

これはInterSystems FAQ サイトの記事です。 ネットワーク共有フォルダ/ネットワークプリンタにアクセスしたい場合、以下の2つの方法があります。 A. net use コマンドを使用する方法B. IRISの起動ユーザを変更する方法 詳細は以下をご覧ください。 ------------------------------------------------------------------------------------------【方法A】net use コマンドを使用する方法------------------------------------------------------------------------------------------ 1) IRIS からネットワーク共有フォルダへのアクセスを許可する場合、以下のコマンドを実行するように SYSTEM^%ZSTART に記述します。 net use \\<サーバ>\<共有フォルダ> /user:<ユーザ名> <パスワード> ※^%ZSTART または従来の ^ZSTU は、ユーザのスタートルーチンです。 詳細は以下のページをご参照下さい。^%ZSTART ルーチンと ^%ZSTOP ルーチンによる開始動作と停止動作のカスタマイズについて ※%ZSTART での記述ミスは IRISの起動不可になりますので、%ZSTARTの単体実行を確認するようにしてください。 また、%ZSTART ルーチンは、ネームスペース %SYS に新規に作成する必要があります。フォーマットは以下になります。 SYSTEM Set st = $ZF(-100, "/shell", "net", "use", "\\share\public", "/user:username", "password") Quit 2) %ZSTART ルーチンを保存+コンパイルしたら、 IRISを再起動します。 << 注意 >>ターミナルで実行する場合と、TelnetやJobコマンドで実行する場合では、ユーザ権限が異なります。==========================================================ターミナル:WindowsログインユーザTelnet/Job:IRISサービスの起動ユーザ(既定:LocalSystem)========================================================== ターミナルはWindowsログインユーザとセッションを共有しているため、事前にWindowsでネットワーク共有フォルダにアクセス済みであれば、IRISで何も設定しなくてもターミナルからのアクセスは可能です。 しかし、Telnet/Job(バックグラウンドジョブ全般※) はIRISサービスのログインユーザとセッションを共有するため、IRISサービスの起動ユーザで net use コマンドを実行する必要があります。 上で紹介しているように、^%ZSTART ルーチンで net use コマンドを実行することで、Telnet/Job でのアクセスも可能になります。※ODBC/JDBC接続や、Webアプリケーションで動作するものも含む ----------------------------------------------------------------【方法B】IRIS の起動ユーザを変更する方法---------------------------------------------------------------- 1) ユーザアカウントを決めますIRIS のサーバとネットワーク共有をサービスしているサーバに、同じユーザ名/パスワードのアカウントを作成します。※ユーザアカウントは、Windows Administrators グループのメンバである必要はありません。 2) irisinstall コマンドを使用して IRIS サービスのユーザアカウントを変更します。IRIS サービスのユーザアカウントを変更するときは、従来のように「Windowsコントロールパネル>管理ツール>サービス>IRIS Controller for XX」からIRISサービスの起動ユーザを変更するのではなく、irisinstall コマンドを使用して 変更します。 コマンドは次の通りです。 irisinstall setserviceusername <構成名> <起動ユーザ名> <パスワード> 具体的には、Windows のコマンドプロンプトを「管理者権限で」起動して以下のように実行します。(ユーザ:username、パスワード:password を使う場合。構成名 IRIS とします) cd C:\InterSystems\IRIS\bin <-- install dir\bin に移動irisinstall setserviceusername IRIS username password <<注意1>>【方法B】の場合も A と同様に、ターミナルでネットワーク共有フォルダにアクセスする場合は、事前にWindowsでネットワーク共有フォルダにアクセスしていることが条件になります。(Windowsログインユーザとセッションを共有しているため) <<注意2>>サービス起動ユーザをLOCAL_SYSTEMから変えると、権限が不足するためLarge Pageの使用(※)ができなくなります。※Windows上でのCaché共有メモリの割り当てについて Large Pageを使用するためには、変更したアカウントに対して"メモリ内のページのロック" 特権を付与する必要があります。“メモリ内のページのロック” 特権の付与は、ローカルセキュリティポリシー(secpol.msc)より実施します。 Windows での Large Page の構成と権限については、以下のドキュメントもあわせてご覧ください。Windows でのラージページの構成について 記事を更新しました。「irisinstall setserviceusername」コマンドでサービス起動ユーザをLOCAL_SYSTEMから変える場合、ユーザ権限が不足するため、共有メモリの割り当て時にLarge Page(ラージページ)の使用ができなくなるので注意が必要です。記事の最後に <<注意2>> で追記しておりますのでご確認ください。
記事
Minoru Horita · 2022年2月2日

Embedded Pythonを簡単にご紹介します

開発者の皆さん、こんにちは! 最近リリースされた 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つの日付の間の日数を返すメソッドです。 ClassMethod DateDiff(fromdate As %String, todate As %String, format As %String) As %Integer [ Language = python ] {  import datetime  if format == '' : format = '%Y-%m-%d'  f = datetime.datetime.strptime(fromdate, format)  t = datetime.datetime.strptime(todate, format)  return (t - f).days } 重要なポイントは、メソッドの宣言部に [ Language = Python ] と指定することです。これだけで、IRISクラスのメソッドをPythonで記述できるようになります。以下は、実行例です。 USER>w ##class(SimpleDemo).DateDiff("2022-2-2", "2022-12-31", "")332 簡単ですね。(執筆時点で、今年はあと332日です。) もう一つ例を挙げてみます。 ClassMethod SplitString(str As %String) [ Language = python ] { return str.split(',') } USER>set list=##class(SimpleDemo).SplitString("one,two,three")USER>zwrite listlist=5@%SYS.Python ; ['one', 'two', 'three'] ; <OREF>USER>w list."__getitem__"(1)two Pythonが得意な文字列<->リスト変換を使って、カンマ区切りの文字列をリストにして返す関数です。IRISのObjectScriptで、Pythonのリスト型を扱えるようになっていることに注意してください。(ただし、_ はObjectScriptでは文字列連結演算子ですので、""でくくる必要があります。) データベースにアクセスして簡単にデータ分析 ObjectScriptプログラマの方は、これくらいはObjectScriptでもできると思われたのではないでしょうか。(その通りです!)ですので、少しPythonらしい例を挙げて今回は終わりにしたいと思います。 IRISデータベースに、Kaggleのワイン品質データセットをテーブルとして保存しておき、そのテーブルにselect文を発行します。 ClassMethod SimpleAnalyze() [ Language = python ] { import iris df = iris.sql.exec('select * from kaggle.wineqt').dataframe() # データフレームを表示 print(df) # アルコール度数(alcoholフィールド)の統計的数値を表示 print(df['alcohol'].describe()) } import irisで、IRISデータベースにアクセスするPythonモジュールをインポートし、iris.sql.exec()で、SQLを発行しています。結果に対しdataframe()を実行することで、Python (pandas)のデータフレームとして変数に格納します。SQLを発行する際、接続を行なっていません。最初に書いたように、PythonのコードはIRISのランタイムでそのまま実行されますので、簡単かつ高速にSQLアクセスが可能です。 df['alcohol'].describe() で、アルコール度数に関する基本的な統計的数値が計算できます。 実行結果は、以下の通りです。 USER>d ##class(SimpleDemo).SimpleAnalyze()   fixedacidity volatileacidity citricacid residualsugar chlorides ... ph sulphates alcohol quality id0 7.4 0.700 0.00 1.9 0.076 ... 3.51 0.56 9.4 5.0 01 7.8 0.880 0.00 2.6 0.098 ... 3.20 0.68 9.8 5.0 12 7.8 0.760 0.04 2.3 0.092 ... 3.26 0.65 9.8 5.0 23 11.2 0.280 0.56 1.9 0.075 ... 3.16 0.58 9.8 6.0 34 7.4 0.700 0.00 1.9 0.076 ... 3.51 0.56 9.4 5.0 4... ... ... ... ... ... ... ... ... ... ... ...1138 6.3 0.510 0.13 2.3 0.076 ... 3.42 0.75 11.0 6.0 15921139 6.8 0.620 0.08 1.9 0.068 ... 3.42 0.82 9.5 6.0 15931140 6.2 0.600 0.08 2.0 0.090 ... 3.45 0.58 10.5 5.0 15941141 5.9 0.550 0.10 2.2 0.062 ... 3.52 0.76 11.2 6.0 15951142 5.9 0.645 0.12 2.0 0.075 ... 3.57 0.71 10.2 5.0 1597[1143 rows x 13 columns]count 1143.000000mean 10.442111std 1.082196min 8.40000025% 9.50000050% 10.20000075% 11.100000max 14.900000Name: alcohol, dtype: float64 大変簡単な例ですが、IRISに格納されたデータをPythonでデータ分析する入り口に立つことができました。 今回は、Embedded Pythonを簡単にご紹介しましたが、まだまだ紹介しきれない機能がたくさんあります。これから、開発者コミュニティに続きを投稿する予定ですので、どうか楽しみにしていてください。 また、3月に開催される InterSystems Japan Virtual Summit 2022で、Embedded Pythonについてのセッションをご提供します。是非ご登録をお願いします!(お申し込みはコチラ) 最後までお読み頂きありがとうございました。質問などがありましたら、コメント頂けたら嬉しいです。
記事
Toshihiko Minamoto · 2022年6月28日

ダッシュボードの IRIS 履歴モニター

皆さん、こんにちは! 職場で持ち上がった単純なリクエストで始めた個人プロジェクトを紹介したいと思います。  > 使用している Caché ライセンス数を調べることはできますか?  コミュニティに掲載されている他の記事を読んでみたところ、[David Loveluck](https://community.intersystems.com/user/david-loveluck) が投稿したぴったりの記事が見つかりました。  **APM - Using the Caché History Monitor**(APM - Caché 履歴モニターを使用する) そこで、David の記事を参考に、Caché 履歴モニターを使って、リクエストされた情報を表示して見ました。  「どのテクノロジーを使用するのか」という疑問に対し  私は CSP に決定しました。単純で強力なテクノロジーであるため、私が担当するお客様は Caché が単なる MUMPS/ターミナルではないことに気づくでしょう。 ライセンス、データベース増加状況、CSP セッションの履歴を表示するページを作成した後、「システムダッシュボードとプロセス」ページのデザインを新装することにしました。 私の Caché インスタンスではすべてうまく機能します。 でも、IRIS はどうでしょうか?  [Evgeny Shvarov](https://community.intersystems.com/user/evgeny-shvarov) が投稿した以下の記事に従って、 **Using Docker with your InterSystems IRIS development repository**(InterSystems IRIS 開発リポジトリで Docker を使用する) コードを Docker 化して GitHub に配置しました。いくつかの手順を踏めば、どなたでも利用できます。 * * * ## 実行方法 このリポジトリでコーディングを始めるには、以下を実行します。 1. 任意のローカルディレクトリに[リポジトリ](https://github.com/diashenrique/iris-history-monitor)を Clone/git pull します。 `$ git clone https://github.com/diashenrique/iris-history-monitor.git` 2. このディレクトリでターミナルを開き、以下を実行します。 `$ docker-compose build` 3. プロジェクトで IRIS コンテナを実行します。 `$ docker-compose up -d` ## テスト方法 ブラウザを開いて、以下のアドレスに移動します。 例: ユーザー名 _SYSTEM を使用して、ダッシュボードとその他の機能を実行できます。 ## システムダッシュボード ![](https://raw.githubusercontent.com/diashenrique/iris-history-monitor/master//images/SystemDashboard.png) システムダッシュボードには、以下の項目が表示されます。   * ライセンス * システム時間 * アプリケーションエラー * Cache プロセス * CSP セッション * ロックテーブル * ジャーナル空間 * ジャーナルのステータス * ECP AppServer * ECP DataServer * Write デーモン * Cache の効率 * 重大なアラート 線グラフウィジェットには、5 秒ごとにポイントがプロットされます。 ![](https://raw.githubusercontent.com/diashenrique/iris-history-monitor/master/images/widget_dashboard.gif)   ##  システムメニュー ![](https://raw.githubusercontent.com/diashenrique/iris-history-monitor/master/images/menu.gif)   ## システムプロセス ![](https://raw.githubusercontent.com/diashenrique/iris-history-monitor/master/images/SystemProcesses.png) ## プロセスフィルター ![](https://raw.githubusercontent.com/diashenrique/iris-history-monitor/master/images/SystemProcesses_filter.gif) さまざまなフィルターを使用して、必要な結果を得ることができます。 また、列のヘッダーを Shift + クリックすると、複数の項目で並べ替えることもできます。データグリッドを **_Excel_** にエクスポートすることも可能です! ![](https://raw.githubusercontent.com/diashenrique/iris-history-monitor/master/images/SystemProcesses_output.png)   ## 履歴モニター CSP セッションとライセンスの履歴モニターでは、情報が以下の 3 つのセクションに分かれて表示されます。 * 5 分毎 * 毎日 * 毎時間 データベースの増加が表示できるのは、毎日の情報のみです。 履歴ページでは以下の機能を共通して使用できます。 ### 日付範囲の選択ツール ![](https://raw.githubusercontent.com/diashenrique/iris-history-monitor/master/images/daterangepicker.png) _デフォルト_値は、「過去 7 日間」です。 ### グラフ/データテーブル 各セクションの右上に、2 つのボタン(チャート/データテーブル)があります。 ![](https://raw.githubusercontent.com/diashenrique/iris-history-monitor/master/images/chart.png) データテーブルには、グラフを作成する情報が表示されます。Excel 形式でダウンロード可能です。 ![](https://raw.githubusercontent.com/diashenrique/iris-history-monitor/master/images/chart_datagrid.png) ![](https://raw.githubusercontent.com/diashenrique/iris-history-monitor/master/images/chart_datagrid_output.png) Excel には、CSP で定義されたのと同じフォーマット、コンテンツ、およびグループが表示浚えます。 ### ズーム機能 すべてのグラフにはズームオプションがあるため、情報をより詳細に可視化することができます。 ![](https://raw.githubusercontent.com/diashenrique/iris-history-monitor/master/images/demo_CSP_Sessions.gif)   ### 平均と最大 毎時間と毎日のセクションのグラフには、平均値と最大値が表示されます。 #### 平均 ![](https://raw.githubusercontent.com/diashenrique/iris-history-monitor/master/images/History_Hourly.png) #### 最大 ![](https://raw.githubusercontent.com/diashenrique/iris-history-monitor/master/images/History_Daily.png)   どうぞお楽しみください!