SysWizard クラスから呼び出されたウィザード フォームの [Finish] ボタンを有効/無効にする最も簡単な方法は、FormControlId を使用して FormRun オブジェクトから FormControl オブジェクトを取得し、別の FormControl かどうかなどのテスト条件に基づいて Enabled プロパティを設定することです。値が含まれています。これを実装するには多くの方法があります。例を 2 つ紹介します。
最初の例では、すべての変更はウィザード フォームで行われます。AutoDeclaration プロパティが Yes に設定されている FormControl と同様に呼び出すことができる FormControl が使用されます。2 番目の例では、Wizard クラスの finishEnabled() メソッドをオーバーライドして、期待どおりに動作するようにします。
各例では、formControl は、コントロールのラベル テキスト ("Finish") を引数とする FormControlId を使用して検出されます。コード エディターで [Finish] の [Lookup Label/Text] を実行して正しいラベル ID を見つけ、ラベルの説明で [Wizard の [Label for Finish] ボタン] を含む SYS ラベルを選択しました。
例 1:ウィザード フォームの FormControl オブジェクト:
Form classDeclaration に以下を追加します。
class FormRun extends ObjectRun
{
//FormControl objects used to get SysWizard Finish Button
FormControlId finishButtonId;
FormControl finishButton;
}
最上位の Form init() メソッドで新しい FormControl を初期化します。
void init()
{
super();
if (element.Args().caller())
{
sysWizard = element.Args().caller();
}
finishButtonId = sysWizard.formRun().controlId("@SYS302811");
finishButton = sysWizard.formRun().control(finishButtonId);
finishButton.enabled(false);
}
これで、他のフォーム コントロールと同じようにコントロールを使用できます。この場合、WizardForm で IsFinished という名前のチェックボックス コントロールの状態をテスト条件として使用し、IsFinished.clicked() メソッドから FormControl の状態を更新しています。
public void clicked()
{
super();
//set FormControl state based on the current value of the checkbox
finishButton.enabled(this.checked());
}
*例 2: * Wizard クラスで finishEnabled() メソッドをオーバーライドします。
メソッド パラメーターの既定値を設定する必要があることに注意してください。そうしないと、基本クラスのシグネチャと一致しないため、AX はコンパイル エラーをスローします。何らかの理由で、AX はメソッド シグネチャを適切に作成しません。super へのデフォルトの呼び出しを取り除き、以下のコードに置き換えます。
public boolean finishEnabled(boolean _enabled = false,
int _idx = this.curTab(),
boolean _setfocus = false)
{
return this.formRun().control(this.formRun().controlId("@SYS302811")).enabled(_enabled);
}
Form init() メソッドでコントロール値を初期化します。
void init()
{
super();
if (element.Args().caller())
{
sysWizard = element.Args().caller();
}
sysWizard.finishEnabled();
}
コントロールが更新されたら、クラス メソッドを呼び出します。
public void clicked()
{
super();
//set FormControl state based on the current value of the checkbox
sysWizard.finishEnabled(this.checked());
}