記事
· 2021年6月28日 2m read

クラス定義でプロパティ名を変更するとそれまで参照できていたデータが参照できなくなる/参照時にエラーが発生する場合の対処方法

これは InterSystems FAQ サイトの記事です。

クラス定義の Property 定義文の名称を直接変更した場合、内部的には 元のプロパティを削除し、新しいプロパティを追加 したことになります。

このため、すでにデータを格納している永続クラスのプロパティ名をエディタで直接変更した場合、元のプロパティで設定されていた値にはアクセスができなくなります(新しいデータの格納位置が割り当てられます)。  

また、変更したプロパティが必須(非ヌル)に指定されていた場合、データが存在しないために参照時にエラーが発生します。

以下の図は、左画面が変更前の状態、右画面がプロパティ名を変更してコンパイルを行った状態です。

 

基本的に、このような操作を行う場合は、あらかじめデータをエクスポートし、データの削除を行い、クラス定義の変更を行ってから、データを再インポートする方法が安全です。

 

または、スタジオのメニューの クラス > リファクタ > 名前変更 を利用してプロパティ名を変更します。
(リファクタの名前変更メニューにより、クラス定義内のストレージやメソッド定義に対して、一括でプロパティ名を変更できます。)

 

変更対象のクラス定義を開き、修正したいプロパティ名を選択し、スタジオのメニューの クラス > リファクタ > 名前変更 を選択します。

変更対象の場所を目で確認しながら変更を許可することができます。変更を行った後は、クラス定義のコンパイルを行います。

 

VSCode または、リファクタメニューがない古いバージョンのスタジオでは、プロパティ名を修正した後、手動でストレージ定義を変更します。

方法:ストレージの定義で、新しいプロパティが元のプロパティと同じ格納位置をポイントするように手動で調整します。

詳細は、以下の通りです。

補足:<Value name="2"> の番号(例は2)は、システムにより任意の数が設定されます。

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください