2013-05-15 140 views
3

我已經使用嚮導嚮導在AX 2012中創建了一個嚮導...現在我需要將1個功能,即基於用戶輸入啓用或禁用FINISH按鈕。根據用戶輸入啓用/禁用嚮導的FINISH按鈕

我已經嘗試這3種方式,但沒有成功..

this.finishenabled() - 對嚮導類的SetupNavigation方法

finishenabled [formrun.tabidx()] = FALSE - 上精靈類的SetupNavigation方法

syswizard.finishenable(假,curtabidx(),false) - 在嚮導的形式

請不要回復的標籤頁,如果任何人有一個解決方案....

回答

5

嚮導類有一個validate方法中,你會做到以下幾點:

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

據微軟稱,這種方法執行以下操作:

用於驗證用戶輸入,並呼籲前嚮導關閉。 如果用戶輸入無效,則返回false。這將防止在用戶單擊完成按鈕時調用運行方法。 Wizard Class on MSDN

此外,還可以使用框TextChanged()方法,您要驗證的字段(或者如果沒有文字,你可以使用對象的改變方法)。

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

另外,從MSDN Enable Buttons

+0

感謝您的答覆。其實我需要禁用完成按鈕特別是...我很清楚驗證並禁用下一步。 Bt特別是如何禁用FINISH按鈕? –

+0

底部,解釋了這一點。您可以根據用戶輸入禁用finsh按鈕。如果完成按鈕是下一個按鈕,然後SysWizard.nextEnabled將引用finsihed按鈕 –

+0

@ michael ...我明白,但在FINISH頁面,不工作的情況下.. –

0

在SysWizard類的檢查,以啓用/禁用finishButton爲this.hasFinishButton()的檢查(參見SysWizard.enableButtons)的內部。

我通過覆蓋嚮導類中的hasFinishButton()方法並設置ret = true來克服此問題。但是,這確實意味着您的完成按鈕將在所有步驟中顯示,但您可以根據需要使用其他代碼隱藏該按鈕。

0

啓用/禁用從SysWizard類調用的嚮導窗體上的完成按鈕最簡單的方法是使用FormControlId從FormRun對象中檢索FormControl對象,然後根據您的測試條件設置Enabled屬性,例如作爲另一個FormControl是否包含一個值。有很多方法可以實現這一點。我會舉兩個例子。

在第一個示例中,所有修改均在嚮導窗體上完成。 使用FormControl可以像AutoDeclaration屬性設置爲Yes的任何FormControl一樣調用。 在第二個示例中,我將覆蓋我的Wizard類中的finishEnabled()方法,因此它的行爲方式與預期相同。

在每個示例中,使用將控件的標籤文本(「Finish」)作爲參數的FormControlId來找到formControl。我在代碼編輯器中通過在「完成」上執行「查找標籤/文本」來找到正確的標籤ID,然後使用標籤的描述中的「嚮導中的標籤完成按鈕」選擇SYS標籤。

實施例1:嚮導窗體上FormControl對象:

在窗體classDeclaration添加以下內容:

class FormRun extends ObjectRun 
{ 
    //FormControl objects used to get SysWizard Finish Button 
    FormControlId finishButtonId; 
    FormControl  finishButton; 
} 

初始化在頂層表格的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);  
} 

現在,您可以像使用任何其他窗體控件一樣使用控件。在這種情況下,我使用的命名IsFinished在我WizardForm作爲測試條件複選框控件的狀態,並從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不能正確創建方法簽名。擺脫默認調用超與下面的代碼替換:

public boolean finishEnabled(boolean _enabled = false, 
          int  _idx  = this.curTab(), 
          boolean _setfocus = false) 
{ 
    return this.formRun().control(this.formRun().controlId("@SYS302811")).enabled(_enabled); 
} 

初始化表單的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()); 
}