3

ウィザード ウィザードを使用して AX 2012 でウィザードを作成しました。ユーザー入力に基づいて FINISH ボタンを有効または無効にする機能を 1 つ追加する必要があります。

私はすでにこれらの3つの方法を試しましたが、成功しませんでした..

this.finishenabled() -- ウィザード クラスの SetupNavigation メソッドについて

finishenabled[formrun.tabidx()] = false -- ウィザード クラスの SetupNavigation メソッドで

syswizard.finishenable(false, curtabidx(),false) - ウィザードフォームのタブページ

誰かがこれに対する解決策を持っている場合は返信してください....

4

3 に答える 3

5

Wizard クラスには、次のことを行う検証メソッドがあります。

boolean validate()
{
    if(SomeTestCondition)
    {
        return true;
    }
    return false;
}

Microsoft によると、このメソッドは次のことを行います。

ユーザー入力を検証するために使用され、ウィザードが閉じられる前に呼び出されます。ユーザー入力が無効な場合は false を返します。これにより、ユーザーが [完了] ボタンをクリックしたときに run メソッドが呼び出されなくなります。 MSDN のウィザード クラス

さらに、検証するフィールドで textchanged() メソッドを使用できます (テキストでない場合は、オブジェクトの changed メソッドを使用できます)。

if (this.text())
{
    if   (!sysWizard.isNextEnabled())
    {
        sysWizard.nextEnabled(true,   sysWizard.curTab(), false);
    }
}
else
{
    if   (sysWizard.isNextEnabled())
        sysWizard.nextEnabled(false,   sysWizard.curTab(), false);
}

MSDN の有効化ボタンからも

于 2013-05-17T14:36:22.830 に答える
0

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());
}
于 2013-12-19T03:05:03.470 に答える