Axapta 使用AddLookupMethod

Axapta 使用AddLookupMethod,axapta,x++,Axapta,X++,我有一个由填充了ProjTable查询的代码创建的查找。我想在此查找中添加一个字段,该字段是ProjTable(displayCustName)上的一个显示方法,用于从CustTable中检索与查找的相对合同相关的每个客户的名称 我发现我可以使用“AddLookupMethod”来实现这一点,它将字段添加到查找中,但为空。我不知道如何正确使用它,有什么帮助吗 谢谢。您在评论中链接到的问题基本上包含了答案,但没有说得很清楚 简言之,如果要对SysTableLookup实例使用addLookupMe

我有一个由填充了ProjTable查询的代码创建的查找。我想在此查找中添加一个字段,该字段是ProjTable(displayCustName)上的一个显示方法,用于从CustTable中检索与查找的相对合同相关的每个客户的名称

我发现我可以使用“AddLookupMethod”来实现这一点,它将字段添加到查找中,但为空。我不知道如何正确使用它,有什么帮助吗


谢谢。

您在评论中链接到的问题基本上包含了答案,但没有说得很清楚

简言之,如果要对
SysTableLookup
实例使用
addLookupMethod
,则必须确保还使用
addLookupField
添加查找方法所需的字段

另一种解决方案是编写自己的查找方法,首先使用
RecId
使用查找方法检索表的记录,然后使用该记录的数据检索查找方法的返回值

public void lookup()
{
    SysTableLookup       sysTableLookup;
    Query                query;
    QueryBuildDataSource qbds;

    sysTableLookup = sysTableLookup::newParameters(tableNum(ProjTable), this);
    query = new Query();
    qbds = query.addDataSource(tableNum(ProjTable));
    sysTableLookup.parmQuery(query);

    sysTableLookup.addLookupfield(fieldNum(ProjTable, ProjId));
    /* option 1: add the CustAccount field to the lookup so it can be used by the custName method
    sysTableLookup.addLookupfield(fieldNum(ProjTable, CustAccount));
    sysTableLookup.addLookupMethod(tableMethodStr(ProjTable, custName));
    */
    // option 2: write your own lookup method
    sysTableLookup.addLookupMethod(tableMethodStr(ProjTable, myCustName));

    sysTableLookup.performFormLookup();
}
选项2的显示方法:

/// <summary>
///    Retrieves the customer name.
/// </summary>
/// <returns>
///    The name of the customer.
/// </returns>
display CustName myCustName()
{
    ProjTable projTable;

    // the ProjTable record referenced by 'this' will not contain the field CustAccount
    // if this method is called by a SysTableLookup instance that does not explicitely 
    // contain CustAccount as lookup field
    // therefore the ProjTable record must be reselected using RecId
    select firstOnly CustAccount from projTable where projTable.RecId == this.RecId;
    return CustTable::find(projTable.CustAccount).name();
}
//
///检索客户名称。
/// 
/// 
///客户的姓名。
/// 
显示CustName myCustName()
{
可预测的可预测的;
//“this”引用的项目记录将不包含字段CustAccount
//如果SysTableLookup实例调用此方法,而该实例不明确
//包含CustAccount作为查找字段
//因此,必须使用RecId重新选择可预测记录
从projTable中选择firstOnly CustAccount,其中projTable.RecId==this.RecId;
返回custable::find(projTable.custcount).name();
}

这可能有关系吗?查找是否包含显示方法所需的字段?如果不包含,您链接到的问题提供了答案:您必须在查找中包含display方法所需的字段,或者重写display方法,以便它首先使用RecId检索整个ProjTable记录,然后使用此记录检索display方法值。您应该发布一些代码,展示您所做的工作