12.12.2006, 11:24 | #1 |
Участник
|
args.dataset() и args.record().tableid - могут ли отличаться?
В методе класса InventDimCtrl_Frm_Lookup.callerFormDatasource() обнаружил странный код:
X++: FormDataSource callerFormDatasource() { if (! fr.args()) return null; // Don't check on 'fr.args().record()' alone // Try test for dataset instead if (! fr.args().dataset()) return null; // Could be a buffer which isn't inserted yet if (! fr.args().record().tableId) return null; return fr.args().record().dataSource(); } PS. И почему вообще второй if раскрашен, как коментарий?.. |
|
12.12.2006, 11:30 | #2 |
Участник
|
fr.args().record().tableId возвращает идентификатор таблицы, здесь проверяется существование курсара передоного в args
return fr.args().record().dataSource(); вывод курсара |
|
12.12.2006, 11:37 | #3 |
Участник
|
А args().dataset() в нее передается информация о наборах данных, которые могут использоваться по умолчанию, зачем она там используется не знаю но если пошарится по АОТ то много подобного можно найти, я раза 4 натыкался на подобное
|
|
12.12.2006, 11:39 | #4 |
Участник
|
У меня, DAX 3.0 SP3 он не закоментирован
Возвращают они всегда одно и то же значение. (разве что, если попробовать явно указать что-то другое, не пробовал) Разница в том, что если курсор не передавался, то args().record().tableid вылетит с ошибкой времени выполнения, потому как Common record не инициализирован. (пытаемся обратиться к полю несуществюущего курсора) В то же время dataset возвращает просто tableId - поэтому это будет работать. Вот зачем там третья проверка как раз не совсем пойму - видимо таки, предполагалась возможность передачи разных чисел в dataset и record().tableId |
|
12.12.2006, 12:06 | #5 |
Участник
|
Я имел в виду то, как код отображается на форуме в тэгах XPP. У меня (Opera 9.02.8585, MSIE 6.0.3790.1830 SP1) в этом сообщении второй if раскрашен, как комментарий - ну да фиг с ним, я на stopbugs об этом написал.
Цитата:
Возвращают они всегда одно и то же значение. (разве что, если попробовать явно указать что-то другое, не пробовал).
Цитата:
Вот зачем там третья проверка как раз не совсем пойму - видимо таки, предполагалась возможность передачи разных чисел в dataset и record().tableId
|
|
06.08.2007, 13:21 | #6 |
Участник
|
Оказывается, такое бывает, что args.dataset() != args.record().tableId: это встречается тогда, когда дочерняя форма (или класс, или еще кто-то, кому передается Args), к примеру, вызывается на пустом grid'е. В моем случае при этом в args.record() ничего вообще не передавалось (что ожидаемо), в то время как args.dataset() возвращала tableId для таблицы основного datasource'а grid'а.
|
|
|
За это сообщение автора поблагодарили: e@gle (1), vladz (1). |
|
|