Biz/Browser V互換モード

概要

Biz/Browser DT(以下DT)には初版よりBiz/Browser Vエミュレータ機能が搭載されています。


これはBiz/Browser V実行環境そのものをDTのタブに埋め込む形で動作しており、実行エンジンレベルで完全に独立して動作します。

この方式は高い後方互換性と引き替えにDTの機能を利用することができない弊害がありました。


バージョン1.3.0より、DTの実行エンジン上でBiz/Browser XE(以下XE)用に開発されたアプリケーションを動作させる方法として、互換モードおよび互換パッケージ(クラスライブラリ)が追加されています。

またバージョン1.4.0より、Biz/Browser V(以下V)用に拡張されたバージョンが搭載されています。

../_images/compatible1.png

実行エンジンの互換モード

VとDTの実行エンジンの動作差異を緩和するモードです。


DTでは実行エンジンに様々な改良が施されているため、Vとはスクリプトの実行結果が異なる部分があり、それを旧バージョンと同等の解釈に補正します。


互換クラスライブラリ

Vのクラスセットを再現するライブラリです。


DTでは既存のクラスセットを統廃合し、高機能かつ、シンプルで分かり易い体系に再構成を行いました。


しかしそのため、VのアプリケーションをDTで実行した場合、そのままではクラスが存在しない、プロパティが存在しない、などのエラーが発生し動作させることができません。


Vと同等の機能のクラスやプロパティを実装したクラスセットをDTのクラスセットを拡張する形で実現したものがV互換クラスライブラリとなります。

Vのアプリケーションは互換クラスを介しDTの機能を実行する形となります。

構造上、アプリケーションはVの機能(互換クラスライブラリ)とDTクラスライブラリの双方の機能を利用することが可能です。


またスクリプトの実行、オブジェクト描画もDTのエンジンにより実行されるため、最新の実行環境で既存のアプリケーションを動作させることが可能となります。


互換クラスライブラリ専用定数


バージョン1.4.5より互換ライブラリ実行時は定数 $COMPAT_VERSION に互換ライブラリのバージョン番号が設定されるようになりました。

これにより互換ライブラリ上で実行されているかどうかの判定、また互換ライブラリのバージョンにより処理を分岐させる、などに利用することが可能です。


制約事項

Biz/Browser Vまでの既存の製品では、Windows専用アプリケーションという特性を活かし、Windows固有の機能を活用するように設計されています。


しかし、DTはマルチプラットフォームを指向して開発されており、OS固有の機能差異を無くすため、OS固有機能をなるべく使用しないように設計されています。

そのため、Windows固有の機能を活用した一部の機能は互換クラスライブラリでは再現できません。

互換モードでの初期化

下記、いずれの場合も、初期化時に実行エンジンが互換モードに設定され、自動的に互換クラスライブラリがimportされ、名前空間の指定なしに使用可能な状態(using namespace CRS::Compatible::V51::*された状態)になります。


逆に標準のDTクラスセットのusing namespace指定は解除されますので、互換モード上でDTのクラスを使用する場合は明示的に名前空間を指定する必要があります。

V互換モードでのアプリケーション実行方法

ログイン画面からの実行

../_images/compatible2.png

DT起動時のログイン画面にて、「V互換パッケージ」オプションを選択し、VアプリケーションへのURLを入力し実行します。


Application.loginメソッドからの実行

TARGET_COMPATTAB (新しくタブを開いて実行)または、 TARGET_COMPATWINDOW (新しくウィンドウを開いて実行)オプションを指定します。


コーディング例:

Form frmVLogin {
        x = 0;
        y = 0;
        width = 800;
        height = 600;

        if (!Application.DESIGNTIME) {
                # ここに初期化処理を記述してください。
                Application.login("http://aries/biz/TestSuite41/login.crs", Application.TARGET_COMPATTAB);
        }
}

コマンドラインオプションによる互換モード指定

ショートカットなどの引数として -compatBizV を指定すると、V互換モードとしてDTが起動します。

Biz/Designer DTでの編集、デバッグ

プロジェクト設定

[Biz/Browser V互換モード]チェックをONにした場合、プロジェクト全体をVアプリケーションプロジェクトと見なし、ファイル編集、テスト実行を互換モードで実行します。


旧Biz/Designerプロジェクトのインポート

[既存のプロジェクトを開く...]でBiz/Designer XEまたはBiz/Designer Vで作成されたプロジェクト(bdpファイル)を指定した場合、自動的に[Biz/Browser V互換モード]がチェックされた状態でインポートされます。


bdpファイルは[ファイル名].bakへリネームされ、新しいDT用のプロジェクトファイルに変換されます。


現状プロジェクト個人設定ファイル(bdlファイル)はインポート対象外となりますので、個人設定ファイルに記載されている一部の設定はインポート対象外となります。

V互換モードとBiz/Browser Vとの差異、制限事項

V互換モードはDTのエンジンとクラスライブラリ上で動作しているため、DTの振る舞い・動作に依存する部分があります。


以下、主な差異について記載します。


  • 実行エンジンの動作差異

  1. ガベージコレクションの実行タイミングの違い

    オブジェクトが破棄されることを期待したコーディングは動作タイミングが変わる可能性があります。

    例えばFileオブジェクトなどをCloseせず、スコープを抜けた場合、従来とファイルがクローズされるタイミングが変化する可能性があります。


  2. コンストラクタの引数の厳密化

    Biz/Browser V以前のエンジンではコンストラクタ引数のチェックが緩く、コンストラクタの引数の個数が仕様通りでない場合もエラーとならず動作してしまうケースがありました。

    DTではコンストラクタ引数も厳密に個数のチェックが行われるため、仕様外のコンストラクタ引数を定義している場合エラーとなります。


  3. プロパティ属性の変更

    Biz/Browser V以前のエンジンではプロパティ属性として、生成時(定義時)のみ書き込み可能な属性がありました。

    DTでは定義時のみ書き込み可能な属性は撤廃されたため、生成後も変更可能となっています。


  4. 代入文での暗黙のnew

    Biz/Browser V以前では代入文においてnewを省略する記法が可能でしたが、DTではこの記法は非推奨となります(Biz/Designer DT上では警告表示されます)。

    例:

    var s = String("文字列"); /* new String("文字列")と等価 */
    

  5. 参照演算のタイミング

    Biz/Browser V以前では参照演算の再評価を常時行いますが、DTではパフォーマンス向上のため変更された変数に関してのみ行うため、常時更新されることを意図した式は期待した結果とならない場合があります。

    例:

    value &=  ^.object.calculateValue();
    

    右辺に更新対象の変数がないため、DTでは初回のみ実行されます。


  6. イベントの発生

    イベント発生契機、イベント発生元はクラス派生元のDT実装クラスの発生に依存します。


    DTではクラス別にばらつきのあったイベントを統一化しており、そのためVでは発生しなかったイベントが発生する可能性があります。

    イベントオブジェクトの内容はVと互換性を持つよう調整されますが、上記の通り発生元(fromプロパティ)は元のDT実装クラスに依存します。


  7. IMEの確定タイミング

    IME未確定状態で他のオブジェクトへフォーカスを移動した場合、Vでは入力がキャンセルされますが、DTでは入力確定されます。


  • DTの構造による動作差異

  1. Rootオブジェクト

    VではRootオブジェクトはメインウィンドウを表していますが、DTではRootオブジェクトはタブ内の範囲を表します。


    そのためRootに対して実行するプロパティ、メソッドに関して反映される動作が異なるものがあります。


    また、RootオブジェクトにはV固有の制御機能が実装されており、現状では以下の機能は未対応です。

    プロパティ

    AltKeyPriority

    InputTimeout

    ExtConnection

    AcceptDrop

    ShellId

    Embedded

    メソッド

    PrintScreenMask

    SetIcon

    SLogin

    PostShellEvent


    FrameWindowへのフォワード処理

    以下のプロパティ、メソッドの実行においてRootオブジェクトが存在するウィンドウ(FrameWindow)へ処理がフォワードされます。

    プロパティ

    X

    Y

    Width

    Height

    Active

    Visible

    ReSize

    MaximizeBox

    MinimizeBox

    CloseBox

    ControlBox

    TitleBar

    Icon

    メソッド

    ShowMenu

    SetMenu

    フォワード処理を抑止したい場合、Application.setPropertyメソッドでグローバル設定"app.compat_bizv.forward_root_to_frame"に対しfalseを設定します。

  2. XML DOMエンジンの差異

    DTとVで内蔵されるXML DOMエンジンの仕様が異なるため、XMLの規約としては同等の結果でありつつも、実行結果に微細な差異が発生する場合があります。


  3. ウィンドウ制御

    Windows APIによりウィンドウを直接制御するVと異なり、マルチOS共通の制御を行うDTでは、ウィンドウ最大化などの制御、ウィンドウボタンの制御などに、設定順序や組み合わせの制約があります。


  4. ファイル処理

    マルチOS共通化のため、ファイルシステムからWindows固有の詳細な情報を取り出すことはできません。

    またファイルのロック処理などが異なる場合があります。


  5. ふりがな入力処理

    IMEの入力に関してWindows APIを直接制御しているVと異なり、マルチOS共通ライブラリ経由で制御するDTではふりがな入力処理(TextBox.SetIMECompObjectメソッド)に関して詳細な編集操作は行えません。


  6. 暗号化CARファイル

    Vで暗号化されたCARファイルはWindows固有の暗号化アルゴリズムで暗号化されているため、互換モードでは読み込むことができません。


  7. サポートされる画像フォーマット

    マウスカーソル用のWindows固有フォーマットであるcur・aniファイル、アイコン画像用のicoファイルを読み込むことはできません。


  8. Dialogオブジェクトのモーダル・モードレス動作

    VではDialogオブジェクトがモーダルとモードレスの中間の状態(ウィンドウの切り替えはできるが、ウィンドウ内のオブジェクトを操作できない)でしたが、DTでは一般的なモーダルウィンドウとして表示されます。


  9. Internet Explorer連携機能

    Windows固有機能であるInternet Explorerとの連携機能は使用できません。


  10. 接続ライセンス

    接続ライセンスに関してはVのものではなくDTの接続ライセンスが必要となります。


  11. 値から文字列への変換ルールの違い

    値から文字列(String型)へ代入を行う際、自動的に文字列化が行われます。


    その際の変換ルールがVとDTで異なります。


    Vでの文字列

    DTでの文字列

    null値

    null

    (null)

    ""(空文字)

    ブール値

    true

    1

    true

    false

    0

    false


  12. キー入力の優先度

    キー入力を行った場合のKeyDownイベントの発生、オブジェクトでのキー処理、AltKeyプロパティ、NextTabKeyプロパティなどの優先順位がVと異なります。


  • 表示の差異

  1. UIデザイン

    UIのデザインは基底クラスであるDTのオブジェクトのものが使用されるため、Vの画面とは意匠が異なります。


  2. 改行文字の扱い

    文字列表示の際、VではCR・LFの2文字の文字コードで改行表示が行われますが、DTでは文字列内にLF単独の文字であっても改行処理が行われます。

    Root.PasteStringメソッドにて取得した文字列に改行コードが含まれている場合はLFの1文字に統一されます。


  3. 改行、ワードラップの差異

    フォントサイズの差異、ワードラップの基準文字の違いから、折り返しが発生するテキスト表示が異なる場合があります。


  4. TabFrameクラスの複数行タブモード

    Vで使用できたTabFrameクラスの複数行タブモード(Arrangement=$MULTILINE)はDT搭載の描画ライブラリの制約上サポートされていません。


  5. TypeSetterクラスでのフォント制限

    互換TypeSetterクラスではTerminalなどのビットマップフォントはサポートされません(正常なサイズでの表示ができません)。


  6. STreeクラスでの接続線表示の制限

    STreeクラスの基底クラスとなっているDTのTreeViewクラスではツリーの接続線表示を行うスタイルはありませんが、Vでの表現に近づけるため擬似的にツリーの接続線表示を行っています。

    しかしあくまでも擬似的な表示のためルートアイテムから上方への接続線が表示されます。


  • サポート対象外クラス

    互換クラスライブラリでは、過去の実績より使用頻度が高いと思われるクラスを厳選し搭載しています。

    使用率、重要度が低いと判断された下記のクラスはバージョン1.0.6ではサポート対象外となっています。

    一部のクラスは、実行時エラーを避けるためクラス定義のみが実装されていますが、実行しても結果を得ることはできません。

    パッケージ

    クラス

    Standard

    Graph

    GraphAxis

    GraphSeries

    Mail

    Smtp

    Pop3

    MailMessage

    MailHeader

    MultiPartMessage

    MultiPartMessagePart