Показать сообщение отдельно
Старый 13.03.2009, 16:00   #1  
Maximin is offline
Maximin
NavAx
NavAx Club
 
415 / 361 (13) ++++++
Регистрация: 09.10.2002
Адрес: Москва
relatedField и field у QueryBuildLink
Вот нашел в Ax4.0 интересный глючок, и, как мне кажется, этого в 3ке не было, впрочем, меня поправят если что...

Если у какого-либо подчиненного QueryBuildDataSource в сложном запросе попросить его link (QueryBuildLink), а у того спросить relatedField(Table) и field(Table) (поле по которому связаны соотв. родительский и сам этот текущий datasource), то в качестве related (родительского поля/таблицы) будет возвращен текущий (т.е. подчиненный), а в качестве исходного - родительский.
В частности, это может служить объяснением, почему везде в SQL запросах (или их визуализации, т.е. при отладке, скажем, если посмотреть на FormBuildDatasource ) в условиях связки таблиц переставлены местами поля связок.
У меня Ax 4.0 клиент SP0 kernel 4.0.2163.0 на БД MS SQL Server версию не скажу .
См. job.
X++:
static void testQueryBuildLink(Args _args)
{
    Query                q1;
    QueryBuildDataSource qbds1, qbds2;
    QueryBuildLink       qbdl;
    container            qrPacked, RangePacked;
    ;
    q1    = new Query();
    qbds1 = q1.addDataSource(tablenum(InventTrans));
    qbds2 = qbds1.addDataSource(tablenum(InventTable));
    qbds2.relations(false);
    qbdl = qbds2.addLink(fieldnum(InventTrans, ItemId), fieldnum(InventTable, ItemId));

    info(strfmt("Связь - %1 %2", tableid2name(qbdl.table()), fieldid2name(qbdl.table(), qbdl.field())));
    info(strfmt("к related %1 %2", tableid2name(qbdl.relatedTable()), fieldid2name(qbdl.Relatedtable(), qbdl.relatedField())));
}
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...