0
0

More than 1 year has passed since last update.

[OutSystems]EntityのAttribute名を変えると、テーブル内に空の新しい列ができる

Posted at

表題の通り。
既存のEntityに既にデータが入っているAttributeがあるとする。
このAttributeのName Propertyを変更したら、どうなるか?

直感的には、Attributeに対応するテーブルの列の名前が変更され、値はそのまま維持されてほしい。
ところが、実際には

  • 既存の列はそのままテーブル内に残る(データも保持したまま)
  • 新しい列がテーブルに追加され、以降はその列が該当Attributeに紐づけられる(データはこの時点では空)

という動作をする。

環境情報

Personal Environment(Version 11.21.0 (Build 39357))
Service Studio(Version 11.54.18)
Data Extractor(Version 1.4.0)

ドキュメント

How Data Model Changes are Handled - Renaming an Entity or Attributeより(2023/07/26時点では日本語訳が無さそうなので英語で閲覧する)。

If you rename an Attribute, OutSystems creates a new column with the new name in the database. The old column with all its data remains in the database untouched, but it won’t be available in the development environment.

この記述だと、開発以外の環境ではどうなるのか気になるが、PEではその検証ができない。

Data Extractorの使い方

ForgeにあるData Extractorを使うと、環境内にあるEntityに対応するRDB内のテーブルの情報を取得できる。
簡単な手順は以下の通り。

  1. Data Extractorを開く
  2. 画面右上の「New Snapshot」をクリック
  3. 画面に以下の入力をしてSaveボタンをクリック
    • Snapshot Name: 適当な名前
    • Extract Configurations: Table DDL(Entityに対応するテーブルのDDLを出力するオプション)にチェック(テーブルに入っているデータはチェックの有無にかかわらず出るようだ)
  4. 画面下部に「Extract Entities」という欄が出現するので、「Search Entity to Add」で対象のEntity名を検索⇒表示された候補からモジュール名を確認したうえで適切なものを選択し、「Add」ボタンをクリック
  5. 「Run」ボタンをクリック⇒一覧表示に戻ったら、しばらく待ってから、「Refresh]のリンクをクリック
    image.png

ダウンロードしたzipファイルを展開し、

  • csv.gzで終わるファイル:テーブルに格納されているデータ
  • TableDDL.Create.sql.gzファイル:テーブルを作成するためのDDLを含むsqlファイル

動作確認手順

  1. Service Studioに付属するTutorial用ExcelのTasks.xlsxを取り込んでTask Entityを作成
  2. 属性名を変更する前の、Entity定義・データ、及びData Extractorで取得したデータとDDLを確認
  3. Description属性のNameをDescription_NameChangedに変更してPublish
  4. 属性名を変更した後の、Entity定義・データ、及びData Extractorで取得したデータとDDLを確認

属性名を変更する前の、Entity定義・データ、及びData Extractorで取得したデータとDDLを確認

Entity定義

image.png

Service StudioのView or Edit Dataで確認したEntityのデータ

image.png

DDL

CREATE TABLE [DBO].[OSUSR_W8T_TASK1]
(
	  [ID] BIGINT NOT NULL IDENTITY(1,1)
	, [DESCRIPTION] NVARCHAR(50) COLLATE LATIN1_GENERAL_100_CI_AI_SC NULL
	, [DUEDATE] DATETIME NULL
	, [ISACTIVE] BIT NULL
	, CONSTRAINT [OSPRK_OSUSR_W8T_TASK1] PRIMARY KEY ([ID] ASC)
)

Entityに対応するテーブルに含まれるデータ

ID DESCRIPTION DUEDATE ISACTIVE
System.Int64 System.String System.DateTime System.Boolean
1 Deploy Awesome Apps 2018-02-05 00:00:00 True
2 Finish Tutorial 2016-07-06 00:00:00 True
3 Go On Vacation & Relax 2018-07-04 00:00:00 False
4 Learn OutSystems 2016-01-31 00:00:00 False
5 Finish Projects on Time 2018-02-01 00:00:00 True
6 Dummy 2022-05-11 00:00:00 True

属性名を変更した後の、Entity定義・データ、及びData Extractorで取得したデータとDDLを確認

Entity定義

Description属性の名前をDescription_NameChangedに変更した。
image.png

Service StudioのView or Edit Dataで確認したEntityのデータ

名前を変更後のDescription_NameChanged属性の値が空になっている(変更前のDescriptionだった時にはデータが表示されていたことに注意)。
image.png

DDL

[DESCRIPTION]と[DESCRIPTION_NAMECHANGED]が両方あることに注意。つまり、属性の名前を変えただけなのにもかかわらず、新しい列が追加されている。

CREATE TABLE [DBO].[OSUSR_W8T_TASK1]
(
	  [ID] BIGINT NOT NULL IDENTITY(1,1)
	, [DESCRIPTION] NVARCHAR(50) COLLATE LATIN1_GENERAL_100_CI_AI_SC NULL
	, [DUEDATE] DATETIME NULL
	, [ISACTIVE] BIT NULL
	, [DESCRIPTION_NAMECHANGED] NVARCHAR(50) COLLATE LATIN1_GENERAL_100_CI_AI_SC NULL
	, CONSTRAINT [OSPRK_OSUSR_W8T_TASK1] PRIMARY KEY ([ID] ASC)
)

Entityに対応するテーブルに含まれるデータ

名前変更前のDescriptionだったころの属性に対応すると思われるDESCRIPTION列には値が入っているが、追加された、名前変更後の属性に対応すると思われるDESCRIPTION_NAMECHANGED列は空。
つまり属性変更に伴って作成された列には値はコピーされなかった。

ID DESCRIPTION DUEDATE ISACTIVE DESCRIPTION_NAMECHANGED
System.Int64 System.String System.DateTime System.Boolean System.String
1 Deploy Awesome Apps 2018-02-05 00:00:00 True
2 Finish Tutorial 2016-07-06 00:00:00 True
3 Go On Vacation & Relax 2018-07-04 00:00:00 False
4 Learn OutSystems 2016-01-31 00:00:00 False
5 Finish Projects on Time 2018-02-01 00:00:00 True
6 Dummy 2022-05-11 00:00:00 True
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0