Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

Caché 2013.1

この章では、Caché 2013.1 の以下の項目について説明します。

Caché 2013.1 の新機能と強化機能

今回のリリースでは、Caché に次の新機能が加わりました。

さらに、これ以外にも、さまざまな点で機能強化や改善がなされています。特に既存のインストール環境をアップグレードする場合、“Caché 2013.1 アップグレードのチェックリスト” で詳細な変更内容を確認してください。

迅速なアプリケーション開発

WHERE 条件での %FIND のサポート

このリリースでは、次の構文を持つ新しい SQL 条件が実装されます。

<f> %FIND <x>  [ SIZE <const>]

<x> は、<f> に対するフィルタとして使用される一連の値 S を表します。より正確には、<f> が S のメンバであれば、条件が満たされます。

XEP の機能強化

このバージョンの Caché には、XEP に対する以下の改善点と拡張機能が含まれています。

  • 継承、参照、インタフェース、および同期インデックス作成のサポートが追加されました。

  • 永続モードで、より簡素なオプションがサポートされます。

  • XEP には現在、XEP TCP/IP と XEP JNI の 2 種類があります。

  • Java と .NET の両方で、新しい @Id アノテーションを使用してフィールドをデータベース ID にすることができます。

  • 新しいメカニズムを使用して Cache Object Script のクラス・メソッドを呼び出すことができます。

  • XEP で、ObjectScript の関数、複数の引数を持つプロシージャ、および戻り値型の呼び出しがサポートされるようになりました。

  • 配列ベースのデータ挿入のパフォーマンスが向上しました。

  • マルチコア・マシンの能力を最大限に引き出し、挿入のパフォーマンスをさらに向上させる新しい並列ストレージ API が追加されました。

  • 以前のカスタム・クエリの機能を置き換えるため、JDBC ベースのクエリが強化されました。

  • XEP に対して、異なるプラットフォームへの JNI の使用を削減する機能強化が行われました。

JDK 1.7

このリリースには、Java 6 のライブラリと Java 7 のライブラリが含まれています。さらに、Caché で JDBC 4.1 もサポートされるようになりました。

GLOBALS の機能強化

GLOBALS の $query のバージョンが、Java API と .NET API の両方でサポートされるようになりました。GLOBALS の ValueList で、10 進数値がサポートされるようになりました。GLOBALS のメソッドから、Cache ObjectScript の関数、複数の引数を持つプロシージャ、および戻り値型を呼び出すことができます。また、GLOBALS のメソッドから、Cache Object Script のクラス・メソッドを呼び出すこともできます。また Visual Basic がサポートされました。使用方法を示すサンプルも提供しています。

RETURN 文

アプリケーション開発者は、RETURN 文を利用してコードの実行と読みやすさを最適化できるようになりました。RETURN 文は、QUIT 文に定義が似ていますが、それを囲むサブルーチンからその呼び出し元に戻ります。

Args... での引数の参照渡しのサポート

引数の参照渡しをするときに、可変個数の引数を受け渡すための args... 構文を使用できるようになりました。

Websocket のサポート

CSP ゲートウェイに、Web サーバと HTML 5 準拠のブラウザ間で WebSocket 接続を行うための HTML 5 仕様のサポートが追加されました。これは、Apache 2.2 以降で使用可能であり、Windows Server 2012 に付属する IIS 8.0 で使用できるようになります。

ユーザが WebSocket を処理または作成するときに拡張する必要がある %CSP.WebSocket というベース・クラスが用意されています。

フレームスタック処理の改善

<FRAMESTACK> エラーをエラー・トラップで処理できるようになりました。Caché では、エラー・トラップを呼び出す前に実行スタックから項目が削除されなくなっています。

サードパーティのライブラリのアップグレード

このリリースでは、ANTLR がバージョン 3.4 にアップグレードされ、UNIX® の Xerces がバージョン 3.1.1 に更新されます。

MVB に対するスタジオによる支援

スタジオによる支援で、次の構文要素が認識されるようになりました。

  • Caché Basic : "ClassName".ME.

  • MVBasic : "ClassName"->@ME->

Caché Basic : "ClassName".ME. MV BASIC: "ClassName"->@ME->

ストリームのリストに対する XML のサポート

ストリームのリストが XML に正しく反映されます。 ストリームのリストを指定するには、"list Of" 構文を使用するか、ELEMENTTYPE にストリーム・クラスを指定して %ListOfObjectsOpens in a new tab のサブクラスとなるクラスを作成します。

JSON の改善

パブリックの JSON API が大幅に機能強化されました。オブジェクト、配列、または SQL 文から JSON 文字列を生成できる非内部関数呼び出しが追加されました。これらはその後、データ転送メカニズムとして JSON をサポートするサードパーティのクライアント・インタフェースを駆動するために使用できます。内部構造から JSON への変換に加えて、クライアントから送信された JSON を取得し、それをアプリケーション内で使用できる COS 配列に変換する機能もサポートされます。

DeepSee の改善

DeepSee に、ダッシュボードの作成と編集を行うための新しいエディタが追加されました。新しいダッシュボード・エディタでは、強化された Zen グラフやその他の新しい Zen コンポーネントを利用できます。 ダッシュボードを編集するには、ダッシュボードの左側にあるバーをクリックします。 新しいダッシュボード・エディタには、グラフとテーブルの表示を制御するためのオプションが豊富に用意されています。

DeepSee ユーザ・ポータルに、ホーム・ページ上の項目をイメージとして表示する "表紙" ビュー・オプションが追加されました。この表紙エディタを使用して、表紙 (イメージ、テキスト、色など) を構成できます。 また、ユーザ・ポータルのホーム・ページに一覧表示される項目のタイプに、(ダッシュボードとピボットに加えて) レポートと URL リンクが追加されました。

パフォーマンスとスケーラビリティ

XML のパフォーマンス

Caché と Xerces 間の XML の処理が改善され、XML のパフォーマンスが向上しました。%XML.ReaderOpens in a new tab のインポートで最大 50%、SOAP メッセージで最大 25% の向上が見込まれます。

HTTP 1.1 のキープ・アライブ

Caché のこのリリースには、HTTP 1.1 によるキープ・アライブのサポートが追加されています。これにより、クライアントは Web サーバに対する TCP/IP ソケットをアクティブな状態に維持できるため、要求のたびにソケットを閉じてから新しいソケットを開くのではなく、同じソケットを使用して複数の要求を行うことができます。

ROLLBACK のパフォーマンス向上

このリリースでは、ROLLBACK のパフォーマンスが以前のバージョンより約 10 ~ 30% 向上しています。このパフォーマンスの向上は、(スタートアップ・リカバリ中に行われる) 一括ロールバックと共に、単独の (大規模な) トランザクションのロールバックに適用されます。

Intel ハードウェアでの AES 暗号化

Intel の最新のプロセッサでは、AES-NI がサポートされており、これによって AES の暗号化と復号化が大幅に改善されます。初期のベンチマークの結果、AES のソフトウェア実行に比べてパフォーマンスが大幅に向上し、物理入出力の頻度が高くても、暗号化データベースのパフォーマンスのオーバヘッドが最小限に抑えられることがわかっています。

非同期入出力のパフォーマンス向上

このバージョンでは、連続的な負荷で効果的な非同期入出力が改善されています。新しいアルゴリズムでは、複数の連続的な更新を検出して、より大きな合体した書き込みを行うことにより、計測の結果、連続的な負荷に関連する書き込みが 1.6 ~ 1.8 倍に高速化されました。

暗号化のパフォーマンス向上

以前は、AIX プラットフォームで "並列 WIJ 暗号化" と呼ばれるパフォーマンス機能が有効になっていました。この機能が HP-UX、Linux、および Solaris でも有効になり、書き込みサイクル中のデータベース暗号化の速度が最大で 4 倍向上します。

複数コンパイルが既定で有効

Caché のクラス・コンパイルに、既定で複数コンパイルが使用されるようになり、マルチコア・プロセッサでのコンパイル時間が短縮されます。

複数キーによる結合の最適化

このリリースでは、あらゆるタイプの複数列結合の文で大幅なパフォーマンス向上が見込める汎用性が高い方法を優先することから、複数列結合を最適化するために使用されていた状況固有の古い関数の一部が削除されています。

TuneTable 統計のエクスポートおよびインポート

このリリースでは、Caché SQL に、特定のネームスペースに関する TuneTable 統計のエクスポートとインポートのサポートが追加されました。これにより、TuneTable の Data、Selectivity、および ExtentSize の詳細を特定のシステムからエクスポートすれば、クラス定義を転送してコンパイルしなくても、これらを再読み込みできます。

同時更新のパフォーマンス向上

このバージョンでは、きわめて大規模なシステムでの同期更新が最適化されています。この最適化により、データベース・アクセスのスケーラビリティが 20 ~ 30% 向上することがベンチマークで示されました。

クラスへのインデックス追加時のダウンタイムを最小化

このバージョンには、%Library.IndexBuilderOpens in a new tab という新機能が導入されています。このクラスとそのメソッドでは、既存のクラスに 1 つ以上のインデックスを追加できます。これは、特に以下の状況に対応できるように設計されています。

  • 関連するデータの量が多いため、通常の %BuildIndices メソッドでは処理に時間がかかる場合。

  • ダウンタイムを最小限に抑える必要があるシステム上で、アプリケーションが実行されている場合。

ロックのエスカレーションの改善

このリリースには、新しいロック・モード “E” が導入されています。これは、ロックの管理を自動化し、ロック・テーブルをより適切に管理できるようにするためのモードです。このモードでは、トランザクションが保持する既存のロックの数がしきい値を超え、Caché が安全だと判断したときに、ロックがより高いレベルのロックとして “統合” されます。低レベルのロックは解除され、ロック・テーブルの領域が解放されます。

信頼性、可用性、保守性、監視

Advanced Format (4K) ディスク・ドライブのサポート

このバージョンでは、Advanced Format (AF) ディスク・ドライブとして実装されているネイティブの 4KB ディスク・セクタがサポートされます。

Zen レポートでの TIFF 出力

Zen レポートに、これまでにリリースされた形式 (HTML、XML、PDF、Excel など) に加えて、TIFF 形式でコンテンツを作成する機能が追加されました。

アプリケーション固有ライセンスの付与

Caché ユーザの中には、自身のアプリケーションのライセンスをアプリケーション全体または機能単位で付与することを必要とするユーザがいます。その場合に直面する問題の 1 つは、アプリケーション・ワークフローの違いや異常終了があっても、ライセンスは適切に消費しているかという点です。さらに、自身のライセンスを、インターシステムズが提供する基盤システムのライセンスにリンクすることを望むユーザもいます。

インターシステムズは、アプリケーション固有ライセンスの付与により、アプリケーションのライセンスを作成、導入、使用する必要があるユーザをサポートするためのメカニズムを提供します。インターシステムズ自身も、自社の製品である HealthShare および TrakCare にこの形式のライセンスを使用しています。

大規模グローバル・バッファ

このバージョンでは、非常に大きなグローバル・バッファ・プールがサポートされます。以前は約 107 GB の制限がありましたが、今後は最大 16 TB のグローバル・バッファを構成できます。

大容量共有メモリ・ヒープ

このバージョンでは、非常に大きな共有メモリ・ヒープがサポートされます。以前は約 4GB の制限がありましたが、今後は最大 1 TB の共有メモリ・ヒープを構成できます。

構成に関連する再起動の排除

以下の Caché 構成オプションを動的に更新できるようになり、新しい設定を有効にするためにシステムを再起動する必要がなくなりました。

  • MaxServers:この (クライアント) マシンから ECP サーバへの接続の最大数。

  • VMSConsoleTerminal:OpenVMS システムでメッセージを記録するコンソール・ターミナル・デバイスの名前。

  • netjob:リモート・ジョブ要求を有効または無効にします。

  • wijdir:ライト・イメージ・ジャーナル・ファイル・ディレクトリ。

  • console : コンソール・ログ・ファイル名。

  • LineRecallBuffer:コマンド行/読み取り行バッファに格納されるすべての入力文字列の合計サイズ (バイト単位)。

  • LineRecallEntries:LineRecallBuffer 設定の領域制限内で、コマンド行/読み取り行のリコール・バッファで保持されるエントリの最大数。

  • bbsiz:1 つのプロセスに割り当てることができるメモリの最大量 (KB)。

必要に応じた事前フェッチ・デーモンの自動起動

ブロック事前フェッチ・メカニズム ($PREFETCHON / $PREFETCHOFF) では、システム全体の事前フェッチ・デーモンを初期化する必要があります。Caché のこのバージョンでは、事前フェッチ・デーモンが自動的に必要に応じて起動し、不要になったときに停止するため、これらのデーモンを手動で起動および停止する必要はありません。

SQL パフォーマンス・ツールの改善

Caché のこのリリースには、プロダクション・データに対する SQL の動作を分析するときに役立つ関数を提供する追加のユーティリティが含まれています。例えば、インデックスの使用回数を調べたり、テーブル・スキャンが発生するクエリや一時的な構造の構築に依存するクエリを識別したり、結合に基づくクエリを識別して、それらが既存のインデックスでどの程度サポートされるかを評価したりできます。

災害復旧フェイルオーバーおよびフェイルバックの簡素化

以前のリリースでは、Caché のデータベース・ミラーリングによって、災害復旧の目的で非同期ミラー構成が提供されていました。このリリースでは、災害時の (またはテスト目的での) 非同期 DR ミラー・ノードへの切り替え方法を簡素化すると同時に、後でメインのプロダクション・フェイルオーバー・ミラーに戻す方法を簡素化しました。

セキュリティ

WS Reliable Messaging

このリリースでは、Web Services Reliable Messaging を使用して、ソースと宛先間のメッセージ送信を保証 (識別、追跡、および管理) できます。

テクノロジのプレビュー

これは、このリリースで初めて導入されたカテゴリです。その目的は、インターシステムズが既存および将来のアプリケーションの有効性を高めるために役立つと確信している新しいソフトウェア機能を紹介し、利用可能にする方法を提供することです。

ここに示す機能は、ユーザがいつでも使用できますが、機能や設計の面でまだ完全ではありません。これらの機能を利用するユーザは、以下の点を理解する必要があります。

  • インターシステムズは、今後の更新に関して下位互換性を保証しません。

  • ユーザは、これらの機能を配置済みのアプリケーションに組み込むことができますが、その前にインターシステムズに問い合わせて、最善の対策を決定する必要があります。

  • これらの機能をアプリケーションに導入するユーザは、最終リリース・バージョンへのアップグレードを確約する必要があります。

ソフトウェアにこれらの項目を組み込むユーザには、自身の経験に関するフィードバックの提供を強くお勧めします。

迅速なアプリケーション開発

カスタマイズされた iKnow サマリ

Caché のこのリリースには、ソースのカスタム・サマリを生成する機能が含まれています。カスタム・サマリは、iKnow で生成されたサマリの内容を自身のニーズに合わせて調整することを望むユーザのために開発されました。

サマリを調整するための主なパラメータは次のとおりです。

  • ユーザは、カスタム・サマリに必ず取り込む文の数を指定できます。例えば、新聞の記事を要約するときは、常に最初の 2 つの文を取り込むと効果的です。

  • ユーザは、絶対的なトリガとして使用する単語または文の一部分のリストをエミュレートできます。つまり、リスト内のいずれかの要素を含む文が必ずサマリに取り込まれるか、または必ずサマリから除外されます。

  • ユーザは、特定の単語または文の一部分により高い (またはより低い) 重要性を与えることができます。この場合、リスト内のいずれかの要素を含む文の重みは、ユーザが指定した重み指示に従って調整されます。これらの調整によって、サマリに使用される文のランキングが左右され、ユーザが指定した要素が取り込まれたり、排除されたりします (テキストのコンテキストによって可能な場合)。

カスタム・サマリのオプションは、SourceAPI.GetSummary メソッドに追加されたパラメータによって設定できます。

iKnow での否定のサポート

Caché のこのリリースには、iKnow 否定検出が導入されました。iKnow 否定検出の独特な点は、文中の言語的な否定マーカ (“not”、“no”、“didn't” など) が検出されるだけでなく、文意を考慮した範囲も iKnow によってマークされることです。以下に例を示します。

John has no signs of headache but has a fever.

ここでは、言語的な否定マーカは “no” です。iKnow 否定検出は、このマーカを検出するだけでなく、文意が否定的な範囲も検出します。つまり、“John has no signs of headache” がこの文の否定部分であることが確定されます。否定の範囲は、次のメソッド呼び出しによってアクセスして使用することができる否定属性マーカによって示されます。

  • EntityAPI.GetOccurrenceAttributes() : エンティティの出現箇所に否定マーカが含まれるかどうかを確認します。

  • SentenceAPI.GetHighlighted() : 文の否定部分をハイライト表示します。

  • SentenceAPI.GetAttributes() : 文のレベルで否定マーカの位置とそれらの範囲マーカを取得します。

  • PathAPI.GetAttributes() : 経路の否定部分を識別します。

  • SourceAPI.GetAttributes() : ソースのすべての否定を取得します。

リファクタリング

このリリースで、インターシステムズはスタジオで最初のコードのリファクタリングをサポートしました。 当初は、以下のオプションが使用可能です。

  • クラス名の変更

  • プロパティ名の変更

  • メソッド名の変更

将来のリリースには、追加のオプションも組み込まれる予定です。

このリリースでは、リファクタリングは Windows システムでのみ利用可能です。

Caché 2013.1 アップグレードのチェックリスト

目的

このセクションでは、Caché 2013.1 の機能のうち、今回のバージョンで変更されたために、既存のシステムの管理、運用、または開発の作業に影響を及ぼすものを取り上げます。

前回リリースよりも前のリリースからアプリケーションをアップグレードする場合は、その中間に存在するリリースのアップグレード・チェックリストにも目を通すことを強くお勧めします。このドキュメントでは、2012.2 と 2013.1 の違いのみを取り上げています。

このドキュメントの冒頭に記載したアップグレードの説明は、このバージョンに適用されます。

管理者

このセクションでは、以前のバージョンの Caché の管理作業を熟知しているユーザを対象に、バージョン 2013.1 の管理に関する新機能と変更点を説明します。ここでは、各項目について簡単に説明します。ほとんどの場合は、ドキュメントの別の箇所に詳しい説明があります。

バージョン間の相互運用性

前回リリースとの相互運用性を示すテーブルが、サポート対象プラットフォームのドキュメントに掲載されています。

管理ポータルの変更

今回のリリースでは、新機能に対応し、また、既存マテリアルを使用しやすく構成し直すため、管理ポータルに多数の変更が加えられています。主な変更点の 1 つは、データベース・ミラーリングおよびロールの使い分けに役立つページが追加されたことです。

操作上の変更

ここでは、システムによる処理方法に影響を与える変更について説明します。

アップグレード時における CACHETEMP/CACHE 暗号化ステータスの確認

アップグレード時に、インストーラによって CACHE と CACHETEMP の暗号化ステータスが確認されます。どちらかのデータベースが暗号化されている場合は、暗号化キー・ファイルの場所、ユーザ名、およびパスワードの入力を求められます。これらの情報はファイルのコピーが開始される前に検証され、その値が ^INSTALL に渡されます。

Note:

この動作は、RPM および DMG のインストールでは行われません。これらの場合は、RPM または DMG のインストーラを使用してアップグレードを行う前にデータベースの暗号化を無効にし、その後で再度有効にする必要があります。

^JRNSTOP に対する既定の応答の No への変更

^JRNSTOP に対する既定の応答が “Yes” から “No” に変更されました。

%SYS>d ^JRNSTOP
Stop journaling now? No => 

この変更によって、“Yes” を既定と見なすスクリプトが影響を受ける可能性があります。

ジャーナル・リストアの開始に先立つユーザへの確認要求

ジャーナル・リストア・ユーティリティ (^JRNRESTO) に新しいプロンプトが表示されます。ユーザは、ジャーナル・リストアが実際に開始される前に、リストア要求を確認する必要があります。この変更により、画面への出力は以下のようになります。

...
  DEFAULT: Continue despite database-related problems (e.g., a target 
  database is not journaled, cannot be mounted, etc.), skipping affected 
  updates 
  
  ALTERNATE: Abort if an update would have to be skipped due to a 
  database-related problem (e.g., a target database is not journaled, 
  cannot be mounted, etc.) 
  
  DEFAULT: Abort if an update would have to be skipped due to a 
  journal-related problem (e.g., journal corruption, some cases of missing 
  journal files, etc.) 
  
  ALTERNATE: Continue despite journal-related problems (e.g., journal 
  corruption, some missing journal files, etc.), skipping affected updates 
  
Would you like to change the default actions? No => No 

Start the restore? Yes => Yes  

この変更は、プロンプトに対する応答が準備されていないスクリプトに影響を与えます。

レポート非同期メンバ上でのミラー・デジャーナリングの停止

すべてのミラー・メンバに対して、^MIRROR の新しいメニュー項目として [データベースのデジャーナリングの一時停止] が表示されます。これにより、バックアップ・メンバまたは非同期メンバ上で、このデータベースへのデジャーナリングをスキップすることをミラー・デジャーナリング・システムに通知できます。これは、何らかの理由でデータベースに対してメンテナンスを実行する必要がある場合 (例えば、データベースを暗号化または解読するためにディスマウントする必要がある場合など) に使用できます。

災害復旧の非同期メンバまたはバックアップ上で、ミラーリング・データベースを単純にディスマウントできます。デジャーナリング・システムで <PROTECT> エラーなどのエラーが発生した場合は、そのデータベースがスキップ対象としてマークされ、他のデータベースへのデジャーナリングは継続されます。ただし、先にデータベースを一時停止すれば、その後のレコードの処理がブロックされる前にデジャーナリング・システム内の保留中のデータが排出されるので、この方法のほうが処理が簡潔になります。

しかし、レポート・メンバ上では、そのデータベースのジャーナルに後続のレコードがある場合にミラーリング・データベースをディスマウントすると、そのミラーに含まれるすべてのデータベースでデジャーナリング・システムがシャットダウンする可能性があります。この動作が行われる理由は、サイトによっては、レポート・メンバ上で特定のミラーに含まれるすべてのデータベースの相互同期を維持し、いずれかのデータベースでエラーが発生した場合にデジャーナリングをそこで停止することが必要になる場合があるためです。

デジャーナリングを継続する場合は、レポート非同期メンバ用の新しい ^MIRROR メニューである [レポート・メンバ上でのミラー・デジャーナリングの管理] を使用してデジャーナリングを再起動すると、ディスマウントされたデータベースを使用せずにデジャーナリングが継続します。または、データベースをディスマウントする前に一時停止することもできます。これにより、ジャーナル・ストリーム内に一時停止したデータベースのデータがある場合は、ミラーに含まれる他のデータベースのデジャーナリングがシャットダウンされません。

システム・モニタのユーザ・データベースへの拡張

このリリース以降、ユーザはセンサ・クラス、サブスクライバ・クラス、および通知クラスを作成して、SYS 以外のネームスペースにシステム・モニタを拡張できます。この変更により、すべての SYS.Monitor.Abstract クラスを %SYS.Monitor.Abstract に変更する必要があります。特に、SYS.Monitor.AbstractSensor のユーザは、宣言を %SYS.Monitor.AbstractSensorOpens in a new tab に変更する必要があります。

より大きなスタック・フレームおよびエラー・フレームに対応する VIRTUALALLOC() および MMAP() の使用

フレーム・スタックおよびエラー・スタックは、パーティション内でバイト配列として割り当てられなくなりました。これらは、Windows では VirtualAlloc() を使用して割り当てられ、UNIX® および OpenVMS では mmap() を使用して割り当てられます。このメカニズムを使用すると、メモリが実際に使用されないときはシステムにほとんど影響を与えずに、Caché でより大きなフレーム・スタックを割り当てることができます。また、使用可能な領域の終端とメモリの実際の終端の間により大きなバッファを設定できます。

エラー処理で、未使用のバッファ領域が使用可能であることを認識できるようになりました。したがって、エラー・トラップを実行する領域を確保するために既存のフレーム・エントリをポップするのではなく (この方法には、アプリケーション・エラー・トラップのような重要な情報が失われるリスクがあります)、フレームのサイズをスタック・メモリの実際の終端にリセットします。これにより、それまで未使用だったスタック領域をエラー・トラップに使用できるようになります。

この変更の効果をテストするために使用できる、次の新しい $SYSTEM メソッドが提供されます。

  • $SYSTEM.Process.FrameStackSize()

    現在のプロセスのフレーム・スタック・サイズを返します。

  • $SYSTEM.Process.FrameStackExpanded()

    <FRAMESTACK> エラーの後でエラー・トラップを実行できるようにフレーム・スタックが拡張されたかどうかを示す 0 または 1 を返します。この値が 1 の場合は、もう 1 つの <FRAMESTACK> エラーによって、エラー・トラップを実行せずにプロセスが終了します。この値は、十分なスタック・エントリがポップされて通常の動作に戻ると、自動的に 0 に戻ります。

  • $SYSTEM.Util.GetFrameStackSize()

    構成されているスタック・サイズを返します。これは、新規に作成されたプロセスで使用されるサイズです。

  • $SYSTEM.Util.SetFrameStackSize(newsize)

    構成されているスタック・サイズを新しい値に設定し、前の値を返します。この新しい値は、新規に作成されたすべてのプロセスのフレーム・スタック・サイズとして使用されます。newsize が 0 の場合は、システムの既定のサイズが設定されます。

Note:

この新しい割り当てポリシーに対応して、許可される DO や XECUTE などのレベルを制限する実行スタックのサイズが 2 倍になりました。実際には、すべてのメモリが実際に使用されない限り、これによってシステム上のメモリ負荷が 2 倍になることはありません。しかし、多数のプロセスを処理するシステムでは、システム・メモリやページング領域の負荷が大きくなる可能性があります。

メモリの使用量が許容限度に近付いているシステムでは、この変更のためにメモリが枯渇する可能性があります。

システムおよびメモリのステータス・チェックの新しい戻り値

共有メモリに格納され、システム・モニタによって管理される新しいレジスタが、システム・ヘルスを追跡します。格納される値は以下のとおりです。

  • 0 – 緑 : すべて正常

  • 1 – 黄 : 警告が存在する

  • 2 – 赤 : アラートが送信された

システム・モニタのすべてのサブスクライバは、通知を送信できます。レベル 2 のアラートが送信されると、黄色が設定されます。10 分以内に 5 件のアラートが発生すると、赤が設定されます。アラートが 1 時間発生しなかった場合は、ヘルスが緑に戻ります。

ユーザは、次のコマンドを使用してステータスを取得できます。

ccontrol list
ccontrol qlist
cache -cV

または、定義された値を返す $SYSTEM.Monitor.State() を使用して、プログラムによって取得することもできます。SetState メソッド、Alert メソッド、Clear メソッド、および ClearAlerts メソッドも参照してください。

サードパーティのライブラリの変更

このリリースでは、ANTLR がバージョン 3.4 にアップグレードされ、UNIX® の Xerces がバージョン 3.1.1 に更新され、CacheSSH には libssh2-1.4.2 が使用されます。

RFC1123 準拠の DNS 名パーサ

TCP エンドポイントの仕様を処理する DNS 名パーサの文法が RFC1123 に適切に準拠しました。 従来のパーサでは、ドット区切りの DNS 名のどの部分も数字で始めることができませんでした。RFC1123 によれば、ドットで区切られた 4 個の数字からなる IPv4 アドレスと区別するために、DNS 名の最後のドット区切り部分のみにこの制限が適用されます。

インストール時の生成コードのリコンパイル

Caché は、通常、ユーザの Z*、z*、%Z*、%z* の各ルーチンおよび各クラスをインストール時にすべてリコンパイルします。しかし、以前のリリースでは、"Generated" (生成済み) としてマークされたルーチンをスキップしていました。生成済みルーチンとは、他のルーチンまたはクラスのコンパイルによって派生したルーチンまたはそれらによって作成されたルーチンです。

このリリース以降は、ルーチンのソースが存在しない場合は、そのルーチンを生成済みとしてマークできます。この動作は、2 種類の状況下で発生します。1 つは、元のソースが削除された場合、もう 1 つは .MAC ファイルによって生成された .INT コードの %RO が生成済み (%RI、Generated フラグを保持) として %RO ファイルの中でマークされた場合です。

Caché は、インストール時にこの状況を検出し、生成されたコードが存在してもそれに対応するソースが存在しない場合は、生成されたコードをリコンパイルするようになりました。

出力にピーク・メモリ使用量情報を追加した $VIEW

このリリース以降、$VIEW(-1) の 17 番目の戻り値として、ピーク・メモリ使用量 (KB) の情報が追加されます。以下はその例です。

Set VSS= $VIEW(-1, $JOB)
Write "Peak memory usage for this process in KB is "_$PIECE(VSS, "^", 17), !

Caché を起動したユーザとして起動するシャドウ・サーバ

システムは、起動するタイミング (Caché が起動中であるか、Caché が起動済みで実行中であるか) に関係なく、同じユーザ特性でシャドウ・サーバを起動します。以前は、Caché が起動済みで実行中である状況でシャドウ・サーバを起動すると、Caché とは別のユーザの特性を取ることができました。その場合、プロセスの制限やファイルの所有権は状況によって異なる可能性がありました。今後は、これらは必ず同じになります。

$ZCONVERT の変更

UTF-8 出力変換を行う 4 引数形式の $ZCONVERT() に、次のように上位サロゲート文字で終わる Unicode 文字列を渡すとします。

Set S = $ZCONVERT(string, "O", "UTF8" , x)

この関数は、最後の文字をローカル変数 (この例では x) に保存するようになりました。x の値は、次の反復の入力文字の前に追加されます。

次の反復の文字列が下位サロゲート文字で始まる場合は、先頭に追加された x と最初の文字がサロゲート・ペアとして処理され、それに従って変換されます。反復の先頭文字が下位サロゲート文字でない場合は、直前の上位サロゲート文字が 3 バイト・シーケンスとして変換され、反復の先頭文字は単独で処理されます。

JSML (Javascript/XML) 変換にも同じ規則が適用されます。

アップグレード時のライセンス・プロンプトの変更

このリリース以降、インストール・プロセスではインストール時にユーザにライセンス・キーの入力を求めません。その代わりに、キー・ファイルの場所の入力が求められます。この場所がアップグレード時に不明な場合は、インストールの完了後に、このファイルをマネージャのディレクトリにコピーすることも、管理ポータルから入力することもできます。

ccontrol の出力の変更

ミラー・メンバがプライマリへの移行処理中である場合は、移行処理の一部としてユーザのサインインが一時的にブロックされます。次のような新しいメッセージに対応するために、Caché の開始操作の出力を解析しているアプリケーションの更新が必要になることがあります。

Sign-on inhibited: Transitioning to primary mirror member
アップグレード中に開いているトランザクションの ECP リカバリ

ECP リカバリでは、ネットワーク・サブシステムが初期化されるまで、開いている ECP トランザクションの処理が延期されます。アップグレードの過程でスタートアップ・リカバリ中にシステムがシャットダウンしたとき、開いているトランザクションが複数のジャーナル・ファイルに分散していた場合、システムのアップグレード後にこれらの開いているトランザクションをロールバックする処理を 2 回実行しようとすると失敗することがあります。

Note:

この状況を回避するには、アップグレードの前にシステムが正常にシャットダウンしていることを確認してください。

DeepSee ポータルに必要な USE 許可

このリリースから、ユーザが DeepSee ページを使用するときは、そのページに必要な特権のほか、%DeepSee_Portal リソースに対する USE 許可を持っている必要があります。最小のセキュリティ (プロダクション環境では推奨されません) を使用していない限り、この変更により、ロール定義またはユーザ定義の調整が必要になることがあります。

特に、アプリケーションに埋め込みダッシュボードが含まれている場合は、ダッシュボード・ビューワを使用できるように、該当するユーザに %DeepSee_Portal に対する USE 許可を提供する必要もあります。以前のリリースでは、埋め込みダッシュボードのユーザにこの特権は必要ありませんでした。

制御文字の変換の変更

このリリース以降、$ZCONVERT(string, "O", "JS") および $ZCONVERT(string, "O", "JSML") によって、$CHAR(1) ~ $CHAR(7) および "/" がそれぞれと同等の 16 進数である \x01 ~ \x07 および \x2F に変換されます。以前は、これらの文字は変更せずに渡されていました。

Javascript または Javascript Markup で $ZCONVERT を使用しているアプリケーションは、この変更に対応できるように修正が必要です。多くの場合は、これらの文字に相当する 16 進数表記を使用することで対応可能です。

%Monitor データの表示に必要なリソース

CSP を使用して %Monitor 機能で収集したデータを表示するには、関連する CSP ページおよびすべてのサブクラス・ページに %Admin_Manage%Admin_Operate、および %Developer が必要です。

メモリの使用量と割り当ての変更

XML リーダがそれぞれの情報を保存する際に、これまではプロセス・プライベート変数を使用していましたが、このリリースでは、ローカル変数を使用するようになりました。これにより、パフォーマンスの向上が得られますが、一方でメモリの使用量も増加しています。XML ファイルの読み取りサイズとシステム上での新旧混在の処理に応じて、致命的なエラーの発生を防止するために、メモリの割り当て量を多くすることが必要になる場合があります。この割り当ては次の手順で変更できます。

  • CPF ファイルで bbsiz パラメータを設定することで、恒久的な割り当てとする。

  • 特殊変数 $ZSTORAGE の値をアプリケーションで調整することで、動的な割り当てとする。

プラットフォーム固有の項目

このセクションでは、特定のプラットフォームに関係する項目について説明します。

Windows
  • Windows 上で pdfprint に必要となった PrintServer

    今後、Windows プラットフォームでは、組み込みの PrintServer が pdfprint で必要になります。 PrintServer は、Adobe Acrobat Reader を使用して印刷を行う Java プログラムです。

    ユーザは、PrintServer ディレクトリに PrintServer.properties ファイルを定義して、Adobe Reader の場所を定義する必要があります。例えば、Windows 7 では次のようになります。

    adobe=C:/Program Files (x86)/Adobe/Reader 10.0/Reader/AcroRd32.exe
    

    Zen レポートに、pdfprint を実行するための新しいプロパティ、パラメータ、および ZENURL が次のように追加されました。

    • プロパティ ZENURL パラメータ

    • PrintServer $PRINTSERVER PRINTSERVER

    • PrintTimeOut $PRINTTIMEOUT PRINTTIMEOUT

    GenerateReport 用のプリンタを定義する PS プロパティ、$PS ZENURL、および PS パラメータもあります。 次の URL では、Windows で Acrobat Reader を使用し、これをまとめてレポートに印刷する方法を紹介しています(読みやすさを考慮して、改行を適宜挿入しています)。

    http://localhost:57790/csp/samples/ZENApp.MyReport.cls
         ?MONTH=1
        &$MODE=pdfprint
        &$PRINTSERVER=4321
        &$PRINTTIMEOUT=30
        &$PS=Brother%20HL-5250DN%20series
    
    Note:

    PS には、[デバイスとプリンター]→[<プリンタ名>]→[プロパティ] の [全般] タブに設定されているプリンタ名を指定する必要があります。

  • VT の左カーソル・コマンドに対応する cterm オプション

    ターミナル・エミュレータは、以下の場合に VT-nnn ターミナルと動作が異なっていました。

    • 自動折り返しが構成されている。

    • 最後の表示列に文字が書き込まれたため、ターミナルが文字を折り返そうとしている。

    • N 個の連続するバックスペースまたはカーソル左側 N 個分のエスケープ・シーケンス (CSI n D) が送信された。

    上記の状況で、VT ターミナルでは最後の列の左側にカーソルが N 文字分だけ移動しますが、ターミナルではディスプレイの最後の列のすぐ右側の位置からカーソルが N 文字分だけ移動していました。このため、ターミナルではカーソルが VT ターミナルより 1 文字分右に配置されていました。 以下のレジストリ・エントリを定義すると、上記の状況でターミナルの動作が VT ターミナルと同じになります。

    • 32 ビット Windows の場合 :

      HKLM\SOFTWARE\InterSystems\Terminal\UseStrangeVTBackspace="1"

    • 64 ビット Windows の場合 :

      HKLM\SOFTWARE\Wow6432Node\InterSystems\Terminal\UseStrangeVTBackspace="1"

    Important:

    この動作を有効にすると、コマンド行呼び出し後のプログラマ・モードで折り返された行を編集するときに、問題が発生することがあります。この動作がアプリケーションに必要でない限り、ユーザがこの動作を有効にすることはお勧めしません。

  • .NET アセンブリの欠落に対応するための変更

    アプリケーションのマニフェストにリストされたコンポーネントの一部が正しくインストールされていない状況は、潜在的には危険ですが、欠落しているコードが検索も使用もされないことが確実な場合にはよく見られる状況です。 このバージョン以降、Caché はロード可能なすべてのアセンブリを引き続きロードし、ロードできないアセンブリをログに記録します。

    配備上の問題のためにコードの実行時に問題が発生したユーザは、ログを使用して依存関係の問題を解決する必要があります。

Windows および UNIX® / Linux

Caché の内部 Web サーバが、すべての Windows、UNIX®、および Linux のプラットフォームでバージョン 2.4.2 に更新されました。インストールの際に、必要に応じて httpd.conf が自動的に更新されます。この動作は、Windows インストール、UNIX® インストール、スタンドアロン CSP ゲートウェイのインストール・スクリプト、および Linux 用の RPM インストールに適用されます。

Linux RedHat 32 ビットおよび 64 ビット

なし。

MacOS 64

なし。

PowerPC および HP-Itanium

Caché は、アップグレード時に CPF ファイルを変更し、ロック・テーブルに割り当てられるメモリ量を現在の量の 2 倍に引き上げます。これは、[config] セクションの既存の locksiz パラメータを 2 倍にすることで行われます。この変更により、ロック・テーブルのメモリの割り当て元である gmheap パラメータにも同じ量のメモリが追加されます。

最初のインストール時に、既定の locksiz が既定の 2 倍になり、gmheap も同じ量だけ引き上げられます。

新しいシステムを構成するユーザは、使用するロック・テーブルのサイズを以前の量の 2 倍に増やし、gmheap パラメータにも同じ量を追加する必要があります。

OpenVMS Itanium

このバージョンでは、CACHE.EXE ファイルが CACHE.EXECKERNEL.EXE の 2 つに分割されました。

Caché コマンドラインを使用する場合は、この変更による影響はありません。CACHE.EXE を実行すると、以前と同様に動作します (CACHE.EXE と、それに対応する CKERNEL.EXE が同じディレクトリに保持されている場合)。

CZF.C などのソース・ファイルに変更を加えて、CZF.EXE でコールインを実行するようにした場合は変更が必要になります (既定の CZF.EXE は、どのようなコールインも実行しません)。CZF.EXE イメージは、$ZF("RoutineName",...) 呼び出しで有効化します。コールインを実行する別のイメージをビルドする場合は、そのイメージのビルド方法も変更する必要があります。これまで、このようなイメージは CACHE.EXE 共有可能イメージに対してリンクされていました。今回から、これらは CKERNEL.EXE 共有イメージに対してリンクされるようになりました。

[InstanceDir.source.cache] ディレクトリにインストールされる CLINK.OPT リンカ・オプション・ファイルは、CACHE.EXE ではなく、CKERNEL.EXE を参照するように変更されています。OpenVMS LINK の実行時に CLINK.OPT/OPTIONS を使用する場合は、[InstanceDir.bin]CKERNEL.EXE ファイルの場所を指し示すように CKERNEL 論理名を定義するか、LINK の実行時に、既定のディレクトリに CKERNEL.EXE のコピーを用意しておく必要があります。

Caché カーネル・コールインを実行するイメージをリンクするときに、CLINK.OPT オプション・ファイルを使用しない場合は、CACHE.EXE を参照するコマンド・ファイルまたは LINK コマンドを変更する必要があります。ほとんどの CACHE.EXE への参照を CKERNEL.EXE への参照に変更して、CKERNEL.EXE で定義されたユニバーサル・シンボルをビルド・プロシージャが使用できるようにする必要があります。

Caché カーネルへのコールインを実行する実行可能プログラム・イメージを作成した場合は、そのイメージは前述したように LINK を実行する必要があります。ただし、そのイメージを実行するときには、対応する CKERNEL.EXE のコピーの場所を指定することも必要になります。これは、イメージの実行前に、論理名 CKERNEL を定義することで行います。(これまでは、論理名 CACHE を定義して、実行可能プログラムが CACHE.EXE 共有可能ライブラリ・イメージを見つけられるようにする必要がありました。)CKERNEL ローカル名の定義は、以下のようなものになります。

$ DEFINE CKERNEL Device:[InstanceDir.BIN]CKERNEL.EXE 

ビルドしたイメージが /PRIVILEGED 修飾子を追加して既知のイメージとしてインストールされる場合、論理名 CKERNEL は、DEFINE/EXECUTIVE_MODE または ASSIGN/EXECUTIVE_MODE を使用して作成されている必要があります。権限付与された実行可能ファイル (共有ライブラリ・イメージを有効化するもの) には、既知のイメージになる共有ライブラリ・イメージが必要です。このイメージの場所は、エグゼクティブ・モード (またはカーネル・モード) の論理名で特定されます。

LIB$FIND_IMAGE_SYMBOL を呼び出すことで、動的に CACHE.EXE を有効化するイメージがある場合は、動的に CKERNEL.EXE を有効化するように LIB$FIND_IMAGE_SYMBOL の呼び出しを書き換える必要があります。

開発者

このセクションでは、以前のバージョンの Caché 上で実行されているアプリケーションの設計者、開発者、および保守担当者に関係する情報を示します。

ここでは、各項目について簡単に説明します。ほとんどの場合は、ドキュメントの別の箇所に詳しい説明があります。

グローバル名の予約

インターシステムズは、以下で始まる名前を除き、CACHESYS データベース内のすべてのグローバル名を予約しています。

  • “%z” または “%Z”

  • “z” または “Z”

他のすべてのデータベースでは、“ISC.” および “%ISC.” で始まるすべてのグローバル名をインターシステムズが予約しています。

ルーチン・コンパイラの変更

なし。

ルーチンの変更

値だけでなく参照も指定できるようになった可変個数の引数

このバージョン以降、引数の参照渡しをするときに、可変個数の引数を受け渡すための args... 構文を使用できます。以下はその例です。

   set x=2,y(3)=4 
   do sub1(.x,.y,.z) 
   ; now $DATA(x)=0, y(1,2)=3, z=5 
 quit 
sub1(args...) 
 set args(2,1,2)=3 
 do sub2(args...) 
 quit 
sub2(a,b,c) 
 kill a 
 ; b(1,2)=3 and b(3)=4 
 set c=5 
 quit
Note:

現在のプログラムがこの表記を使用して引数の参照渡しをしている場合は、サブルーチンのアクションが元の変数に影響を与えるようになるため、その動作が変更される可能性があります。この変更以前には、引数が実際には値渡しされていたため、サブルーチンが引数の値に影響を与えることはありませんでした。

Z*.inc および z*.inc インクルード・ファイルの名前変更

このリリースでは、すべての Z*.inc インクルード・ファイルの名前が ISC*.inc に変更され、すべての z*.inc インクルード・ファイルの名前が ISCz*.inc に変更されています。これは、Caché のシステム・インクルード・ファイル名がユーザのインクルード・ファイル名と競合しないようにするための措置です。

クラスの変更

クラスの削除

以前のバージョンに存在していた以下のクラスは、このリリースで削除されています。

  • %BI — Excel、ExcelTry

  • %CSP.UI.Portal — PrintQuery、PrintTable

  • %CSP.UI.Portal.Config — Journal、RemoteDatabase、RemoteDatabases

  • %CSP.UI.Portal.SQL — ExecuteQuery

  • %CSP.UI.SQL — CQInfoPane、ViewInfoPane

  • %CSP.UI.System — AppGroupTablePane

  • %DeepSee — FactView、MetaView

  • %DeepSee.Report.UI — Builder、BuilderCore

  • %DeepSee.UI — SVGWidgetCatalog、WidgetPreview

  • %DeepSee.UI.Dialog — WidgetBuilder

  • %Monitor.System — Dashboard、Dashboard2

  • %Monitor.System.Sample — Dashboard、Dashboard2

  • %Net.Remote.Java — JavaGatewayService

  • %WebStress — HttpRequest

  • %WebStress.Utils — Recorder

  • %WebStress.Utils.Recorder — Port、Recorded、Script、Status、Summary

  • %iKnow.Filters — SimpleMatchFilter

  • SYS.Monitor — AbstractSensor

クラス・コンポーネントの削除

このバージョンでは、以下のクラス・コンポーネントが、以前に存在していたクラスから移動または削除されています。

クラス タイプ 名前
%BI.CDC メソッド OnPage
%BI.CodeTableCSP メソッド OnPage
%BI.DMG メソッド OnPage
%BI.DatePicker メソッド OnPage
%BI.EdmundPageCSP メソッド OnPage
%BI.ExportImport メソッド OnPage
%BI.ExportList メソッド OnPage
%BI.Generator メソッド OnPage
%BI.GridPivoting メソッド OnPage
%BI.Help メソッド OnPage
%BI.ImportList メソッド OnPage
%BI.KnowledgeCSP メソッド OnPage
%BI.LanguageSVGCSP メソッド OnPage
%BI.LanguageSub メソッド OnPage
%BI.ListFolderData メソッド OnPage
%BI.PerfAlert2 メソッド OnPage
%BI.RulesSetup メソッド OnPage
%BI.Scorecard メソッド OnPage
%BI.SystemVariable メソッド OnPage
%BI.TimeSeries メソッド OnPage
%BI.Trees メソッド OnPage
%BI.UserObjectListWeb メソッド OnPage
%BI.ValueRange メソッド OnPage
%BI.WebADTM メソッド OnPage
%BI.WebAnalyzer メソッド OnPage
%BI.WebAnalyzer2 メソッド OnPage
%BI.WebAnalyzerSetup メソッド OnPage
%BI.WebCMeditor メソッド OnPage
%BI.WebCdnEditor メソッド OnPage
%BI.WebClsCom メソッド OnPage
%BI.WebColorScheme メソッド OnPage
%BI.WebComBank メソッド OnPage
%BI.WebComponentKPI メソッド OnPage
%BI.WebComponentTree メソッド OnPage
%BI.WebCurrency メソッド OnPage
%BI.WebDList メソッド OnPage
%BI.WebDashboard メソッド OnPage
%BI.WebDataCapture メソッド OnPage
%BI.WebDocBrwsr メソッド OnPage
%BI.WebDtAnalysis メソッド OnPage
%BI.WebETL メソッド OnPage
%BI.WebEmail メソッド OnPage
%BI.WebExcelTemplate メソッド OnPage
%BI.WebFile メソッド OnPage
%BI.WebFold メソッド OnPage
%BI.WebGrid メソッド OnPage
%BI.WebKPIClass メソッド OnPage
%BI.WebKnowledge メソッド OnPage
%BI.WebLesenReg メソッド OnPage
%BI.WebListbackup メソッド OnPage
%BI.WebLnkRpt メソッド OnPage
%BI.WebMain メソッド OnPage
%BI.WebMain2 メソッド OnPage
%BI.WebMainTable メソッド OnPage
%BI.WebManEnt メソッド OnPage
%BI.WebMapTable メソッド OnPage
%BI.WebMessaging メソッド OnPage
%BI.WebMessagingExt メソッド OnPage
%BI.WebMultiSites メソッド OnPage
%BI.WebOCR メソッド OnPage
%BI.WebPivTable メソッド OnPage
%BI.WebPrinter メソッド OnPage
%BI.WebPrn メソッド OnPage
%BI.WebSCActions メソッド OnPage
%BI.WebSMS メソッド OnPage
%BI.WebSQLComGen メソッド OnPage
%BI.WebSVG メソッド OnPage
%BI.WebSVGTest メソッド OnPage
%BI.WebSchema メソッド OnPage
%BI.WebSchemaMain メソッド OnPage
%BI.WebSecCorrection メソッド OnPage
%BI.WebShortcut メソッド OnPage
%BI.WebSqlWiz メソッド OnPage
%BI.WebStoredProc メソッド OnPage
%BI.WebSysFn メソッド OnPage
%BI.WebTAClassDialogBox メソッド OnPage
%BI.WebTableList メソッド OnPage
%BI.WebTaskMgmt メソッド OnPage
%BI.WebTransformation メソッド OnPage
%BI.WebTranslationD メソッド OnPage
%BI.WebUsersMtn メソッド OnPage
%BI.WebUtil メソッド OnPage
%BI.WebWorkFlow メソッド OnPage
%BI.WebWorkFlowE メソッド OnPage
%CSP.Login メソッド DrawLogout
%CSP.UI.DocLocalize メソッド DatabaseFreespaceCleanup、DatabaseFreespaceCompact、DatabaseFreespaceList、Journal、RemoteDatabase、RemoteDatabases
%CSP.UI.Portal.ClassList メソッド allowSelectRow
プロパティ AllowSelectRow
%CSP.UI.Portal.DatabaseFreespace メソッド clearSpace
%CSP.UI.Portal.DatabaseFreespaceCleanup メソッド DrawTitle1
プロパティ msgValidate
%CSP.UI.Portal.DatabaseFreespaceCompact メソッド DrawTitle1
プロパティ msgValidate
%CSP.UI.Portal.Dialog.ExportResource プロパティ ActionDone
%CSP.UI.Portal.ProcessDetails メソッド doOwnerDrawTabs、drawOneTab、drawTabs、startRefresh、tabClicked
プロパティ TABAREAHEIGHT、TABHEIGHT、TABMAXWIDTH、TABOVERLAP、TABRADIUS、TABTEXTMARGIN、TABTOPREDUCTION、TEXTVOFFSET
%CSP.UI.Portal.RoutineCompare メソッド getHTML
%CSP.UI.Portal.RoutineList メソッド allowSelectRow
プロパティ AllowSelectRow
%CSP.UI.System.SecurityAdvisorPane プロパティ readOnly
%DeepSee.Report.UI.ExecuteReport メソッド showFileSelectionWindow
%DeepSee.Report.UI.ExtractDSS プロパティ nameSpace
%DeepSee.Report.UI.reportModelServer メソッド ServerCommand
%DeepSee.Report.UI.schemaEditPanel メソッド IsSQLReservedWord、processFieldName
%DeepSee.UI.Dialog.DashboardSave メソッド DrawIcons、selectLayout、updateGridControls
プロパティ dashboardDescription、dashboardGridCols、dashboardGridRows、dashboardKeywords、dashboardLayout、dashboardLocked、dashboardModify、dashboardResize
%DeepSee.UI.TermListManager メソッド columnClick
%DeepSee.UI.WorksheetBuilder メソッド CreateDataSet、GetLookupArray、GetWSData、LookupReferences、SaveToServer、SetRecord、applyChange、changeCell、changeColumn、changeGrid、changeRow、clearStyles、deleteItem、editCellHandler、editFormatString、getCellValue、getCurrPageCount、getCurrPageSize、getLogicalValue、gotoGridPage、gridChange、gridEditKeyDown、gridEditKeyUp、gridRender、initEngine、loadDataConnector、loadWorksheet、moveColumnLeft、moveColumnRight、moveRowDown、moveRowUp、nextGridPage、numberToColumn、prevGridPage、printWorksheet、recalc、renderNavBar、resolveFormulaRefs、selectCellHandler、selectColumn、selectGrid、selectRow、setActionTarget、setRecordValue、textEditorKeyup、textOKClicked、toggleSettings、updatePropertyPanel、updateStyleControls
プロパティ currPage、dataConnector、gridMode、gridSelected、pageSize、selectedColumn、selectedRow、worksheetDescription、worksheetKeywords、worksheetLocked、worksheetOwner、worksheetPublic、worksheetResource
%DeepSee.UserPortal.DashboardViewer メソッド SaveDashboardToFolder、addWidget、editWidget
%DeepSee.UserPortal.Home メソッド DrawFoldersList
%Library.EnsembleMgr メソッド AddDelegated、CreateFoundationResources、EnableFoundationNamespace、GetHealthShareNamespaceType、InstallFoundationSecurity、IsFoundationInstalled、IsHealthShareInstalled、IsViewerInstalled、ValidateHealthShare、map2hslib、moveHSSiteDefaultFiles、unmaphslib、upgradeUTCIndices
%Library.RoutineMgr メソッド IsServerOnly
%Library.SQLCatalog メソッド GetCachedQueryInfo、MakePat、SQLCODEListClose、SQLCODEListExecute、SQLCODEListFetch、SQLCachedQueryInfoClose、SQLCachedQueryInfoExecute、SQLCachedQueryInfoFetch、SQLCachedQueryTableClose、SQLCachedQueryTableExecute、SQLCachedQueryTableFetch、SQLChildTablesClose、SQLChildTablesExecute、SQLChildTablesFetch、SQLConstraintsClose、SQLConstraintsExecute、SQLConstraintsFetch、SQLFieldsClose、SQLFieldsExecute、SQLFieldsFetch、SQLForeignKeysClose、SQLForeignKeysExecute、SQLForeignKeysFetch、SQLIndicesClose、SQLIndicesExecute、SQLIndicesFetch、SQLParentTableClose、SQLParentTableExecute、SQLParentTableFetch、SQLProcedureInfoClose、SQLProcedureInfoExecute、SQLProcedureInfoFetch、SQLProceduresClose、SQLProceduresExecute、SQLProceduresFetch、SQLRelationshipsClose、SQLRelationshipsExecute、SQLRelationshipsFetch、SQLReservedWordsClose、SQLReservedWordsExecute、SQLReservedWordsFetch、SQLTablesClose、SQLTablesExecute、SQLTablesFetch、SQLTriggersClose、SQLTriggersExecute、SQLTriggersFetch、SQLViewFieldsClose、SQLViewFieldsExecute、SQLViewFieldsFetch、SQLViewInfoClose、SQLViewInfoExecute、SQLViewInfoFetch
%Library.SQLCatalogPriv メソッド SQLRolePrivilegesClose、SQLRolePrivilegesExecute、SQLRolePrivilegesFetch、SQLRoleUserClose、SQLRoleUserExecute、SQLRoleUserFetch、SQLRolesClose、SQLRolesExecute、SQLRolesFetch、SQLUserExistsClose、SQLUserExistsExecute、SQLUserExistsFetch、SQLUserPrivsClose、SQLUserPrivsExecute、SQLUserPrivsFetch、SQLUserRoleClose、SQLUserRoleExecute、SQLUserRoleFetch、SQLUserSysPrivsClose、SQLUserSysPrivsExecute、SQLUserSysPrivsFetch、SQLUsersClose、SQLUsersExecute、SQLUsersFetch
%Library.SysLog メソッド ConfigurePage、DecodeData、OnPage、RenderBanner、ServeStyleSheet、ShowDataPage、ShowLogPage
%MV.Adaptor パラメータ MVAUTOLOCKED
%SQL.Manager.Catalog メソッド CachedQueryInfoClose、CachedQueryInfoExecute、CachedQueryInfoFetch、CachedQueryTableClose、CachedQueryTableExecute、CachedQueryTableFetch、ConstraintsClose、ConstraintsExecute、ConstraintsFetch、FieldCalcSelectivityClose、FieldCalcSelectivityExecute、FieldCalcSelectivityFetch、FieldCurrentSelectivityClose、FieldCurrentSelectivityExecute、FieldCurrentSelectivityFetch、FieldsClose、FieldsExecute、FieldsFetch、IndicesClose、IndicesExecute、IndicesFetch、MakePat、NamespacesWithXdbcErrorsClose、NamespacesWithXdbcErrorsExecute、NamespacesWithXdbcErrorsFetch、ProcedureInfoClose、ProcedureInfoExecute、ProcedureInfoFetch、ProceduresClose、ProceduresExecute、ProceduresFetch、PropertyInfo、RWListClose、RWListExecute、RWListFetch、SQLCODEListClose、SQLCODEListExecute、SQLCODEListFetch、SchemasClose、SchemasExecute、SchemasFetch、SchemasOnlyClose、SchemasOnlyExecute、SchemasOnlyFetch、TablesClose、TablesExecute、TablesFetch、TablesOnlyClose、TablesOnlyExecute、TablesOnlyFetch、TriggersClose、TriggersExecute、TriggersFetch、ViewFieldsClose、ViewFieldsExecute、ViewFieldsFetch、ViewInfo2Close、ViewInfo2Execute、ViewInfo2Fetch、ViewInfoClose、ViewInfoExecute、ViewInfoFetch、ViewsOnlyClose、ViewsOnlyExecute、ViewsOnlyFetch、XdbcErrorsClose、XdbcErrorsExecute、XdbcErrorsFetch
%SYS.ProcessQuery メソッド PPGClose、PPGExecute、PPGFetch
%SYS.Task.IntegrityCheck メソッド DirectoryIsValid
%SYSTEM.Event メソッド DefinedIP、ListIP、SignalIP
%UnitTest.Report メソッド DeleteSuite、GetTestColor、GetTestState、NoNamespace、ShowAsserts、ShowCases、ShowIndices、ShowMethods、ShowSuites、writeStyle
%XML.Node メソッド AppendChild、InsertChild、ReplaceNode
%ZEN.Portal.assistedText メソッド ghostGotFocus
%ZEN.Report.Display.COSChart.cchart メソッド calculateYAxisWidth
%iKnow.DeepSee.Dimensions.Dictionaries メソッド GetId
%iKnow.DeepSee.UI.Analysis.AbstractAnalysis メソッド GetDomainId、GetFilter
%iKnow.DeepSee.UI.Analysis.Content メソッド SetListing
%iKnow.DeepSee.UI.Analysis.Entities メソッド GetDetailChartData、GetDetailLabelX、GetSelectedItemName、ReBuildEntityList、SetSelectedCell、getDetailChartDataClient、getDetailLabelXClient
%iKnow.Domain プロパティ SortField
%iKnow.Matching.DictionaryAPI パラメータ GetDictionaryElementsRT
%iKnow.Matching.MatchingWSAPI.InvalidateMatchingResults プロパティ keepEntUniMatches
%iKnow.Queries.MetadataWSAPI.AddField プロパティ buildBitstring
%iKnow.Queries.MetadataWSAPI.UpdateField プロパティ buildBitstring
%iKnow.Queries.MetadataWSAPI.UpdateFieldById プロパティ buildBitstring
%iKnow.Queries.SourceAPI メソッド GetByEquivalentIds、GetByEquivalents
%iKnow.UI.AbstractPortal メソッド GetDomain、GetTerm
%iKnow.UI.IndexingResults メソッド GetSentFrom、GetSentTo
Ens.Enterprise.Portal.EnterpriseSearch パラメータ AssistantClass
Ens.Enterprise.Portal.MsgFilter.Filter メソッド DeleteFromTemp、LoadFromTemp、SaveToTemp
Ens.Enterprise.Portal.SystemList メソッド getSSLConfigList、getSoapCredentials
Ens.Rule.Model.ruleDefinition メソッド test
メソッド返り値の変更

今回のバージョンの Caché では、以下のメソッド返り値が変更されました。

  • %DeepSee.Report.UI.reportModelServer — ImportXML

  • %DeepSee.Report.UI.reportPreviewer — DeleteTempFile

  • %SQL.Import.Mgr — Import

  • %SYSTEM.iKnow — IndexDirectory、IndexFile

  • %XML.Node — InsertCharacter、InsertElement

メソッド・シグニチャの変更

今回のバージョンの Caché では、以下のメソッドのシグニチャが変更されました。

クラス名 メソッド名
%CSP.UI.Portal.Config.ZenReport SaveData
%CSP.UI.Portal.DatabaseFreespaceCleanup GetSize
%CSP.UI.Portal.DatabaseFreespaceCompact GetFreeSpace
%CSP.UI.Portal.RoutineList doFullView
%CSP.UI.System.GlobalDrillPane SaveChange
%DeepSee.AbstractKPI %GetFilterLogicalValue
%DeepSee.Component.pivotController showMessage
%DeepSee.Component.pivotTable getDataSourceCaption
%DeepSee.Dashboard.Utils %GetMembersForFilter
%DeepSee.QualityMeasure.Utils %GetQualityMeasureClass
%DeepSee.Report.UI.CreateDCR scanForFieldNames
%DeepSee.Report.UI.reportPreviewer GeneratePresentationReport
%DeepSee.Report.UI.schemaEditPanel autopopulateDBItem、makeNode
%DeepSee.UI.WorksheetBuilder gridKeyDown
%DeepSee.UserLibrary.FolderItem %CheckResource
%DeepSee.UserPortal.DashboardViewer navGetContentForLevel、navSelectItem、widgetSelected
%DeepSee.UserPortal.Home refreshFolders、setFolderCategory
%DeepSee.UserPortal.standardPage navSelectItem
%DeepSee.extensions.iKnow.ClassifierBuilder genCrcTable
%Library.AbstractStream Read
%Library.CacheCollection CollectionToDisplay、DisplayToCollection
%Library.GTWCatalog SQLTablesExecute、SQLTablesJExecute
%Library.GlobalEdit CollationSet、CompactGlobal、Open
%Library.GlobalStreamAdaptor Read、ReadLine
%Library.RegisteredObject %OnValidateObject
%Library.RoutineMgr ImportItemListExecute、getBackupList、getPackageList
%Net.Remote.Service RunStartCmd、StartGateway、StartGatewayObject
%Net.Remote.Utility RunCommandViaCPIPE、RunCommandViaZF
%SOAP.Addressing.Properties GetDefaultRequestProperties
%SQL.Util.Procedures CSV、CSVTOCLASS
%SYS.PTools.SQLStats GetStats、GlobalSave
%SYSTEM.OBJ Load
%SYSTEM.iKnow IndexDirectory、IndexFile
%Stream.Object Read
%Stream.TmpCharacter Read
%Studio.Extension.Base OnAfterAllClassCompile、OnAfterClassCompile
%Studio.SourceControl.ISC BaselineExport、BaselineExportItem
%WebStress.Record Run
%XML.ImportHandler SerializeBase64Node、SerializeNode
%XML.Node AppendCharacter、AppendElement、InsertCharacter、InsertElement
%XML.Security.Signature ComputeSha1Digest
%ZEN.Auxiliary.jsonProvider %WriteJSONFromArray、%WriteJSONFromObject、getDataSourceCaption
%ZEN.Controller InvokeClassMethod、InvokeInstanceMethod
%ZEN.Dialog.fileSelect RebuildLookin
%ZEN.Portal.assistedText doAction
%ZEN.Report.Display.COSChart.cchart createSVGTextNode、getYAxisTitle、renderYAxisTitle、renderYLabels
%ZEN.Report.PrintServer %ServeTransformAndPrint
%ZEN.SVGComponent.chart calculateYAxisWidth、createSVGTextNode、getYAxisTitle、renderYAxisTitle、renderYLabels
%ZEN.SVGComponent.radialNavigator drawNode
%ZEN.SVGComponent.tabBar drawOneTab
%iKnow.Configuration %OnNew
%iKnow.DeepSee.UI.Analysis.Entities GetChartData、GetLabelX、getChartDataClient、getLabelXClient
%iKnow.Domain %OnNew
%iKnow.Filters.Filter GetFilteredCcFrequency、GetFilteredCcSpread
%iKnow.Matching.MatchingAPI GetTopMatchesByDictionaryItemId、InvalidateMatchingResults
%iKnow.Matching.MatchingQAPI InvalidateMatchingResults
%iKnow.Matching.MatchingWSAPI GetTopMatchesByDictionaryItemId、InvalidateMatchingResults
%iKnow.Queries.MetadataAPI AddField、UpdateField、UpdateFieldById
%iKnow.Queries.MetadataI AddField
%iKnow.Queries.MetadataQAPI AddField、UpdateField、UpdateFieldById
%iKnow.Queries.MetadataWSAPI AddField、UpdateField、UpdateFieldById
%iKnow.Source.Lister SetConfig
%iKnow.Source.Processor %OnNew
%iKnow.Utils.MaintenanceAPI AddUserDictionaryEntry
%iKnow.Utils.MaintenanceQAPI AddUserDictionaryEntry
%iKnow.Utils.MaintenanceWSAPI AddUserDictionaryEntry
Backup.General ExternalFreeze
Config.NLS.Locales ImportDir
Config.NLS.SubTables ImportDir
Config.NLS.Tables ImportDir
Ens.Director StartProduction
Ens.Enterprise.Portal.MsgFilter.EnterpriseAssistant EnumerateExecute
Ens.Rule.Generator generateActions、generateOneAction、generateOneRuleSet
Ens.Rule.Model.expression constructCOS、convertToCOS、test
SYS.Database Defragment
SYS.Monitor.Health.Chart %OnNew
JavaGatewayService クラスの廃止

このリリースでは、%Net.Remote.Java.JavaGatewayService クラスが廃止されました。これは内部クラスだったため、外部で使用するためのドキュメントはありませんでした。

この廃止されたクラスに依存するカスタム・コードを開発していた場合は、このクラスの機能が組み込まれた %Net.Remote.ServiceOpens in a new tab クラスを代わりに使用するようにコードを更新する必要があります。

オブジェクトの同期化

オブジェクトがそのクラスを含まないネームスペースと同期化されている場合、Caché は同期化を中断せずに、<CLASS DOES NOT EXIST> エラーを検出してログに記録するようになりました。 これにより、アプリケーションはエラーからより適切に回復できるようになります。

アプリケーションがこのケースで失敗を想定していた場合は、報告されたエラーを確認し、エラー状態を処理するようにアプリケーションを変更する必要があります。

%Library.GlobalEdit.Create() における照合処理の変更

%Library.GlobalEdit.Create() への 3 番目の引数として、外部照合名 ("Spanish2" など) またはその内部番号 (32 など) を使用できるようになりました。指定された照合が無効であるか、ロードされていない場合は、エラーが生成されます。以前は、このメソッドは数値だけを受け入れ、それが無効だった場合はデータベースの既定の照合を暗黙的に使用していました。

区切り識別子の記号バインディングの修正

新しいオブジェクトの保存時に IDENTITY プロパティが設定されない原因となっていた不具合が修正されました。名前が区切り識別子であるプロパティが IDENTITY プロパティとしてクラスに定義されている場合、そのプロパティは挿入後に正しく設定されませんでした。

HTTP の変更

このリリースでは、%Net.HttpRequestOpens in a new tab のインスタンスを再利用して複数の要求を送信すると、Caché は既定で (HTTP 1.1 キープ・アライブ接続を使用して) 1 つの HTTP ソケットを通じてすべてのメッセージを送信します。具体的には、Caché は TCP/IP ソケットを閉じてから再び開く必要がないように、開いたままにします。このキープ・アライブ動作の無効化の詳細は、"Caché インターネット・ユーティリティの使用法" の “HTTP 要求の送信と HTTP 応答の読み取り” の章にある “キープ・アライブ動作の管理” を参照してください。

新しいディレクトリ構造に対応するための %Net.Remote.DotNet.Test の変更

このバージョン以降の Caché には、.NET ゲートウェイ用のディレクトリとしてバージョン 2.0 用とバージョン 4.0 用の 2 つが用意されます。 今後、%Net.Remote.DotNet.TestOpens in a new tab クラスの ListTypeLibs() テスト・メソッドは、既定でバージョン 2.0 用のディレクトリを参照します。 ユーザは、以下を実行してバージョンを変更できます。

Do ##class(%Net.Remote.DotNet.Test).ListTypeLibs(port,,"4.0")

port は、呼び出し時に使用されていない有効なポート番号です。

スタジオ・ソース・コントロールのリソース要件

このリリースで %Studio.SourceControl.UIOpens in a new tab%CSP.StudioTemplateInsertOpens in a new tab、および %CSP.StudioTemplateSuperOpens in a new tab の各スタジオ・ソース・コントロール・クラスを使用するには %Developer リソースが必要です。

クラス・コンパイラの変更

今回のバージョンの Caché では、以前のリリースと同様、引き続きクラス・コンパイラの向上を図っていきます。このセクションでは、アプリケーション変更を必要とする可能性のある変更について詳述します。

ビットマップ・インデックスに使用する ID を整数とする要求

%CacheSQLStorage を使用しているクラスでビットマップ・インデックス・マップを定義する場合に、テーブルの ID が整数型でないと、クラス・コンパイラからエラーが報告されるようになりました。

SQL ストレージを使用しているテーブル上に IDKEY インデックスがあり、SqlCategory の INTEGER をデータ型とする単独のフィールド上でその IDKEY を定義していない場合は、次のエラーが報告されます。

Compiling class User.MyTable
ERROR #5485: Bitmap indices are only supported when the IDKEY is based on a single positive integer attribute 
 ERROR #5030: An error occurred while compiling class User.MyTable

この変更以前には、ビットマップ・インデックス・マップが定義されていた場合、ID に互換性があることを確認するための SQL ストレージのチェックは行われませんでした。

Note:

これまでこの処理を試してきた既存のアプリケーションは、ID に正の整数以外の値が含まれる場合に、無効なインデックス・データを持っている可能性があります。 その場合は、インデックスを削除して再構築する必要があります。

既定で有効な複数コンパイル

このリリース以降、コンパイル、またはディレクトリから複数XMLクラスをロードする処理を、複数のプロセスを使用して高速化する機能 (“/multicompile”) が既定で有効になります。システムの既定値を無効に変更するには、以下を実行します。

  Do $SYSTEM.OBJ.SetQualifiers("/multicompile=0", 1)

プロジェクションでの複数ジョブの利用

/multicompile を有効にしてクラス・コンパイルを実行したときに、Caché は、クラスのコンパイルと同じようにワーカ・ジョブを使用して、CreateProjection のクラス・プロジェクション呼び出しを実行するようになりました。これにより、クラス・プロジェクション・コードで大量の作業が行われる場合に、コンパイルのこのフェーズのパフォーマンスが向上します。

ほとんどのプロジェクション・コードは、この変更以前と同じように機能し続けますが、次の 2 つの点に注意する必要があります。

  1. 複数のジョブで同時にプロジェクションが実行される可能性があるため、$JOB を使用して他のプロジェクション・コードと調整するための情報を格納しているプロジェクションでは、すべての複数コンパイル・ジョブにわたって定義されて同じ値をとる %ISCName を使用するように変更が必要になります。

  2. 干渉を防ぐために排他アクセスが必要な場合は、データをロックすることが重要です。同時に複数のプロジェクションを実行すると、別のプロジェクションが別のプロセスで同じデータ構造を操作する可能性があります。これは、この変更以前にも異なるジョブで 2 つのクラスを同時にコンパイルしたときに起こり得る問題でしたが、複数コンパイルでは、この問題が発生する可能性が高くなります。

シリアル・プロパティの通知の変更

以前のバージョンでは、REQUIRED 制約が強制されることは事実上ありませんでした。次のバージョンでは、これが強制されるようになります。

タイプ・クラスが %Library.SerialObject で、REQUIRED として定義されているプロパティを含む既存のアプリケーションには、その制約が強制されるようになりました。これにより、参照先のシリアル・オブジェクトを変更またはスウィズルした場合は、一度保存されたオブジェクトを保存しようとするとエラーになる可能性があります。

パラメータ・プロパティの形式の変更

コンパイルされたプログラムのパラメータ値の格納形式が、$LIST になるように変更されました。格納されたパラメータ値の解析に SQL を使用しているアプリケーションでは変更が必要です。これを支援するため、新しいメソッド GetParameterValue%Dictionary と共に追加されました。また、クエリ %Dictionary.LegacyQueryOpens in a new tab は以前の形式で値を返します。

言語バインディングの変更

XEP の EventPersister の変更

OPTION_REFERENCES と OPTION_INHERITANCE (および関連するフラグ) が削除されました。これら 2 つのオプションを削除した後は、オプションが 1 つもなくなります。また、EventPersister.setOption メソッドおよび getOption メソッドも削除されました。

これら最後の 2 つのオプションは実際には生成時またはインポート時のフラグであるため、代わりに次の 2 種類の importSchema が追加されました。

String[] importSchema(String classOrJarFileName, int options)

String[] importSchema(String[] classes, int options)

options は次のとおりです。

  • IMPORT_OPTION_NONE = 0

    インポート・オプションなし - 既定で、参照なしと平坦化された階層になります。

  • IMPORT_OPTION_REFERENCES_ENABLED = 1

    インポートで参照が部分的に有効になります。

  • IMPORT_OPTION_FULL_INHERITANCE = 2

    継承を平坦化しません。

列挙処理に対する変更

このリリースでは、Java および DotNet の列挙のプロジェクションが変更されています。Caché 側に名前は格納されますが、順序位置は格納されなくなりました。この変更は、新しいアプリケーションでは完全に透過的です。

一部の列挙が既に格納されている古いアプリケーションでは、エラーを回避するため、データを削除してから再度インポートする必要があります。

SQL の変更

参照プロパティの IsValid を呼び出さなくなった SQL ファイラ

SQL ファイラは、永続クラスへの参照 (例えば、Sample.Person.Spouse プロパティ) の <property>IsValid メソッドを呼び出さなくなりました。 <property>IsValid メソッドはほとんど使用されていません (使用するには、クラスの開発者が定義する必要があります)。 オブジェクトの %Save メソッドは、永続とシリアルのどちらのタイプのプロパティでも <property>IsValid メソッドを呼び出さないため、オブジェクト・ファイラと SQL ファイラはこの動作で同期します。

アプリケーションがこの動作に依存する場合は、別の方法で (普通はトリガを使用して) 参照を検証する必要があります。

StorageToLogical および LogicalToStorage の修正

このリリースでは、プロパティまたはプロパティのデータ型に対して StorageToLogical メソッド、LogicalToStorage メソッド、またはその両方が定義されたリスト・コレクションまたは配列コレクションで、保存と取得に関連して発生する既存の問題が修正されています。以前の Caché では、StorageToLogical または LogicalToStorage がコレクションの各要素に正しく適用されませんでした。今後は正しく適用されるので、リスト・コレクションまたは配列コレクションの戻り値が以前のリリースと異なる場合があります。

区切り識別子が数値リテラルに変換されるバグの修正

区切り識別子が数値リテラルに変換される原因となっていたダイナミック SQL のバグが修正されました。以前は、有効な数値リテラルでもある区切り識別子がステートメント・プリパーサによって検出されると、それは数値リテラルに変換されていました。例えば、次のようなクエリがあるとします。

SELECT Name FROM Sample.Person WHERE  %ID = "1"

この場合、リテラル “1” は整数値 1 として解釈されていました。 正しい変換では区切り値 "1" が保持され、この文は作成された時点でエラーを報告します。

DISPLAY モードでの TRUNCATE SCALE の修正

以前は、DISPLAY モードで列を選択したときに、“{fn TRUNCATE(value, number)}” (number は 0 より大きく 2 以下) の結果の SCALE が誤って表示されました。DISPLAY モードの結果の出力では、SCALE として必ず 2 が使用されていました。

今後は、出力が正しくスケーリングされます。

DDL によるクラスのコンパイルと同時にコンパイルされるサブクラス

SQL DDL 文の実行で、クラス定義をコンパイルする必要がある場合は、“b” フラグを使用すると、クラスがコンパイルされるようになりました。 これにより、そのクラスのすべてのサブクラスがコンパイルされます。 この動作は、多くの種類の DDL 文で必要になります。例えば、CREATE INDEX 文でクラスにインデックスが追加され、そのクラスにサブクラスがある場合に必要です。 この動作がない場合、サブクラスがコンパイルされるまでは、サブクラスのエクステント内の列にインデックスが構築されません。

Note:

クラスにサブクラスがあるテーブルに対してユーザが DDL を実行することは、ほとんどないと考えられます。

SQLTablePrivileges と SQLColumnPrivileges の変更

以前のバージョンでは、ODBC の SQLTablePrivileges および SQLColumnPrivileges のカタログ・クエリは、JDBC の getTablePrivileges および getColumnPrivileges のカタログ・クエリと共に、現在のユーザに付与する特権またはユーザが保持するロールに付与する特権のみを返していました。 今後は、現在のユーザが特権の付与者である場合は、行も返されます。

管理ポータルの DROP TABLE のチェック対象化

このリリースでは、SQL オブジェクトを投影したクラスに DDLAllowed=False が定義されている場合は、管理ポータルからテーブル、ビュー、プロシージャを削除できなくなりました。

Note:

これは、リンク・テーブルには適用されません。 クラスがリンク・テーブルとして定義されている場合は、リンク・テーブル・クラスが DDLAllowed=0 として定義されていても、DROP アクションによってローカル・システム上のリンク・テーブルは削除されますが、実際のテーブルが存在するサーバ上でこのリンクが参照するテーブルは削除されません。

コンパイルされたクエリ名の変更

以前のバージョンでは、埋め込み SQL によってルーチンまたはメソッド内にクエリが定義され、そのルーチンまたはメソッドが再帰的に呼び出された場合、生成されたカーソル名のため、先に設定された値が後続する文の実行によって上書きされていました。この場合、予測できない結果が発生していました。

このリリース以降、SQL クエリ・プロセッサによるカーソル変数名の生成方法が変更され、文のコンパイルごとに異なる変数名が生成されます。アプリケーション・コードが SQL に依存して SQL カーソルの特定の変数名を生成している場合は、そのコードを更新して、SQL によって生成される変数名に依存しないようにすることが必要になる可能性があります。 その場合も、SQL カーソル名は 1 つのルーチンまたはクラス・メソッドの中で一意とする必要があります。

文レベルの AFTER トリガの再帰的な実行の禁止

このバージョンでは、文レベルの AFTER トリガの動作に対して次の変更が行われました。

  1. 以前のバージョンでは、AFTER 文レベルのトリガが実行されるのは、文の SQLCODE が 0 の場合のみでした。 今後は、文の SQLCODE が 0 以上の場合にトリガが実行されます。 これは、INSERT、UPDATE、または DELETE の対象となる行が文で見つけられない場合 (SQLCODE = 100) に、トリガが実行されるようになったことを意味します。

    この動作には、language=TSQL トリガの適切な動作が必要です。

  2. Caché では、文レベルの AFTER トリガが再帰的に実行されなくなりました。トリガが自身を再帰的に呼び出すには、いくつかの方法があります。 テーブル T1 に対して同じ操作を実行するトリガがテーブル T1 に存在する場合は、直接的な再帰が発生します。 テーブル T2 への挿入を実行するトリガがテーブル T1 に存在し、テーブル T1 への挿入を実行するトリガがテーブル T2 に存在する場合にも、間接的な再帰が発生します。 間接的な再帰のもう 1 つの例は、あるルーチンまたはプロシージャを呼び出すトリガがテーブル T1 に存在し、そのルーチンまたはプロシージャが T1 への挿入を実行する場合です。 この変更により、再帰が発生したときに、トリガが以前に呼び出されたことが実行スタックで検出されると、そのトリガは実行されなくなります。 どのタイプの再帰が検出された場合も、エラーは返されません。トリガが 2 度目には実行されないだけです。

    トリガが自身を再帰的に呼び出すには、いくつかの方法があります。

    • テーブル T1 に対して同じ操作を実行するトリガがテーブル T1 に存在する場合は、直接的な再帰が発生します。

    • テーブル T2 への挿入を実行するトリガがテーブル T1 に存在し、テーブル T1 への挿入を実行するトリガがテーブル T2 に存在する場合に、間接的な再帰が発生します。 間接的な再帰のもう 1 つの例は、あるルーチンまたはプロシージャを呼び出すトリガがテーブル T1 に存在し、そのルーチンまたはプロシージャが T1 への挿入を実行する場合です。

    この変更により、再帰が発生したときに、トリガが以前に呼び出されたことが実行スタックで検出されると、そのトリガは実行されなくなります。 どのタイプの再帰が検出された場合も、エラーは返されません。トリガが 2 度目には実行されないだけです。

Important:

再帰からの保護は、文レベルの AFTER トリガでのみ実行されます。 文レベルの BEFORE トリガで再帰が行われた場合は、トリガ・コード自身で再帰を処理しないと、<FRAMESTACK> の実行時エラーが発生する可能性があります。

Note:

Caché 言語を含む文レベルのトリガで、埋め込み SQL を介して直接的な再帰を定義しようとすると、<FRAMESTACK> エラーが発生してコンパイルに失敗します。 アプリケーションに Caché トリガの再帰が必要な場合は、間接的な再帰を使用する必要があります。 これは、トリガ・コード内で埋め込み SQL の代わりにダイナミック SQL や遅延 SQL を使用する場合と同程度に簡単です。

自動的には作成されない %sqlcontext

リリース 2009.1 では、埋め込み SQL の CALL 文の実行中に %sqlcontext 変数の NEW 操作が開始され、戻るときにこの変数が削除されていました。このリリース以降、文に USING 節が含まれている場合を除き、この動作は発生しません。

iKnow の変更

近似値の形式の変更

このバージョンから、データの近似値のシグニチャが変更されました。以前は、10 進数値として定義されていましたが、特定の C++ ライブラリを使用したときに変換で問題が発生していました。今後は、10 進数の近似値は 0 ~ 256 の値を持つ整数として表されます。これにより、ライブラリの使用時に精度を落とさずに適切な範囲の値を使用できます。

iKnow UI クラスへのアクセス

このリリースより、iKnow のユーザ・インタフェース・ページ (%iKnow.UI.*) とそのクラス %iKnow.Queries.AbstractWSAPI および生成されたあらゆるクラスへのアクセスに %Developer が必要になります。

XML の変更

%XML.TextReader での一時的なストレージの使用

%XML.TextReaderOpens in a new tab の開発は、プロセス・プライベート・グローバルが登場する前から行われていました。このクラスは、一時的なストレージのために ^CacheTemp へのハードコードされた参照を使用していました。このリリースからは、%XML.TextReaderOpens in a new tab にはプロセス・プライベート・グローバル ^||CacheTemp が使用され、ParseXXX() クラス・メソッドに対する追加パラメータを使用してグローバル名を変更するオプションが追加されています。

まれに、アプリケーションに %XML.TextReader のサブクラスがあり、その専用コードをアプリケーションで追加している場合は、アプリケーション内のハードコード化されたグローバル参照を修正する必要があります。

Web サービスと SOAP の変更

キープ・アライブの新しい動作

このリリースの既定では、Caché Web クライアント・インスタンスを再利用して複数の要求メッセージを送信すると、Caché は (HTTP 1.1 キープ・アライブ接続を使用して) 1 つの HTTP 転送ですべてのメッセージを送信します。具体的には、Caché は TCP/IP ソケットを閉じてから再び開く必要がないように、開いたままにします。このキープ・アライブ動作の無効化の詳細は、"Caché での Web サービスおよび Web クライアントの作成" の “Caché Web クライアントの調整” の章の “Web クライアントのキープ・アライブを無効にする方法” を参照してください。

ProcessBody() で取得できる SOAP 本文の変更

ProcessBody() を実装して Web サービスをカスタマイズした場合は、そのメソッドの変更が必要になる可能性があります。以前のリリースでは、ProcessBody() は XML ネームスペース接頭語の定義をすべて省略して、SOAP 本文へのアクセスをそのまま提供していました。つまり、ProcessBody()requestBody 引数の Read() メソッドを呼び出すと、Caché はネームスペース接頭語の定義をすべて省略して本文を返していました。このリリースでは、返される本文に、本文要素またはエンベロープ要素で行われていたすべての接頭語の定義が含まれます。

生成されるメソッドに追加される XMLNAME パラメータ

状況によっては、SOAP ウィザードが生成する Web サービスおよび Web クライアントの Web メソッドに XMLNAME パラメータが追加されるようになりました。これは、名前が MethodNameResult の形式に従っていない要素に関する Web メソッドの戻り値の型が WSDL で定義されている場合に発生します。例えば、多くの WSDL では、Web メソッドの戻り値の型が次のように定義されます。

<s:element name="TestResponse">
    <s:complexType>
        <s:sequence>
            <s:element name="TestResult" type="s:string"/>
        </s:sequence>
    </s:complexType>
</s:element>

場合によっては、戻り値の型が代わりに次のように定義されます。

<s:element name="TestResponse">
    <s:complexType>
        <s:sequence>
            <s:element name="MyOutput" type="s:string"/>
        </s:sequence>
    </s:complexType>
</s:element>

このような場合、SOAP ウィザードは生成される Web メソッドに次のように XMLNAME パラメータを追加するようになっています。

Method Test(a As %String) As %String(XMLNAME="MyOutput") [ ... ]
{
...
}
Web サービス用の REQUIRED キーワードのサポート

必須の引数に対して REQUIRED=1 を追加するように、SOAP ウィザードが変更されました。 これは、サービスやクライアントの動作には影響しませんが、サービスから作成される WSDL に影響します。

Web メソッドの引数に REQUIRED パラメータを指定すると、生成される WSDL に影響を与えることができます。 REQUIRED=0 (既定) の場合は、WSDL に minOccurs=0 が含まれます。 この変更により、戻り値の型でも REQUIRED パラメータがサポートされます。戻り値の型の既定値は REQUIRED=1 でしたが、今後は REQUIRED=0 が有効になり、WSDL に影響を与えます。

SOAP ウィザードは、必須の引数に対して REQUIRED=1 を追加するようにも変更されています。

ProcessBody に渡される要求ストリームに追加される XML 接頭語定義

以前は、Web サービスの ProcessBody を呼び出すと、本文がそのままコピーされていました。 このリリース以降、本文には本文要素またはエンベロープ要素で行われていたすべての接頭語の定義が含まれます。(例えば、欠落していた接頭語の定義を追加するために) それらの定義を含む要求の正確な形式に依存するコードは、この新しい情報に対応するように修正する必要があります。

MTOM 使用時の署名済み要求の処理の修正

MTOM SOAP メッセージに署名し、そのシグニチャを検証するときは、メッセージ本文のダイジェストを計算する前に、MTOM 参照を添付されたストリームに置き換える必要があります。 以前は、MTOM の Include 要素を置き換えずに、参照を含む本文が誤って署名されていました。

Note:

Caché は、置き換える前に誤って署名された Web サービスとは正しく相互運用できなくなります。

開発向け限定の WebStress クラスおよび UnitTest クラス

このリリースで %WebStress.Portal クラスおよび %UnitTest.Portal クラスを使用するには %Developer リソースが必要です。また、顧客が CSP を通じてこれらのクラスにアクセスできるようになるためには、"%CSP ページへのアプリケーションによるアクセスの制御" の説明に従って ^SYS("Security","CSP") グローバルを設定することにより、これらのクラスへのアクセスを手動で可能にすることが必要な場合もあります。

MultiValue の変更

ログ・ファイルの切り替え

mv.log の大きさが 5 MB (または cconsole.log のサイズ制限) を超えると、その名前が変更され、新しいファイルでログ記録が開始されます。このアクションは、%SYS.Task.PurgeErrorsAndLogsOpens in a new tab タスクによって行われます。

エミュレーション @(–nn) の修正

いくつかの MultiValue エミュレーションで、@(-nn) の実装が誤っていました。これらは、すべて 1 つの同じ Universe エミュレーションから派生しており、Universe ではエミュレーションで @(-nn) コードが区別されないため、Caché でも区別されません。例えば、Caché は PRIME エミュレーションを提供せず、"UNIVERSE 上でエミュレートされた PRIME" のエミュレーションを提供します。

影響を受けるエミュレーションは、PICK、PRIME、PIOPEN、および IN2 です。アプリケーションは、以下のいずれかの @(-nn) コードを使用する場合、ソース・コードを変更する必要があります。

  • @(-11) ~ @(-12)

  • @(-17) ~ @(-53)

  • @(-56) ~ @(-64)

ルート・ディレクトリでのアカウント処理に対する変更

このリリースから、以下のようになります。

  • CREATE.ACCOUNT では、“/” にも “<DriveLetter>:\” にもアカウントを作成できなくなります。

  • DELETE.ACCOUNT では、“N” オプションを使用しない限り、ディレクトリのクリアまたは削除の前に確認を求めるプロンプトが表示されます。

アカウントを自動で削除する自動化プロシージャは、コマンド行に “N” オプションが含まれるように修正する必要があります。この修正ができない場合は、一時的な措置として DELETE.ACCOUNT 動詞の属性 5 に小文字の “n” を設定すると、従来の動作に戻ります。

TANDEM コマンドに対する変更

このリリースでは、TANDEM コマンドにいくつかの新しい変更点があります。

  1. 入力処理

    以前のリリースでは、TANDEM スレーブが INPUT 文で休止している場合、TANDEM マスタはその INPUT 文を中断できませんでした。このため、多くの場合、TANDEM を使用してもあまり役に立ちませんでした。

    この変更により、TANDEM スレーブが以後のセッションを許可すると (下記参照)、すべての INPUT のタイムアウトが最大の 60 秒になり、TANDEM マスタが処理を中断してから最大 60 秒間待機できます。 TANDEM スレーブ・プロセスはタイムアウトした入力を引き続き実行しますが、アプリケーションはこれを認識せず、通常どおりに動作します。

  2. 今後の TANDEM セッション

    スレーブ・ターミナルは、TANDEM ONTANDEM SYSPROGTANDEM (N) のいずれかのコマンドを実行することで、今後の TANDEM セッションを許可できます。

    これら 3 つのコマンドでは、オプションの数値パラメータを使用して、INPUT 文の処理時に適用されるタイムアウトを指定できます。前述のとおり、既定値は 60 秒です。例えば、INPUT のタイムアウトを 10 秒に変更するには、TANDEM ON 10TANDEM SYSPROG 10TANDEM 10 (N) のいずれかを実行します。

    小さいタイムアウト値を選択することで、TANDEM マスタの開始時にスレーブが INPUT 文を処理している場合は、マスタが最初の応答を待機する時間が短くなります。タイムアウト値を小さくした場合の欠点は、INPUT 処理中の CPU のオーバーヘッドがわずかに増加することです。

    マスタがスレーブと共にシーケンスを開始した後は、このタイムアウトは適用されなくなります。このタイムアウトは最初の接続にのみ適用されます。

  3. “(A)” オプション

    (A) オプションを使用すると、シーケンス識別子として Esc キーの代わりに <Ctrl-A> を使用できます。例えば、通常、マスタ・シーケンスを開始するときは、VIEW ONLY モードでポート 6 に対してこの SYSPROG:TANDEM 6 TANDEM を実行します。TANDEM を終了するには、Esc-“X” を入力します。

    (A) オプションを使用している場合は、Esc が <Ctrl-A> に置き換わるため、TANDEM に対して <Ctrl-A> “X” を入力します。

  4. 入力履歴バッファ

    TANDEM スレーブは、直前の 20 個の INPUT 文を循環バッファに保持するようになりました。マスタは、Esc-“H” シーケンス (“(A)” オプションを使用している場合は、<Ctrl-A> “H”) を使用してこの履歴を参照できます。これにより、オペレータはスレーブ・プロセスが最近何を処理していたかをある程度知ることができます。

  5. CommandInit() および CommandNext() の呼び出しを使用すると、MultiValue でのターミナルの独立性が得られます。アプリケーションは、これらのコマンドを使用してキーボードから入力された文字を簡単に解釈できます。例えば、一部のキーボードでは、矢印キーを押すと、3 つの文字 (CHAR(27):“[A”) の代わりに "CURSOR UP" という識別子が返されます。TANDEM を使用しているときは、これらの機能が正常に動作せず、プログラムは代わりに 3 つの文字を認識します。今回、この点が修正されました。MultiValue エディタ (JED) ではこれらのコマンドが使用されるため、TANDEM を使用する項目を JED で編集できるようになりました。

  6. 文字の二重エコー

    TANDEM マスタが FEED モード (つまり、キーストロークがスレーブ・ターミナルに送信される状態) のときは、エラーのため、マスタ・ターミナル上でこれらのキーストロークが二重にエコーされていました。今回、この点が修正されました。

SP-ASSIGN コマンド行構文の変更

このリリースでは、SP-ASSIGN コマンドの構文が若干変更されたことにより、互換性が向上し、不具合が解消されています。

  • チャンネルと関連するフォーム・キュー名を指定するときに、スペースを使用できなくなりました。以下はその例です。

    SP-ASSIGN 3 = STANDARD
    

    今後は、これを次のように表現する必要があります。

    SP-ASSIGN 3=STANDARD
    
  • この文の中にある数値は、それ自身でコピー数を定義します。以下はその例です。

    SP-ASSIGN 3 = STANDARD
    

    これは、チャンネル 0 (チャンネルが定義されていないため) を STANDARD に割り当て、出力のコピーを 3 個要求すると解釈できます。

  • 標準のフォーム・キュー名形式が、すべてのエミュレーションでサポートされます。

    SP-ASSIGN 5=F3HS
    

    これは、H (Hold) オプションと S (Skip) オプションを指定して、チャンネル 5 にフォーム・キュー 3 を割り当てるという意味になります。

  • コマンド行に指定したオプションは、次のように括弧で囲んで渡すことができるようになりました。

    SP-ASSIGN 1=CANON (HS)
    

    これは、以下と同じです。

    SP-ASSIGN 1=CANON HS
    
以前のリリースからのインデックスの再構築

MultiValue では、2012.1 よりも前のリリースから 2012.1 以降のリリースにアプリケーションをアップグレードすると、それまでインデックスを使用してきた CMQL クエリの実行が遅くなることがあります。これまでの CMQL では、左揃えの文字列での照合が SPACE であることを前提としていました。現在では、これが SQLSTRING(150) になっています。その結果、これまでのデフォルトである SAPCE 照合で作成された既存のインデックスとの一致が得られません。

この問題を修正するにはスタジオを使用し、MultiValue ファイルに関連付けられているクラスを編集して、インデックス・キーとして使用されているすべてのプロパティで COLLATION パラメータを STRING(150) に変更します。続いて、影響を受けるインデックスを再構築します。

トランザクションのロック処理に対する変更

これまでのリリースでは、トランザクションをコミットすると、関連するレコードで保持されているロックがすべて解放されていました。今回のリリースからは、この動作が変更されています。この処理は次のルールに従います。

  1. トランザクションが入れ子になっている場合に、ロックを作成または解放する操作を実行すると、入れ子の最も外側にあるトランザクションを終了する COMMIT または ROLLBACK を実行するまで、ロックのどのような解放も遅延します。さらに、トランザクションが入れ子になっているときに SHARED ロック・タイプから EXCLUSIVE ロック・タイプに昇格したロックに対しては、入れ子の最も外側にあるトランザクションでの処理を終了するまで、どのような降格処理も遅延します。

    下位のルールが優先する状態であっても、この動作は例外なく発生します。

  2. MVBasic の LOCK ステートメントと UNLOCK ステートメントで作成および解放される番号付きロックまたは名前付きロックはインクリメントされません。任意の数の “LOCK 2” ステートメントを実行できますが、単独の “UNLOCK 2” ステートメントではロック番号 2 が解放されます。

    どのファイル・ロックも、どのレコード・ロックもインクリメントされません。

  3. 入れ子の最も外側にあるトランザクションでの処理を開始するときに SHARED ロック・タイプまたは EXCUSIVE ロック・タイプでロックされた FILE または RECORD は、そのトランザクションでの処理を COMMIT または ROLLBACK で終了しても、同じロック・タイプでロックされたままになります。トランザクションの入れ子の中で SHARED から EXCLUSIVE に昇格したロックは、その入れ子の終了時に降格されます。トランザクションの入れ子の中で新規に作成されたロックは、その入れ子が終了すると解放されます。

    このルールには次の例外があります。

    1. トランザクションで FILE に対して CLOSE を実行すると、そのクローズしたファイルに対するすべての FILE ロックと RECORD ロックは、最も外側のトランザクションでの処理を終了すると解放されます。

    2. “FILEUNLOCK fvar” または “RELEASE fvar” (“RELEASE fvar, recid” ではありません) を実行すると、fvar で参照しているファイルに対するファイル・ロックおよびそのファイルに対するすべてのレコード・ロックが解放されます。トランザクションでこの操作が発生した場合は、最も外側のトランザクションが終了したときに、これらのロックが解放されます。

Note:

最も外側のトランザクションの終了までロックの解除が遅延する機能は、Caché の実装が備えているものです。 最も古い MultiValue の実装では、新しく作成または昇格したロックの解放または降格は、その作成または昇格が発生した入れ子レベルのトランザクションが終了するまで遅延するだけです。

MV スプーラでの名前付きキューのフォーム番号の変更

Caché MultiValue スプーラは、スプーラのフォーム・キューが通常は数値であるエミュレーションと、スプーラのフォーム・キューが名前であるプラットフォームを提供しようとします。例えば、“F23” (フォーム・キュー番号 22 として解釈される) や “CANONLAB” (フォーム・キュー名 CANONLAB として解釈され、内部では自動的に割り当てられた 2 から始まるフォーム・キュー番号 (STANDARD は常にフォーム・キュー 1) で表される) がサポートされています。

この結果、この自動生成されたフォーム・キュー番号が明示的な番号を持つフォーム・キューと競合する状況が発生します。

このリリース以降、作成されるすべての名前付きフォーム・キューの既定のフォーム・キュー番号が 1000 以上になります。したがって、次のようになります。

  • SYSPROG: SP-NEWTAB (S)
    

    これは、新しいフォーム・キュー・テーブルを作成します。

  • SYSPROG: SP-CREATE CANONLAB LPTR /dev/lp3
    

    これは、1000 から始まる番号 (この場合は 1000) が割り当てられた名前付きフォーム・キューを作成します。

  • SYSPROG: SP-CREATE F20 LPTR /dev/lp20
    

    これは、20 という番号と共に、F20 というフォーム・キュー名も割り当てられた番号フォーム・キューを作成します。

既定の 1000 という開始番号を変更する場合は、SP-NEWTAB コマンド行の (Qnnnn) オプションでその番号を指定します。例えば、名前付きフォーム・キューの番号割り当てを 400 から始める場合は次のようにします。

SYSPROG: SP-NEWTAB (Q400)
Note:

新しい名前付きフォーム・キューの既定のフォーム・キュー番号が 2 ではなく 1000 になったため、名前付きフォーム・キューを作成したうえで、それらのフォーム・キューが正確なフォーム・キュー番号を持っていることを想定している MultiValue アプリケーションはすべて失敗します。これを解決するには、開発者がアプリケーションからその関連付けを取り除くか、またはこの変更を行う前と同じ結果を得るように "SP-NEWTAB (S1)" を使用する必要があります。

プロセスの終了時に実行される通常の終了タスク

このバージョンでは、管理ポータルから MultiValue プロセスを終了すると、そのプロセスが停止する前に強制的に通常の MultiValue 終了タスクが実行されます。

VOC の中で異なるファイルを指すカタログ・ポインタに対するスタジオでの上書き防止

スタジオでの MultiValue のコンパイルおよびカタログ操作で、既存のカタログ・ポインタが異なるファイルのプログラムを参照している場合は、カタログ・ポインタが上書きされなくなりました。

長い埋め込み数値に対する MVR 照合生成の修正

以前のバージョンの MultiValue 右揃え (MVR) 照合では、1 行に存在する数字が 9 個以上で数字以外の文字の後に数字列が続く英数字混合値に対して、無効なキーが生成されていました。このリリースでは、キーが正しく生成されます。

Important:

MVR 照合による右揃えフィールドに 9 個以上の数字が埋め込まれた英数字混合フィールドが含まれる場合は、それらに基づくすべてのインデックスが再構築されます。これは、数値のみのフィールドと数値以外の接頭語を持つ数値フィールドには影響しません。

DATA 文の変更

以前のリリースでは、入力スタックに直前の DATA 文の行のみが含まれていました。複数の DATA 文により、PARAGRAPHS に複数の行がスタックされるようになりました。

ディレクトリ・コピーでのバイナリ・モードの使用

MultiValue の COPY コマンドで、コピー元とコピー先がどちらもディレクトリの場合は、バイナリ・モードで項目がコピーされるようになりました。以前は、AM と改行との間で変換を行うように項目が処理されていました。現在の動作では、ディレクトリが変更されずにコピー先にコピーされます。

BASIC と MVBASIC の変更

オブジェクト・コンポーネントへのアクセスにのみ使用可能となった “–>”

MV BASIC コンパイラは、オブジェクト・インスタンスのプロパティやメソッドにアクセスするために右矢印のトークン (“–>”) を使用する必要がある場所で、ドット (“.”) 文字を受け入れることがありました。MVBASIC 言語の定義では、ドット (“.”) は識別子文字としての使用のみが可能であるにもかかわらず、このようになっていました。

このリリース以降、MVBASIC コンパイラは “.” を常に名前の一部として解釈します。“.” を使用する COS または Cache BASIC のオブジェクト参照の例を MVBASIC プログラムに誤ってコピーしていた開発者は、代わりに “–>” を使用するようにこれらをコーディングし直す必要があります。

@XXX–>Component の処理の修正

以前のバージョンでは、システム変数と “–>” の後に続く名前に対するマクロ置換が不適切に行われていました。このリリースでは、コンポーネント名がシステム変数に正しく関連付けられます。例えば、次のようなシーケンスがあるとします。

EQU UserId Lit "X->UserId" 
X = "MV.TestClass"->%New() 
X->UserId = 2 
@ME->UserId="99"

後半の 2 行は、以前は次のように解釈されていました。

X->UserId = 2 
@ME->X->UserId="99"

しかし、今後は次のように処理されます。

X->UserId = 2 
@ME->UserId="99"
–> による置換処理の変更

以前は、“A–>B–>C...” というシーケンスに含まれる名前が EQU を使用して定義されている場合は、その名前が展開されませんでした。 この現象は、“–>” の前後が名前と空白で分離されていない場合にのみ発生していました。今後は、“–>” の後に続く名前のみが展開されなくなります。つまり、名前の後に続くシーケンス (“–>”) によって EQU 定義の展開が抑制されることがなくなりました。 “–>” とそれに続く名前の間にある空白は、EQU 定義の展開の抑制には影響しません。

例えば、次のような行があるとします。

EQU UserId Lit "X->UserId"
CRT UserId
CRT UserId->UserId
CRT UserId->UserId->UserId
CRT UserId -> UserId -> UserId
X->UserId = 2

これは、以下のように展開されていました。

CRT X->UserId
CRT UserId->UserId
CRT UserId->UserId->UserId
CRT X->UserId -> X->UserId -> X->UserId
X->UserId = 2

しかし、このバージョン以降では、以下のように展開されます。

CRT X->UserId
CRT X->UserId->UserId
CRT X->UserId->UserId->UserId
CRT X->UserId -> UserId -> UserId
X->UserId = 2
$ で始まる識別子の使用

以前は、ドル記号 (“$”) で始まる MVBASIC 識別子では、識別子の残りの文字として英字のみが使用可能でした。 今後は、この制限が撤廃され、このような識別子の先頭に付けられたドル記号の後に、任意の正当な識別子文字を使用できます。

ただし、インターシステムズは $SYSTEM.XxX 形式の MVBASIC 識別子を予約しています。識別子の接頭語の “SYSTEM” という文字は、大文字と小文字を任意に組み合わせることができますが、接頭語 “$System.” に続く識別子文字は、大文字と小文字が区別されます。 “$System.XxX” 形式の MVBASIC 識別子はシステム・パッケージの名前として処理され、システム・パッケージ内の適切なメソッドを呼び出すために、$System.XxX identifier の後に右矢印トークン (-)、メソッド名、およびメソッド引数リストを続けて指定できます。

Note:

$System.Xxx 識別子の構文を使用したパッケージ名では、識別子を構成するドット文字の前後に空白を使用できません。 以前は、パッケージ名の接頭語の後に空白を使用できました。 以前にこのような空白を挿入していたプログラムは、パッケージ名に使用しているドット文字の後に続く空白を削除するように変更する必要があります。

WRITEV に対するトリガの変更

以前は、WRITE、INSERT、または UPDATE のトリガを含むファイルに対して WRITEV 文が実行されたときにトリガ・ルーチンに渡されるレコードは、変更されるレコード全体ではなく、変更される属性値だけで構成されていました。 今回、この点が修正され、WRITEV がレコード内の属性を変更したときに、これらのトリガはそのレコード全体を取得するようになりました。

変更される属性だけを含むレコードが渡されることを前提とする WRITEV 文があることから実行されていたトリガ・ルーチンは、書き換える必要があります。 渡されるレコードには、変更されるレコード全体と共に、変更される特定の属性値を抽出して変更できるように、属性番号も含まれています。

Important:

トリガを含むファイルに対して追加の入出力を行うトリガ・ルーチンは、トリガ・ルーチンの再帰呼び出しに対応できるようにして、無限の再帰から保護する必要があります。

READ/CLEAR/DELETE/OPEN に対するトリガの変更

以前の MVBASIC では、POSTREAD トリガを含むファイルに対して READV 文が実行されると、読み取られる属性を含むレコード全体ではなく、その属性のみがトリガ・ルーチンに渡されていました。 今回、この点が修正され、POSTREAD トリガ・ルーチンは常に読み取られるファイル・レコードの内容全体を取得するようになりました。

また以前は、ファイル上のアクティブなトリガ・ルーチンは、自身がアクティブである間、そのファイル上の追加のトリガ呼び出しを無効にしていました。 これにより、トリガ・ルーチンを再帰的に呼び出すことができませんでした。 今後は、トリガ・ルーチンの実行中に、そのルーチンによって追加のトリガ呼び出しが無効になることがなくなります。

Note:

トリガ・ルーチンには引数として属性番号が渡されないため、READV 文で読み取られる特定の属性値の抽出、変更、またはその両方をトリガ・ルーチンで行う必要がある場合は、他の手段で属性番号を渡す必要があります。

Important:

トリガを含むファイルに対して追加の入出力を行うトリガ・ルーチンは、トリガ・ルーチンの再帰呼び出しに対応できるようにして、無限の再帰から保護する必要があります。

SETTING 節の処理の変更

以前のリリースでは、SETTING 節に変数を含む MVBASIC I/O 文は、THEN、ELSE、または ON ERROR のいずれかの節を実行した後で、その変数に入出力エラー・ステータスを設定していました。

これには 2 つの弊害があります。 1 つは、THEN、ELSE、ON ERROR のどの節でも、SETTING 節の変数をテストできないことです。 もう 1 つは、現在の I/O 文の THEN、ELSE、または ON ERROR のいずれかの節で実行される入出力操作によって、現在の I/O 文の SETTING 節で指定した変数に格納したステータスが上書きされることです。

今後、MVBASIC コンパイラは、THEN、ELSE、または ON ERROR のいずれかの節を実行する前に、SETTING 節で指定された変数に入出力ステータスを格納するコードを生成します。

I/O 文の成功時にクリアされる $MVSYSRETCODE

これまで、ほとんどの I/O 文は新しい入出力操作を開始したときに @SYSTEM.RETURN.CODE をゼロにしませんでした。 つまり、SETTING 節を含む I/O 文が入出力エラーなしで実行されると、システム変数 @SYSTEM.RETURN.CODE に前のエラー・コードが残っていました。今後は、すべての I/O 文を実行する直前に @SYSTEM.RETURN.CODE がゼロにリセットされます。

より多くのエミュレーションで使用されるようになる HEADING 文

このバージョンでは、jBASE、Reality、Unidata、Udpick、Information、Piopen の各エミュレーションで、ターミナル出力の 2 番目以降の HEADING 文が実行されると、それがただちに有効になります。

その他のエミュレーションでは、2 番目以降の HEADING 文はすぐには有効になりません。有効になるのは、ターミナルで改ページが実行されたとき、つまりその HEADING 文が使用されたときです。

DIM 文での重複する名前の禁止

以前の MV BASIC コンパイラでは、同じ DIM 文で 1 つの名前を複数回定義できました。 以下はその例です。

DIM X(), X();

上記のような定義が可能でした。 状況によっては、このためにシンボル・テーブルが破損し、コンパイルを実行しているプロセスがクラッシュすることがありました。

今後は、このような文に対してコンパイル時にエラー・メッセージが生成されるため、重複しているシンボル定義を DIM 文から削除する必要があります。 コンパイラは、名前が COMMON 名として定義されない限り、異なる DIM 文で複数回にわたって名前を再定義することを許可しません。

xDBC の変更

長い文字列からストリームへの自動変換の削除

以前のバージョンでは、アプリケーションは 16K を超える長さのリテラル文字列を文字ストリームに自動的に変換することを要求できました。 これは INSERT と UPDATE に対応していましたが、クエリではこのような方法でリテラル値に対してストリームがサポートされませんでした。

今後は、Caché が ODBC の長い文字列をサポートするため、この以前の機能は不要になりました。SQL 文で大量のリテラル文字列値をサポートする必要があるアプリケーションは、Caché で長い文字列が有効になっていることを確認する必要があります。

null パラメータの処理に対する変更

このリリース以降、Caché は null パラメータ値に関して Microsoft 社のドキュメントOpens in a new tabに準拠します。つまり、サーバに null パラメータ値を送信するときは、null ではなく DBNull を指定する必要があります。システム内の null 値は、値を持たない空のオブジェクトです。DBNull は、null 値を表現するために使用されます。

以前の Caché は null と DBNull を同じものとして扱っていましたが、パラメータ値のマッピングは、Caché に送信される $list の値に関して以下のようになっています。 唯一の変更点は、null が規定値を表すことです。

.NET $LIST SQL
null 01 既定値
DBNull 02 01 null 値
“” 03 01 00 空の文字列

この変更により、既定値を表す null パラメータに関する Caché の動作が、ODBC ネイティブ・プロバイダや他のすべての ADO プロバイダと一致するようになりました。

新しい SQL サーバのマッピングへの対応

このバージョンでは、Microsoft SQL Server バージョン 2008 の変更点に合わせて、varbinarynvarchar (BLOB と CLOB) の JBDC マッピングがストリームを使用するように変更されています。

ODBC からの SQLBindParam API の削除

SQLBindParam は、Caché バージョン 3.5 のリリース時に追加された古い 2.x API です。しかし、これはそのときに同時に提供された SQLBindParameter と競合し、これが存在するために iODBC ドライバ・マネージャで問題が発生することになりました。 この API は、このバージョンの Caché で削除され、適切な引数を指定して SQLBindParameter を呼び出すことで iODBC が正常に機能するようになりました。

%SQL.Gatway.ODCResultSet でのバイナリのサポート

以前のリリースでは、クエリによって返されたバイナリ値は、(リンクされたストアド・プロシージャで表示可能な) 対応する ASCII 値に変換されていました。このリリース以降、バイナリ値はそのまま返されます。

DeepSee の変更

ピボットでのフィルタ処理に対する変更

以前のバージョンでは、以下のようになっていました。

  • 複数値のフィルタ – 同じ階層とレベルから 2 つのフィルタ (例えば、DateOfSale.Actual.YearSold.Members) を追加すると、両方のフィルタがフィルタ・バーに表示されますが、クエリに使用される値は 1 つのみでした。

  • 単一値のフィルタ – 同じ階層とレベルから複数の単一値フィルタ (DateOfSale.Actual.YearSold.2009 と DateOfSale.Actual.YearSold.2010) を追加すると、それらの論理和が得られていました。

今後は、どちらの場合も論理積が求められます。これにより、以下のような点が改善されます。

  1. すべてのフィルタでの一貫性 – フィルタ・バーのすべてのフィルタが例外なく論理積の対象になります。

  2. リスト型のレベルで、フィルタを組み合わせることができます (ダニ・アレルギーとデザート・トッピングの論理積など)。

  3. "フィルタを追加すると一致数が増えるのはなぜか" という、よくある疑問が解消されます。

DeepSee のキー値に含まれる無効な文字のチェック

DeepSee メンバの KEY 値には、“|”、“&”、“~”、“:” の各文字が使用できません。以前のリリースでは、これは明示的にチェックされていませんでした。このリリース以降、無効な KEY 値でキューブを構築しようとすると、検証エラーが発生します。

式チェックの強化

SET では、次のような式またはスカラ関数は意味がありません。

ISNULL(Country.Members,0)

これは意味がありません。以前のバージョンでは、式を実行すると、無意味な答えが返されました。今後は、エラーが返されます。

アクセス制御に使用する %DeepSee.ReportBuilder リソースの追加

このリリースでは、DeepSee ビジュアル・レポーティングのレポート・ビルダへのアクセスを許可する新しいリソースが追加されています。この機能へのアクセスを必要とするユーザとアプリケーションには、%DeepSee_ReportBuilder およびこの機能の有効なライセンスが必要です。これらがないとアクセスは拒否されます。

CSP の変更

ログアウト処理の定義

このリリース以降、CSP セッションからログアウトする方法として、アプリケーションのホーム・ページにリンクし、“CacheLogout=end” という文字列を含む URL を渡すことをお勧めします。これにより、現在のセッションがホーム・ページを実行する前に終了します (取得したライセンスを解放し、既存のセッション・データを削除して、セッションのセキュリティ・コンテキストを削除します)。

もし CSP アプリケーションに認証が必要な場合は、このログアウト処理を行った時点で、セッションも認証されたユーザも存在しない状態になります。この場合、Caché はホーム・ページのロジックを実行しませんが、代わりにログイン・ページを表示します。ユーザが有効なログインを送信すると、この新しいセッションが開始され、ホーム・ページが表示されます。

%CSP.Page に追加された SECURITYRESOURCE パラメータ

このリリースでは、クラス %CSP.PageOpens in a new tab に、そのページへのアクセスを制御するクラス・パラメータ SECURITYRESOURCE が追加されました。このパラメータの値は、システム・リソースおよびそれに関連する許可のコンマ区切りリストです。このページを表示するユーザまたはこのページのサーバ側メソッドをクライアントから呼び出すユーザは、指定のリソースに対して、このパラメータで指定されている許可を保持している必要があります。

このリストでは、各アイテムを次の書式で記述します。

Resource[:Permission]

Resource は、登録されているシステム・リソースです。Permission はオプションであり、指定しない場合のデフォルト値は USE です。指定する場合は、USEREAD、または WRITE のいずれかとする必要があります。

“|” を使用した OR グループ化も指定できます。例えば、次のように指定します。

ResA,ResB|ResC,ResC|ResD

これは、ResA、ResB または ResC のいずれか、および ResC または ResD のいずれかが必要であることを指定しています。したがって、ResA と ResC があればアクセスが可能です。一方、ResA と ResD があっても、ResB または ResC が必要である条件を満足できないので、アクセスはできません。

Note:

“|” は、“,” よりも強い結合です。

%CSP ページへのアプリケーション・アクセスの制御

このリリースから、任意の %CSP ページ (およびそのサブクラス) に対するアプリケーションからのアクセスを、より効果的に制御できるようになっています。デフォルトでは、新しいルールによってユーザ・アプリケーションから次のオブジェクトにアクセスできます。

  • % クラス以外のすべてのクラス

  • /csp/sys/ アプリケーションのページおよびそのすべてのサブアプリケーションのページ

  • isc/studio/templates/ アプリケーションのページおよび /isc/studio/usertemplates/ アプリケーションのページ

また、明示的に次のクラスにもアクセスできます。

  • %CSP — Broker、StreamServer、Login、PasswordChange、PageLookup

  • %ZEN — SVGComponent.svgPage、Dialog.*

  • %Z* および %z* — %ZEN.* パターンを除くすべてにアクセスできます。%ZEN.* であっても、%ZEN に対する上記の例外にはアクセスできます。

上記の点は、対象の CSP ページに定義されている“許可されるクラス”の確認の際に、同時に確認が行われます。 したがって、クラス参照では、アクセスを許可されるためには両方のテストを渡す必要があります。

管理者は、AllowClassAllowPrefix、および AllowPercent の各キーワードを使用して %SYS ネームスペースでグローバル ^SYS(“Security”, “CSP”, <category>) を構成することで、ここまでの説明にないクラスへのアクセスを許可できます。以下のセクションでは、これらのキーワードについて説明します。

Important:

確認では、まずデフォルトのルールが適用され、続いてリストにある順番で各カテゴリが適用されます。これにより、パッケージの中でアクセスを制限する 1 つのクラスを除き、パッケージ全体をアクセス可能とするといったことができます。

カテゴリ: AllowClass

特定のクラスの呼び出しがアプリケーションで重要な場合は、AllowClass キーワードでそのクラスに対する例外を作成し、それを利用できるようにします。

Important:

これまでに挙げた中にないクラスの呼び出しがアプリケーションで重要な場合、そのような呼び出しは安全ではない可能性があります。そのクラスの呼び出しが必要かどうかを判断し、導入に対するリスク評価を実施することをお勧めします。これにより、そのクラスを使用可能にすることで発生する影響を把握できます。

特定のクラスに対する例外を作成するには、次のように ^SYS グローバル添え字を値 1 に設定します。

Set ^SYS("Security", "CSP", "AllowClass", "<web-app-name>", "<package.class>") = 1

<web-app-name> および <package.class> を除くコマンド本文全体を、このとおりに記述します。このコマンドの変数の内容は次のとおりです。

  • <web-app-name> はウェブ・アプリケーションの名前であり、管理ポータルの [ウェブ・アプリケーション] ページで [名前] 列に表示される名前と同じです。

  • <package.class> は、アクセスを許可するクラスの名前です。

このグローバルのデータ値を 0 に設定することで、特定のクラスへのアクセスを許可しないことを明示的に指定できます。

例えば、/csp/webapps/ アプリケーションから特定のクラス (ここでは %User.Page) を呼び出し可能にするには、次のコマンドを指定します。

Set ^SYS("Security", "CSP", "AllowClass", "/csp/webapps/", "%User.Page") = 1

すべての CSP アプリケーションで、例えば %User.Page クラスを許可するには、次のコマンドを指定します。

Set ^SYS("Security", "CSP", "AllowClass", 0, "%User.Page") = 1 
カテゴリ: AllowPrefix

同じ組み合わせの文字で始まる 1 つ以上のクラスまたはパッケージの呼び出しがアプリケーションで重要な場合は、AllowPrefix キーワードでそれらのパッケージまたはクラスに対する例外を作成し、それらを利用可能にします。

Important:

これまでに挙げた中にないクラスの呼び出しがアプリケーションで重要な場合、そのような呼び出しは安全ではない可能性があります。そのクラスの呼び出しが必要かどうかを判断し、導入に対するリスク評価を実施することをお勧めします。これにより、そのクラスを使用可能にすることで発生する影響を把握できます。

AllowPrefix キーワードを使用して例外を作成するには、^SYS グローバル添え字を次のように設定します。

Set ^SYS("Security", "CSP", "AllowPrefix", "<web-app-name>", "<prefix>") = 1

<web-app-name> および <prefix> を除くコマンド本文全体を、このとおりに記述します。このコマンドの変数の内容は次のとおりです。

  • <web-app-name> はウェブ・アプリケーションの名前であり、管理ポータルの [ウェブ・アプリケーション] ページで [名前] 列に表示される名前と同じです。

  • <prefix> は、許可するパッケージまたはクラスの名前の先頭にある文字です。

このグローバルのデータ値を 0 に設定することで、該当のパッケージまたはクラスへのアクセスを許可しないことを明示的に指定できます。

例えば、/csp/webapps/ アプリケーションから %MyApp パッケージ全体を呼び出し可能にするには、次のコマンドを指定します。

Set ^SYS("Security", "CSP", "AllowPrefix", "/csp/webapps/", "%MyApp.") = 1

この場合、ピリオドを追記すると、“%MyApp” で始まる名前を持ち、名前の長さが %MyApp より長いすべてのパッケージへのアクセスが禁止されます。

例えば、名前が “%My” で始まるすべてのパッケージを許可するには、次のコマンドを指定します。

Set ^SYS("Security", "CSP", "AllowPrefix", 0, "%My") = 1 

少し複雑な例として、%MyPkg.* を許可したうえで、/csp/samples/ アプリケーションでは %MyPkg.Class1 を許可しない場合は、次のように指定します。

Set ^SYS("Security", "CSP", "AllowClass", "/csp/webapp/", "%MyPkg.Class1") = 0 
Set ^SYS("Security", "CSP", "AllowPrefix", "/csp/webapp/", "%MyPkg.") = 1

カテゴリ: AllowPercent

名前が % 文字で始まるパッケージの呼び出しが全般的にアプリケーションで重要な場合は、AllowPercent キーワードでそれらのパッケージに対する例外を作成して、それらを利用可能にします。

Important:

これまでに挙げた中にないクラスの呼び出しがアプリケーションで重要な場合、そのような呼び出しは安全ではない可能性があります。そのクラスの呼び出しが必要かどうかを判断し、導入に対するリスク評価を実施することをお勧めします。これにより、そのクラスを使用可能にすることで発生する影響を把握できます。

すべての CSP アプリケーションで、名前が % 文字で始まるページの確認を全面的に無効にするには、次のように指定します。

Set ^SYS("Security", "CSP", "AllowPercent") = 1
Note:

このグローバルのデータ値を 0 に設定することで、名前が % 文字で始まるパッケージへのアクセスを許可しないことを明示的に指定できます。

特殊なケース: DeepSee

アプリケーションで DeepSee を使用するには、%DeepSee パッケージのすべてのクラスに対するアクセス権が必要です。デフォルトでは、“/csp/samples” ウェブ・アプリケーションのみが DeepSee にアクセスできるように設定されています。他のウェブ・アプリケーションで DeepSee を使用するには、それを明示的に許可する必要があります。

例えば、/csp/webapp ウェブ・アプリケーションで DeepSee を使用できるようにする場合、構文は次のようになります。

Do EnableDeepSee^%SYS.cspServer("/csp/webapp/")

これは、以下と同じです。

Set ^SYS("Security", "CSP", "AllowPrefix", "/csp/webapp/",  "%DeepSee.") = 1
Set ^SYS("Security", "CSP", "AllowClass", "/csp/webapp/",  "%CSP.UI.Portal.About") = 1

すべてのウェブ・アプリケーションで DeepSee を使用できるようにするには、次のように指定します。

Do EnableDeepSee^%SYS.cspServer(0)

これは、以下と同等です。

Set ^SYS("Security", "CSP", "AllowPrefix", "",  "%DeepSee.") = 1

すべてのウェブ・アプリケーションで DeepSee にアクセスできるようにしたうえで、特定のウェブ・アプリケーションにはアクセスを許可しない場合は、次の構文に示すように、グローバルを値 0 に設定します。

Set ^SYS("Security", "CSP", "AllowPrefix", <web-app-name>, "%DeepSee.") = 0
Note:

この方法は、Caché バージョン 2011.1以降でリリースされたバージョンの DeepSee でのみ使用できます。これは、以前に “DeepSee II” と呼ばれていたバージョンです。Caché 2011.1 よりも前にリリースされたバージョンの DeepSee を、それよりも新しいバージョンの Caché で使用している場合は、何の問題もありません。

特殊なケース: iKnow

iKnow データの問い合わせや管理を目的としてサンプル UI pages をウェブ・アプリケーションで使用する場合も、明示的に許可する必要があります。

Do EnableIKnow^%SYS.cspServer("<web-app-name>")

アプリケーションで iKnow を使用できないようにするには、次の構文を指定します。

Set ^SYS("Security", "CSP", "AllowPrefix", <web-app-name>, "%iKnow.") = 0

すべてのウェブ・アプリケーションに対してアクセスを許可または禁止するには、DeepSee の場合と類似した方法で指定します。

JS および JSML の変換に対する変更

%CSP.PageOpens in a new tabEscapeURL(url) 関数は、まず現在のデバイスの文字セットを使用して URL をエンコードし、続いて URL の標準エンコードを使用してエスケープ処理を実行します。

現在のデバイスが JS 変換テーブルまたは JSML 変換テーブルに設定されていると、この関数で “/” 文字が '%5Cx2F' に変換され、URL が正しく機能しなくなります。

Zen の変更

#(...)# 式の解析の改善

Zen では、#(<object>.<propname>)# の形式の値で式を使用できます。このリリースの Zen コンパイラでは、<propname> の代わりにプロパティの名前のみを使用できます。

ZenMethod キーワードの強制適用

ZEN のごく初期のバージョンでは、ZenMethod キーワードがなく、この目的のために WebMethod がオーバーロードされていました。このリリースから、WebMethod キーワードのサポートが削除されます。 WebMethod を使用しているアプリケーションは、ZenMethod を使用するように変更する必要があります。

ZenMethod は現在のページでのみ呼び出し可能

Zen クラスで ZenMethod を定義すると、そのメソッドはクライアントのブラウザからのみ呼び出し可能になっています。

所定の Zen ページで (クラス・パラメータを使用して) セキュリティ・リソースを定義できます。これにより、ユーザがメソッドのリソースに対して Use 許可を持っていない限り、このページではどのようなメソッドも呼び出しできません。このことから、あるページで定義した Zen メソッドは、そのページのメソッドからのみ呼び出し可能です。

Note:

Zen コンポーネントの Zen メソッドは、どのページからでも呼び出すことができます。これは、実行時に任意のコンポーネントのインスタンスを作成できるという Zen ページの動的な性質によるものです。これは、サーバ側メソッドを持つ Zen コンポーネントの新規作成では注意が必要であることを示しています。

Zen の jsonProvider におけるエスケープされたデータの解析の修正

Zen の jsonProvider コンポーネントは、出力時にデータを正しくエスケープしていましたが、入力時に同じデータをエスケープ解除していませんでした。この変更により、RFC 4627 に定義された以下のエスケープ・シーケンスを正しく処理するように、パーサが更新されました。

 \/   \r   \n   \f   \b   \t

さらに、Unicode 値のエスケープ・シーケンスも入力時に未加工の Unicode 文字に変換されます。jsonProvider パーサは、\uXXXX 形式のエスケープ・シーケンスを、指定された Unicode コード・ポイントの文字表現に自動的に変換するようになりました。

WARNING:

これにより、変換プロセスでワイド文字が生成されるようになったため、8 ビットの Caché システムの受信データに \u00FF を超えるコード・ポイントが含まれる場合は、問題が発生する可能性があります。

グラフ

このバージョンの Zen では、グラフ機能が次の領域で大幅に更新されています。

  • 実座標空間の使用 – 新しいレンダリング・ロジックにより、x 次元と y 次元の表示倍率が計算され、それらが他のレンダリング方法でも認識できるようにローカル・プロパティに保存されます。

  • ラベルの配置 – x 軸ラベルを上側または下側に配置できるようになりました。

    y 軸ラベルを右側または左側に配置できるようになりました。

  • 時間ベースの x 軸 – 特定の種類のグラフ (折れ線、棒、およびコンボ) では、時間軸を x 軸として使用できます。その場合、x 軸の開始時間と終了時間の間に一連のカレンダー標識が描画されます。

  • サブタイトル – グラフにサブタイトルを表示できるようになりました。

  • 新しいズーム・ボタンとスタイル

Caution:

グラフのサブクラスを定義しているアプリケーションは、新しいスーパークラスを使用するように変更する必要があります。既定の設定を使用しないアプリケーションは、目的とする視覚効果を得るために、既存のグラフのスタイルを変更することが必要な場合があります。

Zen レポートの変更

Zen レポートで結果セットに使用することが必要な %SQL.Statement

このリリースから、%ZEN.Report.ResultSet が削除されました。Zen レポートのデータ・ジェネレータおよびデータ・コレクタは、正しい結果を得るために、代わりに %SQL.Statement を使用する必要があります。メソッドを SQL ストアド・プロシージャとして定義するには、メソッドのキーワード “sqlproc” を使用します。

複数改行の処理に対する変更

以前のリリースでは、出力に送信された複数改行のシーケンスが、最初の改行以降すべて無視されていました。PDF 出力で複数の改行が行われるようにするには、次のいずれかを実行する必要があります。

  • テーブルに preserveLineFeed=“true” を設定します。

  • テーブル内に項目がない場合は、linefeedTreatment=“preserve” を属性設定したブロックに項目を配置します。

この項目には、breakOnLineFeed="true" として属性を設定します。

Excel 用に自動的に提供される一意のシート名

Zen レポートのシート名が、グループ名からは作成されなくなりました。代わりに、Excel 用に一意のシート名が自動的に提供されます。

Excel 用に複数シートの出力を生成するには、シートごとに一意の名前を使用する必要があります。これは、“excelSheetName” に式を指定することで実現できます。 既定では (つまり excelSheetName を指定しなかった場合は)、Excel のシートに使用される既定の名前 ("Sheet1"、"Sheet2" など) を使用して、複数のシートを持つレポートの各シートに一意のシート名を付ける必要があります。

シート名がグループ名から作成されることに依存するアプリケーションでは、excelSheetName を使用してグループ名に対応するシート名を設定できます。

ongetXXX メソッドの処理に対する変更

このリリース以降、ongetXXX メソッドは最後の引数としてグラフ・オブジェクトを渡すようになります。 これにより、コールバック・メソッドからグラフのプロパティ (ID など) にアクセスできます。

グラフ・コールバック・メソッド上の Zen レポートのグラフは、以前のリリースでは機能していましたが、今後はパラメータ・エラーが発生します。 この状況を回避するには、以下の 2 つの方法があります。

以下の 2 つの方法でこのパラメータ・エラーを回避できます。

  • グラフに passChartObject=“false” を指定します。 これにより、グラフ・オブジェクトを渡さないようにコードに指示します。

  • 最後のパラメータを受け入れるようにコールバック・メソッドを変更できます。このパラメータは、Zen レポートからコールバックをコールバックしたときにグラフ・オブジェクトになります。

%ZEN.Report.ResultSet の削除

このリリースでは、%ZEN.Report.ResultSet が削除されました。%ZEN.Report.ResultSet を使用しているアプリケーションは、次のように独自の ResultSet クラスを定義して、その機能をエミュレートする必要があります。

Class MyResultSet Extends %Library.ResultSet {

    Method %Get(name As %String) As %String [ ProcedureBlock = 1 ] {
        if (name '= "") && ($Data(i%Data(name))) { 
            set rReturnValue = $get(i%Data(name)) 
            }
    else  {
        s rReturnValue=""
        }
    quit rReturnValue
    }    
}

コールバック・テーブルではゼロベースになる 2 次元配列

このリリース以降、コールバック・テーブルはコールバック・グラフとの整合性を確保するためにゼロ・ベースになります。以下はその例です。

<table callBackMethod="NamesAndAddresses">
    <item fieldnum="1" suppressDuplicates="true">
         <caption value="Name"/>
     </item>
     <item fieldnum="2">
         <caption value="Address"/>
     </item>
 </table>

これは、次のように解釈されます。

Method NamesAndAddresses(ByRef var As %String) 
{
    // record of names
    // record 1
    Set var(0,0)="Santa Claus"
    Set var(0,1)="North Pole"
    
    // record 2
    Set var(1,0)="Zeus"
    Set var(1,1)="Olympus"
    
    // record 3
    Set var(2,0)="Robin Hood"
    Set var(2,1)="Sherwood Forest"
    
    // record 4
    Set var(3,0)="Robin Hood"
    Set var(3,1)="Nottingham"
    
    Quit
}

FeedbackOpens in a new tab