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’.
みたいなエラーが出ました。原因と対処法が分かったのでメモしておきます。
Table of Contents
公式情報
Database Integrity Suggestion Warning
現象
EntityをいったんPublishした後で、Attributeを削除したり、Nameを変更したりしてPublishすると、DataBase内にEntityで定義していない列があるというエラーがでます。
原因
OutSystemsが、データベースの定義をロールバックなどのために、のこしておくためらしいです。
対策
公式情報では以下2点の対策が挙げられていました。
- DBから直接不要な列を削除
- 同じ名前のAttributeを追加しなおす
- 警告を無視する
クラウドなのでDBへの直接アクセスはできないけど、背後のDBを汚いままにするのは嫌なので、Forgeから「DBCleaner」コンポーネントをインストールしてみたら解決できました。
公式情報に書いたリンクからインストールします。
インストールが終わるとService Studioの「Applications in Development」から起動。
今はとにかく問題になっている列さえ消せればよいので「OPEN IN BROWSER」でプレビューします。
Attributesの下に使われていない列がリストアップされるので「Drop」。
もう一度元のアプリケーションをパブリッシュ。
2つあったエラーが1つに減りました。
残っているのは、ATTRIBUTE1という名前で作った後リネームして使っている列です。
ちょっと考えましたが、ATTRIBUTE1をもう1回作成してパブリッシュ→削除してパブリッシュ→DBCleanerで削除→さらにパブリッシュ
の手順で以下の通り治りました。
コメント
Thank you