Axapta Ax7-表单数据源字段中的自定义查找

Axapta Ax7-表单数据源字段中的自定义查找,axapta,dynamics-ax7,Axapta,Dynamics Ax7,我试图在表单中的数据源字段中创建一个简单的查找 这些表格和相关表格是BankAccountTable 1.-向新的扩展BankAccountTable.MyExtension添加了新的字段BullCust(扩展EDT CustAccount)和字段组 2.-创建了新的表单扩展BankAccountTable.MyExtension,并将新组添加到表单中 这样行。但是现在我想要一个更简单的查找。在Ax2012中,我将使用如下内容覆盖BankAccountTable\Datasources\Bank

我试图在表单中的数据源字段中创建一个简单的查找

这些表格和相关表格是BankAccountTable

1.-向新的扩展BankAccountTable.MyExtension添加了新的字段BullCust(扩展EDT CustAccount)和字段组

2.-创建了新的表单扩展BankAccountTable.MyExtension,并将新组添加到表单中

这样行。但是现在我想要一个更简单的查找。在Ax2012中,我将使用如下内容覆盖BankAccountTable\Datasources\BankAccountTable\BullCust\Lookup方法:

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中,这不再有效。尝试了这种方法(基于):

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.-创建订阅和链接预定事件的类扩展:

[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_扩展。正确调用了BankAccountTable_OnInitialized()。但是结果查找是标准的,而不是我的。 关于如何实现这一点,有什么想法或例子吗


(PS:VersionAX7 Platform Update 9)

我不会使用类扩展来解决这个问题,而是在控件的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();
    }
}
注意:如果正在显示/生成框架查找表单,则可能需要根据您的用例取消超级调用

使用:


这可能无法回答您的问题,但如果覆盖数据源字段的查找有困难,您可能会发现覆盖表单控件的查找更容易。其他一些留言板上报告了registerOverrideMethod的错误。这个答案是解决方法,如果表单在数据源上具有查找方法,那么答案的关键部分是取消超级调用。
  FormControlCancelableSuperEventArgs ce = e as FormControlCancelableSuperEventArgs;
  ce.CancelSuperCall();