記事 Mihoko Iijima · 2021年2月12日 3m read SQL から ObjectScript で記述したプログラムを実行して値を返す方法 これは InterSystems FAQ サイトの記事です。 以下例のクラスメソッド getLatestID() のように ObjectScript のクラスメソッドを用意します。返したい値を戻り値に指定し、SQLストアドプロシージャ(SqlProc)キーワードを指定するだけで値が返せます。 ClassMethod getLatestID() As %Integer [ SqlName = getLatestID, SqlProc ] { set latestID=$Order(^ISJ.TestClass1D(""),-1) quit latestID } 操作を試す場合は、以下のクラス定義をご準備ください。 #ObjectScript #SQL #ヒントとコツ #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 322
記事 Mihoko Iijima · 2021年2月12日 5m read XMLファイルの内容をデータベースに登録する方法 これは InterSystems FAQ サイトの記事です。 XMLファイルの内容を格納する永続クラス定義を作成し、%XML.Adaptor を追加で継承します。 例は以下の通りです(右端の %XML.Adaptorクラスを追加で継承します)。 Class ISJ.Class1 Extends (%Persistent, %Populate, %XML.Adaptor) #ObjectScript #XML #オブジェクトデータモデル #ヒントとコツ #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 2 0 0 1.9K
記事 Mihoko Iijima · 2021年2月5日 5m read Java クラスのモジュールを IRIS から実行する方法 これは InterSystems FAQ サイトの記事です。 Java ゲートウェイを使用することで、Java クラスのモジュールを InterSystems IRIS から実行できます。 【メモ】Java ゲートウェイは、外部 Java オブジェクトを InterSystems IRIS 内のネイティブ・オブジェクトと同じようにインスタンス化し、Javaオブジェクトを操作するための方法です。 詳細は以下ドキュメントをご参照ください。Java ゲートウェイについて Java ゲートウェイを使用する手順は以下の通りです。 1) Java ゲートウェイサーバを開始する #Java #JDBC #ObjectScript #相互運用性 #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 407
記事 Toshihiko Minamoto · 2021年2月4日 6m read InterSystems ObjectScript Package Manager のご紹介 開発者の皆さん、こんにちは! InterSystems ObjectScript でライブラリやツール、パッケージなどを開発していると、「このパッケージはどうすればターゲットマシンに展開できるのか?」という疑問がよく浮かびます。 また、私たちは、既に別のライブラリがインストールされていることを想定したり、その特定のバージョンのことを考慮したりしながらパッケージを開発しています。 JavaScript や Python などでコーディングを行うと、依存関係を管理しながらパッケージを展開するのに パッケージ管理システム が必要になります。 これを踏まえ、 InterSystems ObjectScript Package Manager のリリースを発表したいと思います! #ObjectScript #InterSystems Package Manager (IPM) #オープンソース #リリース #InterSystems IRIS #Open Exchange Open Exchange app 0 0 0 281
記事 Hiroshi Sato · 2021年2月1日 1m read ローカル変数の値がOREFであるかどうかの判定法 これは InterSystems FAQ サイトの記事です。 $IsObject()を使用して判別できます。 調べたい変数をvとすると、 $IsObject(v)=1 // vはOREF$IsObject(v)=0 // vはOREFではない$IsObject(v)=-1 // vはOREFだが、有効なオブジェクトを指していない となります。 vが未定義の場合は、$IsObject(v)はUNDEFINEDエラーとなりますので、ご注意ください。 UNDEFINEDエラーを防止するには、次のように$Getを使用することをお勧めします。 #ObjectScript #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 209
質問 Taro Yamada · 2021年1月28日 ループ中にエラーが発生してもそのままループを継続したい 皆さんこんにちは。 以下のメソッドでは日付の入った配列を受け取り、すべてのYYYY-MM-DD形式の日付を$horologに変換しているのですが、たまに日付が古すぎるものが入っており<VALUE OUT OF RANGE>エラーが発生して途中で止まってしまいます。エラー時にエラーメッセージを代入してそのまま継続できる方法はないでしょうか? プログラムは以下の通りです。 #ObjectScript #InterSystems IRIS 0 2 0 745
記事 Hiroshi Sato · 2021年1月27日 1m read ObjectScriptにはメソッドのオーバーロードはありません これは InterSystems FAQ サイトの記事です。 InterSystems ObjectScript言語では引数の異なる同名のメソッドを定義することはできません。 InterSystems ObjectScript言語は一般的に動的言語と呼ばれるプログラミング言語に分類されます。 ObjectScriptではメソッド実行時にどの引数を使用するかどうかは自由に制御可能ですので、動的プログラミング言語ではないJava等の言語と異なり、コンパイルの段階で厳密に引数の数でメソッドを区別する必要がありません。 従って ObjectScript言語は、オーバーロードと一般に呼ばれる言語仕様を含んでいません。 Java等で記述されたプログラムを移植する際にオーバーロード相当の機能を実現するには、 ClassMethod test(args... as %String) のように引数の後ろに ... を付加します。 #ObjectScript #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 222
記事 Hiroshi Sato · 2021年1月27日 1m read 文字列の置換方法 これは InterSystems FAQ サイトの記事です。 文字列の置換には$REPLACE関数を使います。 ドキュメントはこちら #ObjectScript #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 330
記事 Mihoko Iijima · 2021年1月15日 2m read 文字列の前後の半角スペース及び全角スペースを取り除く方法 これは InterSystems FAQ サイトの記事です。 $ZSTRIP() 関数を使用します。 この関数を使用すると、指定文字列から、文字のタイプと文字を削除できます。 下記の例のように、第2引数で、"<"、">"、"<>"を指定することにより、SQLのLTRIM、RTRIM、TRIM関数と同等の処理が可能になります。 #ObjectScript #ヒントとコツ #Caché #Ensemble #HealthShare #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 860
記事 Toshihiko Minamoto · 2021年1月11日 4m read データ変更の追跡 - 監査ログ - (2/2) 前回の記事では、データの変更を簡単に記録できる方法をお見せしました。 今回は、監査ログが記録されるデータ構造と監査データを記録する「Audit Abstract クラス」を変更しました。 また、データ構造は親構造と子構造に変更し、それぞれに「トランザクション」とそのトランザクションで「その値によって変更されたフィールド」を記録するテーブルが 2 つ設けられます。 新しいデータモデルをご覧ください。 「監査クラス」から変更したコードをご覧ください。 #ObjectScript #オブジェクトデータモデル #Caché 0 0 0 135
お知らせ Mihoko Iijima · 2021年1月11日 テクノロジーボーナス詳細:第9回 InterSystems IRIS プログラミングコンテスト(マルチモデルコンテスト) 開発者の皆さん、こんにちは! 第9回のマルチモデルコンテストの 続報 📣 の「テクノロジーボーナス」についてご紹介します。 #ObjectScript #SQL #オブジェクトデータモデル #グローバル #コンテスト #データモデル #InterSystems IRIS #Open Exchange 0 0 0 101
記事 Toshihiko Minamoto · 2021年1月5日 9m read データ変更の追跡 - 監査ログ(1/2) はじめに 多くのアプリケーションに共通する要件は、データベース内のデータ変更のログ記録です。どのデータが変更されたか、誰がいつ変更したかをログに記録する必要があります(監査ログ)。 このような質問について書かれた記事は多く存在し、Caché で行う方法の切り口もさまざまです。 そこで、データ変更を追跡して記録するためのフレームワークを実装しやすくする仕組みを説明することにします。 これは、永続クラスが「監査抽象クラス」(Sample.AuditBase)から継承すると「objectgenarator」メソッドを介してトリガーを作成する仕組みです。 永続クラスは Sample.AuditBase から継承されるため、永続クラスをコンパイルすると、変更を監査するためのトリガーが自動的に生成されます。 監査クラス 次は、変更が記録されるクラスです。 #ObjectScript #オブジェクトデータモデル #ベストプラクティス #Caché 0 0 0 193
記事 Toshihiko Minamoto · 2020年12月21日 9m read $LIST のフォーマットと%DynamicArray 、%DynamicObject クラス $LIST のフォーマットと%DynamicArray、%DynamicObject クラス IRIS には、様々なデータ値を含むシーケンスを作成する方法がいくつかあります (以前は Cache にもありました)。 長年に渡り使用されているデータシーケンスの 1 つに $LIST の文字列があります。 より最近のデータシーケンスには %DynamicArray クラスと %DynamicObject クラスがあり、両者ともに JSON の文字列表現に対応する IRIS サポートの一部となっています。 これら 2 つのシーケンスにはそれぞれ非常に異なるトレードオフがあります。 $LIST の文字列形式 $LIST 形式は、かつてメモリアドレスのスペースが小さいだけでなく、ディスクドライブも小さく、読み取り速度が遅かった時代に考案されました。 $LIST の形式は、複数の異なるデータ型で構成されるシーケンスをバイト数を可能な限り抑えながら 8 ビットの一般的な文字列にパッキングするためにデザインされました。 $LIST のシーケンスは、ObjectScript の $LISTBUILD 関数を使って作成します。 #JSON #ObjectScript #ベストプラクティス #Caché #InterSystems IRIS 0 0 0 799
記事 Hiroshi Sato · 2020年12月15日 3m read クラス定義をスタジオ、Atelier以外を使用して作成する方法 これはInterSystems FAQ サイトの記事です。 InterSystems OpenExchangeのVS Code用のプラグインを利用することでVS Code上でクラス定義の編集が可能です。 (今後は、AtelierではなくVS Codeの使用を推奨しています。) 詳細は、以下ページをご参照ください。 vscode-objectscript また、逆にテーブル定義からクラス定義を生成することも可能です。 方法①として、他社RDBMS用に作成したDDL文をインターシステムズ製品上で実行、またはインポートする方法があります。 詳細は、以下ドキュメントをご参照ください。 #ObjectScript #VSCode #スタジオ #Caché #Ensemble #InterSystems IRIS 0 0 0 262
記事 Toshihiko Minamoto · 2020年12月2日 3m read %GlobalBinaryStreamにあるテキストデータを漢字コード変換する方法 皆さん、こんにちは。ストリームデータをデータベースに格納する場合、ファイルなどから読み取る際に漢字コード変換を行い、Unicode形式で%GlobalCharacterStreamに格納されるかと思いますが、時々、バイナリのままで読み込んでしまい、漢字コード変換を行わないといけない状況があるかと思います。 ファイルストリームでしたら%FileCharacterStreamクラスのTranslateTableプロパティに元の漢字コードを指定すれば、以下のようにコード変換しながら読みだすことは可能です。 #ObjectScript #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 1 390
記事 Mihoko Iijima · 2020年12月1日 2m read データベースに格納されているStreamデータをファイルに出力する方法 これは、InterSystems FAQサイトの記事です。 以下の例では Test.Class2 クラスの Images プロパティに画像ファイルが保存できるように定義しています。input() メソッドを利用して画像ファイルを Images プロパティに登録し、データベースに保存したとします。 #ObjectScript #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 392
記事 Mihoko Iijima · 2020年12月1日 2m read プログラム内でロック情報を取得する方法 これは、InterSystems FAQサイトの記事です。 プログラムでロック情報を取得するには以下2種類の方法があります。 #ObjectScript #システム管理 #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 268
記事 Toshihiko Minamoto · 2020年11月18日 3m read FTP ファイルのダウンロード(すべてのファイル、ファイル数)オプション: ファイルのコピーまたはファイルの移動 FTP ファイルを Intersystems Caché からダウンロードするメソッドを以下に示します。ご質問がある場合はメッセージをお寄せください。 #Code Snippet #FTP #ObjectScript #Caché 0 0 0 301
記事 Hiroshi Sato · 2020年11月16日 2m read ネームスペースやデータベースを作成するコマンドラインインタフェースとAPI これはInterSystems FAQ サイトの記事です。 Config.Configurationクラス、SYS.Databaseクラスのメソッドを使用して、ネームスペース・データベースの作成及び登録をターミナルから実行することができます。 以下はデータベースファル/CacheDB/AAA/cache.datを作成し、構成ファイル(cache.cpf)にデータベース AAA、及び、ネームスペースAAAの登録を行う一連の実行例です。*実行は、%SYSネームスペースで行って下さい。* #API #ObjectScript #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 281
記事 Hiroshi Sato · 2020年11月16日 1m read メソッドのオーバロードについて これはInterSystems FAQ サイトの記事です。 InterSystems ObjectScript言語では引数の異なる同名のメソッドを定義することはできません。 InterSystems ObjectScript言語は一般的に動的言語と呼ばれるプログラミング言語に分類されます。 ObjectScriptではメソッド実行時にどの引数を使用するかどうかは自由に制御可能ですので、動的プログラミング言語ではないJava等の言語と異なり、コンパイルの段階で厳密に引数の数でメソッドを区別する必要がありません。 従って ObjectScript言語は、オーバーロードと一般に呼ばれる言語仕様を含んでいません。 Java等で記述されたプログラムを移植する際にオーバーロード相当の機能を実現するには、 ClassMethod test(args... as %String) のように引数の後ろに ... を付加します。 #ObjectScript #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 129
記事 Toshihiko Minamoto · 2020年11月10日 8m read Caché ObjectScript でパフォーマンスの良い loop を書く方法について 最近行われたディスカッションの中で、Caché ObjectScript における for/while loop のパフォーマンンスが話に出ましたので、意見やベストプラクティスをコミュニティの皆さんと共有したいと思います。 これ自体が基本的なトピックではありますが、他の点では合理的と言える方法のパフォーマンスが意味する内容を見逃してしまうことがよくあります。 つまり、$ListNext を使って$ListBuild リストをイテレートするループ、または $Order を使ってローカル配列をイテレートするループが最も高速な選択肢ということです。 #Code Snippet #ObjectScript #コーディングのガイドライン #ヒントとコツ #Caché 1 0 0 460
記事 Toshihiko Minamoto · 2020年11月3日 123m read Caché における正規表現の使用について 1.本記事の内容 Caché パターンマッチングと同様に、Caché では正規表現を使ってテキストデータのパターンを特定することができますが、後者の場合はより高い表現力を利用できます。 本記事では正規表現を簡単に紹介し、Caché での活用方法について解説します。 本記事の情報は、主に Jeffrey Friedl 氏著作の「Mastering Regular Expressions (詳説 正規表現)」に加え、もちろん Caché のオンラインドキュメンテーションなど、様々なリソースを基に提供しています。 本記事は正規表現のあらゆる可能性や詳細について解説することを意図したものではありません。 更なる詳細にご興味のある方は、チャプター 5 に記載のソースを参照してください。 オフラインで読む場合は、PDF バージョンをダウンロードしていただけます。 #ObjectScript #チュートリアル #Caché #InterSystems IRIS 0 0 1 686
記事 Hiroshi Sato · 2020年10月29日 1m read ローカル変数の値がOREFかどうかを判定する方法 これはInterSystems FAQ サイトの記事です。 $IsObject()を使用して判別できます。 調べたい変数をvとすると、 $IsObject(v)=1 // vはOREF$IsObject(v)=0 // vはOREFではない$IsObject(v)=-1 // vはOREFだが、有効なオブジェクトを指していない となります。 vが未定義の場合は、$IsObject(v)はUNDEFINEDエラーとなりますので、ご注意ください。 UNDEFINEDエラーを防止するには、次のように$Getを使用することをお勧めします。 $IsObject($Get(v)) #ObjectScript #Caché #InterSystems IRIS 0 0 0 278
記事 Toshihiko Minamoto · 2020年10月28日 12m read $Sequence 関数について この記事では $Increment 関数と $Sequence 関数を比較します。 まずは、$Increment 関数を聞いたことがないという方のために、その概要を説明いたします。 $Increment は、CachéObjectScript の関数で、引数をアトミックに 1 ずつインクリメントし、結果の値を返します。 $Increment にパラメーターとして渡せるのはグローバル変数ノードとローカル変数ノードのみで、任意の式を渡すことはできません。 $Increment は連続する ID の割り当てに多用されます。 その場合、$Increment のパラメーターにはグローバルノードがよく使用されます。 $Increment を使用するプロセスには確実に任意の ID が割り当てられます。 #ObjectScript #Caché 0 0 0 283
記事 Toshihiko Minamoto · 2020年10月27日 14m read Cachéでの照合 秩序(順序)はだれにとっても必要であるが、皆が同じように秩序(順序)を理解しているわけではない (ファウスト・セルチニャーニ) 免責事項: この記事では、例としてロシア語とキリル文字を使用しますが、英語以外のロケールでCachéを使用するすべての方に関連のある記事です。 この記事は主にNLS照合について言及しており、SQL照合とは異なることに注意してください。 SQL照合(SQLUPPER、SQLSTRING、照合なしを意味するEXACT、TRUCATEなど)は、値に明示的に適用される実際の関数であり、その結果はグローバルサブスクリプトに明示的に格納されることがあります。 サブスクリプトに格納されると、これらの値は当然、有効なNLS照合(「SQLおよびNLS照合」)に従うことになります。 #ObjectScript #SQL #グローバル #Caché 0 0 0 497
記事 Mihoko Iijima · 2020年10月15日 5m read サーバ側ロジック(ObjectScript)で SQL を実行するときの DATE 型や TIME 型カラムの操作方法 これはInterSystems FAQ サイトの記事です。 DATE 型は InterSystems 製品のデータ型の %Date に、TIME 型は %Time に対応しています。 %Date は内部日付(特殊変数 $Horolog のカンマ区切り1番目)、%Time は内部時刻($Horolog のカンマ区切り2番目)を登録するタイプであるため、サーバ側ロジックでは表示モードを切り替えない限り、内部(論理)形式の値が使用されます。サーバ側ロジックで内部日付・時刻の表示形式を変更する方法は、操作方法により異なります。 以降の実行例では、Sample.Person テーブルを使用して解説します。(コマンド実行例は SELECT 文で記載していますが、更新文に対しても同様に記述できます。) #ObjectScript #SQL #Caché #InterSystems IRIS #InterSystems IRIS for Health 2 0 0 752
記事 Hiroshi Sato · 2020年10月15日 1m read カウンタとして時間経過を正確に計測する方法 これはInterSystems FAQ サイトの記事です。 $ZHorologを使用します。 $ZHorologシステム変数はInterSystems製品を起動してからの経過時間(秒)を保持しています。 2点間の$ZHorolog値の差を取るだけで正確な経過時間を取得する事が出来ます。 詳しくは以下、ドキュメントをご参照ください。 $ZHorologについて【IRIS】 $ZHorologについて この他、秒の小数部を含む時間の日付と時間の取得には $NOW, $ZTimeStamp が使用できます。 #ObjectScript #Caché #Ensemble #InterSystems IRIS 1 0 0 164
記事 Mihoko Iijima · 2020年10月15日 6m read 誤って削除したグローバルを復旧させる方法 これはInterSystems FAQ サイトの記事です。 この記事では「グローバルを誤って削除してしまった!」という場合の対処方法をご紹介します。 誤って削除してしまった特定のグローバルを復旧するためには、バックアップファイルとジャーナルを使用します。復旧は、^ZJRNFILTユーティリティによるジャーナルリストアで条件を指定してジャーナルレコードをリストアする方法で行います。この方法で、ある時点のデータベースのバックアップに対して、削除が含まれるジャーナルレコードについて特定グローバルを削除するまでのものを適用することができます。 ^ZJRNFILTユーティリティの詳細については、以下のドキュメントをご参照ください。 #ObjectScript #システム管理 #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 1 0 0 458
記事 Toshihiko Minamoto · 2020年10月14日 9m read ObjectScript Class Explorer - UML 記法を使って ObjectScript クラスをみる こんにちは! この記事では、IRIS から Caché、Ensemble、HealthShare など、InterSystems の製品で使用されるクラスやその構造を理解するのに役立つツールの概要を簡単にまとめています。 つまり、そのツールはクラスやパッケージ全体を視覚化し、クラス間の相対関係を示し、ディベロッパーやチームリーダーに必要な情報をすべて提供してくれるので、わざわざ Studio に移動してコードを調べる必要が省けます。 InterSystems の製品について情報を集めている方からたくさんのプロジェクトをレビューしている方、または単純に InterSystems Technology ソリューションの新機能に興味がある方まで、ObjectScript Class Explorer の概要をぜひお読みください! #ObjectScript #オブジェクトデータモデル #ツール #視覚化 #Caché #Ensemble #HealthShare #InterSystems IRIS #Open Exchange Open Exchange app 1 0 0 335
記事 Henrique Dias · 2020年10月8日 2m read 概要 npm-iris npm-iris とは何ですか? N.P.Mは "No Project Mess "の略です。 N.P.M.は、InterSystems IRISとBootstrap 4を使用したプロジェクト&タスク管理アプリです。 No Project Messは、シンプルで直感的なプロジェクトとタスクの管理ソフトウェアで、開発者や中小企業が日々の複雑な問題を軽減できるように作成されています。 スプレッドシート、カンバン、カレンダー、ガントチャートなど、タスクのためのさまざまなビューを提供しています。 #CSP #Docker #JavaScript #ObjectScript #REST API #オープンソース #フロントエンド #Caché #InterSystems IRIS #Open Exchange Open Exchange app 0 2 0 141