15.11.2006, 12:18 | #1 |
Banned
|
Display methods in AutoLookup, EntireTable
Читаю "Inside Axapta 4.0", вспомнил одну коллизию и захотел поделиться.
АКС позволяет добавлять вычисляемые поля в группу AutoLookup и показывать их в выпадающем списке. Как-то раз надо было реализовать поведение, типичное для SAP - многоязычные описания. Есть простая таблица TableX.TypeXId, TableX.Descrption. Только Descrption нужно выводить на польском, английском или немецком в зависимости от языка интерфейса. Best practice - это присоединить таблицу LanguageTxt, связав ее по RecId. Написал display-метод для основной таблицы, который читает описания из LanguageTxt на нужном языке. Добавил метод в AutoLookup, открываю, а поле пустое. Как выяснилось, ядро системы слишком умное. Оно читает для выпадающего списка только те поля, которые показывает, т.е. только TableX.TypeXId, а мне нужно еще TableX.RecId, чтобы правильно отработал display-метод. Решение для коротких таблиц - кеширование. К сожалению, режим CacheLookup=Found не помогает, поскольку в lookup'ах, как известно, создается два курсора TableX.TypeXId < "controlText" и TableX.TypeXId >= "controlText". На условиях ">" или "<" кэш не срабатывает, ему нужно "==". Только при CacheLookup=EntireCache ядро передает в список lookup все поля, включая RecId, при всех условиях выборки. |
|
|
За это сообщение автора поблагодарили: gl00mie (3), longson (2). |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|