4D v18より、プロジェクト・データベースを使った変換と開発の方法についてブログのシリーズを掲載してきました。コンポーネントについてはどうでしょう?このブログで疑問に答えていきます。
とても簡単で、開発とコンポーネントのインストールは変わりません。以前と同じ技術を使い続けることができます。
忘れてはいけないのは、プロジェクト・データベースのアーキテクチャーのブログで説明したように、ストラクチャファイル (.4db)に相当するのは”Project”フォルダーであるということです。あなたのコンポーネントを、Projectフォルダーと同層にある”Component”フォルダーに追加するだけです。
もしもバイナリー・データベースをプロジェクトに変換したら、コンポーネントの全てもプロジェクトに変換する必要はありません。バイナリー・データベース (.4db)のように、プロジェクト・データベースはプロジェクトとバイナリー・コンポーネントの両方をロードできます。
そのため、データベースとコンポーネントを、一つずつ簡単に変換できます。
二つの新しいデータベース・パラメータを自由に使用できます:
もしホストデータベースがプロジェクトの場合
$isProject:=Get database parameter(Is host database a project)
もしカレントデータベースがプロジェクトの場合
$isProject:=Get database parameter(Is current database a project)
アプリケーションの運用を次のステップへ進めましょう。4D v18を使えば:
プロジェクトデータベースを使えば、最終的なアプリケーションのビルドを両方のプラットフォームでビルドすることもできます。プロジェクトデータベースは、バイナリーデータベースとして同じコンフィギュレーションファイルを使います。
バイナリーデータベース (.4db)と同じ方法でプロジェクトデータベースをコンパイルすることができます。二つのデータベース間の違いはわずかです。インターフェイスは同じで、プロダクトマシンコードは同じです。
唯一の違いは、コンパイルされた結果が、バイナリーデータベースではバイナリーファイル (.4db)に保存されるのに対して、プロジェクトデータベースでは”Project/DerivedData/CompliedCode”フォルダに保存されることです。
コードをコンパイルするのと同じ方法で、アプリケーションを作成するのに変えることはありません。
変換されたプロジェクトデータベースと同じコンフィギュレーションファイルを使うことができます。
プロジェクトデータベースを使うときは常に、違いは生成されたファイル中にあります。作成されたアプリケーションのコンテンツを見れば、”4dc”ファイルの替わりに”.4dz”拡張子のファイルがあります。
以下のビデオでは、バイナリーデータベースからコンパイルされたデータベースを生成しています。そのあと、同じことをプロジェクトデータベースで行なっています。プロジェクトデータベースはバイナリーデータベースの変換の結果です。
ビデオの最後に、得られたファイルのサイズを比較しています。.4dzは.4dcに比較して5倍小さくなっています。
"
Open form window
で指定できるウィンドウタイプの中にToolbar form window
というものがあります。ツールバーは,常時,スクリーンの前面上部に表示される特殊なウィンドウで,メインメニューのような役割を果たしますが,Windows版のSDIモードでは正式にサポートされていません。特に,複数のモニターが接続されており,それぞれの解像度や形が違っている状況でツールバーを表示すると,ウィンドウの幅が足りなかったり,ウィンドウが間違ったスクリーンに表示されたりします。これは仕様です。SDIモードでは,ツールバーに依存せず,それぞれのウィンドウが独立して機能するようなデザインにする必要があります。
クイックレポートのHTML出力には,カスタムテンプレートを使用することができます。テンプレートは,特殊な「タグ」(PRCESS 4D TAGS
とは違うタグ)がコメント文で挿入されたHTMLテキストであり,整形されたレポートを出力するために使用されるものです。
タグを使用してテキストを挿入した場合,テンプレート内の改行コード(0x10
)は,すべて<br />
タグに変換されます。Document to text
コマンドでテンプレートをロードした場合,改行コードの数が違うために,HTML出力の体裁が変わってしまうことがあります。これは仕様です。クロスプラットフォームで改行の数を揃えるためには,Document to text
コマンドで同じ改行オプションを指定するようにしてください。
プロジェクトモードでは,フォームオブジェクトの「標準アクション」にオブジェクト毎のデフォルト値は特に設定されていません。たとえば,新しく作成したタブコントロールは,デベロッパが明示的に設定しない限り,「ページ移動」のボタンにはなりません。これは仕様です。
ビルドしたアプリケーションをアップデートするたびに,データファイルの場所を尋ねるダイアログが表示される場合,「アプリケーション配付の新しいアーキテクチャ」が有効にされているかどうか,確認することが勧められています。
以前の「アーキテクチャ」は,データファイルの場所をストラクチャファイルに記録する,というものでした。そのため,.4DC
ファイルを入れ替えるたびに,パスを再指定する必要があります。新しいアーキテクチャでは,データファイルのパスがlastDataPath.xml
という外部ファイルに記録されるので,アプリケーションをアップデートした後もデータファイルのパスを引き継ぐことができます。詳細は,ドキュメントをご覧ください。
64ビット版の統合Webエリアは,レンダリングエンジンにCEF(Chrome Embedded Framework)を採用しているため,32ビット版(WebKit)とは振る舞いが違っていることがあります。一例として,.license4D
ファイルは,内容的にはHTMLですが,特殊な拡張子が付けれらたファイルなので,ソースコードがそのまま画面に表示されます。これは仕様です。拡張子が付いていないHTMLファイルも,同様にHTMLコードがそのまま表示されます。
アプリケーションまたはストラクチャにインストールされているプラグインは,通常,すべてビルドしたアプリケーションのPluginsフォルダーにコピーされます。特定のプラグインを除外するには,アプリケーションビルド設定ファイル’(プロジェクトXML)のArrayExcludedPluginID
キーを使用します。
4D Writeや4D Viewなど,古いタイプのプラグインは,15000
よりも若い固有のIDが振られており,番号で識別されます。一方,4D Internet Commands(15010
)のように15000
以上のIDが設定されているプラグインは,番号ではなく,固有の名前で識別されます。4D Internet Commandsをビルドしたアプリケーションから除外するのであれば,ArrayExcludedPluginID
ではなく,ArrayExcludedPluginName
を使用し,名前で指定する必要があります。
(例えばEメールで)ファイルを交換する前に、転送するサイズを小さくしたくて圧縮することがよくあります。4D v18を使えば、外部ライブラリーやツールを使わずにプログラムでファイルの圧縮解凍が可能です:
新しいZip Create archivesコマンドは、ファイル、フォルダ、あるいはパラメータを使ったオブジェクト(例:アーカイブを読むためのパスワード)などを受け渡す場合にzipアーカイブを作成できます。
ファイルを圧縮:
C_OBJECT($file;$destination)
$destination:=Folder(fk desktop folder).file("MyDocs/file.zip")
$file:=Folder(fk desktop folder).file("MyDocs/text.txt")
ZIP Create archive($file;$destination)
フォルダを圧縮:
C_OBJECT($folder;$destination)
$destination:=Folder(fk desktop folder).file("MyDocs/Images.zip")
$folder:=Folder(fk desktop folder).folder("MyDocs/Images")
ZIP Create archive($folder;$destination)
パスワードとプログレスバーを圧縮:
C_OBJECT($zip)
$destination:=Folder(fk desktop folder).file("MyDocs/Archive.zip")
$zip:=New object
$zip.files:=Folder(fk desktop folder).folder("MyDocs/Resources").folders()
$zip.password:="password"
$zip.callback:=Formula(FormulaCompressing ($1))
progID:=Progress New
ZIP Create archive($zip;$destination)
Progress QUIT (progID)
FormulaCompressing メソッド:
Progress SET PROGRESS (progID;Num($1/100))
新しいZIP Read archiveコマンドはアーカイブオブジェクトを返します。このオブジェクトを操作することによって、アーカイブの中のファイルのリストを簡単に入手、特定のファイルを解凍、全アーカイブを解凍などができます。
アーカイブのコンテンツを読む
C_OBJECT($archive;$path)
$path:=Folder(fk desktop folder).file("MyDocs/Archive.zip")
$archive:=ZIP Read archive($path)
ファイルとフォルダのリストを検索する
$folders:=$archive.root.folders()
$files:=$archive.root.files()
解凍せずにファイルのコンテンツを読む
If ($files[$i].extension=".txt")
$txt:=$files[$i].getText()
Else
$blob:=$files[$i].getContent()
End if
アーカイブからファイルを解凍する
$folderResult:=$files[$i].copyTo(Folder(fk desktop folder).folder("MyDocs"))
全てのファイルを解凍する
$folderResult:=$files[$i].copyTo(Folder(fk desktop folder).folder("MyDocs"))
このシリーズのブログでは、バイナリー・データベースをプロジェクト・データベースにコンバートする方法を提示してきました。全ての準備が整い、コンバートが成功したら、プロジェクト・データベースを使って作業を始めることができます。しかし、ここでいくつかの疑問が生じるかもしれません:データベース中の全てのファイルは役に立つのか?”.4DB”ストラクチャ・ファイルがもはや不要であることは明らかです。他のファイルを消去できるのでしょうか。
バイナリー・データベースでは、アプリケーションの定義は二つのファイル (.4DBと4DIndy)に保存されます。プロジェクト・データベースでは、このファイル中の定義は「Project」フォルダに保存されることに気がつくでしょう。
であれば、変換の後に以下のファイルを両方とも消去できます:
プロジェクト・データベースのアーキテクチャについて更に詳しくは、こちらのブログをチェックしてください。
開発段階では、データをストラクチャの隣に置くのが簡単でした(例:テスティング、他のコンピュータへ移動、など)。しかし、4Dの新しい機能の多くは特定のパラメータやファイルを保管するのに「データの隣」のコンセプトを使用しているため、開発テストで、ストラクチャの横のファイルではなく、データの横のファイルを使用していることを確認するにはどうすればよいでしょうか。
新しいプロジェクト・データベースでは、4Dは「Project」フォルダと同じ階層に「Data」フォルダを作成します。したがって、開発段階でも、データの横に置かれたファイルはストラクチャの横に置かれたファイルとは異なります。
そのため、コンバージョン後には下記のことをお勧めします:
4Dは4D環境に対するユーザー・プリファレンス、データベースにタイルするユーザー・プリファレンス、データベースの設定を持っています。
要約すると、4Dは「プリファレンス」という語をお互いに関連するユーザー・パラメータに対して使用し、「設定」という語はデータベースに関連するパラメータに使用しています。
より詳しくはこちらのブログをご覧ください。
このビデオでは、前回のブログでコンバートした”Contacts”データベースを使用します。
最初に、ダイヤグラム中の上記のコンセプトを繰り返し実行し、それから”Contacts”データベースを使って結果を示します。