カスタマイズされた4D接続ダイアログを構築したいと思ったことはありますか?あるいはあなたのクライアントアプリケーションを異なるサーバーに接続することに興味がありますか?4D v18では、この2つのシナリオを処理することができます。このブログは、カスタムリモート接続ダイアログを作成し、マージされた4Dサーバーに接続したい方のためのものです。ぜひお読みください。
なぜ、独自の接続ダイアログを作成する必要があるのでしょうか?
4D のビルトイン接続ダイアログを変更したいケースには、以下のような需要が考えられます。
- カスタマイズ
サーバーへのリモート接続のための標準ダイアログをカスタマイズしたい。
- 複数の子会社が存在する
アプリケーションをデプロイして、いくつかの異なるデータベースを作成するケースが考えられます。例えば、あるグループの子会社ごとに異なるデータベースを使用するような場合です。リモート接続をする際に、ユーザーがどのサーバーとデータベースに接続できるかを管理し、直接接続を許可することができます。
- アーカイブデータベース
カスタムダイアログのもう一つの使い方は、ユーザーがどのアーカイブ年度データベースにアクセスできるかを選択することです。
- アプリケーションポータル
複数の製品を展開しつつも、ユーザーが1つの「ポータル」アプリケーションを使ってその各製品に接続できるようにしたい場合。
使用例
あるソフトウェア出版社は、特定のビジネスニーズに対応した各サーバーをクラウド上でホストするサーバーファームを持っています。以前は、サーバーにアクセスできるユーザー数と同じ数のリモートアプリケーションを展開していました。現在では、「ディレクトリ」データベースを使うことで、単一のリモートアプリケーションだけですべてのサーバーにアクセスできるようにすることができます。HTTPリクエストまたはリモートデータストアを使用して、各サーバーはそのステータスと接続情報を「ディレクトリ」サーバーに送信します。接続された組み込みアプリケーションは、ディレクトリデータベースに問い合わせ、利用可能なサーバーのリストを表示し、その中から1つのサーバーに接続することができます。
その方法は?
接続データベースの作成
まず、独自の接続ダイアログを持っている接続データベースを作成する必要があります。4D v18では、OPEN DATABASEコマンドは、4D Serverに接続できるように拡張されています。サーバーの場所とポートを含む 4DLink ファイルを作成し、コマンドの引数として渡します。スタンドアロンアプリケーションは、自動的にコードを停止し、サーバに接続し、典型的なリモートアプリケーションになります。
以下は、サーバー選択ダイアログのコードの抜粋です。 Form.selectedServer は 4D Serverの情報を含んでいます。
If (Form.selectedServer#Null)
C_TEXT($xml)
C_OBJECT($link)
$xml:="<?xml version=\"1.0\" encoding=\"UTF-8\"?><database_shortcut is_remote=\"true\" server_database_name=\"FA_RemoteConnexionServ\" server_path=\""+Form.selectedServer.IP+":"+Form.selectedServer.portID+"\"/>"
$link:=Folder(fk user preferences folder).file("server.4dlink")
$link.setText($xml)
OPEN DATABASE($link.platformPath)
End if
接続用データベースの準備ができたら、あとはコンパイルされたデータベースをビルドするだけです。
ターゲットデータベースをマージする
マージされたサーバーに接続することができるのはマージされたクライアントアプリケーションのみです。そこで、ビルドアプリケーションプロセスにおいて、マージされたクライアントアプリケーションに接続データベースを埋め込むことを可能にする新しいメカニズムを開発しました。
新しいBuildApp キーであるDatabaseToEmbedInClientWinFolder と DatabaseToEmbedInClientMacFolder を作成し、ここにコンパイルした接続データベースのパスを格納するようにしました。こうすることで、最終的なクライアント/サーバーアプリケーションをビルドする際に、ビルドアプリケーションプロセスが、コンパイルされた接続データベースをクライアントアプリケーションに埋め込み、その名前を変更することになります。
このアプリケーションは、データファイルやライセンスなしで実行することができます。しかし、データファイルが必要な場合は、コンパイルしたストラクチャーと同階層の”Default Data”フォルダーに”Default Data.4DD”ファイルを配置することが可能です。この場合、スタンドアロンの組み込みアプリケーションのライセンスは、アプリケーションのビルドプロセス中に統合されます。
これは、埋め込みデータベースを持たない、マージされたクライアントアプリケーションのストラクチャーです(「レガシークライアント」)。
これは、接続アプリケーションを埋め込むためのBuildAppキーのサンプルです。
<DatabaseToEmbedInClientMacFolder>
::connectionApp_Build:Compiled Database:connectionApp:
</DatabaseToEmbedInClientMacFolder>
これが、コンパイルされた接続データベースです。
そして最後に、これはマージされたクライアントアプリケーションのストラクチャーです。
どのように機能するのですか?
実行されると、組み込みクライアントアプリケーションは埋め込まれた接続データベースを開き、その後、ユーザーが接続する組み込みサーバーを選択できるようにします。デフォルトのデータファイルが使用されている場合、それは読み取り専用モードで開かれます。
マージされたサーバーからの自動更新プロセスはまだ利用可能であることに注意してください。マージされた接続アプリケーションがサーバーに接続したとき、そのバージョンがサーバーの範囲にない場合、アプリケーションが標準のマージされたクライアントアプリケーションである場合と同様に、自動アップデートが開始されてしまいます!