[英]Ax7 - Custom lookup in form datasource field
我正在嘗試在表單中的數據源字段中創建一個簡單的查找。
這些表和相關表格是 BankAccountTable。
1.- 將新字段 BullCust(擴展 EDT CustAccount)和字段組添加到新擴展 BankAccountTable.MyExtension。
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 中,這不再起作用。 嘗試了這種方法(基於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.- 創建了訂閱和鏈接相關事件的類擴展:
[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 版)
我不會使用類擴展來解決這個問題,而是使用控件的 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();
僅嘗試使用 FormControl 參數:
public void BankAccountTable_BullCust_OnLookup(FormControl _formControl)
{
//same code
}
我檢查了它並工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.