Dynamics AX 2009: отображение имени вместо идентификатора в поле поиска - PullRequest
3 голосов
/ 29 ноября 2011

Я создаю проект в 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: в поле «Уточняющий запрос» отображается строковое значение вместо идентификатора? , но это будет включать в себя ненужное дополнительное поле, которого я бы хотел избежать, если это возможно.

Пожалуйста, кто-нибудь может указать мне правильное направление?

Ответы [ 2 ]

3 голосов
/ 29 ноября 2011

Чтобы сделать поле 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 .

0 голосов
/ 30 ноября 2011

Если вы говорите о сокрытии ContactPersonId в форме вызова, тогда посмотрите на форму CustTable на вкладке "Контакты".

Как указано в формах ClassDeclaration:

Поле contactpersonId скрыто в дизайне формы, но должно быть доступно, чтобы можно было искать по имени контакта

Поле editContactPersonName имеет поиск со ссылкой на скрытое поле contactpersonId:

void lookup()
{;
    ContactPerson::lookupCustContactPerson(contactPersonId, custTable.AccountNum, this, custTable.ContactPersonId);
}
...