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é 2017.2

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

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

このセクションでは、以下の項目について説明します。

ミラーリングとジャーナル・リストアの並列デジャーナリング

このリリースでは、ミラーリングとジャーナル・リストアのデジャーナリングのスループットが向上しています。 これは、データベース更新を頻繁に行う必要があるミラーリングされたシステムのスケーラビリティ向上を目指しています。

デジャーナリングは、ジャーナル・ファイルからデータベースにレコードを適用するプロセスです。 以前のリリースでは、単一のジョブが一連のプリフェッチャ・ジョブの助けを借りてデジャーナル・セッションでのすべてのデータベース更新を実行していました。 このリリースでは、複数の更新ジョブ (最大 4 つ) が並行して動作し、レコードを異なるデータベースに適用できます。 この機能は、CPU および共有メモリ・ヒープを十分に利用できる場合に使用されます。

ミラーリングでは、並列デジャーナリングの使用は、新しい構成設定を使用してメンバ・タイプで制限できます。 既定では、この機能はレポート非同期メンバに対して無効になっています。 デジャーナリングによって更新されるプロセスにある複数のデータベースのデータをレポートに含める場合、異なるデータベースを更新するタイミングの差によって、レポートの結果のばらつきが以前のバージョンよりも大きくなる可能性があります。 そのばらつきの特性は、変化するデータに対して実行されるレポートで予想できるものと本質的には違わないため、ほとんどのレポート・アプリケーションが悪影響を被ることなくこの機能を使用できることが予想されます。

並列デジャーナリングの詳細は、"Caché 高可用性ガイド" の “ミラーリング” の章にある “並列デジャーナリングの構成” を参照してください。

ジャーナル・リストアでは、ある既定ではないオプションが選択されている場合、並列デジャーナリングは使用されません。 特に、エラー発生後に強制終了するオプションや適用した更新をジャーナリングするオプションと組み合わせて使用されることはありません。詳細は、"Caché データ整合性ガイド" の “ジャーナリング” の章にある “^JRNRESTO を使用したジャーナル・ファイルからのグローバルのリストア” を参照してください。

シャドウイングもシステム起動も並列デジャーナリングを使用しません。

最後に、このリリースには、並列デジャーナリングを使用するかどうかに関係なく適用される 2 つの改善が含まれています。 このリリースには、デジャーナル・プリフェッチ効率に対する内部の改善が含まれていて、「デジャーナル・キュー」のメモリ消費量を更新あたり 50MB に制限しています。以前のリリースでは、デジャーナル・キューにかなり多くのメモリを使用していました。

DeepSee の新機能

DeepSee フォルダ・マネージャ — DeepSee コンポーネントの配置を簡単にするために、関連項目をエクスポートする新しいフォルダ・マネージャ・オプションがあります。この新しいオプションは、コンテナ・クラスにエクスポートするとき、選択した項目だけではなく、選択した項目に関連するその他の項目もエクスポートします。ダッシュボードの関連項目には、ダッシュボードが使用するピボット・テーブルや条件リストなどがあります。ピボット・テーブルの関連項目には、名前付きフィルタ、ピボット変数、共有される計算メンバなどがあります。

以前のリリースでは、フォルダ・マネージャは常にサーバ・ファイル・システムを使用してファイルをエクスポート/インポートしていました。現在フォルダ・マネージャには、ローカル・ファイル・システムまたはサーバ・ファイル・システムを使用するオプションが用意されています。

ダッシュボード・フィルタ — 名前付きフィルタをダッシュボード・フィルタの既定値として使用できるようになりました。

iFind および iKnow の新機能

iFind が同時検索機能をサポートするようになり、より厳格な位置検索オプション使用時と同様に、複数の検索条件が似ているが特定の順序である必要がない場合にレコードを検索できます。検索条件がコンマで区切られたリストを角括弧で囲み、同時検索機能を有効にし、オプションで検索条件の範囲を含めます。例えば、クエリ [Boston, New York, 5] は、“Boston” と “New York” が最大 5 ポジションにあるレコードを検索します。

この変更には、特にコア数の多いシステムを使用しているときの iKnow ドメイン構築のいくつかのパフォーマンス向上も含まれています。ハードウェアおよびデータセットに応じて、処理時間全体で 10 ~ 30% パフォーマンスが向上する場合があります。

iKnow REST API にいくつかの拡張機能が導入されました。例えば、結果数のみを取得したり、ドメイン・データをクエリしているほとんどのエンドポイントの完全な結果と共に結果数を取得できるようになりました。

SQL の機能強化

今回のリリースでは、以下の SQL の機能強化が行われています。

SQL クエリ監査

今回のリリースでは、SQL クエリの実行を監査する機能が追加されています。SQL クエリを監査する 3 つの新しいシステム・イベントがあります。

  • %System/%SQL/DynamicStatement — ダイナミック SQL クエリ用

  • %System/%SQL/DynamicStatement — 埋め込み SQL クエリ用

  • %System/%SQL/XDBCStatement — xDBC クエリ用

これらのイベントの監査を有効にするには、[システム管理] > [セキュリティ] > [監査] > [システムイベントを構成] の順に選択して [システム監査イベント] ポータル・ページに移動します。

クエリの最適化

SQL クエリにはいくつかの最適化の向上があります。このクエリ最適化機能は、結合条件の選択性を計算するときに異常値の選択性を考慮するようになり、一部のクエリの計画が改善されました。外部結合が、内部結合で使用できるすべての最適化を利用できるようになりました。特に、インデックスでは部分的にしか満たすことができなかった外部結合条件で一時ファイルを構築する必要がなくなり、多くの場合クエリのパフォーマンスが大幅に向上します。

ANSI SQL 演算子優先順位 (オプション)

SQL 演算子の優先順位を、左から右への CACHE SQL 演算子の優先順位ではなく ANSI SQL 標準に設定する新しいオプションがあります。既定は CACHE SQL 演算子の優先順位のままです。API または [一般SQL設定] ポータル・ページで SQL 演算子の優先順位を ANSI SQL に変更できます。[システム管理] > [構成] > [SQL およびオブジェクトの設定] > [一般SQL設定] を選択します。

凍結プランの進化

以前のリリースの Caché には、SQL クエリ・プランを凍結する機能と、新しいバージョンにアップグレードするときにクエリ・プランを自動的に凍結する機能が含まれていました。新しいリリースがクエリ・プランの最適化を改善する場合、アップグレード時にはこれが適用されませんでした。今回のリリースでは、Caché は、新しい最適化から利点を享受する場合がある凍結プランを含むクエリを識別し、凍結プランが新しい最適化から利点を享受する場合があるクエリにフラグを付けます。SQL 文のインデックス・ページで、これらのクエリは新規プラン列で識別されます。これらのプランを解凍して、新しい最適化を利用できます。

Eclipse ベースの IDE である Atelier の新機能に関する情報がある場所

Caché 用の Eclipse ベースの IDE である Atelier は、Caché と異なるリリース・サイクルで利用できます。その結果、新しい機能は、それぞれの新しい Atelier リリースで提供される Atelier のドキュメントに記載されています。Atelier IDE は、強力で普及している Eclipse 開発環境と InterSystems Caché データベースを統合します。Atelier により、最新のファイル・ベースの IDE を使用して、クライアント・システムで Caché アプリケーションを開発できます。Atelier は、アプリケーションの実行とデバッグが可能な Caché サーバにアプリケーションをアップロードする処理を行います。

将来の開発は、新規の Eclipse ベースの IDE を主な対象としています。スタジオはインストールのオプションとして残されるため、開発者は引き続きスタジオを使用してコードを開発できます。しかし、スタジオは保守プロダクトと見なされ、今後は Atelier へ移行していくため、スタジオには新機能は追加されなくなります。必要なリソースと問題の重大度の兼ね合いによっては、スタジオの小さなバグは対処されない場合があります。

Atelier は、Caché や Ensemble に加えて別途ダウンロードして利用できます。お客様は、スタンドアロンのリッチ・クライアント・プラットフォーム (RCP) アプリケーションをインストールするか、既存の Eclipse インストールに追加できるプラグインをインストールするか選択できます。RCP アプリケーションのユーザは、Eclipse プラグインを追加できます。Atelier では、Eclipse の自動更新メカニズムを使用して、ユーザが最新の変更を入手できるようにしています。Atelier のダウンロードおよび Atelier のドキュメントの詳細は、Atelier のホーム・ページ http://www.intersystems.com/atelierOpens in a new tab を参照してください。

その他の注意事項

その他にも、多数のマイナーな改善や修正が施されています。特に既存のインストール環境をアップグレードする場合は、"アップグレード・チェックリスト" で詳細な変更内容を確認してください。

改善の対象範囲は、以下のとおりです。

  • XML スキーマ・ウィザードでは、スーパークラスのインスタンスを削除するときにサブクラスのカスケード削除を実行できるオプションが用意されています。

  • Caché の Nodejs はノード 7 をサポートします。

  • CSP バッファがいっぱいになっていなくてもこれを強制フラッシュする新しいオプションです。

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

目的

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

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

Important:

Caché 2008.2 以前のバージョンからアップグレードしている場合、Caché 2017.2 に直接アップグレードできません。まず Caché 2009.1 と Caché 2016.2 との間のバージョンにアップグレードする必要があります。詳細は、"Caché インストール・ガイド" の "サポート対象アップグレード・パス" を参照してください。

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

管理者

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

操作上の変更

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

新しいインストールでは機能トラッカが既定で有効化されている

機能トラッカは、ソフトウェア・モジュールの使用量に関する統計を収集する Caché のソフトウェア・ユーティリティです。この統計は、特定の Caché インスタンスにソフトウェア・モジュールが存在し、使用されているかどうかを追跡します。機能トラッカは、毎週この情報を https 経由で InterSystems に送信します。これらの統計データは、開発およびサポート計画の参考にされます。収集される情報にはアプリケーション・データは一切含まれていません。以前のリリースでは、機能トラッカは既定で無効になっていました。このリリースでは、新しいインストールで機能トラッカが既定で有効になっています。既存のインストールをアップグレードしている場合、アップグレード後も機能トラッカの既存の状態は保持されます。

機能トラッカを無効にするには、機能トラッカを実行しているタスクを一時停止します。詳細は、"Caché システム管理ガイド" の “機能トラッカを非アクティブ化する方法” を参照してください。

並列デジャーナリングによってデジャーナリング順序が変更される

このリリースには並列デジャーナリングが含まれていて、最大 4 つのジョブをデジャーナリングできます。データベースは単一のジョブによって常にデジャーナリングされているため、並列デジャーナリングは単一のデータベースをデジャーナリングする順序に影響しません。ただし、並列デジャーナリングによって、あるデータベースと別のデータベースのデジャーナリング順序が変更される可能性があります。これは、個別のデジャーナリング・ジョブによって更新されるデータベースがデジャーナリング順序において若干異なる場所にある可能性があるためです。例えば、データベース B が 11:45:28 からの更新に対してのみ準備できているときに、データベース A に 11:45:30 にプライマリで実行される更新が含まれている場合です。詳細は、"Caché 高可用性ガイド" の “ミラーリング” の章にある “並列デジャーナリングの構成” を参照してください。

ジャーナル・バッファのプール・サイズの変更

このリリースでは、ジャーナル・バッファのプール・サイズが構成できるようになり、既定のサイズが 64MB に増えました。以前のリリースでは、既定のサイズは、非 Unicode システムでは 8MB、Unicode システムでは 16MB でした。このバッファのプール・サイズの増加によって効率を向上させられますが、システムのクラッシュが発生した場合に失われる場合があるデータ量も増えます。

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

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

プラットフォーム固有の既知の変更はありません。

開発者

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

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

クラスの変更

クラスの削除

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

  • %Library.RunJava

削除されたメソッド

以前のバージョンに存在していた以下のメソッドは、今回のリリースで削除されています。

  • %DeepSee.UI.Dialog.ShowQuery

    • EncryptQuery

  • %DeepSee.Utils

    • %ClearUpdateBuffer

  • %Library.IResultSet

    • %ToDynamicArray

    • %ToDynamicObject

    • %ToJSONValue

  • %Net.Remote.Utility

    • ClearPassphrase

    • GetPassphrase

    • RecordPassphrase

  • %SQL.IResultSet

    • %ToDynamicArray

    • %ToDynamicObject

    • %ToJSONValue

  • %SQL.StatementMetadata

    • %ToJSONValue

  • Config.Shadows

    • SourceDatabasesClose

    • SourceDatabasesExecute

    • SourceDatabasesFetch

削除されたプロパティ

以前のバージョンに存在していた以下のプロパティは、今回のリリースで削除されています。

  • %DeepSee.Component.Widget.controlPanel

    • isPdfEnabled

  • %DeepSee.Component.Widget.widget

    • isPdfEnabled

削除されたパラメータ

以前のバージョンに存在していたパラメータでこのリリースで削除されたものはありません。

削除されたインデックス

以前のバージョンに存在していたインデックスでこのリリースで削除されたものはありません。

変更されたメソッド

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

  • %Atelier.v1.Utils.MetaData

    • 古いメソッド : Build (pDataBaseName:%String) As (none)

    • 新しいメソッド : Build (pDataBaseName:%String) As %Status

  • %CSP.UI.Portal.Dialog.EncAddAdmin

    • 古いメソッド : SaveData (What, File, Username1, Password1, Username2, Password2, Description) As %String

    • 新しいメソッド : SaveData (What, File, Username1, Password1, Username2, Password2, Description, KeyLen) As %String

  • %CSP.UI.Portal.ViewLog

    • 古いメソッド : DrawLogContent (filename) As %Status

    • 新しいメソッド : DrawLogContent (tmp) As %Status

  • %DeepSee.AbstractKPI

    • 古いメソッド : %GetKPIValue (pKPIName:%String, *pValue:%String, pKPIProperty:%String="", pSeries:%String="", &pFilters:%String, pCellContext:%String="", &pCacheKey:%String, *pPctComplete:%Integer, pParentQueryKey:%String="") As %Status

    • 新しいメソッド : %GetKPIValue (pKPIName:%String, *pValue:%String, pKPIProperty:%String="", pSeries:%String="", &pFilters:%String, pCellContext:%String="", &pCacheKey:%String, *pPctComplete:%Integer, pParentQueryKey:%String="", *pKPIStatus:%Status) As %Status

  • %DeepSee.Component.pivotTable

    • 古いメソッド : getFilterInfo (fnames, fvalues) As (none)

    • 新しいメソッド : getFilterInfo (fnames, fvalues, flabels) As (none)

  • %DeepSee.PMML.Model.AbstractModel

    • 古いメソッド : %ExecuteModelInternal (pInput:%DeepSee.PMML.ModelInput, *pOutput:%DeepSee.PMML.ModelOutput) As %Status

    • 新しいメソッド : %ExecuteModelInternal (&pInput:%DeepSee.PMML.ModelInput, *pOutput:%DeepSee.PMML.ModelOutput) As %Status

  • %DeepSee.PMML.Model.GeneralRegression

    • 古いメソッド : CalculateXBeta (pObservation:%DeepSee.PMML.ModelInput, *pXBeta, *pBestTarget:%String="", *pBestScore:%Double="", pAddZero:%String="") As %Status

    • 新しいメソッド : CalculateXBeta (&pObservation:%DeepSee.PMML.ModelInput, *pXBeta, *pBestTarget:%String="", *pBestScore:%Double="", pAddZero:%String="") As %Status

  • %DeepSee.ResultSet

    • 古いメソッド : %PrepareObject (pQuery:%DeepSee.Query.query) As %Status

    • 新しいメソッド : %PrepareObject (pQuery:%DeepSee.Query.query, &pVariables) As %Status

  • %DeepSee.Utils

    • 古いメソッド : %GetDimensionMembers (pCubeName:%String, pSpec:%String, pContext:%List, *pMembers, pMaxMembers:%Integer=100, *pMemberClass:%String, &pRelatedFilters, pCalcMode:%Integer=0, pSearchKey:%String="") As %Status

    • 新しいメソッド : %GetDimensionMembers (pCubeName:%String, pSpec:%String, pContext:%String="", *pMembers, pMaxMembers:%Integer=100, *pMemberClass:%String, &pRelatedFilters, pCalcMode:%Integer=0, pSearchKey:%String="") As %Status

  • %Exception.SystemException

    • 古いメソッド : %OnNew (pName:%String="", pCode:%String="", pLocation:%String="", pData:%String="", pInnerException:%Exception.AbstractException=$$$NULLOREF, pStack:%String="") As %Status

    • 新しいメソッド : %OnNew (pName:%String="", pCode:%String="", pLocation:%String="", pData:%String="", pInnerException:%Exception.AbstractException=$$$NULLOREF, pStack:%String) As %Status

  • %Library.GlobalEdit

    • 古いメソッド : GetGlobalSizeBySubscript (Directory:%String, StartNode:%String, EndNode:%String="", &Size:%String=0) As (none)

    • 新しいメソッド : GetGlobalSizeBySubscript (Directory:%String, StartingNode:%String, EndingNode:%String="", &Size:%String=0) As (none)

  • %Library.Routine

    • 古いメソッド : CompileAll (Flags:%String=0, IO:%String=$p, &Count:%Integer, &Errors:%Integer, MultiCompile:%Integer=1, Journal:%Integer=1, KeepSource:%Boolean=1) As %Status

    • 新しいメソッド : CompileAll (Flags:%String=0, IO:%String=$p, &Count:%Integer, &Errors:%Integer, MultiCompile:%Integer, Journal:%Integer, KeepSource:%Boolean=1) As %Status

    • 古いメソッド : CompileSelected (Mask:%String="*.*", Flags:%String=0, IO:%String=$p, &Count:%Integer, &Errors:%Integer, MultiCompile:%Integer=1, Journal:%Integer=1, KeepSource:%Boolean=1) As %Status

    • 新しいメソッド : CompileSelected (Mask:%String="*.*", Flags:%String=0, IO:%String=$p, &Count:%Integer, &Errors:%Integer, MultiCompile:%Integer, Journal:%Integer, KeepSource:%Boolean=1) As %Status

  • %Library.SQLCatalog

    • 古いメソッド : SQLClassname (qh:%Library.SQLProcContext, table:%String) As %Library.String

    • 新しいメソッド : SQLClassname (qh:%Library.SQLProcContext, table:%String(MAXLEN=257)) As %Library.String

  • %SYSTEM.SQL

    • 古いメソッド: SetSQLStats (flag:%Library.Integer=1) As %Library.Integer

    • 新しいメソッド : SetSQLStats (flag:%Library.Integer=0) As %Library.Integer

  • %ZEN.ComponentEx.svgImageProvider

    • 古いメソッド : dumpSVGNode (e, svgDoc, src, intro, coda, NSPrefix, maxWidth) As (none)

    • 新しいメソッド : dumpSVGNode (e, svgDoc, src, intro, coda, NSPrefix, maxWidth, maxHeight) As (none)

    • 古いメソッド : extractXSLFOSource (svg, intro, coda, maxWidth) As (none)

    • 新しいメソッド : extractXSLFOSource (svg, intro, coda, maxWidth, maxHeight) As (none)

  • %ZEN.Template.AddInWizard.SOAPWizard

    • 古いメソッド : GetSRC (filetype:%String, url:%String, sslConfig:%String="", username:%String="", password:%String="") As %String

    • 新しいメソッド : GetSRC (filetype:%String, url:%String, sslConfig:%String="", sslCheckServerId:%Boolean, username:%String="", password:%String="") As %String

    • 古いメソッド : SaveLast (filetype, url, sslConfig="") As (none)

    • 新しいメソッド : SaveLast (filetype, url, sslConfig="", sslCheckServerId) As (none)

  • SYS.Stats.WriteDaemon

    • 古いメソッド : Sample (DaemonID:%Integer) As SYS.Stats.Resource

    • 新しいメソッド : Sample (DaemonID:%Integer=1) As SYS.Stats.WriteDaemon

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

delete() のハード・エラーが %Status 値と共に報告される

以前のリリースでは、クラス・コンパイラの delete() メソッドでハード・エラーが発生すると、呼び出し元にエラーをスローしていました。このリリースでは、これらのエラーは delete() メソッドによって処理され、エラーを %Status 値と共に呼び出し元に報告します。

DeepSee の変更

DeepSee のリスト選択での表示モードの既定値の変更

以前のリリースでは、DeepSee フィールドで %EXTERNAL(field) または %INTERNAL(field) を明示的に宣言していない場合、DeepSee はリスト出力に内部値を表示していました。このリリースでは、DeepSee は外部値を使用します。内部値を使用させるには、%INTERNAL() でフィールドをラップする必要があります。

Java とゲートウェイの変更

メッセージ・リスナとして JMS ゲートウェイを使用していない

このリリースでは、Java ゲートウェイから JMSGateway クラスが削除されました。このクラスは、Ensemble で JMS リスナを使用する方法の例として意図されていました。このクラスを使用して JMS リスナを実装していた場合、これを EnsLib.JavaGateway.JMSTest クラスで示されているメカニズムに置き換える必要があります。

オブジェクト・ゲートウェイ Load^%apiGTW が err 変数をパブリックにしない

以前のリリースでは、Load^%apiGTW を呼び出すと変数 err を意図的にパブリックにし、管理ポータルおよびその他の InterSystems API で使用できるようにしていました。このリリースでは、自動的にパブリックにせず、状態値を返します。使用中のコードが以前の動作を必要とする場合、以下のプログラムを呼び出して err をパブリック変数として明示的に宣言する必要があります。

Set err=$$Load^%apiGTW 

.NET 言語バインディング

ODBCx API で使用される SysList クラス、SysListUtil クラス、および CacheListRO クラスの置き換え

ODBCx API で SysList クラス、SysListUtil クラス、および CacheListRO クラスを直接使用する場合、同様の機能を提供するその他のクラスにこれらを置き換えます。これらのクラスは廃止されましたが削除されていません。これらのクラスを使用しているが、その他の ADO API で使用していない場合、都合の良いときまでこの置き換えを延期できます。ODBCx API で使用している場合、このリリースで使用する前に置き換える必要があります。

オブジェクト・ライブラリ

%RunJava ユーティリティ・クラスが削除された

このリリースでは、%RunJava ユーティリティ・クラスが削除されました。このクラスでメソッドを呼び出す場合、%Net.Remote.Service のユーティリティ・メソッドの呼び出しに置き換える必要があります。

ObjectScript の変更

間接演算用の添え字数の制限

このリリースでは、アプリケーションは間接演算用の添え字数が 254 個に制限されています。254 個を超える添え字を使用して間接演算を実行する既存のコードが存在する可能性はほぼありません。そのようなコードでは簡単にアクセスできないノードが作成されてしまいます。

SQL の変更

QuickStatement を作成する API の変更

QuickStatement クラスの構文が変更され、このクラスが cache-jdbc から cache-db jar に移動しました。新しい構文は以下のとおりです。

QuickStatement qs = QuickStatement.createQuickStatement((CacheConnection) connection); 

以前の構文 “QuickStatement qs = (QuickStatement) rs.getObject("**QuickStatement**");” を使用する場合、コードを新しい構文に更新する必要があります。

%Date LogicalToOdbc と LogicalToDisplay の変更

以前のリリースでは、タイムスタンプ値は、%Date LogicalToOdbc または LogicalToDisplay を使用して渡された場合には変更されませんでした。1840 年 12 月 31 日以前の日付をサポートするためのフィックスの一環として、この動作が変更されました。このリリースでは、タイムスタンプ値は、%Date LogicalToOdbc または LogicalToDisplay を使用して渡された場合、値の時刻の部分が削除され、日付の部分のみが返されます。使用中のアプリケーションのロジックが以前の動作を必要としている場合、コードを変更する必要があります。例えば、Oracle に接続されたテーブルから DISPLAY モードまたは ODBC モードでデータをクエリし、CAST(field AS DATE) や TO_DATE(...) のような関数を使用すると、Oracle は日付/時刻値を返します。このリリースでは、Caché はこれを DATE に変換します。

外部キーへの REFERENCES 特権の適用

以前のリリースでは、参照先テーブルの REFERENCES 特権を保持していなくても DDL 文を使用して外部キー制約を作成できました。このリリースでは、テーブル T を参照する外部キー制約を定義するには、ユーザは、テーブル T の REFERENCE 特権または外部キーが参照する列 (テーブル T) の REFERENCE 特権を保持している必要があります。アプリケーションが REFERENCES 特権を保持せずに外部キーを作成すると、エラーが発生します。

システム変更

oref 番号の順序の変更

このリリースでは、OREF 処理の効率を向上させました。結果として、OREF 番号の割り当ては、これまでは作成順に割り当てられていましたが、独立した方法で割り当てられるようになりました。その結果、使用中のコードが OREF 番号を割り当てる方法に左右される場合、ロジックを変更する必要があります。以前の順序付けは実装の詳細で、ドキュメントに記載されている機能ではありませんでした。例えば、OREF 文字列値が Caché 多次元配列のインデックス化に使用される場合、OREF 文字列値の添え字の順序は、その OREF 値が作成された順序と関係なくなりました。アプリケーションが OREF 値の順序を使用して実行順序またはデータの処理順序を制御する場合、そのアプリケーションは、$INCREMENT や $SEQUENCE など、その他の方法を使用して目的の順序を生成するように変更する必要があります。

コンソール・ログの変更

場合によっては、以前のリリースでは 2 つのメッセージに分割されていた長いコンソール・ログ・メッセージが 1 つのメッセージとして記述されるようになりました。コンソール・ログに特定のメッセージ用に解析するコードがある場合、これを更新する必要があります。

Web サービス

短い配列名を生成するオプションの SOAP ウィザードへの組み込み

以前のリリースでは、配列アイテムの既定のタイプ名には、アイテム名とタイプ名の両方またはキー名とタイプ名の両方が含まれていました。これは両方の名前が同じでも同様でした。このリリースでは、既定では、アイテム名とタイプ名が同じ場合、一方のみが既定の配列タイプ名に含まれます。同様に、キー名とタイプ名が同じ場合、一方のみが既定の配列タイプ名に含まれます。例えば、以前のリリースでは、XML スキーマ (または Web サービスの場合には WSDL) には以下のようなプログラムが含まれていました。

<element minOccurs="0" name="PropName" type="s01:ArrayOfSimpleObjectSimpleObject" xmlns:s01="mytypes"/>

このリリースでは、このスキーマまたは WSDL には代わりに以下のようなプログラムが含まれています。

<element minOccurs="0" name="PropName" type="s01:ArrayOfSimpleObject" xmlns:s01="mytypes"/>

場合によっては、以前の既定の動作に戻すことができます。

  • %XML.SchemaOpens in a new tabAllowRedundantArrayName プロパティでは XML スキーマの以前の形式が許可されています。真の場合、以前の長いタイプ名が生成されます。

  • Web サービス・クラスの ALLOWREDUNDANTARRAYNAME パラメータでは Web サービス用の WSDL の XML スキーマで以前の形式の配列名が許可されています。このパラメータが真の場合、以前の長いタイプ名が生成されます。

  • %XML.AdaptorOpens in a new tabXMLSchema() メソッドを使用してスキーマを生成している場合、以前の既定の長い配列名をリストアする方法はありません。このスキーマは、%XML.SchemaOpens in a new tab クラスを使用して作成する必要があります。

HTTP 要求を使用した Web メソッドの呼び出しの変更

以前のリリースでは、HTTP SOAP 要求を作成せずに Caché SOAP Web サービスを直接呼び出すことができました。このショートカットでは SOAP クライアントの使用が回避され、HTTP SOAP 要求を使用して実現できるセキュリティがバイパスされます。このショートカットは、SOAP Web サービス・クラス用に Caché が生成するカタログおよびテスト・ページによって使用されます。このショートカットを使用せず、常に SOAP Web クライアントを使用して HTTP SOAP 要求を生成し、Caché SOAP Web サービスを呼び出すことをお勧めします。URL に %SOAP.WebServiceInvoke クラスを使用して SOAP Web サービスを呼び出すコードがある場合、これを SOAP クライアントによって生成される HTTP SOAP 要求に置き換えることをお勧めします。

お勧めしませんが、このショートカット・メカニズムの使用を継続できます。その場合、このアクセスを明示的に有効にする必要があります。%SOAP.WebServiceInvoke クラスおよび soap_method クエリ・パラメータを使用するには、以下を実行する必要があります。

  • 以下のように、コマンドで %SOAP.WebServiceInfo と WebServiceInvoke を有効にします。

    set ^SYS("Security","CSP","AllowClass",webapplicationname,"%SOAP.WebServiceInfo")=1
    set ^SYS("Security","CSP","AllowClass",webapplicationname,"%SOAP.WebServiceInvoke")=1
    

    webapplicationname は、末尾にスラッシュを付けた Web アプリケーションの名前です。例えば、"/csp/mynamespace/" のようになります。

  • CSP ページにアクセスするユーザに %Development リソースの USE 特権があることを確認してください。

XML の変更

XSLT2 変換が致命的なエラーのエラー・ステータスを返す

以前のリリースでは、XSLT2 変換で致命的なエラーが発生すると、$$$OK を返していました。このリリースでは、エラー・ステータスを正しく返すようになりました。既定のエラー処理が必要な場合、この変更を処理するようにコードを変更する必要があります。既定のエラー処理をカスタムのエラー処理に上書きした場合、以前のリリースで行っていたような動作を継続します。

FeedbackOpens in a new tab