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