我正在AX 2009上的表单上创建一个项目。有一个名为“SubsPersonName”的查找字段,它使用以下方法在ContactPerson表上执行查找。
public void lookup()
{
boolean ret;
Query query;
QueryBuildDataSource querybuilddatasource;
QueryBuildRange querybuildrange;
SysTableLookup sysTableLookup;
CustInvoiceAccount _thisinvoiceaccount = CustTable::find(CustTable::find(TTN_CustVendSubscriptions.AccountNum).InvoiceAccount).PartyId;
CustAccount _thisaccountnum = CustTable::find(TTN_CustVendSubscriptions.AccountNum).PartyId;
;
//TODO: Lookup value should read ContactPerson.Name, not ContactPerson.ContactPersonId
sysTableLookup = SysTableLookup::newParameters(tablenum(ContactPerson), this);
sysTableLookup.addLookupfield(fieldnum(ContactPerson, Name));
sysTableLookup.addLookupfield(fieldnum(ContactPerson, ContactPersonId), true);
sysTableLookup.addLookupfield(fieldnum(ContactPerson, CustAccount));
sysTableLookup.addLookupfield(fieldnum(ContactPerson, VendAccount));
query = new Query();
querybuilddatasource = query.addDataSource(tablenum(ContactPerson));
querybuildrange = querybuilddatasource.addRange(fieldnum(ContactPerson, Name));
querybuildrange = querybuilddatasource.addRange(fieldnum(ContactPerson, OrgPartyId));
if (!_thisinvoiceaccount)
_thisinvoiceaccount = _thisaccountnum;
querybuildrange.value(strfmt("%1,%2", _thisinvoiceaccount,_thisaccountnum));
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();
}
上面的代码工作正常,但我需要稍微调整一下。根据此代码,需要插入数据库的值是ContactPerson.ContactPersonId,但我希望表单中的字段显示ContactPerson.Name。
我意识到我可以使用显示方法来显示这个问题,根据这个问题:Axapta: Lookup field display the string value instead of the ID?,但这将涉及一个不必要的额外字段,如果可能的话,我想避免使用。
请有人指出我正确的方向吗?
答案 0 :(得分:3)
为了使ContactPersonId字段在查找中不可见,但仍将其保留为返回值,请更改类SysTableLookup
方法:
void addLookupfield(fieldId _fieldId, boolean _returnItem = false, boolean _visible = true)
{
lookupItems += [[_fieldId, _returnItem, '', _visible]];
}
同时更改buildGrid
方法以更改字段可见性。
然后改变你的代码:
sysTableLookup.addLookupfield(fieldnum(ContactPerson, ContactPersonId), true, false)
另见Axaptapedia。
答案 1 :(得分:0)
如果您将ContactPersonId
隐藏在调用表单中,请查看“联系”标签页中的CustTable
表单。
如表格ClassDeclaration
中所述:
字段
contactpersonId
隐藏在表单设计中,但必须是可用的 为了能够查找联系人姓名
字段editContactPersonName
的查找引用了隐藏的contactpersonId
字段:
void lookup()
{;
ContactPerson::lookupCustContactPerson(contactPersonId, custTable.AccountNum, this, custTable.ContactPersonId);
}