アプリケーションでは、実行フローの変更が必要な場合があります。たとえば、アプリケーション内にウィザードがあり、ユーザーがフローを進めているときに、前に戻ってウィザードの別の手順に行くことを禁止するとします。これを実現するために、GeneXus にはアプリケーションのフローを管理するさまざまなイベントが提供されています。Back イベントは、このようなイベントの 1 つです。
Back イベントは、戻るボタンがクリックされたときに実行するアクションを定義するシステムイベントです。戻るボタンの動作を変更したり、直前のパネルを呼び出す前に確認のダイアログを表示したりするためによく使用されます。
Event
Back
<Event_code>
EndEvent
- Back イベントの本文は次のように制限されています:
- 戻るボタンを無効にするために、空のままにします。
- Return コマンドのみをプログラミングします (GeneXus 15 Upgrade 5 以降で有効)。その他のコードは使用できません。
この制限の理由は、Apple が開発者に Back アクションの既定の動作 (たとえば、Back の前にメッセージを表示する) を変更させることを許可していないからです。
- GeneXus 17 以降では、パネルが CallType.Popup および Large 以外 (すなわち、Small、Medium、Default のいずれか) の CallTargetSize で呼び出される場合、この上記の制限は適用されません。
その場合、開発者は、その呼び出しをどのように終了させるかを制御でき、Back イベントの制限はありません。
- UI オブジェクトが CallOption.Target = 'Blank' で呼び出されると、その場所に戻るボタンが配置されるため(1)、オブジェクトがアプリケーションバーの上部左側、つまり、 [ Position ] プロパティ = Custom (iOS) と top-left alignment、にアクションが含まれていないことを確認します。開発者がその場所にカスタムボタンを配置すると、戻るボタン (およびその右スワイプのジェスチャー) は無効になります。開発者は、必要に応じて「戻る操作」を実装する責任があります。
注:
(1) GeneXus 15 Upgrade 5 以前のバージョンでは、そのような戻るボタンは表示されません。
警告: すべての例は、上記の制限が適用されない場合、Android および iOS で説明されているとおりに機能しますが、1) および 2) の例のみ iOS では常に機能します。
Event Back
EndEvent
Event Back
Return
EndEvent
Event Back
Composite
Confirm("本当に戻ってもよろしいですか?")
Actions.Cancel()
EndComposite
EndEvent
Event Back
SDPanel.Call()
EndEvent
- ウィザードで既に完了したパネルをスキップする場合は、Back イベントでパネルを呼び出すのではなく、呼び出し元で CallOptions.Type = Replace を使用することをお勧めします。これにより、アプリケーションスタックの使用が最適化され、アプリケーションを操作する際に古いパネルが新しいパネルに置き換えられます。
- Back イベントが実装されていない場合、各プラットフォームで既定で SDActions.Cancel() メソッドの実行として動作します。そのような場合、呼び出し元オブジェクトの後続のコードは実行されません。
- 前述と異なり、Back イベントが Return コマンドを使って実装されている場合、呼び出し元オブジェクトの後続のコードは実行されます。たとえば、A および B という 2 つのパネルがあり、次のように、パネル A がパネル B を呼び出すとします。
Event 'Call_B' //
// ... B を呼び出す前の処理
B.Call()
msg("After calling B")
// ... B を呼び出した後の別の処理
EndEvent
B に Back イベントが実装されていない場合、または、
SDActions.Cancel() メソッドを使って実装されている場合は、呼び出し後にメッセージは表示されません。一方、
Return コマンドを使って Back イベントが実装されている場合は、パネル A にメッセージが表示されます。
- GeneXus 16 Upgrade 3 以降では、iOS 向けの戻るボタンの動作が変更されています。既定の戻るボタンをタップすると、SDPanel で実行中のアクションがキャンセルされるようになりました。SAC #45225 を参照してください。
- Return コマンド以降のコードは実行されません。