03.09.2015, 16:52 | #1 |
Участник
|
Несколько источников для QueryBuildDataSource
Доброго времени суток!
Пытаюсь повторить SQL запрос в коде: PHP код:
X++: Query q; QueryRun queryRun; QueryBuildDataSource qbDCN; QueryBuildDataSource qbDHL; QueryBuildDataSource qbDCC; QueryBuildDataSource qbDA; DimensionAttribute da; q = new Query(); qbDCN = q.addDataSource(tablenum(DimensionConstraintNode)); qbDCN.relations(false); qbDHL = qbDCN.addDataSource(tablenum(DimensionHierarchyLevel)); qbDHL.relations(false); qbDHL.addLink(fieldNum(DimensionConstraintNode,DimensionHierarchyLevel),fieldNum(DimensionHierarchyLevel,RecId)); qbDHL.joinMode(JoinMode::InnerJoin); qbDCC = qbDCN.addDataSource(tablenum(DimensionConstraintNodeCriteria)); qbDCC.relations(false); qbDCC.addLink(fieldNum(DimensionConstraintNode,RecId),fieldNum(DimensionConstraintNodeCriteria,DimensionConstraintNode)); qbDCC.joinMode(JoinMode::InnerJoin); qbDA = qbDHL.addDataSource(tablenum(DimensionAttribute)); qbDA.relations(false); qbDA.addLink(fieldNum(DimensionHierarchyLevel,DimensionAttribute),fieldnum(DimensionAttribute,RecId)); qbDA.joinMode(JoinMode::InnerJoin); |
|
03.09.2015, 17:17 | #2 |
Участник
|
А так?
X++: qbDHL.joinMode(JoinMode::InnerJoin);
qbDHL.fetchMode(QueryFetchMode::One2One); // <-- |
|
03.09.2015, 17:24 | #3 |
Участник
|
По дебаггеру после выполнения данного кода:
X++: qbDHL = qbDCN.addDataSource(tablenum(DimensionHierarchyLevel)); qbDHL.relations(false); qbDHL.addLink(fieldNum(DimensionConstraintNode,DimensionHierarchyLevel),fieldNum(DimensionHierarchyLevel,RecId)); qbDHL.joinMode(JoinMode::InnerJoin); X++: qbDCC = qbDCN.addDataSource(tablenum(DimensionConstraintNodeCriteria)); qbDCC.relations(false); qbDCC.addLink(fieldNum(DimensionConstraintNode,RecId),fieldNum(DimensionConstraintNodeCriteria,DimensionConstraintNode)); qbDCC.joinMode(JoinMode::InnerJoin); Цитата:
qbDHL.joinMode(JoinMode::InnerJoin);
qbDHL.fetchMode(QueryFetchMode::One2One); // <-- |
|
03.09.2015, 17:30 | #4 |
Участник
|
Попробуйте джоинить не в параллель, а каскадом.
X++: qbDCN = q.addDataSource(tablenum(DimensionConstraintNode)); ... qbDHL = qbDCN.addDataSource(tablenum(DimensionHierarchyLevel)); ... qbDCC = qbDHL.addDataSource(tablenum(DimensionConstraintNodeCriteria)); ... |
|
03.09.2015, 17:34 | #5 |
Участник
|
Пробовал. Тогда :
X++: qbDCC.addLink(fieldNum(DimensionConstraintNode,RecId),fieldNum(DimensionConstraintNodeCriteria,DimensionConstraintNode)); DimensionHierarchyLevel.RecId = DimensionConstraintNodeCriteria.DimensionConstraintNode а должно быть DimensionConstraintNode.RecId = DimensionConstraintNodeCriteria.DimensionConstraintNode |
|
03.09.2015, 17:56 | #6 |
Участник
|
Я и не меняю. Оно по умолчанию хватает как родителя последнего добавленного. И в итоге портит условие соединения в запросе
|
|
03.09.2015, 17:58 | #7 |
Участник
|
X++: qbDCC.addLink(fieldNum(DimensionConstraintNode,RecId),fieldNum(DimensionConstraintNodeCriteria,DimensionConstraintNode), qbDCN.name()); |
|
03.09.2015, 17:59 | #8 |
Участник
|
Странно, но заработало так как вы говорили:
X++: qbDHL = qbDCN.addDataSource(tablenum(DimensionHierarchyLevel)); qbDHL.relations(false); qbDHL.addLink(fieldNum(DimensionConstraintNode,DimensionHierarchyLevel),fieldNum(DimensionHierarchyLevel,RecId)); qbDHL.joinMode(JoinMode::InnerJoin); qbDHL.fetchMode(QueryFetchMode::One2One); qbDCC = qbDCN.addDataSource(tablenum(DimensionConstraintNodeCriteria)); qbDCC.relations(false); qbDCC.addLink(fieldNum(DimensionConstraintNode,RecId),fieldNum(DimensionConstraintNodeCriteria,DimensionConstraintNode)); qbDCC.joinMode(JoinMode::InnerJoin); qbDCC.fetchMode(QueryFetchMode::One2One); Последний раз редактировалось syl; 03.09.2015 в 18:17. |
|