検索

クリアフィルター
記事
Mihoko Iijima · 2020年11月12日

オンラインバックアップでのバックアップサイズを見積もる方法

これはInterSystems FAQ サイトの記事です。 システムルーチン ^DBSIZE を利用するとバックアップファイルサイズを見積もることができます(メモ1もご参照ください)。 ^DBSIZE は、データベース・バックアップ・リストに選択されたデータベースを対象に、フルバックアップ/累積バックアップ/差分バックアップそれぞれのファイルサイズを見積もります。 なお、データベース・バックアップ・リストは、管理ポータルの [システム管理] > [構成] > [データベースバックアップ] > [データベース・バックアップ・リスト] から作成します。 詳細については、下記ドキュメントもご参照ください。 ^DBSIZEによるバックアップ・サイズの見積もり【IRIS】 ^DBSIZEによるバックアップ・サイズの見積もり 実行例は、以下の通りです。 USER>set $namespace="%SYS" //または zn "%SYS" %SYS>do ^DBSIZE Incremental Backup Size Estimator What kind of backup: 1. Full backup of all in-use blocks 2. Incremental since last backup 3. Cumulative incremental since last full backup 4. Exit the backup program 1 => 1 In-Use Block Directory Blocks Size c:\intersystems\iris1\mgr\fs\ 2,668 (8KB) c:\intersystems\iris1\mgr\irisaudit\ 102 (8KB) -------------- Total number of database blocks: 2,770 Total backup size, including overhead of volume and pass labels: For a disk file: Number of 512-byte blocks: 46,068 (23,586,816 bytes) For magnetic media: Number of 58KB blocks: 398 (23,638,016 bytes) %SYS> メモ1:^DBSIZE ルーチンは、オンラインバックアップを使用してデータベースのバックアップを行っている環境に有効な方法です。 メモ2:オンラインバックアップ とは? 弊社製品(Caché/Ensemble/HealthShare/IRIS)の内部ツールを使用してデータベースの使用済ブロックをオンラインでバックアップする方法のことです。 この他にも、データベースファイルをオンラインでバックアップする方法もあります。バックアップ手法の違いについてはFAQトピック「データベースのバックアップにはどのような方法がありますか?」もご参照ください。
記事
Megumi Kakechi · 2021年3月25日

^%GSIZE で出力される各項目の意味

これは InterSystems FAQ サイトの記事です。 ^%GSIZE ユーティリティでは、グローバルのサイズを算出することができます。 このユーティリティで出力される各項目の意味について説明します。 例えば、USERネームスペースのグローバルについて do ^%GSIZE を実行し、以下のように出力結果を得られたとします。 USER>do ^%GSIZE Directory name: c:\intersystems\iris\mgr\user\ => // サイズを確認したいデータベースディレクトリ All Globals? No => yes // 全てのグローバルサイズを確認する場合は yes 100 items selected from100 available globalsShow details?? No => yes // 詳細情報を表示したい場合は yesDevice: // 画面出力はそのまま <Enter>。出力ファイルパス指定も可Right margin: 80 =>:directory: c:\intersystems\iris\mgr\user\Page: 1 GLOBAL SIZE 03 Sep 2020 10:15 AM Global Blocks Bytes Used Packing Contig. -------- -------- --------------- ------- ------- A 1 12 0 % 0 B 59 432,028 90 % 42 : 「Blocks」は、 グローバルが格納されているブロックの総数になります。 グローバルAは1ブロック(1*8192Byte)使用しているということになります。 グローバルBは59ブロック(59*8192Byte)使用しているということになります。 「Bytes Used」は、 グローバルに使用されている総バイト数になります。 グローバルAは12Byte、Bは432,028Byte使用しているということになります。 「Packing」は、 グローバルの充填率を示します。この値は、以下の計算式で求められます。  Bytes Used /(Blocks * Block Size) * 100  B : 432,028 /(59 x 8192) * 100 ≒ 90 % 「Contig」は、 グローバルが使用しているブロックで一番大きな連続領域のブロック数を示します。 グローバルB では 42個のブロックが一番大きく連続して確保された領域であることを示しています。 ※ ^%GSIZE ユーティリティについては、【FAQ】 データサイズを調べる方法はありますか? もあわせてご覧ください。
質問
松川 幸久 · 2022年12月19日

VSCODEによるサーバCSPフォルダ内のHTML編集について

こんにちは、普段はスタジオを使っているのですが、サーバCSPフォルダ内のHTMLファイルを編集する事があり、便利なのでたまにVSCODEを利用しています。以前はHTMLファイルも表示していたと思うのですが、何をやらかしたのかCSP,CSS,MACのみになりました。int,html,jsなどの他のファイルを表示する設定をご存知の方いらっしゃいましたらご教授お願い致します。 InterSystems Language Serverv2.1.4 InterSystems ObjectScriptv2.2.0 InterSystems Server Managerv3.2.1vscodeVersion: 1.74.1 (user setup)Commit: 1ad8d514439d5077d2b0b7ee64d2ce82a9308e5aDate: 2022-12-14T10:30:51.966ZElectron: 19.1.8Chromium: 102.0.5005.167Node.js: 16.14.2V8: 10.2.154.15-electron.0OS: Windows_NT x64 10.0.18363Sandboxed: No こんにちは。 私はCSPの変更の経験がないので同様の現象になったことが無いのですが、症状から見るに、Cache'というよりかはVScodeの設定の話かなと思いました。 VScodeにはExcludeという設定があり、指定したパターンに該当する項目を非表示にする仕組みがあります。こちらに該当していたりしないでしょうか? https://dlrecord.hatenablog.com/entry/2020/11/22/144540 Ohata様。お声がけ下さりありがとうございます。Excludeなるものがあるんですね。早速調べてみました。 うーん該当しそうな拡張子はなさそうです。Cache'のプロジェクト機能は普段利用している気はないのですが スタジオのワークスペースからその他にファイル単位で追加すると追加した分がみえました。これではなーって感じです。自分はプロジェクトの機能を理解していないのでこの辺りに問題があるのかな?と疑っています。 Excludeの設定教えて下さりありがとうございました。 追記 ワークスペーススベースのへ追加をやり直しました。EDIT WEB APPLICATION FILESを選択し直した所解決しました。ありがとうございました。
記事
Megumi Kakechi · 2022年11月3日

IRISという製品名を選んだのはなぜですか?

これは InterSystems FAQ サイトの記事です。 Question: IRISという製品名を選んだのはなぜですか? Answer: IRISは、インターシステムズの製品開発者がソフトウェアを開発する際に常に念頭に置くべき以下の4つの原則の先頭文字を表しています。 [ I ] Interoperable:他のソフトウェアと連携して動作すること [ R ] Reliable:信頼性が高いこと [ I ] Intuitive:直観的に使用できること [ S ] Scalable:スケール(拡張性が高い)すること
ディスカッション
Miqueias Santos · 2023年5月18日

助けを求めに来ました。インターシステムズ

こんにちは、大丈夫ですか? 助けを求めに来ました。インターシステムズ ポルトガル語のコンテストに参加しているので、リンクからこの記事を作成しました。私の記事にアクセスしてフィードバックをいただけますか。「いいね!」も歓迎です。 ここ: https://pt.community.intersystems.com/post/veremos-seguir-como-o-intersystems-iris-aliado-com-machine-learning-pode-transformar-para 読むには、ブラジル系ポルトガル語からあなたの言語に翻訳するだけです。

#収束解析

1 投稿0 フォロワー
記事
Toshihiko Minamoto · 2021年12月14日

Node.jsでのZPMの使用

着想: @Evgeny.Shvarovとその記事より **[Deploying InterSystems IRIS Embedded Python Solutions with ZPM Package Manager](https://community.intersystems.com/post/deploying-intersystems-iris-embedded-python-solutions-zpm-package-manager)** このアイデアを発展させ、同じことを**Node.js.**のモジュールで行ってみました。 このケースは、私の「[IRIS Native API for Node.js](https://community.intersystems.com/post/websocket-client-js-iris-native-api-docker-micro-server)」の例に基づいています。 InterSystems IRIS は[クライアント](https://docs.intersystems.com/irislatestj/csp/documatic/%25CSP.Documatic.cls?&LIBRARY=%25SYS&PRIVATE=1&SYSTEM=0&CLASSNAME=%25Net.WebSocket.Client)としてネイティブでWebSocketsをサポートしているというわかりきった返答を期待して: その通りです。そして、[私がその昔書いた関連記事](https://community.intersystems.com/post/websocket-client-iris-internal)と[OEXのサンプル](https://openexchange.intersystems.com/package/IRIS-internal-WebSocket-Client)へのリンクはこちらです。 ZPMで適用される原理は、Pythonの場合と似ており、完全に機能します。 **変更内容** * その他すべての**必須**Node.jsコンポーネントは、ランタイム時にインストールできるようになりました。    * Dockerビルド中には、_intersystems-iris-native_モジュールのみがプリインストールされます。     * Node.jsが起動すると、デバッグ目的でそのプロセスIDが表示されます。   * 一部の視覚的な外観とランタイムが改善されました。     Node.jsでは、追加の必須コンポーネントをインストールする際に、npmを使用して、十分な権限でインストールしなければならないという課題に直面します。   このステップとアクセス権の調整は、Dockerfileでカバーされています。   しかし、すべての .jsモジュールを処理するのは、**ZPM**です。   この例のロジックは変更されていません。 * Nodes.jsサービスが開始される * 選択したエコーサーバーのアドレスがそれに渡される > **E** * 送信されるテキストを作成する > **N** * それを送信して、返信がどのようにドロップされるかを確認する > **S** * サービスを停止して終了する > **X** 元の例とは異なり、サービスはバックグラウンドで実行しています。 従って、その出力は見えませんが、アクションによって表示できるログファイルに書き込まれます > **L** ## 前提条件 gitとDocker desktopがインストールされていることを確認してください。 ## インストール このリポジトリを任意のローカルディレクトリにClone/git pullします。 $ git clone https://github.com/rcemper/Using-ZPM-for-Node.js このディレクトリでターミナルを開き、以下を実行します。 $ docker-compose build これが完了するまでしばらく時間が掛かることがあります。 このプロジェクトで IRIS コンテナを実行します。 $ docker-compose up -d ## テスト方法 IRIS ターミナルを使用します。 $ docker-compose exec iris iris session iris "##class(rccjs.WSockNodeJs).Run()" *** Welcome to WebSocket by Node.js Native API Demo *** ********* Node.js process id = 1650 ********* Known Hosts (*=Exit) [1]: 1 ws://echo.websocket.org/ 2 --- server 2 ---- 3 --- server 3 ---- select (1): 1 ==> ws://echo.websocket.org/ # Enter text to get echoed from WebSocketClient Service Terminate with * at first position or get generated text by % or append new text with @ 1 hello this is connected over 2 IRIS Native API for Node.js 3 ----------------- 4 * Select action for WebClient Service New EchoServer (E), New Text(N), Send+Listen(S) Show Log (L), Exit+Stop WsClient(X) [S] :s %%%%%%%%%%%%%%%%%%%%%%%%%% ******* 3 Replies ******* 1 hello this is connecte over  2 IRIS Native API for Node.js  3 -----------------  Select action for WebClient Service New EchoServer (E), New Text(N), Send+Listen(S) Show Log (L), Exit+Stop WsClient(X) [S] <strong>:<span style="font-size:16px;">L</span></strong> %%%%%%%%%%%%%%%%%%%%%%%%%% platform = linux: ubuntu ***************************** *** no IRIS host defined **** Connect to IRIS on: localhost Successfully connected to InterSystems IRIS. *** wait 3sec for request *** ******* Startup done ******** *** wait 3sec for request *** *** wait 3sec for request *** *** wait 3sec for request *** *** wait 3sec for request *** echoserver: ws://echo.websocket.org/ ** Lines to process: 3 ** ********* next turn ********* * WebSocket Client connected * ****** Client is ready ****** Line: 1 text> 'hello this is connecte over ' Received: 1 > 'hello this is connecte over ' Line: 2 text> 'IRIS Native API for Node.js ' Received: 2 > 'IRIS Native API for Node.js ' Line: 3 text> '----------------- ' Received: 3 > '----------------- ' ******* lines sent: 3 ****** *** replies received: 3 **** *** wait 3sec for request *** *** wait 3sec for request *** Select action for WebClient Service New EchoServer (E), New Text(N), Send+Listen(S) Show Log (L), Exit+Stop WsClient(X) [S] :x %%%%%%%%%%%%%%%%%%%%%%%%%%    
記事
Tomoko Furuzono · 2021年5月26日

Windows のバッチスクリプトでIRISのルーチンやメソッドの戻り値を取得する方法

これは、InterSystems FAQサイトの記事です。 iris コマンドを使用して、InterSystems IRIS のインスタンスを制御できます。iris コマンドは多くの機能をサポートします。以下の構文を使用します。 iris <ファンクション名> <インスタンス名> [引数] irisコマンドの詳細は下記ドキュメントをご参照ください。InterSystems IRIS インスタンスの制御このirisコマンドのrunw というファンクションを使用して、同期実行や戻り値を取得することができます。コマンド実行例は以下の通りです。 iris runw インスタンス名 tag^routine([parameter-list]) ネームスペース名iris runw インスタンス名 ##CLASS(package.class).method([parameter-list]) ネームスペース名 バッチスクリプトへの戻り値の指定は、ルーチンやメソッド終了時に指定する QUIT や RETURN コマンドに引数を指定する方法ではなく、IRIS 内の処理終了時に %SYSTEM.Process クラスの Terminate() メソッドを使用して errorlevel 変数に値を返す方法を使用します。値は、0~255 を指定できます。ルーチンサンプルは以下の通りです。 // ルーチン名をTest.macとしますstart1() public { hang 5 // 5秒待つ //第2引数に指定した数値がシェルスクリプトに戻ります set st=$system.Process.Terminate($JOB,11)} クラスメソッドサンプルは以下の通りです。 Class Test.Class1{ClassMethod test(){ hang 5 // 5秒待つ //第2引数に指定した数値がシェルスクリプトに戻ります set st=$system.Process.Terminate($JOB,12)}} 上記ルーチンとクラスメソッドを起動するバッチスクリプト例は以下の通りです。※インスタンス名=IRIS1 cd c:\intersystems\IRIS1\biniris runw IRIS1 start1^^Test() USERecho %errorlevel% iris runw IRIS1 ##class(Test.Class1).test() USERecho %errorlevel% pause Furuzonoさん、情報ありがとうございます。Windowsマシンで試したのですが、OS認証をONにするのを忘れてハマってしまったので、念のため情報共有しておきます。OS認証をONにする方法 システム管理ポータルの「システム管理」「セキュリティ」「システムセキュリティ」「認証/ウェブセッションオプション」メニューをクリックします。 以下のページが表示されますので、「OS認証を許可」をチェックし、「保存」ボタンをクリックします。 システム管理ポータルの「システム管理」「セキュリティ」「サービス」メニューをクリックします。 「%Service_Console」をクリックし、表示されるダイアログにて「オペレーティングシステム」をチェック、「保存」ボタンをクリックします。 あとはWindowsユーザと同じ名前のユーザを作成すれば(インストール時のWindowsユーザであれば自動的に作成されています)、バッチファイルからirisコマンドでルーチンやクラスが起動できました。
お知らせ
Yoichi Miyashita · 2021年11月2日

警告:ECPデータベースサーバの再起動またはフェイルオーバー後のロックの欠落

対象バージョン 2020.1.0以降のInterSystems IRISおよびInterSystems IRIS for Healthのすべてのメジャー・リリースおよびメンテナンス・バージョン 対象プラットフォーム 全て 発生する問題 分散型キャッシュ・クラスタ(ECP 構成) でアプリケーションのロック保証に違反し、アプリケーションの整合性に問題が生じる可能性があります。 問題の詳細 この問題は、データサーバの再起動またはフェイルオーバー後に、アプリケーションサーバがECPリカバリを正常に実行した場合にのみ発生します。以下のようなケースです。 再起動時またはフェイルオーバー時に、アプリケーションサーバ上で実行されているプロセスがデータサーバ上のデータベースに対して合計255個以上のロックを保持している場合、これらのロックの一部がデータサーバのロックテーブルに記録されないことがあります。 データサーバはクラスタ全体に分散するのロックを管理しているため、他のアプリケーションサーバ上のプロセスやデータサーバ自身が、アプリケーションサーバが保持するロックのいずれかと競合するロックを同時に取得する可能性があり、アプリケーションの整合性に問題が発生する可能性があります。 * ECPリカバリについては、こちらのドキュメントを参照してください。 * ロックと並行処理の詳細については、こちらのドキュメントを参照してください。解決方法 この問題は、修正ID: SML2930 で修正されます。この修正は、InterSystems IRIS および InterSystems IRIS for Health 2020.1.2 および 2021.1.1 を含む、今後リリースされるすべての製品に含まれています。 また、お客様のご要望により、修正を現在お使いのEM(Extended Maintenance) リリースの製品に対するパッチとして個別に作成してご提供することが可能です。 お使いのシステムに対するパッチが必要な場合は、バージョン情報とライセンスキー情報をご確認の上、インターシステムズカスタマーサポートセンターまでお知らせ下さい。 HealthShare をお使いのお客様への注意事項 HealthShareファミリーの製品では、分散型キャッシュクラスターを直接使用することはありませんが、分散型キャッシュクラスタを使用して、HealthShareの別のインスタンス上のデータにアクセスすることをサポートしています。この機能を使用しているお客様は、この不具合による影響があるかどうかを判断するために、設定を確認する必要があります。
記事
Mihoko Iijima · 2020年11月20日

データベースのバックアップ方法について

これはInterSystems FAQ サイトの記事です。 バックアップには、以下4種類の方法があります。 外部バックアップ オンラインバックアップ(コンカレントバックアップ) コールドバックアップ レガシー並行外部バックアップ 詳細は、以下ドキュメントをご参照ください。 バックアップの方法について【IRIS】バックアップの方法について 1、2、4は、インスタンスを停止せずにバックアップが行えます(末尾の関連情報もご参照ください)。3 は、インスタンスを停止した後でバックアップを行う方法です。 またシステム構成や障害バターンを基にバックアップを設計、計画する上での注意点、自動化のサンプルやバックアップを実施する上で役立つ各種関連技術についてはInterSystems Symposia 2014 発表資料 をご参照ください(※1)。 ※1:InterSystems Symposia 2014でご紹介した内容で、Cachéと記載がありますがバックアップ方法についてはIRISも同様です。 【関連情報】(コミュニティ/FAQトピックをリンクしています) データベースをバックアップする際の停止時間をできるだけ短くしたいのですが。 ジャーナルファイルを削除するにはどのようにしたらいいですか? 稼働中のインスタンスを停止せずにバックアップを行う方法 オンラインバックアップでのバックアップサイズを見積もる方法 オンラインバックアップ保存先にネットワークドライブ(NAS等)を指定することはできますか? 累積バックアップと差分バックアップの違いを教えてください オンラインバックアップをコマンドから実行する方法を教えてください
記事
Mihoko Iijima · 2021年2月25日

【Caché ベース】トラブル発生時の情報収集方法(Caché / Ensemble / HealthConnect 編)

これは InterSystems FAQ サイトの記事です 復旧を優先される場合を除き 【トラブル発生状態のまま】弊社サポートセンターまでご連絡ください。 その際、専用ツールを利用して情報収集いただくことで(所要時間約 5分)、サポートセンターによる状況確認がスムーズに行えます。 ツール使用方法については、PDF または以下ビデオでご紹介しています。 ※ InterSystems IRIS / IRIS for Health をご利用の方は、こちらの記事をご参照ください。 ぜひ 1 度、テスト/開発環境で実行をお試しいただき、万が一の場合に備えていただければ思います。 ビデオの目次(YouTubeでもご覧いただけます) 0:00~1:40 情報収集ツールを使用する上での大事なポイント 1:41~2:15 ツールの種類について 2:15~3:45 どのツールを実行したらいいか困った時の考え方 3:45~5:04 管理ポータルの診断レポートの例 5:04~6:00 ^Buttonsの実行例(Cache) 6:00~7:12 ^Buttonsの実行例(Ensemble / Cacheベースの HealthConnect) 7:12~8:27 CacheHungスクリプトの実行例(Windowsの例) 8:27~9:30 CacheHungスクリプトの実行例(Linuxの例) 9:30~10:05 ツールから生成されたHTMLのファイル名について 10:05~11:39 ツールから生成されたHTMLの中身について 11:39~ まとめ
記事
Megumi Kakechi · 2020年12月17日

選択性の数値について

これはInterSystems FAQ サイトの記事です。 選択性(または Selectivity)の数値とは、カラムに対するユニークデータの割合を示す数値です。 例) Person テーブルの個別値である PID カラム、住所のうち都道府県名が入る Pref カラム Pref カラムの選択性 = 約 2% PID カラム(ユニーク属性のカラム)の選択性 = 1 InterSystems製品のクエリオプティマイザは、クエリ実行経路(プラン)とインデックスの選択を決定するため、エクステントサイズ(テーブル内のレコード数)と選択性の数値を使用します。 詳細は下記ドキュメントページをご参照ください。 テーブルの最適化【IRIS】 テーブルの最適化 なお、選択性の数値は、テーブル単位に計算するまで設定されていません。 計算方法については関連トピックをご参照ください。 【関連情報】(コミュニティ/FAQトピックをリンクしています) クエリをチューニングするにはどのような方法がありますか? SQL パフォーマンスリソース・リンク集(関連するトピックをまとめてご紹介しています) 外れ値について 知っておくと便利なクエリパフォーマンスのコツ - Tune Table
記事
Megumi Kakechi · 2021年10月28日

TIMESTAMP型のフォーマットについて

これは InterSystems FAQ サイトの記事です。 TIMESTAMP型はInterSystems製品では、%Library.TimeStampデータタイプ(=%TimeStamp)に対応していて、フォーマットは YYYY-MM-DD HH:MM:SS.nnnnnnnnn です。 小数点以下の精度を変更したい場合は、以下の方法で設定します。 1) システムワイドに設定する 管理ポータル:[システム管理] > [構成] > [SQLとオブジェクトの設定] > [一般SQL設定] GETDATE(), CURRENT_TIME, CURRENT_TIMESTAMP のデフォルト時刻精度 に 0~9 の範囲で桁数を指定できます。 設定内容の詳細については、下記のドキュメントページをご参照ください。追加構成設定~ - 一般SQL設定 - SQL タブ 2) SQLの関数で指定する CURRENT_TIMESTAMP()の引数を利用して、小数点以下の精度を 0~9 の範囲で桁数を指定できます。※CURRENT_TIMESTAMP()で返される値は、実行環境のタイムゾーンの現在の日付時刻を返します。 USER>do $SYSTEM.SQL.Shell()SQL Command Line Shell---------------------------------------------------- The command prefix is currently set to: <<nothing>>.Enter <command>, 'q' to quit, '?' for help.[SQL]USER>> << entering multiline statement mode, 'GO' to execute >> 1>>SELECT 2>> CURRENT_TIMESTAMP AS FullSecStamp, 3>> CURRENT_TIMESTAMP(2) AS FracSecStamp, 4>> $HOROLOG AS InternalFullSec 5>>go1. SELECT CURRENT_TIMESTAMP AS FullSecStamp, CURRENT_TIMESTAMP(2) AS FracSecStamp, $HOROLOG AS InternalFullSec FullSecStamp FracSecStamp InternalFullSec2021-10-12 15:46:18 2021-10-12 15:46:18.83 66029,56778 1 Rows(s) Affectedstatement prepare time(s)/globals/cmds/disk: 0.1017s/1046/177936/15ms execute time(s)/globals/cmds/disk: 0.0002s/0/651/0ms cached query class: %sqlcq.USER.cls7---------------------------------------------------------------------------[SQL]USER>> 詳細は下記ドキュメントページをご参照ください。CURRENT_TIMESTAMP
記事
Mihoko Iijima · 2021年6月1日

REST/JSON の簡単なサンプルご紹介

これは InterSystems FAQ サイトの記事です。 InterSystems 製品を利用した REST/JSON の操作方法を、簡単なサンプルを利用して解説します。 サンプルでは、REST クライアント、HTML、ターミナルからデータ(JSON)を送信し、サーバ(InterSystems製品)で JSON 形式のデータを返す REST ディスパッチクラスを使った簡単な流れになっています。 サンプルは、https://github.com/Intersystems-jp/FAQ-REST-SimpleSample からダウンロードいただけます。 サンプルの利用手順 (1) サンプルファイル(XML)のインポート RESTディスパッチクラスとサンプルHTMLファイルが含まれています (2) ウェブアプリケーションパスの設定 (3) 実行 (1) サンプルファイル(XML)のインポート 管理ポータルからインポートします(スタジオを利用されている場合は、スタジオでもインポートできます)。 管理ポータルは http://localhost:52773/csp/sys/UtilHome.csp でアクセスできます。 ※ ポート番号はお使いの環境に合わせて変更してください。 管理ポータルにアクセスできたら以下メニューでインポートを行ってください。 システムエクスプローラ > クラス > ネームスペース選択 > インポートボタンクリック > サンプルファイルを選択してインポート メモ:インポートファイルを選択すると、インポートアイテムが表示されます(下図)。 クラス定義(User.REST)とHTMLファイル(sampleJSON.html)がインポートされます。 (2) ウェブアプリケーションパスの設定 (1) でインポートしたクラス定義(User.REST)を REST ディスパッチクラスに指定したウェブアプリケーションパスを定義します。 管理ポータルを開き、以下メニューにアクセスします。 システム管理 > セキュリティ > ウェブ・アプリケーション > 「新しいウェブ・アプリケーションの作成」をクリックし、以下の図の設定を行ってください。 (サンプルでは、/simple を REST のベースパスとしています) ネームスペースはサンプルをインポートしたネームスペースを指定してください。 ディスパッチクラス名には、 (1)でインポートした User.REST を指定します。大文字小文字を区別します。記入時ご注意ください。 「許可された認証方法」は、「パスワード」を設定します。アクセス時、ユーザ名とパスワードの入力欄が出てきたらユーザ名:_system、パスワードは SYS(または設定したパスワード)を記入してログインします。 メモ:管理ポータルアクセス時にユーザ名、パスワードの入力欄が出ないアクセス(認証なしアクセス)では、デフォルト設定としてユーザ:_system に対するパスワードが SYS(大文字)で設定されています。サンプルテスト時ご利用ください。 (3) 実行 (2) で作成したRESTディスパッチクラスを起動するためのベースパス(/simple)を利用してテストできます。 REST ディスパッチクラスには UrlMap という定義があり、ベースパスのあとに指定したパスに合わせて、どのメソッドが実行されるか定義されています。 XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ] { <Routes> <Route Url="/req1" Method="GET" Call="req1"/> <Route Url="/req2" Method="GET" Call="req2"/> </Routes> } /simple/req1 を指定すると、以下のメソッドが実行されます。 ClassMethod req1() As %Status { set name1=%request.Get("NAME1") set name2=%request.Get("NAME2") set age=%request.Get("AGE") set tdobject = {} set tdobject.name=name1_" "_name2 set tdobject.age=age write tdobject.%ToJSON() quit $$$OK } 【メモ】 HTTP 応答の Content-Type ヘッダの設定は、REST ディスパッチクラスのクラスパラメータ CONTENTTYPE に "application/json" 、charset の指定は、クラスパラメータ CHARSET に "utf-8" を設定しているため、クラスメソッド内で指定する必要はありません。また、今回の例にはありませんが、メッセージボディの情報をクラスパラメータ CHARSET で自動的に変換させたい場合は、クラスパラメータ CONVERTINPUTSTREAM に 1 を設定します(設定例は以下例文をご参照ください)。 Parameter CONTENTTYPE = "application/json"; Parameter CHARSET = "utf-8"; Parameter CONVERTINPUTSTREAM = 1; 以下 URL を利用して、/simple/req1 のテストが行えます(クエリ文字列に指定した内容が JSON として返送されます)。 http://localhost:52773/simple/req1?NAME1=Yamada&NAME2=Taro&AGE=20 ※ ポート番号はお使いの環境に合わせて変更してください。 {"name":"Yamada Taro","age":"20"} サンプル HTML http://localhost:52773/csp/user/sampleJSON.html を利用してテストする場合は、Pushボタンをクリックすると、HTMLファイル内で設定したクエリ文字列を GET 要求で送信し、RESTディスパッチクラスで加工した文字列が JSON として返送されます(ポップアップで表示されます)。 以下、Pushボタン押下時の JavaScript です。 function go() { var url="/simple/req1"; var params = {"NAME1" : "山田", "NAME2":"太郎","AGE":20}; var queryparams= new URLSearchParams(params); url=url+"?"+ queryparams fetch(url,{ headers:{"Accept":"application/json"}, } ).then(function(Response) { console.log("status=" + Response.status); return Response.json(); }).then(function(json) { alert("取得結果=" +JSON.stringify(json)); }); } ポップアップに表示されるJSONは以下の通りです。 取得結果={"name":"山田 太郎","age":"20"} ターミナルで実行する場合は以下のように %Net.HttpRequest クラスを利用します。 set req=##class(%Net.HttpRequest).%New() set req.Server="localhost" set req.Port=52773 // ポート番号は環境に合わせて変更してください set base64=$system.Encryption.Base64Encode("_system:SYS") do req.SetHeader("Authorization","Basic "_base64) do req.SetParam("NAME1", "Yamada") do req.SetParam("NAME2", "Taro") do req.SetParam("AGE", "20") set sts=req.Get("/simple/req1") set ans=req.HttpResponse.Data.Read() write ans 関連するFAQトピックもご参照ください。 jQueryでCachéのデータをJSON形式で取得するにはどうすればいいですか? 関連する記事もご参照ください。 【はじめてのInterSystems IRIS】セルフラーニングビデオ:アクセス編:IRIS で作成する REST サーバの仕組み 【はじめてのInterSystems IRIS】セルフラーニングビデオ:アクセス編:(REST)手動で作成するディスパッチクラス 【はじめてのInterSystems IRIS】セルフラーニングビデオ:アクセス編:(REST)APIファーストで作成するRESTディスパッチクラス 【はじめてのInterSystems IRIS】セルフラーニングビデオ:アクセス編:IRIS での JSON の操作
記事
Toshihiko Minamoto · 2022年10月5日

Djangoへようこそ

IRIS における Python サポートの最近の改善と、InterSystems による [Python DB-API](https://docs.intersystems.com/irisforhealth20221/csp/docbookj/DocBook.UI.Page.cls?KEY=BTPI_pyapi) サポートへの継続的な作業により、 Django プロジェクトに IRIS サポートを実装しました。Python DB-API の使用により、他のデータベースと連携することが可能です。 Django で、IRIS にデータを保存する単純なアプリケーションを試してみましょう。 ![ToDo アプリ](https://raw.githubusercontent.com/caretdev/django-iris-todo/develop/staticfiles/todoApp.png) このアプリケーションは [GitHub](https://github.com/caretdev/django-iris-todo) にあります。それをクローンしましょう。 git clone https://github.com/caretdev/django-iris-todo cd django-iris-todo 次に、Docker-compose でビルドして起動します。 docker-compose up -d --build IRIS の起動にはしばらくかかりますが、Django アプリケーションは起動をキャッチしてそこにモデルを移行し、アプリケーションも起動します。起動が完了すると、http://localhost:8000/ で利用できるようになり、上記の図のようになります。 ### 仕組み 動作させるには、InterSystems Python DB-API がインストールされている必要があります。最新のプレビューバージョンが含まれているため、2022.1.0.114.0 以上のバージョンが必要です。これは、インスタンスの `<INSTALL_DIR>/dev/python/` フォルダにあります。 このファイルは、[こちらの GitHub リポジトリ](https://github.com/intersystems-community/iris-driver-distribution)からダウンロードすることもできます。  pip3 install intersystems_irispython-3.2.0-py3-none-any.whl Django の IRIS バックエンドは別のプロジェクトで実装されており、pip を使ってインストール可能です。当然 django そのものも必要なので、それらをインストールしましょう。 pip3 install django django-iris 別の方法として、requirements.txt ファイルを使用して必要なパッケージを Python にインストールすることができます。 pip3 install -r requirements.txt ただし、このファイルには以下の行が含まれます。 https://raw.githubusercontent.com/intersystems-community/iris-driver-distribution/main/intersystems_irispython-3.2.0-py3-none-any.whl Django~=4.0.2 django-iris~=0.1.5 Django アプリケーションを IRIS に接続して、todoApp/settings.py ファイルを開きましょう。 ![](/sites/default/files/inline/images/images/image(3445).png) DATABASES は、データベースへの接続設定を定義します。 ENGINE は django_IRIS である必要があります。 NAME は IRIS のネームスペースにポイントする必要があります。 接続できるものに変更しましょう。 たとえば、以下のようにします。 DATABASES = {     'default': {         'ENGINE': 'django_iris',         'NAME': 'DJANGOTODO',         'HOST': 'localhost',         'PORT': 1972,         'USER': '_SYSTEM',         'PASSWORD': 'SYS',     } } そして移行を開始します。 python3 manage.py migrate ![](/sites/default/files/inline/images/images/image(3446).png) エラーもなく、IRIS 側のすべてのテーブルが作成されました。 これで、アプリケーションを起動することができます。 python3 manage.py runserver ![](/sites/default/files/inline/images/images/image(3447).png) Django には管理者パネルがあります。 python3 manage.py createsuperuser ![](/sites/default/files/inline/images/images/screenshot_2022-02-25_at_13_35_32.png) 管理者パネルは、http://localhost:8000/admin/ で利用できます。  ![](/sites/default/files/inline/images/images/image(3448).png) IRIS にはこのように格納されています。 ![](/sites/default/files/inline/images/images/image(3449).png)   完全にサポートするには、ほかにもいくつかの作業が残っています。 InterSystems からの Python DB-API ドライバーはまだ開発中であり、この django-iris プロジェクトも進行中です。 Community Edition ではあまりうまく動作しない可能性があるので注意してください。これは Django がデータベースに接続する方法に起因しており、すべてのライセンスをかなり素早く消費してしまう可能性があるためです。 プロジェクトと、IRIS を使った今後のインパクトを気に入っていただけたら、[OpenExchange コンテスト](https://openexchange.intersystems.com/contest/current)でぜひ投票してください。