Biz/Browser AI独自機能

Q
Android端末の「戻る」ボタン(Backキー)押下時の制御 

A
Biz/Browser AI ver 1.0.2.0より追加された、RootクラスのBackKeyModeプロパティを利用する事で、Android端末の「戻る」ボタン(Backキー)押下時の制御が可能です。
(Biz/Browser AI Ver2.1.0以降ではKeyDownイベントが発生しないため、利用できません。)

BackKeyModeプロパティには4パターンの定数を指定でき、それぞれ以下のような動作を行います。
 
定数 動作※2
0 「戻る」ボタン押下で、ウィンドウを閉じます。
Root.ConfirmClose 1度目の「戻る」ボタン押下で終了確認メッセージを表示し、2度目の「戻る」ボタン押下でウィンドウを閉じます。
Root.RaiseKeyDown
※1
「戻る」ボタン押下で、KeyDownイベントを発行します。
OnKeyDownハンドラの記述がない場合は、ウィンドウを閉じます。
Root.ConfirmClose + Root.RaiseKeyDown
※1
1度目の「戻る」ボタン押下で終了確認メッセージの表示とKeyDownイベントの発行を行います。
OnKeyDownハンドラの記述がない場合は、2度目の「戻る」ボタン押下でウィンドウを閉じます。
 
※1 KeyDownイベントをOnKeyDownイベントハンドラで捕捉すると、ウィンドウを閉じる動作は行われません。 OnKeyDownイベントハンドラの処理後ウィンドウを閉じる場合は、イベントハンドラ内でPostEventメソッドを実行し、イベントを上位へ伝播させてください。
※2 「戻る」ボタン押下で、ウィンドウを閉じる際には、Closeイベントが発生します。このイベントをOnCloseイベントハンドラで捕捉すると閉じる動作はキャンセルされます。

A画面では”データの初期化”、B画面では”終了”のように設定するのであれば、以下のように、A画面には「Root.RaiseKeyDown」B画面には、「0」または「Root.ConfirmClose」でBackKeyModeプロパティを設定します。

[サンプルコード]
○pkg.crs
Package pkg {
  class myForm extends Form{
    /* KeyDownイベント発生時の共通処理 */
    Function OnKeyDown( e ) {
      if(e.key == "BACK_BTN"){
        
        /* myFormオブジェクト配下に存在するFlexViewを検索 */
        var flexview_obj = FindChild(FlexView);
        
        if(flexview_obj != null){
          /* 「戻る」ボタン押下時、 FlexViewの全行を削除*/
          flexview_obj.ClearRows();
        }
      }
    }
  }
}
○MyFormA.crs
import "pkg.crs";
//.BackKeyMode = Root.RaiseKeyDown;
myForm MyFormA {
	Width = 334;
	Height = 351;
	FlexView FlexView1 {
		X = 3;
		Y = 153;
		Width = 251;
		Height = 134;
		
		CursorColor = $FFCCFF;
		CursorLineOpacity = 0;
		
		FlexRecord FlexRecord1 {
			FlexLabel FlexLabel1 {
				Title = "商品コード";
			}
			FlexLabel FlexLabel2 {
				Width = 150;
				Title = "商品名";
			}
		}
	}
	Function init(){
		var data = new CSVDocument();
		data << CSV{
			A0001,リンゴ
			A0002,みかん
			C0101,スイカ
			C0102,メロン
			D0201,もも
		};
		FlexView1 << data;
	}
	
	if ( !$DESIGNTIME ) {
		init();
	}
}
○MyFormB.crs
import "pkg.crs";
//.BackKeyMode = Root.ConfirmClose;
myForm MyFormB {
	Width = 334;
	Height = 351;
	FlexView FlexView1 {
		X = 5;
		Y = 163;
		Width = 251;
		Height = 134;
		
		CursorColor = $CCFFFF;
		CursorLineOpacity = 0;
		
		FlexRecord FlexRecord1 {
			FlexLabel FlexLabel1 {
				Title = "商品コード";
			}
			FlexLabel FlexLabel2 {
				Width = 150;
				Title = "商品名";
			}
		}
	}
	Function init(){
		var data = new CSVDocument();
		data << CSV{
			E1001,目薬
			E1002,風邪薬
			E1003,胃腸薬
			F2002,湿布
			W2001,包帯
		};
		FlexView1 << data;
	}
	
	if ( !$DESIGNTIME ) {
		init();
	}
}


「MyFormA」・「MyFormB」ともにユーザ定義クラス「myForm」のオブジェクトのため、KeyDownイベントが発生すると、OnKeyDownイベントハンドラ内の処理が実行されます。

ですが、BackKeyModeプロパティに「Root.ConfirmClose」を設定すると、「戻る」ボタンを押下してもKeyDownイベントは発生しません。
よって、A画面では「戻る」ボタンを押下した際にFlexViewのデータ削除(データの初期化)を行いB画面ではウィンドウを閉じるといったように、「戻る」ボタンを押下した際の挙動を分ける事が可能となります。

また、B画面のBackKeyModeプロパティを「Root.RaiseKeyDown」へ変更すれば「戻る」ボタンの挙動をA画面と同様に設定する事も可能となりますので、例えば、同じ画面であってもシステムのログインユーザによってBackKeyModeプロパティの設定を変更すれば、「戻る」ボタンの動作をユーザごとに変更するといった実装も可能です。

CRSファイル形式のサンプル
  「Android端末の「戻る」ボタン(Backキー)押下時の制御(OrgAi_005.zip)
で実際の動作をご確認いただけます。

管理番号:OrgAi_005
  Biz-Collections Bizの宝箱 トップへ
  Biz/Browser HT・Biz/Browser SmartDevice・Biz/Browser AI TIPS集 トップへ