OutSystemsの「column xxx exists in database」エラーに対処する

OutSystemsのPersonal EnvironmentでEntity定義をいじりながら機能の検証をしていたら、

Inconsistent database table and entity definitions: column ‘OSUSR_99z_Member.ATTRIBUTE1’ exists in database, but there is no corresponding attribute in entity ‘Member’.

errormsg_ nocorrespondingattribute

みたいなエラーが出ました。原因と対処法が分かったのでメモしておきます。

公式情報

Database Integrity Suggestion Warning

Forgeの解決用コンポーネント「DBCleaner」

現象

EntityをいったんPublishした後で、Attributeを削除したり、Nameを変更したりしてPublishすると、DataBase内にEntityで定義していない列があるというエラーがでます。

原因

OutSystemsが、データベースの定義をロールバックなどのために、のこしておくためらしいです。

対策

公式情報では以下2点の対策が挙げられていました。

  • DBから直接不要な列を削除
  • 同じ名前のAttributeを追加しなおす
  • 警告を無視する

クラウドなのでDBへの直接アクセスはできないけど、背後のDBを汚いままにするのは嫌なので、Forgeから「DBCleaner」コンポーネントをインストールしてみたら解決できました。

公式情報に書いたリンクからインストールします。

DBCleaner (2)

インストールが終わるとService Studioの「Applications in Development」から起動。

DBCleaner

今はとにかく問題になっている列さえ消せればよいので「OPEN IN BROWSER」でプレビューします。

Attributesの下に使われていない列がリストアップされるので「Drop」。

DBCleaner_Screen

もう一度元のアプリケーションをパブリッシュ。

errormsg_ nocorrespondingattribute_attribute1

2つあったエラーが1つに減りました。

残っているのは、ATTRIBUTE1という名前で作った後リネームして使っている列です。

ちょっと考えましたが、ATTRIBUTE1をもう1回作成してパブリッシュ→削除してパブリッシュ→DBCleanerで削除→さらにパブリッシュ

の手順で以下の通り治りました。

errormsg_ nocorrespondingattribute_解決

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメント

  1. donmatsugoro より:

    Thank you