簡體   English   中英

Ax7 - 表單數據源字段中的自定義查找

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM