2017-09-26 71 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();