![]() |
#9 |
Боец
|
Цитата:
X++: // This method will traverse dynalinks on QueryBuildDataSource represented by _queryDynaBdsNo // and convert current dyna-record into ranges and values on that QueryBuildDataSource static client server void queryAddDynaCursorAsRangeAndValue( Query _query, // new query Query _queryDyna, // query having external links (=dyna links) Integer _queryDynaBdsNO // queryBuildDataSource on _queryDyna having external links ) { QueryBuildRange toQbr; QueryBuildDynalink qbDyna; Counter dynaLinkNo = 1; Counter toI; DictField dictField; Integer dictIndex; Integer originalId; Integer queryDsNO = _queryDynaBdsNO; fieldId id; ; if (!_queryDynaBdsNO) return; if (!_query || !_queryDyna) throw error(strfmt("@SYS23669",funcname())); if (!_queryDyna.dataSourceNo(_queryDynaBdsNO)) throw error(strfmt("@SYS23667",funcname())); if (_query.dataSourceCount() < _queryDynaBdsNO || _query.dataSourceNo(_queryDynaBdsNO).file() != _queryDyna.dataSourceNo(_queryDynaBdsNO).file()) { _query.addDataSource(_queryDyna.dataSourceNo(_queryDynaBdsNO).file()); queryDsNO = _query.dataSourceCount(); } while (dynaLinkNo <= _queryDyna.dataSourceNo(_queryDynaBdsNO).dynalinkCount()) { qbDyna = _queryDyna.dataSourceNo(_queryDynaBdsNO).dynalink(dynaLinkNo); id = fieldExt2Id(qbDyna.field()); originalId = id; toQbr = null; if (_query.dataSourceNo(queryDsNO).findRange(id)) { toI = 1; while (true) { toQbr = _query.dataSourceNo(queryDsNO).findRange(id,toI); if (!toQbr || !toQbr.value() || toQbr.value() == queryValue(qbDyna.cursor().(qbDyna.dynamicField()))) break; toI++; } } if (!toQbr || (toQbr && toQbr.value() && queryValue(qbDyna.cursor().(qbDyna.dynamicField())) && toQbr.value() != queryValue(qbDyna.cursor().(qbDyna.dynamicField())))) { // is this a Dimension field? dictField = new DictField(_query.dataSourceNo(queryDsNO).table(),id); if (dictField.arraySize() > 1) { // yes, working with Array field dictIndex = originalId >> 16; toQbr = _query.dataSourceNo(queryDsNO).addRange(fieldId2Ext(id, dictIndex)); } else { toQbr = _query.dataSourceNo(queryDsNO).addRange(id); } } if (toQbr) toQbr.value(queryValue(qbDyna.cursor().(qbDyna.dynamicField()))); dynaLinkNo++; } } |
|
|
За это сообщение автора поблагодарили: lev (2). |