AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.04.2005, 10:55   #1  
Red Stranger is offline
Red Stranger
Участник
 
102 / 19 (1) ++
Регистрация: 01.04.2005
Не корректно отображаюстя данные
Доброго всем времени суток.

У меня следующая проблема:
Я создал ди сплей метод на ДС. Метод должен в каждой строке грида добавить поле в котором отображается наименование номенклатуры.

Вот код
PHP код:
display ItemName GetItemName()
{
    
ItemName ret;
    ;
    
ret InventTable::find(InventJournalTrans.ItemId).ItemName;
    return 
ret;

Собственно проблема в том, что при открытии формы у всех записей в гриде одно и тоже наименование номенклатуры. И если произвести щелчек на записи, то у записи в которую устанавливается курсор наименоваие корректно обновляется, а у которой курсор теряется наименование принимает значение наименования записи куда перешел курсор.

Всем заранее спасибо.
Старый 20.04.2005, 11:03   #2  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
1) find тащит целиком всю запись - посчитайте кол-во байт в курсоре InventTable и ужаснитесь
2) InventName - очень часть используемый display метод, так что напишите его на ТАБЛИЦЕ:
PHP код:
display ItemName itemName()
{
    return this.ItemName;

3) Не забудьде его закэшировать в форме.

С Уважением,
Георгий.
Старый 20.04.2005, 11:14   #3  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
Если дисплэй метод объявляется не на таблице, то в качестве параметра должен передоваться курсор.
PHP код:
display ItemName GetItemName(InventJournalTrans _inventJournalTrans
Старый 20.04.2005, 11:16   #4  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Эх. Читайте Developer's Guide что ли для начала.

mk:@MSITStore:C:\Program%20Files\Navision\Client\Bin\AxDvgFormsUs.chm::/Designing_forms/FORM_Using_display_and_edit_method_mo.htm

Цитата:
The exception to this is when you define display on a form data source method. If you choose to write a display method on a form data source, you must include the data source as parameter, for example
PHP код:
display InventQty Accumulated(InventBudgetInvent Budget
which is a method on the data source for the InventBudgetInvent form.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 20.04.2005, 11:17   #5  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
Ну зачем Вам эти дисплейные методы в случаях, когда можно замечательно и без них
Две таблицы соединить что-ли сложно? Поручите работу серверу БД, получите шустренькую форму, а в качестве бонуса возможность фильтровать по ItemName

1. Закинуть на форму датасорс по InventTable
2. Сделать ему InnerJoin на таблицу в которой есть ItemId
3. Поставить в свойствах датаорса AllowEdit, Create, Delete в No
4. Поставить в свойствах датасора OnlyFetchActive в Yes
5. Перекрыть на датасорсе методы след образом
public void delete()
{
}
public boolean validateWrite()
{
return true;
}
public void write()
{
}
public boolean validateDelete()
{
return true;
}
6. На write датасорса в котром есть ItemId написать где нито после super()

InventTable.data(InventTable::find(Моя_Таблица_C_ItemId.ItemId));
InventTable_DS.setCurrent();

7. Затащить из датасорса нужные поля в нужные места

все
Старый 20.04.2005, 11:21   #6  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Изначально опубликовано George Nordic
2) InventName - очень часть используемый display метод, так что напишите его на ТАБЛИЦЕ
Самое интересное, что на большинстве таблиц он уже есть. Проверьте
Цитата:
Изначально опубликовано George Nordic
3) Не забудьде его закэшировать в форме.
А вот к кэшированию я бы призвал Вас относиться осторожнее. Не кэшируйте методы, если Вы не уверены полностью в том, что Вы делаете. Если Вы все-таки кэшируете метод, предусматривайте возможность для пользователя сбросить кэш не закрывая форму (если это возможно, конечно). Тщательно тестируйте формы с кэшируемыми методами, так как кэширование широко не использовалось, и проблемы, которые могут быть вызваны кэшированием, до конца не изучены Например, кэшируемые методы иногда ведут себя не так, как хотелось бы, в случае, если для DataSource StartPosition = Last.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 20.04.2005, 11:23   #7  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Изначально опубликовано db
Две таблицы соединить что-ли сложно?
Не всегда это просто. Хотя в целом согласен.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 20.04.2005, 11:37   #8  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Цитата:
Изначально опубликовано db
1. Закинуть на форму датасорс по InventTable
2. Сделать ему InnerJoin на таблицу в которой есть ItemId
... получите шустренькую форму
Уп-с!
Как ни странно, многоуважаемый db, в данном случае позволю себе с Вами не согласиться: я не думаю, что джойня иннерджоином InventTable, Вы получите "шустренькую" форму
Единственный плюс - сортировка по имени. Да и то, довольно сомнительный... Только если невозможно найти по коду...

С Уважением,
Георгий
Старый 20.04.2005, 11:41   #9  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
А Вы не думайте, Вы попробуйте
Старый 20.04.2005, 11:42   #10  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Изначально опубликовано George Nordic
я не думаю, что джойня иннерджоином InventTable, Вы получите "шустренькую" форму
Теоритически, выполнение одного запроса, хоть и сложного, должно происходить быстрее, чем множества простых запросов. Хотя признаюсь, сравнительного тестирования я никогда не делал.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 20.04.2005, 11:43   #11  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Цитата:
Изначально опубликовано Maxim Gorbunov
А вот к кэшированию я бы призвал Вас относиться осторожнее. Не кэшируйте методы, если Вы не уверены полностью в том, что Вы делаете. Если Вы все-таки кэшируете метод, предусматривайте возможность для пользователя сбросить кэш не закрывая форму (если это возможно, конечно). Тщательно тестируйте формы с кэшируемыми методами, так как кэширование широко не использовалось, и проблемы, которые могут быть вызваны кэшированием, до конца не изучены Например, кэшируемые методы иногда ведут себя не так, как хотелось бы, в случае, если для DataSource StartPosition = Last.
Вах, шайтан! Если бы кто другой сказал...
Заронил ты в мою душу сомнения, Максим!
Пока глюков не было у нас.. хотя половина форм (большая) - StartPosition = Last.

С Уважением,
Георгий
Старый 20.04.2005, 11:45   #12  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
А насчет поиска, юзерам сами как нибудь вразумительно объясните, почему по этому полю нельзя ничего найти. Если они вас после этого не порвут на части, то будут не правы
Старый 20.04.2005, 11:48   #13  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Цитата:
Изначально опубликовано db
А Вы не думайте, Вы попробуйте
Я тут часть полей самопальных, очень больших (адреса доставки/грузополучателя/отправителя, примечания и прочую мишуру, которую только в отчетах нужна) вынес с SalesTable в новую таблицу - SalesTableNotes..
При innerJoine SalesTable (форма) умерла. При delayed - все ок. А так - очень долго загружается....
Хотя delayActive тоже вроде выставлял... Шайтан!

С Уважением,
Георгий.
Старый 20.04.2005, 11:51   #14  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Изначально опубликовано George Nordic
Пока глюков не было у нас.. хотя половина форм (большая) - StartPosition = Last
Там были проблемы, связанные с тем, что Аксапта кэшировала значения методов не только для тех записей, которые попадали в display-cache.

Просто посмотри, для каких записей реально происходит кэширование.
В целом: оно, конечно, работает, но с ним надо осторожней
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 20.04.2005, 11:52   #15  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Цитата:
Изначально опубликовано db
А насчет поиска, юзерам сами как нибудь вразумительно объясните, почему по этому полю нельзя ничего найти. Если они вас после этого не порвут на части, то будут не правы
Не, тут с Вами согласен на 100%
Жопа та еще. Если нет возможности закодировать номенклатуру, то поиск...
Еще один выход (убогий, крайний вариант) - хранить еще и itemName

С Уважением,
Георгий.
Старый 20.04.2005, 11:52   #16  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
Цитата:
Изначально опубликовано George Nordic

Я тут часть полей самопальных, очень больших (адреса доставки/грузополучателя/отправителя, примечания и прочую мишуру, которую только в отчетах нужна) вынес с SalesTable в новую таблицу - SalesTableNotes..
При innerJoine SalesTable (форма) умерла. При delayed - все ок. А так - очень долго загружается....
Хотя delayActive тоже вроде выставлял... Шайтан!

С Уважением,
Георгий.
еще раз
4. Поставить в свойствах датасора OnlyFetchActive в Yes

в результате имеем не a join b
а
a join ItemName from b

то есть тащатся ттолько данные из полей, привязанных к контролам и никакие больше. В данном случае только ItemName
Старый 20.04.2005, 11:53   #17  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Изначально опубликовано George Nordic
При innerJoine SalesTable (форма) умерла. При delayed - все ок. А так - очень долго загружается....
Хотя delayActive тоже вроде выставлял... Шайтан!
Посмотри, на что расходуется время. Если на выполнение запроса на SQL, то надо смотреть, что там с индексами. Если клиент долго работает, значит Аксапта действительно криво join обрабатывает. Тогда надо смотреть запросы, которые генерит форма, и пытаться ее заставить генерировать правильные запросы (тут уже могут быть варианты, как говорится ).
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 20.04.2005, 11:59   #18  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Цитата:
Изначально опубликовано db
то есть тащатся ттолько данные из полей, привязанных к контролам и никакие больше. В данном случае только ItemName
Да-да, согласен!
Только вот они все нужны были, для заполнения

С Уважением,
Георгий.

2 Maxim Gorbunov: Да, от тюнинга никуда не уйти
Старый 20.04.2005, 12:39   #19  
Red Stranger is offline
Red Stranger
Участник
 
102 / 19 (1) ++
Регистрация: 01.04.2005
Всем спасибо за помощь, но мне мой начальник не разрешил использовать присоединение таблиц => пришлось все display - методом делать.
Старый 20.04.2005, 12:59   #20  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
Цитата:
Изначально опубликовано Red Stranger
Всем спасибо за помощь, но мне мой начальник не разрешил использовать присоединение таблиц => пришлось все display - методом делать.
Начальнику конечно виднее
Станешь начальником, научись слушать подчиненных
Теги
display метод, ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Бинарные данные в Axapta Lucky13 DAX: Программирование 4 07.04.2007 11:51
Данные из всех компаний zipo DAX: Программирование 18 16.05.2006 23:26
Демо-данные как начальные настройки Sharf2000 DAX: Функционал 12 29.06.2004 16:07
Неправильно выбираются данные через query Pegiy DAX: Программирование 2 11.06.2004 16:43
Данные из Tmp таблицы в QueryRun на форме Berty Wooster DAX: Программирование 1 23.09.2003 10:10

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:00.