Решено Объединить данные view

  • Автор темы JohnLemon
  • Дата начала
J

JohnLemon

Как можно в репите или во вьюшке в xPages получить из такой вью
[xtable=145x65]
{tbody}
{tr}
{td}Вата{/td}
{td} 10{/td}
{/tr}
{tr}
{td} Вата{/td}
{td} 20{/td}
{/tr}
{tr}
{td} Нож{/td}
{td} 10{/td}
{/tr}
{tr}
{td} Вата{/td}
{td} 10{/td}
{/tr}
{tr}
{td} Нож{/td}
{td} 20{/td}
{/tr}
{/tbody}
[/xtable]
Такую таблицу
[xtable=177x44]
{tbody}
{tr}
{td}Вата{/td}
{td} 40{/td}
{/tr}
{tr}
{td} Нож{/td}
{td} 30{/td}
{/tr}
{/tbody}
[/xtable]
Вообще не могу догнать как объединять данные во view :nailbiting:
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
45
Как можно в репите или во вьюшке в xPages получить ...
Конкретно в твоём случае, можешь сделать в клиенте стандартную категоризированную вьюху с totals и взять в репитер только категории.
А вообще, посмотри как делаются "категории" в репитере из произвольных данных. В инете полно таких поделок.
Категории покажешь, а внутренности категории скроешь.
 
  • Нравится
Реакции: JohnLemon
J

JohnLemon

Конкретно в твоём случае, можешь сделать в клиенте стандартную категоризированную вьюху с totals и взять в репитер только категории.
Сделал категоризированную вьюху по умолчанию поставил что бы не разворачивал категории, но в репите все равно все записи отображает (

Я так понимаю где то галочку нужно поставить что бы не отображались ) ?
 
Последнее редактирование:

rinsk

Lotus Team
12.11.2009
1 156
126
BIT
45
Можешь скрыть не нужное по условию viewEntry.isCategory ()
И получить офигенные тормоза на более или менее приличной базе.
Вот мы же обсуждали - именно этот момент. Смотреть немного дальше и глубже слоя xPage. Ну нет у домино ф-ций агрегирования данных окромя как всякие тотал. И то есть нюансы с ридерс полями.
Самый быстрый способ - это пробежка по навигатору через getNextCategory и получение через entry.getColumnValues().elementAt(1).toString() значения total колонки. На 30 тыс категорий уходит около 1 сек и время линейна от кол-ва категорий.
 
  • Нравится
Реакции: JohnLemon
J

JohnLemon

Самый быстрый способ - это пробежка по навигатору через getNextCategory и получение через
А через навигатор быстрее работает чем через коллекцию или view??

Но и получать перед мордой лица 30 тыс
Да такой отчет будет нафик не нужен.

Категории покажешь, а внутренности категории скроешь.
А таким образом можно будет сделать еще экспорт в ексель например ??
 

rinsk

Lotus Team
12.11.2009
1 156
126
BIT
45
Обход категорий
var v:NotesView = database.getView("By category");
var nav:NotesViewNavigator = v.createViewNav();
var entry:NotesViewEntry = nav.getFirst();
while (entry != null) {
//category=entry.getColumnValues().elementAt(0).toString();
//count=entry.getColumnValues().elementAt(1).toString();
var tmpentry:NotesViewEntry = nav.getNextCategory();
entry.recycle();
entry = tmpentry;
}
И по по вкусу или во viewScoup или java.util.HashMap как значение репитера.

А я бы по старинке, как говорят на CSJS - через $.get /db.nsf/view?ReadViewEntries&OutputFormt=JSON&CollapseView И нарисовал бы табличку :)
 
  • Нравится
Реакции: JohnLemon
J

JohnLemon

пасиб буду пробовать а что значит elementAt(0) ???
 
J

JohnLemon

Немного не догоняю зачем делать entry.recycle(). И в твоем коде первый элемент почему то не могу получить а последний null вообще с ошибкой валится (
 

rinsk

Lotus Team
12.11.2009
1 156
126
BIT
45
entry.recycle() - ну мы же практически в яве - надо аккуратнее быть с памятью)
Варианты работы с навигатором + ну и гугл в помощь...
 
J

JohnLemon

В роде разобрался, только не пойму почему в коде:
JavaScript:
var v:NotesView = database.getView("repotResearchWriteOff");
var nav:NotesViewNavigator = v.createViewNav();
var entry:NotesViewEntry = nav.getFirst();
while (entry != null) {
requestScope.status += entry.getColumnValues().elementAt(0).toString();
var tmpentry:NotesViewEntry = nav.getNextCategory();
entry.recycle();
entry = tmpentry;
 
}
_dump(requestScope.status);
Получаю первое значение null
 

rinsk

Lotus Team
12.11.2009
1 156
126
BIT
45
надо проверить первый элемент - какого он типа - isTotal и т.п. и если не isCategory - nav.getNextCategory() .

И для информации:

Следовательно -
NotesView.AutoUpdate(false)
NotesViewNavigator.setBufferMaxEntries(400)
...
 
J

JohnLemon

А может кто подсказать почему фт поиск не работает ?
JavaScript:
var value = {};
value.json = [];
var v:NotesView = database.getView("repotResearchWriteOff");
//*******
if (!database.isFTIndexed()) database.createFTIndex(0, false);
v.FTSearch("FIELD nameNomenclature = \"Вата\"")
//*****
var nav:NotesViewNavigator = v.createViewNav();
var entry:NotesViewEntry = nav.getFirst();
var d = 0;
while (entry != null) {
if (entry.getColumnValues().elementAt(0).toString() != '') {
d = d+1;
value.json.push({funding:entry.getColumnValues().elementAt(0).toString(), nomenclature:[], value:[], total:entry.getColumnValues().elementAt(2)});
}
if (entry.getColumnValues().elementAt(1).toString() != '') {
value.json[d-1].nomenclature.push(entry.getColumnValues().elementAt(1).toString());
value.json[d-1].value.push(entry.getColumnValues().elementAt(2))
}
var tmpentry:NotesViewEntry = nav.getNextCategory();
entry.recycle();
entry = tmpentry;
}
sessionScope.JsonValue = value
Ошибки нету в роде... :nailbiting:
 
J

JohnLemon

Так работает:
JavaScript:
var value = {};
value.json = [];
var v:NotesView = database.getView("repotResearchWriteOff");
 
 
 
 
var vec:NotesViewEntryCollection = v.getAllEntries();
vec.FTSearch("FIELD nameNomenclature = \"Спирт\"");
 
 
 
 
var entry:NotesViewEntry = vec.getFirstEntry();
var d = 0;
while (entry != null) {
if (entry.getColumnValues().elementAt(0).toString() != '') {
d = d+1;
value.json.push({funding:entry.getColumnValues().elementAt(0).toString(), nomenclature:[], value:[], total:entry.getColumnValues().elementAt(2)});
}
if (entry.getColumnValues().elementAt(1).toString() != '') {
value.json[d-1].nomenclature.push(entry.getColumnValues().elementAt(1).toString());
value.json[d-1].value.push(entry.getColumnValues().elementAt(2))
}
var tmpentry:NotesViewEntry = vec.getNextEntry(entry);
entry.recycle();
entry = tmpentry;
}
sessionScope.JsonValue = value
Но пропадают категории ((
 
J

JohnLemon

Подскажите вообще можно результаты поиска категоризировать ?
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!