我试图在表单中的数据源的字段中创建一个简单的查找。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)
这可能不回答你的问题,但你可能会发现更容易覆盖表单控件的查找,如果你有困难,压倒一切的数据源字段的查询。 – 10p