記事 Hiroshi Sato · 5 hr 前 2m read IRIS for MACにODBCでアクセスする方法その2 その1で設定したODBCのシステムDSNを使って、LibreOfficeからアクセスしてみたいと思います。 ここでLibreOfficeをデスクトップから起動すると、詳細は不明ですが、日本語の表示がうまくできません。 (ロケール情報が正しく取得できていない様です) なので、少し面倒なのですがターミナルから起動する必要があります。 起動する前にロケールが正しく設定されているか確認する必要があります。一般的には、LC_ALLは設定されていないので、この環境変数に値を設定してエクスポートします。 #ODBC #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 2
記事 Hiroshi Sato · 5 hr 前 3m read IRIS for MacにODBCアクセスする方法 その1 Mac版のIRISにSQLを使用して他ツールからアクセスするケースはそもそも少ないと思いますが、DBeaverにJDBCを使用してアクセスできることはこのコミュニティの住人であれば、知っている人は結構いるかと思います。 しかし今回ちょっと理由があってMac上のIRISにODBCを使ってアクセスする方法についてトライしてみました。 ここではその備忘録を書き留めておこうと思います。 実際の所、Mac上のクライアントツールでODBCでアクセスできるツールもそんなにないのですが、 候補としてMS-Excel(MS-Query経由)またはLibreOfficeがありました。 まず結論としてExcelは色々とトライしましたが、原因不明ですがうまくつながりませんでした。 (どうもExcel(MS-Query)が拒絶している感じです) LibreOfficeは何とか接続でき、データの取得はできる様になりました。 まず、前準備としてODBC Driver Managerというものをセットアップする必要があります。 #JDBC #ODBC #SQL #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 2
記事 Hiroshi Sato · 2025年4月1日 1m read IRISから外部のWebAPIを呼び出したとき、レスポンス内の全角文字が化ける これは InterSystems FAQ サイトの記事です。 Content-Typeにcharset 情報が含まれていない場合、IRIS/Cachéは文字コードを判断できず文字コード変換が行われません。 そこで、以下のように、「自動的な文字変換を行わず、UTF-8に変換する処理を記述」することで、その指定がある無しに関わらず、対応することができます。 #JSON #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 4
記事 Hiroshi Sato · 2025年3月17日 2m read 既存のネームスペースで、インターオペラビリティ機能を無効にする方法 これは InterSystems FAQ サイトの記事です。 ネームスペースを管理ポータルで作成する際に、デフォルトでは、『相互運用プロダクション用にネームスペースを有効化』にチェックがついているため、そのチェックを意図的に外さない限り、新規作成したネームスペースは、インターオペラビリティ機能が有効になっています。 この機能が有効であることによる実用上の弊害(パフォーマンス等に影響する)は、特にありませんが、管理ポータル上のクラス表示にこの機能に関連するクラスが先に表示されて、ユーザー作成クラスの表示に余計な操作が必要になる等の操作上の余分な手間が発生する場合があります。 管理ポータル上でこの設定を無効にするメニューは用意されていませんが、以下の手順で無効化することができます。 - 相互運用性ネームスペースの無効化 #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 11
記事 Hiroshi Sato · 2025年3月11日 1m read ODBC経由で取得したデータが途切れる場合の対処法 これは InterSystems FAQ サイトの記事です。 8192文字を超える文字列をODBC経由で取得した場合に特定のODBCクライアントとの組み合わせにおいて文字列が途切れて取得されるケースが報告されています。 このような状況が発生した場合、該当するODBCデータソースの設定画面でUnicode SQLタイプをチェックすることで問題が解消されることがわかっています。 #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 20
記事 Hiroshi Sato · 2025年3月10日 1m read select count(*)の応答に時間がかかる、あるいはタイムアウトが発生する場合の対処法について これは InterSystems FAQ サイトの記事です。 大量のレコードが含まれるテーブルに対して、select count(*) from テーブル名の応答が遅い、または応答がタイムアウトする場合には、ビットマップ・エクステント・インデックスを追加することで問題を解消することができます。 ビットマップ・エクステント・インデックスを追加する方法は、以下をご参照ください。 ビットマップ・エクステント・インデックスの追加方法 クラス定義に以下のような定義を行うことで、ビットマップ・エクステント・インデックスを追加することもできます。 #ヒントとコツ #リレーショナルテーブル #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 25
記事 Hiroshi Sato · 2025年3月4日 2m read ObjectScriptを使用し、ローカルファイルを他のサーバーにアップロード(POST)する方法 これは InterSystems FAQ サイトの記事です。 ObjectScriptの%Netパッケージのライブラリクラスを利用して、ファイルを他のサーバーにアップロードすることができます。 以下のCurl コマンドと同じことを ObjectScript で実現する方法を紹介します。 curl -X POST "http://localhost/api/upload?a=123&b=999" -F file=@"C:/temp/a.csv" クライアントのObjectScriptコードを以下の様に作成します。 #API #CSV #ObjectScript #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 19
記事 Hiroshi Sato · 2025年3月4日 4m read 計算プロパティの使用方法2 これは InterSystems FAQ サイトの記事です。 計算プロパティを定義する際に利用可能なキーワードが複数あります。 詳細は、以下をご参照ください。 計算プロパティの定義 実際のこれらのキーワードの関連性は、少々複雑ですので具体的なコードを作成して動作を確認してみます。 以下のようなクラス定義を作成します。(プロパティとインデックス定義のみ表示します) 完全なクラス定義は以下より、ダウンロードできます。 サンプルクラス定義 #SQL #Caché #InterSystems IRIS #InterSystems IRIS for Health 1 0 0 26
記事 Hiroshi Sato · 2025年3月3日 1m read 計算プロパティの使用方法1 これは InterSystems FAQ サイトの記事です。 IRISには、データ項目の値を実体として持たずに、何らかの演算処理の結果として提供する機能があります。 これを計算プロパティまたは計算フィールドといいます。 計算プロパティを定義するためには、最低限以下の手順を実行します。 プロパティ定義にSqlComputedキーワードを含めます。 プロパティ定義にSqlComputedCodeを含めて、値を算出するための処理ロジックとして含めます。 または、SqlComputedCodeを含めずに、代わりに<プロパティ名>Computationという名前のクラスメソッドを記述します。 以下は、Age(年齢)プロパティを計算プロパティとして定義した例になります。 #ObjectScript #SQL #InterSystems IRIS #InterSystems IRIS for Health 1 0 0 21
記事 Hiroshi Sato · 2025年2月25日 2m read クライアントからPOSTされた ファイルを受け取るRESTサービスを作成する方法 これは InterSystems FAQ サイトの記事です。 以下の様なCurl コマンドで送信したファイルを受け取るRESTサービスを作成する方法を紹介します。 curl -X POST "http://localhost/api/upload?a=123&b=999" -F file=@"C:/temp/a.csv" クライアントからPOSTされたファイルを受け取ってサーバーに保存するRESTサービスは以下の様に作成します。 #REST API #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 22
記事 Hiroshi Sato · 2025年2月12日 1m read インターオペラビリティの処理の中でログ出力を実装する方法 これは InterSystems FAQ サイトの記事です。 インターオペラビリティ機能を使用してビジネスホストのビジネスロジックを実装する際に、デバッグ等の目的でログ出力を行うための専用マクロが用意されているので、ご紹介します。 以下のマクロが用意されています。 #相互運用性 #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 25
記事 Hiroshi Sato · 2025年1月17日 1m read SQLクエリでStreamのデータを扱う方法 これは InterSystems FAQ サイトの記事です。 SQLでのストリームフィールドの取得についてはこちらのドキュメントに記載されております。 ストリーム・フィールド・データのクエリ 例: キャラクターストリームデータの50文字取得する #ObjectScript #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 42
記事 Hiroshi Sato · 2025年1月17日 1m read 【Caché, Ensemble】サーバーを移行する際にコピーが必要な設定情報 これは InterSystems FAQ サイトの記事です。 何らかの理由でサーバー移行が必要になった際に、移行前の環境から移行後の環境に設定情報をコピーすることで設定作業を軽減できます。 以下の設定情報を移行できます。 cache.cpf SQLゲートウェイ設定 CSPゲートウェイ設定 *注1 CAHCESYSデータベースに保存しているユーザー作成ルーチンなど *注2 セキュリティ設定 タスク設定 注1 パスワードを設定している場合には、パスワードのみ手動で再設定が必要です。注2 ^%ZSTART, ^ZMIRRORルーチンなど 優先接続サーバー設定に関しても、物理的には移行可能ですが、Windowsのレジストリー情報をコピーする必要があります。レジストリー情報をコピーして他システムに移行する方法は通常推奨される方法ではありません。 #Caché #Ensemble 0 0 0 19
記事 Hiroshi Sato · 2025年1月17日 1m read 実行中のプログラムをコンパイルして保存することによるその実行中のプロセスへの影響 これは InterSystems FAQ サイトの記事です。 Question: 使用中のプログラムをコンパイルして保存すると、現在そのプログラムを実行中のプロセスに影響しますか? Answer: 実行中のルーチンはその旧バージョンをメモリー上に保持しているため、コンパイルして新しいルーチンが保存されても影響なく実行を継続できます。 クラスのメソッドについても同様です。 再度そのルーチンが呼び出された時点でコンパイルされた新しいルーチンが使用されるようになります。 #ObjectScript #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 18
記事 Hiroshi Sato · 2025年1月17日 2m read Mac IRISでEmbedded Python利用に関する相性問題 Mac版IRISでは、現状Pythonのバージョンが固定(3.11)なのですが、これに付随する他製品との相性問題に遭遇しましたので報告します。 今までEmbedded Pythonは調子よく動作していたのですが、ある時から急に動作しなくなりました。 原因を調べてみると、Python3.13がインストールされ、それがデフォルトとして上書きされたため、irispythonコマンドを発行すると、それが内部で3.13を呼ぶ様になってしまったためでした。 ちなみにiris session でログインし、そこからEmbedded Pythonを実行する場合は、問題ありません。 あくまでもirispythonコマンドで直接.pyファイルを実行する場合に発生する問題です。 そしてとりあえずの対処法は、python3をpython3.11で置き換える方法です。 以下のような感じです。(どのMacでもbrewコマンドでインストールした場合、ディレクトリ構造は同じだと思いますが、違う可能性もゼロではありません) cp /opt/homebrew/bin/python3.11 /opt/homebrew/bin/python3 #Embedded Python #Python #InterSystems IRIS #InterSystems IRIS for Health 1 0 0 31
記事 Hiroshi Sato · 2025年1月6日 1m read 日本のMacユーザーがIRISを使う際にまずやるべきこと 日本でMacユーザーのIRIS使いがどの程度いるのかわかりませんが、圧倒的少数派なのは確かでしょう。 そのせいもあってか、Mac版のインストーラは、Windows版ほどきめ細かい対応をしてくれていません。 Windows版はインストーラが勝手に日本語のロケールを設定してくれているのですが、Mac版(おそらくLinux版も)は英語ロケールのままです。 それでも、通常の使用ではさほど問題がないといえないこともないのですが、ファイルを読んだりする場合や他にも何かと不都合があります。(何かあったような気がしますが、忘れました。) ですので、Macユーザーは面倒ですが、管理ポータルで日本語ロケールjpuwのインストールをする必要があります。 またはターミナルでコマンド一発でもOKです。 #ローカリゼーション #InterSystems IRIS #InterSystems IRIS for Health 3 2 0 49
記事 Hiroshi Sato · 2024年12月18日 1m read IRIS技術ガイド Caché技術ガイドのいくつかをIRIS版に書き換えた文書を作成しましたので公開します。 IRISファーストステップガイドIRISBasicTechnologyGuide - ObjectScript操作ガイド - オブジェクト操作ガイド - 多次元データエンジンの概念およびアーキテクチャーIRIS SQLガイド #チュートリアル #データモデル #ヒントとコツ #リレーショナルテーブル #管理ポータル #開発環境 #InterSystems IRIS #InterSystems IRIS for Health 3 0 2 54
記事 Hiroshi Sato · 2024年12月9日 1m read CSP/RESTのPOSTデータに日本語が含まれる場合の処理のおまじない Parameter CONVERTINPUTSTREAM = 1 REST/JSONを使ってデータを交換することが増えてきていると思いますが、POSTでIRISにデータを渡す場合に日本語が含まれる場合に皆さんどう処理していますか? わざわざ自分でコード変換する処理を追加していませんか? 実は、あまり知られていないのですが、自動で変換する方法がありますので、紹介します。 CSPのメカニズムを使ってクライアントからデータをPOSTすると、それはCSPのRequestオブジェクトのContentプロパティに渡されます。 ContentプロパティのTypeは%CSP.Streamになっていて、このTypeのクラスリファレンスを読むと、Content-TypeがText/のときには、CharSetに基づいてコード変換が行われると示唆されています。 つまりContent-TypeがJSONの場合には、自動的な変換がされないということになります。 本当は、Content-TypeがJSONの時も変換してくれるのが一番良い(わかりやすい)のですが、残念ながらそうなっていません。 その代わりにパラメータが用意されています。 RESTのディスパッチクラスの定義に以下のパラメータを追加することで、自動コード変換を行なってくれます。 #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 2 43
記事 Hiroshi Sato · 2024年12月4日 1m read openpyxl data_only=Trueとしても式の入っているセルの値がnoneになる Embedded Pythonの導入に伴い、1つ嬉しいことは、直接エクセルファイルの読み書きができるようになったことです。 それでこの機能を使って、ミニ業務改革をちょこちょこ行なっているのですが、そこでちょっとハマったことを共有します。 実際この内容は実はIRISとは全く関係ないのですが、このDCコミュニティの皆さんが同じことでハマった場合に少しでも早く問題解決できるように情報共有します。 エクセルの計算式の入ったセルの値を読み取るときには、そのファイルのオープンの際にdata_only=Trueというフラグをつけないといけないのですが、そのファイルがopenpyxlで読み書きしたファイルの場合に、その計算式のセルの値(Noneとなる)がうまく読めないことがあります。 その場合には、そのファイルをエクセルで開いて再保存することで、正しく読むことができます。以下にそのあたりの内容を説明したページがあります。 元ネタ #Embedded Python #InterSystems IRIS #InterSystems IRIS for Health 1 0 0 133
記事 Hiroshi Sato · 2024年11月18日 1m read クラス定義に32個より多くのインデックスがあると、MS-ACCESSからそのテーブルにリンクできません。 これは、InterSystems FAQサイトの記事です。 これは、MS-ACCESSの制限事項です。 MS-ACCESSは、インデックスが32個より多いテーブルにはリンクできません。 この問題を回避する方法として、直接テーブル(クラス)をリンクするのではなく、VIEWを使用する方法があります。 #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 41