Qodly CloudはLinuxで動いているとのことですが,Linux版の4D Serverはリリースされないのでしょうか
そのような計画はありません。仮にLinux版の4D Serverが開発されたとしても,ホスティング環境や設定毎に継続的な専門サポートが絶対に必要となるため,運用コストが非常に高価になります。デベロッパーにとってのメリットはまったくありません。
オブジェクト名を使用したXLIFF(下記)は,タイトルが空白のオブジェクトには適用されません。ランタイムモードでスタティックテキストなどのオブジェクトにXLIFFリソースを表示させるためには,プロパティリストに空白以外のタイトルが設定されている必要があります。これは仕様です。
<group resname="[ProjectForm]">
<group resname="Form1">
<trans-unit resname="some_text">
<target>some_text</target>
</trans-unit>
</group>
</group>
Qodly for 4Dで開発したアプリケーションを運用するためには4D Serverとクライアント接続ライセンスが必要とのことですが,Webのような無制限接続ライセンスは使えないのでしょうか
Qodly for 4Dは,不特定多数の一般ユーザーがアクセスできるWebサイトを構築するためのツールではなく,ブラウザーをクライアントとして使用するスタイルのクライアント/サーバー版アプリケーションを開発するためのツールです。スタッフやマネージャーがタブレットやノートパソコンなどのデバイスを使用し,日常の業務に携われるようなWebアプリケーションをローコードで短期開発できることを目標としています。バックエンドは4D Serverアプリケーションなので,既存のビジネスロジックをそのまま流用することができ,必要であれば,ブラウザではなく,これまでどおり4D Remoteクライアントで接続することもできます。
とはいえ,大勢のスタッフが比較的短時間のセッションを頻繁に開始するようなシナリオで,全員分のクライアント接続ライセンスを用意するのは,とても現実的ではない,というケースがあるかもしれません。そのようなプロジェクトを検討されている場合,オーダーメイドのライセンス(OEM)契約を結ぶことができるかどうか,4D Japanの営業部までご相談ください。
Qodly for 4Dで開発したプロジェクト(たとえばトレーニングで使用したレンタカーのアプリケーション)をQodly Cloudに変換することはできるのでしょうか
クラウド版のQodly Server(Linuxプラットフォームで動作する軽量版の4D Server)は,バックエンドに4Dと同じデータベースエンジンを採用していますが,Windows/macOS版の4D Serverよりもできることが限られているため,Qodly for 4Dで開発したプロジェクトをQodly Cloudにそのまま変換することはできません。
Qodly Serverでアプリケーションが動作するためには,4Dではなく,QodlyScriptですべてがコーディングされていなければなりませんが,QodlyScriptでは下記のものが使用できません。
クラスAPIについては,SystemWorker, WebSocket, SMTPTransporterなど一部の例外を除き,基本的に4DとQodlyに共通です。
QodlyScriptは,4DとJavaScriptによく似たプログラミング言語です。4DとQodlyScriptを比較すると
が挙げられます。
QodlyのキーワードはJavaScriptと同じくECMAScriptに準拠しています。4Dのキーワードとは違い,①キャメルケースであり,②空白を含みません。また,一部のキーワードは統合されています。
4D | QodlyScript |
---|---|
If | if |
Else | else |
End if | end |
Case of | switch |
While | while |
End while | end |
For | for |
End for | end |
Repeat | repeat |
Until | until |
For each | forEach |
End for each | end |
Use | use |
End use | end |
Function | function |
Class extends | extends |
Class constructor | constructor |
var … : Text | var … : string |
var … : Date | var … : date |
var … : Time | var … : time |
var … : Boolean | var … : boolean |
var … : Integer | var … : integer |
var … : Real | var … : real |
var … : Picture | var … : picture |
var … : Blob | var … : blob |
var … : Collection | var … : collection |
var … : Object | var … : object |
var … : Variant | var … : variant |
#DECLARE | declare |
Alias | alias |
Try | try |
Catch | catch |
End try | end |
True | true |
False | false |
This | this |
4DとQodlyでは代入演算子および等価比較演算子が違います。
4D | QodlyScript |
---|---|
:= | = |
# | != |
Qodlyにはプロセス変数の概念がありません。変数のスコープは常にローカルです。変数名には,$
・ _
・Unicodeを使用することができますが,冒頭の文字に数字・$
を使用することはできません。
4D | QodlyScript |
---|---|
$myVar | myVar |
Qodlyの定数名は,k
から始まり,キーワード同様にキャメルケースであり,空白を含みません。また,ASCIIコードのTab
など,リテラル表記で代用できるものは除かれています。
4D | QodlyScript |
---|---|
4D REST digest | k4DRESTDigest |
Tab | 9 |
Qodlyのパラメーター区切りはカンマ記号です。
4D | QodlyScript |
---|---|
; | , |
4Dでは単純に左から右に向かって演算子を評価しますが,QodlyではECMAScriptと同じように演算子を評価します。
4D | QodlyScript |
---|---|
3+10*2=26 | 3+10*2=23 |
将来のバージョンでは
モードが提供される予定です。
また,4DからQodlyに対してOpen datastoreを使用することができるように,Qodlyから4Dに対してもopenDatastore()
が実行できるようになる予定です。
Qodly for 4DとQodly CloudのWebForm は互換性があるので,一方のQodly Studioから他方のQodly Studioにコピー&ペーストすることができます。
4DのストラクチャとQodlyのモデルは同じものではありません。しかし,相違点には法則性があるので,変換プログラムを開発できるかもしれません。
フォームオブジェクトのデータソースには,Form.object.property
のようなオブジェクト記法を設定することができます。スカラー型の変数やフィールドであれば,値を更新した直後のイベントサイクルでフォームオブジェクトが再描画されます。しかし,オブジェクトは参照型なので,プロパティの値を更新しても,オブジェクト自体が更新されるわけではありません。
過剰な再描画を避けつつ,値の更新を逃さないようにするため,4Dは内部的に更新スタンプを管理しています。それぞれのプロパティには更新スタンプが存在し,値が更新されると,スタンプがインクリメントされるようになっています。加えて,オブジェクト自体にも更新スタンプが存在し,いずれかのプロパティが更新されると,インクリメントされるようになっています。
4Dは,フォームを再描画するタイミングになると,まず,データソースの更新スタンプが変化しているかどうかをチェックします。プロパティのスタンプが変化していない場合,今度はオブジェクト自体のスタンプをチェックします。スタンプが変わっていないフォームオブジェクトは再描画されません。
問題は,オブジェクト型の計算属性です。計算属性は,実際のプロパティではないため,Function set
で値を更新しても,スタンプがインクリメントされることはありません。他に更新したプロパティがなければ,オブジェクト自体のスタンプもインクリメントされません。そのため,属性に値を代入してもフォームが再描画されない,という現象が起きます。
フォームオブジェクトのデータソースに計算属性を使用している場合,このことに留意する必要があります。シンプルな対策として計算属性のFunction set
で内部的な実際のプロパティ(たとえばThis._stamp
)をインクリメントすることができます。計算属性にはスタンプがありませんが,同時に別のプロパティを更新するように計算属性を仕込んでおけば,オブジェクト自体のスタンプがインクリメントされ,実際のプロパティと同じように再描画されるようになります。
SET AUTOMATIC RELATIONS
のスコープは「カレントプロセス」です。クライアント側でリレーション設定を変更した場合,その絵設定は「サーバー上で実行」メソッドを実行するサーバー側の同期プロセスには継承されません。これは仕様です。
(このコマンド)はカレントプロセスでデータベース全体のマニュアルリレートを一時的に自動リレートに変更します。
サーバー側の同期プロセスに継承され,「サーバー上で実行」メソッドやトリガで暗黙的に使用できるのは,セットと命名セレクション,ロックされたレコードやトランザクションの状態です。その他の情報(カレントセレクションなど)は,クライアント側とサーバー側で別々に管理されている点に留意してください。
4D View Pro(SpreadJS)は,Webエリア内で動作するアプリケーションなので,Webエリアに共通の制限が存在します。たとえば,セキュリティ上の理由により,キーボードショートカット入力中は標準ペーストボードにアクセスすることが禁止されているので,外部アプリケーションからコピーした画像をView Proエリアにペーストすることはできません。また,キーボードショートカットであれば外部アプリケーションからコピーしたテキストをペーストすることができますが,コンテキストメニューではペーストすることができません。これは仕様です。