Herokuのフリープランは廃止されるようです。よってこの記事で紹介した方法は無料ではできなくなります。以下のFAQ参照。
https://help.heroku.com/RSBRUH58/removal-of-heroku-free-product-plans-faq
OutSystemsにおいて、外部DBとは、プラットフォームとは別に(外部に)あるDataBaseに接続し、そのデータをEntityを通して操作するもの。
個人的な経験的には、多くのユーザー企業で使われている。
ただ、Personal Environmentでこの機能の動作確認をするには、インターネット上でRDBをホストしてくれるサービスが必要で、だいたい有料。
最近、Heroku Postgresを使うと、PostgreSQLのデータベースを無料で用意できることに気づいたので、データベース作成からExtension作成・利用までの手順をまとめてみる。
環境
Personal Environment(Version 11.16.0 (Build 35766))
Service Studio(Version 11.53.7)
Integration Studio(Version 11.11.5)
pgAdmin4(Version 6.11)
Heroku Postgresのデータベースを用意する
How to set up a free PostgreSQL database on Herokuにスクリーンショット付きで手順が載っている。
- Herokuのアカウントを作る (Sign Upのリンクから)
- ログイン
- 「Create new app」ボタンでappを作る
- 作ったappを開き、Resourcesタブ > Add-ons欄で「Heroku Postgres」で検索して、Freeと書かれているプランを選択してProvision
Freeのオプションで作ってみたところクレジットカードは不要だった。
ここまででもうPostgreSQLのデータベースはできている。
データベースにテスト用Tableを作成する
データベースを操作するのにHerokuのCLIを使う方法と、PostgreSQLを操作するツールを使う方法があるらしい。
後者の方が簡単そうだったので、pgAdmin4をダウンロード、インストール。
私はWindowsを使っているので、https://www.pgadmin.org/download/pgadmin-4-windows/
からダウンロードした。
pgAdmin4でデータベースに接続する
pgAdmin4を起動すると、最初にMaster Passwordを設定するダイアログが出てくる。
これをCancelして後続の作業をしていたら、「crypto key missing」というエラーが出て接続できない問題が発生したので、恐らく設定しておいたほうが良い。
接続先情報を指定するため、DashboardにあるAdd New Serverをクリック。
Register - Serverダイアログ(正しい設定かどうかまでは分からないが、この設定で動作確認はできた)
- Generalタブ > Nameプロパティ:接続につける適当な名前(ここではheroku_testとした)
- Connectionタブ > (Heroku PostgresのDatabaseページ > Settingsタブ > Database Credentialsセクションからコピー)
- Host name/address:Database CredentialsセクションのHost
- Port:Database CredentialsセクションのPort
- Maintenance database:Database CredentialsセクションのDatabase
- Username:Database CredentialsセクションのUser
- Password:Database CredentialsセクションのPassword
- SSLタブ > SSL mode:Prefer
最後にSaveボタンをクリックして保存。
Heroku PostgresのDatabaseページ > Settingsタブ > Database Credentialsセクションの項目は以下の色を付けた位置
テーブルを作る
画面左のサイドバーのServers、先程定義した接続情報を展開すると、該当位置にあるDatabaseの一覧が表示される。
自分の環境で展開すると7000ほどのDatabaseが表示された。恐らく、共有の環境であるため、他のユーザーのDatabaseが表示されている。
接続情報で指定したのと同じ名前のDatabase > Schemas > public > Tablesを選択し、右クリック > Create > Table...でテーブルを作成する。
下のスクリーンショットでは、「PgTestTable」という名前で作っている。
テーブルの定義例。OutSystemsのEntityは主キーがInteger/Long Integerで自動採番させる。この設定にするためには、Id列のData typeをserial、Primary key?のスイッチをオンにするとよさそう。
Service CenterでDatabase Connectionを定義する
ここからはOutSystemsでの作業になる。
Database Connectionは、外部DBへの接続文字列の定義を行うもの。
各環境(開発、QA、本番など)に作成し、外部DBのExtensionは、どのDatabase Connectionを使うかを設定する。
- Service Centerにアクセスする
- トップのメニューからAdministration > Database Connectionを選択
- New Database Connectionのリンクをクリック
- DBMS項目でPostgreSQL / Aurora PostgreSQL、Configuration Mode項目でAdvanced configurationを選択し、各項目を以下の通り入力する(Database Credentialsセクションと書いてある部分は、Heroku PostgresのDatabaseページ > Settingsタブ > Database Credentialsセクションからコピー)
- Name:任意の名前。後でExtensionに紐づけるときに確認する名前なので、わかりやすいものに
- Username:Database CredentialsセクションのUser
- Password:Database CredentialsセクションのPassword
- Configuration Parameters(<>で囲んだ部分はDatabase Credentialsセクションの同名項目の値で置き換え):database=<Database>;host=<Host>;port=<Port>;SSL Mode=Require;Trust Server Certificate=true
- Test Connectionして問題なければCreate。
テスト用Tableを取り込むExtensionを作成する
- Service Studioでテスト用のアプリケーションを開き、モジュールの種別をExtensionにして新しいモジュールを追加する
- 追加したExtensionを開く
- Integration Studioが開くのでログイン
- Entitiesフォルダを右クリック→Connect to External Table or View...を選択
- Available Database Connectionsでは↑で作成したDatabase Connectionを選択
- Available Databasesでは、Tableを作成したSchema(↑ではpublic)を選択
- Select the Tables and Viewsでは、テストに使うTableを左のリストで選択し、Addボタンをクリックして右のリストに移してからNext
- Publish(Integration Studioの1-Click Publishアイコンは小さいが、Service Studioと同じ形と色でメニューの位置にある)
Extensionを経由して検索/更新する画面を作成してテスト
ここまできたら、普通のEntityと同じように検索/更新を行える。
参照追加し、UI FlowにEntityをドラッグ&ドロップして動作確認すると以下のように表示できる。