2017-09-26 73 views
1

我試圖在表單中的數據源的字段中創建一個簡單的查找。Ax7 - 表單數據源字段中的自定義查找

表格和相關表格是BankAccountTable。

1.-將新字段BullCust(擴展EDT CustAccount)和字段組添加到新擴展BankAccountTable.MyExtension。

2.-創建了新的表單擴展BankAccountTable.MyExtension並添加了新的表單組。

這工作正常。但現在我想要一個更簡單的查找。在Ax2012,我會覆蓋BankAccountTable \數據源\ BankAccountTable \ BullCust \查找方法,像這樣的東西:

public void lookup(FormControl _formControl, str _filterStr) 
{ 
    Query     query = new Query(); 
    QueryBuildDataSource queryBuildDataSource; 
    SysTableLookup   sysTableLookup; 

    sysTableLookup = SysTableLookup::newParameters(tableNum(ExcEC_DocuTypeTable), _formControl); 
    queryBuildDataSource = query.addDataSource(tableNum(CustTable)); 

    sysTableLookup.addLookupField(fieldNum(CustTable, AccountNum)); 
    sysTableLookup.addLookupField(fieldNum(CustTable, Party)); 
    sysTableLookup.addLookupField(fieldNum(CustTable, RecId)); 

    sysTableLookup.parmQuery(query); 
    sysTableLookup.performFormLookup(); 
} 

在AX7這不工作了。嘗試這種方法(基於https://ievgensaxblog.wordpress.com/2016/05/01/ax-7-how-to-override-form-data-source-field-methods-without-overlaying/):

3.-管理類創建查找:

public class BullFormBankAccountTable_Handler 
{ 
public static BullFormBankAccountTable_Handler construct() 
{ 
    return new BullFormBankAccountTable_Handler(); 
} 

public void BankAccountTable_BullCust_OnLookup(FormDataObject _formDataObject, FormControl _formControl, str _filterStr) 
{ 

    Query     query = new Query(); 
    QueryBuildDataSource queryBuildDataSource; 
    SysTableLookup   sysTableLookup; 

    sysTableLookup = SysTableLookup::newParameters(tableNum(BullDocuTypeTable), _formControl); 
    queryBuildDataSource = query.addDataSource(tableNum(CustTable)); 

    sysTableLookup.addLookupField(fieldNum(CustTable, AccountNum)); 
    sysTableLookup.addLookupField(fieldNum(CustTable, Party)); 
    sysTableLookup.addLookupField(fieldNum(CustTable, RecId)); 

    sysTableLookup.parmQuery(query); 
    sysTableLookup.performFormLookup(); 
} 
} 

4.-類創建擴展,簽約和鏈接apropiated事件:

[ExtensionOf(formStr(BankAccountTable))] 
final public class BullFormBankAccountTable_Extension 
{ 
[FormDataSourceEventHandler(formDataSourceStr(BankAccountTable, BankAccountTable), FormDataSourceEventType::Initialized)] 
public static void BankAccountTable_OnInitialized(FormDataSource _sender, FormDataSourceEventArgs _e) 
{ 
    var overrider = BullFormBankAccountTable_Handler::construct(); 

    _sender.object(fieldNum(BankAccountTable, BullCust)).registerOverrideMethod(methodStr(FormDataObject, lookup), 
     methodStr(BullFormBankAccountTable_Handler, BankAccountTable_BullCust_OnLookup), overrider); 
} 

} 

而且沒有結果。我調試過了,BullFormBankAccountTable_Extension.BankAccountTable_OnInitialized()被正確調用。但是最終的查找是標準查找,而不是礦山查找。 有關如何執行此操作的任何想法或示例?

(PS:版本AX7平臺更新9)

+0

這可能不回答你的問題,但你可能會發現更容易覆蓋表單控件的查找,如果你有困難,壓倒一切的數據源字段的查詢。 – 10p

回答

0

我不會用一個類擴展到解決這個問題,而是在控制的OnLookup事件的事件處理程序。只需訂閱該事件並在某些事件處理程序類中進行處理即可。

這是您的潛在代碼示例。我這裏假設數據源場「BullCust」也是窗體上的控制,這將覆蓋表單控件,而不是數據源場

public class YourEventHandlers 
{ 
    [FormControlEventHandler(formControlStr(BankAccountTable, BullCust), FormControlEventType::Lookup)] 
    public static void PWSCertificateProvince_OnLookup(FormControl sender, FormControlEventArgs e) 
    { 
     Query     query = new Query(); 
     QueryBuildDataSource queryBuildDataSource; 
     SysTableLookup   sysTableLookup; 


     sysTableLookup = SysTableLookup::newParameters(tableNum(BullDocuTypeTable), sender); 
     queryBuildDataSource = query.addDataSource(tableNum(CustTable)); 

     sysTableLookup.addLookupField(fieldNum(CustTable, AccountNum)); 
     sysTableLookup.addLookupField(fieldNum(CustTable, Party)); 
     sysTableLookup.addLookupField(fieldNum(CustTable, RecId)); 

     sysTableLookup.parmQuery(query); 
     sysTableLookup.performFormLookup(); 
    } 
} 

注意:您可能需要根據超級呼籲取消你的用例,如果有一個框架查找表單被顯示/生成。

用途:

FormControlCancelableSuperEventArgs ce = e as FormControlCancelableSuperEventArgs; 
    ce.CancelSuperCall();