検索

クリアフィルター
記事
Toshihiko Minamoto · 2022年3月17日

IRIS Web アプリケーションからの GitHub アカウントによる OAuth2 認証

![](/sites/default/files/inline/images/images/image(3117).png) この記事では、以下のオンラインデモを通じ、GitHub アカウントを使用した OAuth2 認証の基本を説明します。 https://dappsecurity.demo.community.intersystems.com/csp/user/index.csp(SuperUser | SYS) ## 推奨事項: * OAuth2 の概要: https://learning.intersystems.com/course/view.php?id=252 * ドキュメント: [OAuth2 クライアントとして InterSystems IRIS Web アプリケーションを使用する](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GOAUTH_client) * 記事: https://community.intersystems.com/post/intersystems-iris-open-authorization-framework-oauth-20-implementation-part-1 目的を達成するために必要な 3 つのステップ: * ステップ 1: GitHub 認証サーバーにアプリケーションを登録する * ステップ 2: InterSystems 管理ポータルから OAuth 2.0 クライアントを構成する * ステップ 3: GitHub アカウントでログインするための API を呼び出す それでは始めましょう。  ## ステップ 1: GitHub 認証サーバーにアプリケーションを登録する GitHub 認証サーバーにアプリケーションを登録するには、GitHub アカウントが必要です。  GitHub アカウントにログインして https://github.com/settings/developers に移動し、[OAuth Apps(OAuth アプリ)]タブで[New OAuth App(新しい OAuth アプリ)]ボタンをクリックします。 ![](/sites/default/files/inline/images/images/image(3134).png)   アプリケーション名、ホームページ URL、説明、および認証コールバック URL を入力します。 認証コールバック URL は **OAuth2.Response.cls** クラス({domain}/csp/sys/oauth2/OAuth2.Response.cls)を参照する必要があることに注意してください。 [Register Application(アプリケーションを登録)]をクリックします。 ![](/sites/default/files/inline/images/images/image(3135).png) すると、詳細ページが開きます。 [Generate a new client secret(新しいクライアントシークレットを生成)]をクリックし、IRIS OAuth2 クライアントを構成する際に使用するクライアント ID と秘密鍵を保存します。 ![](/sites/default/files/inline/images/images/image(3136).png) アプリケーションが登録されました。 ![](/sites/default/files/inline/images/images/image(3137).png) ## ステップ 2: InterSystems 管理ポータルから OAuth 2.0 クライアントを構成する [[システム](https://dappsecurity.demo.community.intersystems.com/csp/sys/%25CSP.Portal.Home.zen)]>[[セキュリティ管理](https://dappsecurity.demo.community.intersystems.com/csp/sys/%25CSP.Portal.Home.zen)]>[[OAuth 2.0 クライアント](https://dappsecurity.demo.community.intersystems.com/csp/sys/sec/%25CSP.UI.Portal.OAuth2.Client.ServerList.zen)]に移動し、[サーバーの説明を作成]ボタンをクリックします。 ![](/sites/default/files/inline/images/images/image(3138).png) 上部にある[手動]ボタンをクリックし、以下の詳細を入力してサーバーの説明を保存します。 ![](/sites/default/files/inline/images/images/image(3139).png) [[システム](https://dappsecurity.demo.community.intersystems.com/csp/sys/%25CSP.Portal.Home.zen)]>[[セキュリティ管理](https://dappsecurity.demo.community.intersystems.com/csp/sys/%25CSP.Portal.Home.zen)]>[[OAuth 2.0 クライアント](https://dappsecurity.demo.community.intersystems.com/csp/sys/sec/%25CSP.UI.Portal.OAuth2.Client.ServerList.zen)]に戻り、[クライアント構成]をクリックします。 ![](/sites/default/files/inline/images/images/image(3140).png) [一般]タブに詳細を入力します。 クライアントリダイレクト URL は、アプリケーションを GitHub に登録した際に入力した認証コールバック URLと同じであることに注意してください。 ![](/sites/default/files/inline/images/images/image(3141).png) [クライアント資格情報]に、アプリケーションを GitHub に登録した際に生成したクライアント ID とクライアントシークレットを入力し、クライアント構成を保存します。 ![](/sites/default/files/inline/images/images/image(3142).png) ## ステップ 3: GitHub アカウントでログインするための API を呼び出す オンラインデモ(https://dappsecurity.demo.community.intersystems.com/csp/user/index.csp)に移動し、 SuperUser | SYS でログインします。 トップメニューから[Login with GitHub(GitHub でログイン)]をクリックします。 ![](/sites/default/files/inline/images/images/image(3143).png) これで、Oauth.cls ページが開きます。 サインインを試す前に、必ず GitHub からログアウトしてください。 [GitHub Sign In(GitHub サインイン)]をクリックします。 ![](/sites/default/files/inline/images/images/image(3144).png) システムは **%SYS.OAuth2.Authorization** クラス(https://docs.intersystems.com/latest/csp/documatic/%25CSP.Documatic.cls?&LIBRARY=%25SYS&PRIVATE=1&CLASSNAME=%25SYS.OAuth2.Authorization)の **GetAuthorizationCodeEndpoint** メソッドを使用して、GitHub 認証サーバーに移動します。 ![](/sites/default/files/inline/images/images/image(3145).png) ログインに成功すると、システムは OauthRe.cls ページにリダイレクトします。 ![](/sites/default/files/inline/images/images/image(3147).png) コードは https://github.com/mwaseem75/Data\_APP\_Security のリポジトリから入手できます。   以上です!  
記事
Megumi Kakechi · 2022年5月31日

Embedded Python で IRIS グローバル($LB) を Pandas Dataframe に変換する方法

InterSystems IRIS 2021.2 のバージョンより、Embedded Python を使用できるようになりました。 Embedded Python で Excel のデータを IRIS グローバルに格納する方法 では pandas.DataFrame のデータを InterSystems IRIS グローバルに保存する方法をご紹介しました。こちらの記事では、その逆の「InterSystems IRIS グローバル($LB) を pandas.DataFrame に変換する」方法をご紹介します。 以下のようなグローバルを、Embedded Python を使用して DataFrame に変換します。 USER>zwrite ^ISJ ^ISJ(1)=$lb("Name","Age","Address") ^ISJ(2)=$lb("佐藤","50","東京") ^ISJ(3)=$lb("加藤","40","大阪") ^ISJ(4)=$lb("伊藤","30","京都") %Library.GlobalクラスのGetクエリ を使用して取得し、iris.sql.execを使用して DataFrame に格納する方法があります。ただし、こちらの方法はリスト形式($LB)のまま DataFrame に変換します。 USER>do $system.Python.Shell() Python 3.9.5 (default, Apr 15 2022, 01:28:04) [MSC v.1927 64 bit (AMD64)] on win32 Type quit() or Ctrl-D to exit this shell. >>> mysql = "select name,value from %library.global_get('user','^ISJ',,2,2)" >>> resultset = iris.sql.exec(mysql) >>> dataframe = resultset.dataframe() >>> print (dataframe) name value 0 ^ISJ 4 1 ^ISJ(1) $lb("Name","Age","Address") 2 ^ISJ(2) $lb("佐藤","50","東京") 3 ^ISJ(3) $lb("加藤","40","大阪") 4 ^ISJ(4) $lb("伊藤","30","京都") >>> こちらの結果の value を Name, Age, Address に分けて変換したい場合、既存の %Global.cls のクエリで行うことはできないため、 IRIS側で、あらかじめリスト形式($LB)を分解してから処理する か、 Python側で、IRISのリスト形式($LB)のまま格納されたデータを文字列置換などして DataFrame を作り直す のどちらかを行う必要があります。 上記1の「IRIS側で処理する」場合、カスタムクラスクエリ を使用してグローバル内のリストの各データを返すクエリを作成し、それをSQL経由でアクセスする方法が考えられます。カスタムクラスクエリを使用する方法は、SQL文ではなくユーザコードでクラスクエリを記述する方法はありますか? の記事でご紹介しています。 上の記事で紹介しているサンプルクラスを使用して、^ISJ のリストを要素別に抽出するサンプルを作成してみました。 ^ISJの value の結果列が$LB形式で3要素なので、上の記事で使用しているサンプルを以下のように変更します。 ★GFetchクラスメソッド //Set Row=$LB($na(@glvn@(x)),@glvn@(x)) Set Row=$LB($na(@glvn@(x)),$LIST(@glvn@(x),1),$LIST(@glvn@(x),2),$LIST(@glvn@(x),3)) ★Gクエリ // Query G(glvn As %String) As %Query(CONTAINID = 0, ROWSPEC = "Node:%String, Value:%String") [ SqlProc ] Query G(glvn As %String) As %Query(CONTAINID = 0, ROWSPEC = "Node:%String, Value1:%String, Value2:%String, Value3:%String") [ SqlProc ] 実行例は以下のようになります。 USER>do $system.Python.Shell() Python 3.9.5 (default, Apr 15 2022, 01:28:04) [MSC v.1927 64 bit (AMD64)] on win32 Type quit() or Ctrl-D to exit this shell. >>> mysql="select * from SQLUSER.TestStoredProc1_G('^ISJ')" >>> resultset = iris.sql.exec(mysql) >>> dataframe = resultset.dataframe() >>> print (dataframe) node value1 value2 value3 0 ^ISJ(1) Name Age Address 1 ^ISJ(2) 佐藤 50 東京 2 ^ISJ(3) 加藤 40 大阪 3 ^ISJ(4) 伊藤 30 京都 >>> 今回使用したサンプルはこちらにあります 👉https://github.com/Intersystems-jp/GlobalToPandasDataframe ~~~ (2022/06/01現在)日本語対応はしていませんが、以下のような方法もあります。こちらは将来のバージョンで日本語対応予定です。%SYS.Pythonクラスの ToList()メソッドを使用して、IRISリストをPythonリストに変換する方法です。 1.以下のようなクラスを作成します。 ClassMethod toPythonList(gname As %String, i As %Integer) As %SYS.Python { quit ##class("%SYS.Python").ToList(@gname@(i)) } ClassMethod getDataFrame(gname As %String) [ Language = python ] { import iris import pandas as pd g = iris.gref(gname) cnt=g[None] newlist=[] for i in range(1,cnt+1): datalist=iris.cls(__name__).toPythonList(gname, i) newlist.append(datalist) newdf=pd.DataFrame(newlist[1:cnt],columns=[newlist[0][0],newlist[0][1],newlist[0][2]]) print(newdf) } 2.次のように実行します。使用するのは ^ISJ2 のような英数字のみのデータが含まれるリスト形式のグローバルです。 USER>zw ^ISJ2 ^ISJ2=4 ^ISJ2(1)=$lb("Name","Age","Address") ^ISJ2(2)=$lb("Sato","50","Tokyo") ^ISJ2(3)=$lb("Kato","40","Osaka") ^ISJ2(4)=$lb("Ito","30","Kyoto") USER>do ##class(%SYS.Python).Shell() Python 3.9.5 (default, Apr 15 2022, 01:28:04) [MSC v.1927 64 bit (AMD64)] on win32 Type quit() or Ctrl-D to exit this shell. >>> iris.cls('User.PythonTest').getDataFrame('^ISJ2') Name Age Address 0 Sato 50 Tokyo 1 Kato 40 Osaka 2 Ito 30 Kyoto
記事
Hiroshi Sato · 2021年10月7日

ジャーナルファイルの内容を管理ポータル以外で参照する方法

これは InterSystems FAQ サイトの記事です。ジャーナルファイルのサイズが大きすぎて、管理ポータルで検索やフィルタリング等できない場合、以下の2つの方法で参照することができます。 ① ^JRNDUMP ユーティリティを使用する方法② プログラムで参照する方法 ============================================================ ① ^JRNDUMP ユーティリティを使用する方法 例えば、グローバル参照 ^ABC を含むジャーナルファイルのすべてのレコードを選択する場合は、以下のようになります。 ※以下、すべてのコマンドは %SYS ネームスペースで実行してください。 DO SELECT^JRNDUMP("C:\MyCache\mgr\journal\YYYYMMDD.001","","","^ABC",1) グローバル参照 ^ABC に完全に一致するレコードのみを選択する場合は、以下のようになります。 DO SELECT^JRNDUMP("C:\MyCache\mgr\journal\YYYYMMDD.001","","","^ABC",0) グローバル ^ABC に対するローカルの Set 処理のレコードのみを選択する場合は、以下のようになります。 DO SELECT^JRNDUMP("C:\MyCache\mgr\journal\YYYYMMDD.001","","","^ABC","",6) グローバル ^ABC に対するローカルおよびリモートの Set 処理のレコードのみを選択する場合は、以下のようになります。 DO SELECT^JRNDUMP("C:\MyCache\mgr\journal\YYYYMMDD.001","","","^ABC","","s") 詳細は下記ドキュメントページをご覧ください。 ^JRNDUMP を使用したジャーナル・レコードの表示 ============================================================ ② プログラムで参照する方法 %SYS.Journal.Record クラスを使用して、任意のジャーナルファイルのレコード内容を取得することができます。 set jrn="C:\intersystems\cache\mgr\journal\20160101.003" set log="C:\temp\journal.log" set file=##class(%File).%New(log) do file.Open("WSN") set rs=##class(%ResultSet).%New("%SYS.Journal.Record:List") do rs.Execute(jrn) while rs.Next() { set time=rs.Get("TimeStamp") // 時間:yyyy-mm-dd hh:mm:ss set type=rs.Get("TypeName") // タイプ:SET、KILL、xxTrans など set gref=rs.Get("GlobalReference") // グローバル参照 set gval=rs.Get("NewValue") // 更新後の値 /* if gref["ABC" { */ set line=time_" ["_type_"] "_gref if type="SET" { set line=line_"="_gval } do file.WriteLine(line) /* } */ } do file.Close() 詳細は下記クラスリファレンスをご覧ください。 クラスリファレンス(%SYS.Journal.Record:List)
記事
Tomoko Furuzono · 2023年4月11日

マッピングしたグローバルのエクスポートについて

これは、InterSystems FAQサイトの記事です。%Library.GlobalクラスのExport()メソッドを使用してエクスポートする際に、エクスポート形式(第4引数:OutputFormat)を 7 の「ブロックフォーマット/Cachéブロックフォーマット(%GOF)」にした場合、マッピングされたグローバルはエクスポートできない仕様となっています(対象はネームスペースのデフォルトグローバルデータベースのグローバルのみ)。マッピングされたグローバルを「ブロックフォーマット/Cachéブロックフォーマット(%GOF)」でエクスポートする為には、%Library.Global.Export()の第1パラメータにマッピング先のデータベースディレクトリを指定します。実行例は以下の通りです。 set DB = "^^c:\InterSystems\Cache\Mgr\Test\" ; "^^\<データベースフォルダーのパス>\" set sc = ##class(%Library.Global).Export(DB,"TESTGBL.gbl",FULLPATH,7,,"") エクスポート形式を 5(既定値) の「ISM/ObjectScriptフォーマット(ISM/Cacheフォーマット)(※)」を指定した場合、マッピングされたグローバルもエクスポートできますが、エクスポート形式(第4引数:OutputFormat)を 7 の「ブロックフォーマット/Cachéブロックフォーマット(%GOF)」にした場合と比べ、出力ファイルが大きくなります。※ シーケンシャルファイル形式また、グローバルにバイナリデータが記録されている場合、そのデータは正常に出力されません。詳細については、以下ドキュメントをご覧ください。クラスリファレンス:%Library.Global.Export() 【IRIS】クラスリファレンス:%Library.Global.Export() 【注意】$LIST形式や制御文字を含むグローバルの場合は、エクスポート形式を 5(既定値) の「ISM/ObjectScriptフォーマット(ISM/Cacheフォーマット)(※)」で正常にエクスポートできません。この場合は、データベース単位に、エクスポート形式(第4引数:OutputFormat)を 7 の「ブロックフォーマット/Cachéブロックフォーマット(%GOF)」でエクスポートする必要があります。
記事
Megumi Kakechi · 2022年3月3日

IRISTEMPデータベースでどの一時グローバルがサイズ消費しているかを特定する方法

これは、InterSystems FAQサイトの記事です。ある処理において、データを無期限に保存する必要がなくグローバルの強力な性能が必要になる場合に、IRISTEMP/CACHETEMP データベースに保存される一時グローバルが使用されます。IRISTEMP/CACHETEMPデータベースはジャーナルされないので、一時グローバルの使用ではジャーナルファイルは作成されません。 IRISTEMP/CACHETEMP データベースは、システムで一時ストレージ用に使用され、ユーザも同じ用途で使用することができます。 一時グローバルとIRISTEMPデータベースの詳細については、以下のドキュメントをご覧ください。一時グローバルと IRISTEMP データベース 一時グローバルとして使用されるグローバルには以下のようなものがあります。 1. システムテンポラリグローバル(^IRIS.Temp*、^%cspSession、^CacheTemp*、^mtemp* など)2. ユーザが設定したIRISTEMP/CACHETEMPへのマッピングによる一時グローバル3. プロセスプライベートグローバル (^||name、^|"^"|name、^["^"]name、^["^",""]name など)4. GLOBAL TEMPORARY テーブル ⇒テーブル定義は永続(全てのプロセスで使用可能)で、テーブルデータはプロセスプライベートグローバルに格納します(プロセスの期間中のみ存続) 1,2 のサイズは ^%GSIZE ユーティリティで確認できます。 USER>do ^%GSIZEDirectory name: c:\intersystems\iris\mgr\user\ => c:\intersystems\iris\mgr\iristemp\ // iristemp データベースフォルダを指定All Globals? No => yes // 全てのグローバルを表示する場合は Yes 34 items selected from34 available globalsShow details?? No => No // 詳細情報を表示しない場合は NoDevice:Right margin: 80 =>: 3,4 のプロセスプライベートグローバルは、^GETPPGINFOユーティリティーで確認が可能です。 ^GETPPGINFOユーティリティについては、以下のドキュメントをご覧ください^GETPPGINFOユーティリティについて【IRIS】^GETPPGINFOユーティリティについて 以下の例では、すべての現在プロセスのプロセスプライベートグローバルをリストしています。 set ^||flintstones(1)="Fred" set ^||flintstones(2)="Wilma" znspace "%SYS" do ^GETPPGINFO("*") プロセスプライベートグローバルを使用するプロセスのうち、使用量が多いものを個別に内容出力する方法もあります。 以下のサンプルでは、プロセスあたりのプロセスプライベートグローバルブロック数が20以上のものを出力しています。 set ns=$namespace znspace "%SYS" // 全プロセスよりPPGのブロック数が多いもののみ対象とする set st=##class(%SQL.Statement).%New() set status=st.%PrepareClassQuery("%SYS.ProcessQuery","AllFields") set rs=st.%Execute() while rs.%Next() { set pid=rs.%Get("Pid") // プロセスID set cnt=rs.%Get("PrivateGlobalBlockCount") // PPGのブロック数 // プロセスあたりのPPGブロック数が〇以上の時中身を出力(以下の例は20ブロック以上) if cnt > 20 { set rs2=##class(%ResultSet).%New("%SYS.ProcessQuery:PPG") // "N" Do not return subscripts of a PPG, just return the root name // "B" Return the number of blocks used by the PPG (needs the "N" option) do rs2.Execute("*",pid,"NB") for { quit:'rs2.Next() write cnt_" PID:"_pid_", PPG name "_rs2.GetData(1)_" is using "_rs2.GetData(3)_" disc blocks",! } } } znspace ns
記事
Megumi Kakechi · 2022年8月8日

テーブルデータ一括削除の際にジャーナルデータを最小限にする方法

これは InterSystems FAQ サイトの記事です。 テーブル(クラス) のデータを削除する際に %KillExtent() というメソッドを使用すると、レコードを1ずつ削除するのではなく、データを格納しているデータグローバル、インデックス定義のグローバル(ノード) をまとめて 削除することができます。 kill ^ISJ.xxxD kill ^ISJ.xxxI のようにデータグローバルやインデックスグローバルをまとめて削除するのと同じような動作となります。そのため、ジャーナルレコードへの出力は最小限になります。 使用例: write ##class(ISJ.xxx).%KillExtent() ただし、トランザクション下で実行すると一括 Kill の場合でも保存されているレコードに応じたジャーナルレコードが生成されるのでご注意ください。 また、以下のドキュメントの注意書きにあるように、他クラス(テーブル)への参照などが含まれているクラスで実施されると整合性に問題が発生する場合がありますのでご注意ください。 %KillExtent() メソッド こちらを必要なだけ記述したタスククラスを作成すると、タスクスケジューラから定期的に実行できます。タスククラスの作成方法は、以下のトピックをご覧ください。 【FAQ】定期的に処理を実行する事は出来ますか? 【ご参考】 IRIS 2021.2 (メジャー/EMバージョンは 2022.1) 以降のバージョンで、ジャーナルファイルの圧縮機能 が追加されました。このバージョン以降、非アクティブなジャーナルファイルを圧縮して保存することが可能となります。圧縮率はおよそ 85% です。例えば、1GBのファイルサイズの場合は、150MB程度に圧縮されます。 ジャーナルファイルの圧縮は、IRIS構成ファイル(iris.cpf)[Journal] セクションの CompressFiles オプションで設定できます。既定は「1(有効)」になっています。InterSystems IRIS 2022.1 の新機能と機能強化について また、圧縮されたジャーナル・ファイルを任意のアーカイブ・ロケーションにコピーできる、ジャーナル・ファイル・アーカイブ機能は 2022 のCDリリースと 2023.1 メジャーリリースで提供予定です。ジャーナル・アーカイブ機能を有効にすると、ローカルのジャーナル・ファイルをより早くパージすることができるようになります。アーカイブ先には、高い書き込み性能は必要ないため、低速で安価なオブジェクトストレージを選択することが可能です。 2022年3月9日に開催しました、「InterSystems Japan Virtual Summit 2022」の「ストレージの節約手法について」 のセッションでは、ジャーナル圧縮 & アーカイブの新機能について紹介しています。是非ご覧ください。 【アーカイブ配信のお知らせ】ストレージの節約手法について(2022年3月9日開催)※16:00 ~ ジャーナリングについて 19:00 ~ ジャーナル圧縮&アーカイブについて
記事
Megumi Kakechi · 2021年2月1日

Webゲートウェイのエラーメッセージをカスタマイズする方法

これは InterSystems FAQ サイトの記事です。 下記のWebゲートウェイのエラーメッセージ/システム応答に対して、個別のエラーページを設定することができます。 サーバエラー サーバビジー サーバが利用可能ではありません サーバタイムアウト 接続が閉じられました 設定は、Webゲートウェイ管理画面( [管理ポータル] > [システム管理] > [構成] > [Webゲートウェイ管理] )で行います。 [デフォルトパラメータ] メニュー内の [エラーページ] セクションで、各エラー発生時に表示させるhtmlページのファイル名またはリダイレクトさせるURLを設定します。 ※Webゲートウェイ管理画面は、下記URLからもアクセス可能です。 http://<Webサーバアドレス>:<ポート>/csp/bin/Systems/Module.cxw 詳細は、以下ドキュメントをご参照ください。カスタムエラーページについて【IRIS】
記事
Megumi Kakechi · 2020年12月15日

プログラムでクエリキャッシュを削除する方法

これはInterSystems FAQ サイトの記事です。 %SYSTEM.SQL クラスの Purge* メソッドを使用して削除することが可能です。 ※各メソッドの詳細は、以下ドキュメントをご参照ください。 %SYSTEM.SQLクラスについて【IRIS】 %SYSTEM.SQLクラスについて ①システム内のすべてのクエリキャッシュを削除する場合 Do $SYSTEM.SQL.PurgeAllNamespaces() ②ネームスペース内のクエリキャッシュを削除する場合 // ネームスペース内のすべてのクエリキャッシュを削除するDo $SYSTEM.SQL.Purge()// 日付指定してクエリキャッシュを削除する場合// 以下は、過去30日間に使用されていないクエリキャッシュを削除Do $SYSTEM.SQL.Purge(30) ③クエリキャッシュを指定して削除する場合 Do $SYSTEM.SQL.PurgeCQClass("%sqlcq.USER.cls13") ④特定テーブルのクエリキャッシュを削除する場合 Do $SYSTEM.SQL.PurgeForTable("MedLab.Patient")
記事
Mihoko Iijima · 2021年3月5日

ID を指定してインデックスを再構築する方法

これは InterSystems FAQ サイトの記事です。 永続クラス(=テーブル)定義に提供される %BuildIndices() メソッドの引数に、インデックスを再構築したい ID の開始値と終了値を指定することにより、その範囲内のインデックスのみが再構築できます。 例えば、Sample.Person クラスにある NameIDX インデックスと ZipCode インデックスを ID=10~20 のみ再構築する場合は、以下のように実行します(ID の範囲は、第5引数、第6引数に指定してます)。 set status = ##class(Sample.Person).%BuildIndices($LB("NameIDX","ZipCode"),1,,1,10,20) $LB() は $ListBuild() 関数で、%BuildIndices() メソッドでは、インデックス名を指定するために使用しています。 インデックスの再構築方法については、ドキュメントもご参照ください。 2018.1 以下はこちらのドキュメントをご参照ください。
記事
Tomoko Furuzono · 2021年6月15日

ターミナルをコマンドプロンプトから起動する方法

これは、InterSystems FAQサイトの記事です。 Windowsのコマンドプロンプトからターミナルを起動するには以下の様な操作を行います。 実行イメージの場所に移動します。 cd c:\interssytems\IRIS\bin 以下のコマンドを実行します。  ( インスタンス名のデフォルトは「IRIS」です。) iristerm.exe /console=cn_ap:<インスタンス名>[] コンソールターミナルは以下のように実行します。 iris console <インスタンス名> コンソールターミナルの場合、そのままでは日本語を正しく表示できませんのでご注意ください。日本語を表示させるためには、以下の記事の内容の設定が必要です。(外部技術情報サイト)コマンドプロンプト起動時、自動的に文字コードをUTF-8にして日本語もちゃんと表示できるようにする方法
記事
Mihoko Iijima · 2021年7月20日

バージョンアップした後のルーチンの再コンパイルについて

これは InterSystems FAQ サイトの記事です。 バージョンアップ後、ルーチンを再コンパイルする必要はありませんが、バージョンアップで %SYS が上書きされるため、%SYS 内のユーザ作成 INT 形式および OBJ 形式ルーチン(*.INT,*.OBJ)が削除されますので、注意が必要です。 MAC形式(.MAC)と以下の名前の INT 形式および OBJ 形式ルーチンについては削除されません。 %Z*.INT, %z*.INT, Z*.INT,z*.INT %Z*.OBJ, %z*.OBJ, Z*.OBJ,z*.OBJ なお、クラス/CSP はアップグレード後にコンパイルが必要となります。 ただし、メンテナンスリリースへのアップグレードの場合は、コンパイルは不要です。詳細は、以下ドキュメントをご参照ください。 メンテナンス・リリースのアップグレード後のタスク Caché/Ensemble:メンテナンス・リリースのアップグレード後のタスク
記事
Mihoko Iijima · 2021年9月14日

管理ポータルから任意のSQL実行結果をCSVファイルに出力する方法

これは InterSystems FAQ サイトの記事です。 管理ポータルの SQL 画面(管理ポータル > システムエクスプローラ > SQL)で、任意の SQL を実行した後、結果の行数などが表示されいる行の右端にある「印刷」のリンクから、CSVファイル出力を選択できます。 「クエリ印刷」画面で「ファイルにエクスポート」をチェックすると「ファイル形式」の欄が表示されます。 形式に「CSV」を指定し、出力ファイル名を指定したあと「エクスポート」ボタンをクリックすると出力できます。 注意:古いバージョンでは正しくCSV出力が行えない場合もあります。新しいバージョンをぜひご利用ください。 プログラムでCSV出力を行いたい場合は、関連記事をご参照ください。 任意のSQL文の実行結果をプログラムでCSVに出力する方法
記事
Tomoko Furuzono · 2021年12月26日

メッセージ・ログ(messages.log)/コンソール・ログ(cconsole.log) に出力される「Purging Application Error Logs」のメッセージとは

これは、InterSystems FAQサイトの記事です。 MM/DD/YY-hh:mm:ss:fff ( ) 0 [Utility.Event] Purging old application errors こちらのメッセージは、エラーではなく、アプリケーションのエラーログを記録した古い ^ERRORSグローバルのパージ処理が実行された際に出力されるメッセージになります。ログを削除した旨のみを伝えるメッセージであり、出力されていても特に問題はありません。また、このログは、^ERRORSグローバルのパージ処理がタスク実行される毎日01:00 に出力されます。 実際にアプリケーションエラーがある場合は、管理ポータルの [システムオペレーション] > [システムログ] > [アプリケーションエラーログ] にて、詳細を確認できます。※このエラーログの内容は、各ネームスペースの ^ERRORS グローバルに格納されているものです。
記事
Mihoko Iijima · 2023年4月17日

データベースがReadOnlyでマウントされるケース

これは InterSystems FAQ サイトの記事です。 以下の状態の時、ReadOnlyでマウントされます。 データベースの構成設定「読み込み専用でマウント」にチェックをつけている データベースマウント時「読み込み専用」のチェックをつけている ミラー構成を使用していないのにデータベースにミラー属性がついている 詳細は「ミラー・データベースがミラー構成削除後に読み取り専用でマウントされる」をご参照ください。 データベースファイルが存在するディレクトリを全体をコピーし、そのディレクトリに対してデータベースを作成したとき 詳細は「データベースファイルが存在するフォルダ全体をコピーしたとき、コピーしたデータベースファイルがマウントできません。」をご参照ください
記事
Tomoko Furuzono · 2022年5月6日

最大ネームスペース数とデータベース数

これは、InterSystems FAQ サイト の記事です。 1つのインスタンスで作成可能なネームスペース数の上限は、2048個になります。ただし多数のネームスペースを使用するには、それに合わせてメモリの設定が必要になります。使用するメモリの設定については下記の関連トピックご参照ください。管理ポータルのメモリ関連設定項目について また1つのインスタンスに作成可能なデータベース数(リモートデータベースを含む)の上限は、15998個になります。なおライセンスの種類によっては、作成可能な数に制限が設けられています。 詳細については、以下ドキュメントをご参照ください。ドキュメント:ネームスペースの構成ドキュメント:ローカル・データベースの構成