Цитата:
Сообщение от
mazzy
Пользователям то что нужно?
задание ставил консультант - что надо пользователям - не знаю - хотят фильтр!
И раз название темы всё таки "Как удалить datasource из Query"
Привожу полный
работающий код ещё раз:
X++:
public static Query deleteDataSource(Query query, QueryBuildDataSource dataSource)
{
Query result;
QueryBuildDataSource dSource;
int idx;
boolean isEqual(QueryBuildDataSource A, QueryBuildDataSource B) {
return (A.name() == B.name()) && (A.table() == B.table());
}
QueryBuildDataSource copyDataSource(QueryBuildDataSource dest, QueryBuildDataSource source) {
QueryBuildRange range;
int i;
for (i = 1; i <= source.linkCount(); i++) {
dest.addLink(source.link(i).field(), source.link(i).relatedField());
}
//31.08.2008 DMV-ruk added dynalinks
for (i = 1; i <= source.dynalinkCount(); i++) {
dest.addDynalink(source.dynalink(i).field(), source.dynalink(i).cursor(),source.dynalink(i).dynamicField());
}
for (i = 1; i <= source.rangeCount(); i++) {
range = dest.addRange(source.range(i).field());
range.value(source.range(i).value());
range.name(source.range(i).name());
range.status(source.range(i).status());
range.label(source.range(i).label());
range.enabled(source.range(i).enabled());
}
for (i = 1; i <= source.sortFieldCount(); i++) {
dest.addSortField(source.sortField(i), source.sortDirection(i));
}
for (i = 1; i <= source.sortIndexCount(); i++) {
dest.addSortIndex(source.sortIndex(i));
}
dest.fields().dynamic(source.fields().dynamic());
if (!dest.fields().dynamic()) {
dest.fields().clearFieldList();
for (i = 1; i <= source.fields().fieldCount(); i++) {
dest.fields().addField(source.fields().field(i), source.fields().fieldKind(i));
}
}
return dest;
}
void delete(QueryBuildDataSource topOrig, QueryBuildDataSource topRes) {
int i;
for (i = 1; i <= topOrig.childDataSourceCount(); i++) {
if (!isEqual(topOrig.childDataSourceNo(i), dataSource)) {
delete(topOrig.childDataSourceNo(i),
copyDataSource(topRes.addDataSource(topOrig.childDataSourceNo(i).table(), topOrig.childDataSourceNo(i).name()),
topOrig.childDataSourceNo(i)));
}
}
}
result = new Query();
for (idx = 1; idx <= query.dataSourceCount(); idx++) {
dSource = query.dataSourceNo(idx);
if (dSource.level() == 1) {
if (!(isEqual(dSource, dataSource))) {
delete(query.dataSourceNo(idx),
copyDataSource(result.addDataSource(query.dataSourceNo(idx).table(), query.dataSourceNo(idx).name()),
query.dataSourceNo(idx)));
}
}
}
return result;
}