2012-12-17 52 views
1

我已經使用嚮導>嚮導在Ax 2012中創建了一個嚮導,我從Custtablelistpage窗體調用此嚮導...現在,我已將一些控件放在此嚮導中,如CustAccount和我需要在此控制從選擇的記錄在Custtablelistpage形式初始化值.... 我試圖執行此使用的args類,但它不能正常工作,請提出了一些解決方案..初始化AX 2012嚮導控件中的值....

請創建一個使用工具>嚮導>嚮導 然後,請將該向導的菜單項放置在custtablelistpage的某個位置。 之後,請在嚮導的歡迎選項卡上放置一個名爲Customer account的字段。 現在,如果您有任何以custtablelistpage表單顯示的記錄,請選擇該記錄。 我的任務是當我點擊菜單項按鈕時,向我的嚮導顯示所選記錄的帳號,我把它放在custtablelistpage上。

其實,我寫了一些代碼,這是正常工作絕對正常的形式。但它不適用於嚮導,我無法在嚮導中對控件進行初始化。

+0

我們可以看到您的代碼示例嗎? – SShaheen

+0

[http://www.axaptapedia.com/Passing_values_between_forms]代碼類似於上面提到的鏈接...並且代碼在將所選記錄從custtablelistpage傳遞給正常表單時工作正常,但傳遞記錄或參數時不會到精靈....請創建一個嚮導,並將其用作custtablelistpage上的menuitembutton並自己嘗試,並讓我知道如果你找出問題..我會感激你.... –

+0

@SShaheen。你有沒有得到任何解決方案.. –

回答

3

好吧,我花了一些時間來嘗試一下,我有兩種可能的解決方案給你。

  • 您可以通過使用綁定控件做到這一點,通過在選定的記錄
  • 或者你可以使用一個數據源上選定的值嚮導的形式和過濾器上

首先,讓我們嘗試做它通過使用簡單的未綁定控件。首先向你的嚮導類添加一個CustTable成員變量和參數方法。

public class MyTestWizardWizard extends SysWizard 
{ 
    CustTable mySelectedCustomer; 
} 

public CustTable parmMySelectedCustomer(CustTable _mySelectedCustomer = mySelectedCustomer) 
{ 
    ; 
    mySelectedCustomer = _mySelectedCustomer; 
    return mySelectedCustomer; 
} 

然後在您的形式,可以覆蓋init方法並執行以下操作:

void init() 
{ 
    int     controlid; 
    FormStringControl fsControl; 
    ; 

    super(); 

    if (element.Args().caller()) 
    { 
     sysWizard = element.Args().caller(); 

     // Get the control id of the CustomerId control 
     controlid = element.controlId(formControlStr(MyTestWizardWizard, CustomerId)); 

     // Check if we actually have a form string control 
     if(element.control(controlid) is FormStringControl) 
     { 
      // Cast to the FormStringControl type 
      fsControl = element.control(controlid) as FormStringControl; 

      // Now fill in the field value 
      fsControl.text(sysWizard.parmMySelectedCustomer().AccountNum); 
     } 
    } 
    else 
    { 
     MyTestWizardWizard::main(new args()); 
     element.closeCancel(); 
    } 
} 

那麼你實際上在這裏做的只是獲取存儲在你所選擇的記錄嚮導類。然後我們檢查我們想要賦值的控件是否實際上是將該值放入的正確控件。

雖然這是行得通的,但我更喜歡第二種方法。這將是在表單上使用一個數據源,並將這個範圍放在選定的記錄上。只需將CustTable作爲數據源放置在窗體上,並按照通常的方式放置控件即可。

然後,確保在init方法進行底部的超()調用,以確保初始化完成後調用數據源方法之前:

void init() 
{ 
    ; 

    // make sure the sysWizard is already initialized before the super to make sure the init on the datasource has an instance of sysWizard 
    if (element.Args().caller()) 
    { 
     sysWizard = element.Args().caller(); 
    } 
    else 
    { 
     MyTestWizardWizard::main(new args()); 
     element.closeCancel(); 
    } 

    super(); 
} 

然後覆蓋上的數據源init方法把custTable的recId字段的範圍。 請注意,您可以在ExecuteQuery方法中指定範圍的值,但對於這種情況,我只是在這裏執行。

public void init() 
{ 
    ; 
    super(); 

    SysQuery::findOrCreateRange(this.query().dataSourceTable(tableNum(CustTable)), fieldNum(CustTable, RecId)).value(queryValue(SysWizard.parmMySelectedCustomer().RecId)); 
} 

現在正在運行嚮導時,該ARGS通過記錄你的精靈類,形式把它撿起對數據源的初始化,並提出了一系列對您所選擇的記錄。所有其他的魔法都是綁定數據控件的正常Ax行爲。

所以我希望這是你所需要的。如果您還有其他問題,請告訴我。