|
|
#1 |
|
Участник
|
В методе класса 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 раскрашен, как коментарий?.. |
|
|
|
|
#2 |
|
Участник
|
fr.args().record().tableId возвращает идентификатор таблицы, здесь проверяется существование курсара передоного в args
return fr.args().record().dataSource(); вывод курсара |
|
|
|
|
#3 |
|
Участник
|
А args().dataset() в нее передается информация о наборах данных, которые могут использоваться по умолчанию, зачем она там используется не знаю но если пошарится по АОТ то много подобного можно найти, я раза 4 натыкался на подобное
|
|
|
|
|
#4 |
|
Участник
|
У меня, DAX 3.0 SP3 он не закоментирован
Возвращают они всегда одно и то же значение. (разве что, если попробовать явно указать что-то другое, не пробовал) Разница в том, что если курсор не передавался, то args().record().tableid вылетит с ошибкой времени выполнения, потому как Common record не инициализирован. (пытаемся обратиться к полю несуществюущего курсора) В то же время dataset возвращает просто tableId - поэтому это будет работать. Вот зачем там третья проверка как раз не совсем пойму - видимо таки, предполагалась возможность передачи разных чисел в dataset и record().tableId |
|
|
|
|
#5 |
|
Участник
|
Я имел в виду то, как код отображается на форуме в тэгах XPP. У меня (Opera 9.02.8585, MSIE 6.0.3790.1830 SP1) в этом сообщении второй if раскрашен, как комментарий - ну да фиг с ним, я на stopbugs об этом написал.
Цитата:
Возвращают они всегда одно и то же значение. (разве что, если попробовать явно указать что-то другое, не пробовал).
Я знаю только способ через передачу табличной переменной в качестве аргумента record().Цитата:
Вот зачем там третья проверка как раз не совсем пойму - видимо таки, предполагалась возможность передачи разных чисел в dataset и record().tableId
При этом в комментарии есть явное указание на такую ситуацию: когда запись в буфере еще не вставлена в таблицу. Так вот, сталкивался кто-нить с таким или нет?
|
|
|
|
|
#6 |
|
Участник
|
Оказывается, такое бывает, что args.dataset() != args.record().tableId: это встречается тогда, когда дочерняя форма (или класс, или еще кто-то, кому передается Args), к примеру, вызывается на пустом grid'е. В моем случае при этом в args.record() ничего вообще не передавалось (что ожидаемо), в то время как args.dataset() возвращала tableId для таблицы основного datasource'а grid'а.
|
|
|
|
| За это сообщение автора поблагодарили: e@gle (1), vladz (1). | |
|
|
|