03.08.2012, 08:40 | #1 |
Мрачный тип
|
Недоступность источника данных формы в display/edit-методах таблицы - баг или фича с глубоким смыслом?
В стандартных табличных методах, которые инициируются пользовательскими действиями при работе с данными таблицы на форме, является доступным источник данных формы.
В пользовательских табличных методах, вызываемых на формах при обращении к табличной переменной источника данных, является доступным источник данных формы. В табличных display/edit-методах, при их вызове на таблице в момент обновления контролов формы, завязанных на источник данных с использованием этой таблицы, источник данных формы недоступен. Есть какие-нибудь идеи по поводу причин такой дискриминации по отношению к этим методам ? P.S. Эта тема последовательно вышла отсюда. Исследуется возможность заменить N однотипных display/edit-методов таблицы, работающих на поле с EDT-массивом размерностью N и отличающихся друг от друга только индексом обрабатываемого поля внутри EDT-массива, одним display/edit-методом, определяющим внутри себя этот индекс на основании связи "табличный метод >> источник данных >> форма >> вызывающий контрол"
__________________
Мы летаем, кружимся, нагоняем ужасы ... Последний раз редактировалось TasmanianDevil; 03.08.2012 в 08:58. |
|
|
За это сообщение автора поблагодарили: S.Kuskov (1). |
03.08.2012, 09:56 | #2 |
Участник
|
Каким образом будет работать кэширование display-методов (а их "обсчет" в принципе может выполняться на сервере), если им будет доступен источник данных формы?
|
|
03.08.2012, 10:14 | #3 |
Участник
|
А можно ли display-метод сделать клиентским? Не поможет?
|
|
03.08.2012, 10:23 | #4 |
Участник
|
Не указывать модификатор server для метода или указать client - будет выполняться на клиенте (для 2009-й, по крайней мере).
Только сторона выполнения, в данном случае, не имеет никакого значения, так же как и возможность кэширования (при чем здесь оно вообще? Метод же в любом случае будет вызван для стороки таблицы, хоть и один раз.). Просто, при создании табличной переменной для вызова дисплейного метода не стали привязывать ее к датасорсу. Почему так было сделано - мне не ведомо
__________________
Axapta v.3.0 sp5 kr2 |
|
03.08.2012, 11:50 | #5 |
Мрачный тип
|
gl00mie, вот тут у меня пробел имеет место быть в точном понимании механики работы в трехзвенки - живем до сих пор на тройке в двухзвенной архитектуре и только готовим переход на трехзвенку в 2009-ую.
Я почему-то считал и пока продолжаю считать (вполне возможно, что не понимаю истинной картины и заблуждаюсь), что независимо от модификатора client/server у display/edit-метода таблицы, равно как от отсутствия такого модификатора, при вызове такого метода на табличной переменной источника данных формы, кеширование и само исполнение данного метода будут исполняться на клиенте (формы живут на клиенте, источник данных есть внутренний объект формы, табличная переменная источника данных тоже внутренний объект формы и метод таблицы добавляется к механизму кэширования методом датасорса - т.е. все живет на клиенте). Тем не менее, понимаю, что display/edit-метод может исполняться на сервере, если он был вызван в каком-либо методе какого-либо класса, исполняемого на сервере. Исходя из этих предпосылок, я считал, что :
Не расскажите ли по-подробнее или может ткнете пальцем где подробно можно этот момент изучить ? P.S. Все методы не имеют явного модификатора места исполнения, т.е. по моему скромному разумению имеют эквивалент CalledFrom. Т.е. выполняются там, откуда вызваны - а вызываются они с формы, т.е. на клиенте.
__________________
Мы летаем, кружимся, нагоняем ужасы ... Последний раз редактировалось TasmanianDevil; 03.08.2012 в 11:59. |
|
03.08.2012, 12:06 | #6 |
Мрачный тип
|
Цитата:
Если да - жуть , мрак !!!
__________________
Мы летаем, кружимся, нагоняем ужасы ... Последний раз редактировалось TasmanianDevil; 03.08.2012 в 12:10. |
|
03.08.2012, 12:11 | #7 |
Участник
|
Что в данном случае имеется в виду под копией?
Да, создается новая табличная переменная, которая не привязана датасорсу и к серверному курсору, в которую копируются данные из кэша датасорса. Табличная переменная на форме в это время живет своей жизнью и содержит данные из текущей записи датасорса
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: sukhanchik (2). |
03.08.2012, 12:23 | #8 |
Мрачный тип
|
AndyD, именно это я и имел ввиду (новая табличная переменная, копия содержимого локальной).
На первый взгляд оно, конечно, странно весьма, но тут уже ничего не поделаешь. Ладно, остановимся на том, что есть ... Огромное спасибо на наставление на путь истинный!!! P.S. Жадный форум не дает горку плюсиков отсыпать одному и тому же участнику чаще, чем раз в три дня
__________________
Мы летаем, кружимся, нагоняем ужасы ... |
|
03.08.2012, 12:35 | #9 |
Участник
|
Цитата:
Это хорошо заметно на дисплейном методе на датасорсе - переменная, передаваемая в него и переменная на форме содержат разные данные Другой вопрос, почему привязку к датасорсу не восстанавливают для нее, но тут, возможно, ограничения внутренней реализации этой самой привязки
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: TasmanianDevil (3). |
03.08.2012, 13:01 | #10 |
Мрачный тип
|
Цитата:
Все теперича встало на свои места в голове
__________________
Мы летаем, кружимся, нагоняем ужасы ... |
|
03.08.2012, 15:00 | #11 |
Участник
|
Цитата:
Сообщение от TasmanianDevil
Я почему-то считал, что независимо от модификатора client/server у display/edit-метода таблицы, равно как от отсутствия такого модификатора, при вызове такого метода на табличной переменной источника данных формы, кеширование и само исполнение данного метода будут исполняться на клиенте
Цитата:
Cached methods perform calculations on fetched data, and then the calculated values are passed to the client together with the data.
|
|
|
За это сообщение автора поблагодарили: TasmanianDevil (3). |
Теги |
display метод, edit метод, formdatasource, isformdatasource, кэширование |
|
|