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

Тема в разделе "Lotus - Xpages", создана пользователем JohnLemon, 26 мар 2015.

  1. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    Как можно в репите или во вьюшке в 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:
     
  2. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    563
    Симпатии:
    214
    Конкретно в твоём случае, можешь сделать в клиенте стандартную категоризированную вьюху с totals и взять в репитер только категории.
    А вообще, посмотри как делаются "категории" в репитере из произвольных данных. В инете полно таких поделок.
    Категории покажешь, а внутренности категории скроешь.
     
    2 пользователям это понравилось.
  3. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    Сделал категоризированную вьюху по умолчанию поставил что бы не разворачивал категории, но в репите все равно все записи отображает (
    Результат
    Я так понимаю где то галочку нужно поставить что бы не отображались ) ?
     
    #3 JohnLemon, 26 мар 2015
    Последнее редактирование модератором: 26 мар 2015
  4. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    563
    Симпатии:
    214
    Можешь скрыть не нужное по условию viewEntry.isCategory ()
     
    2 пользователям это понравилось.
  5. rinsk

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    795
    Симпатии:
    78
    И получить офигенные тормоза на более или менее приличной базе.
    Вот мы же обсуждали - именно этот момент. Смотреть немного дальше и глубже слоя xPage. Ну нет у домино ф-ций агрегирования данных окромя как всякие тотал. И то есть нюансы с ридерс полями.
    Самый быстрый способ - это пробежка по навигатору через getNextCategory и получение через entry.getColumnValues().elementAt(1).toString() значения total колонки. На 30 тыс категорий уходит около 1 сек и время линейна от кол-ва категорий.
     
    2 пользователям это понравилось.
  6. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    563
    Симпатии:
    214
    конечно лучше брать только нужное. Но и получать перед мордой лица 30 тыс. доков абсолютно не юзабельно.
     
    2 пользователям это понравилось.
  7. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    А через навигатор быстрее работает чем через коллекцию или view??

    Да такой отчет будет нафик не нужен.

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

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    795
    Симпатии:
    78
    Да не - я про 30 тыс доков в одной категории...
     
  9. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    А есть примерчик как получить ??
     
  10. rinsk

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    795
    Симпатии:
    78
    Обход категорий
    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 И нарисовал бы табличку :)
     
    2 пользователям это понравилось.
  11. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    пасиб буду пробовать а что значит elementAt(0) ???
     
  12. rinsk

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    795
    Симпатии:
    78
    Первая колонка вью - в данном случае - значение категории.
     
    2 пользователям это понравилось.
  13. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    Немного не догоняю зачем делать entry.recycle(). И в твоем коде первый элемент почему то не могу получить а последний null вообще с ошибкой валится (
     
  14. rinsk

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    795
    Симпатии:
    78
  15. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    В роде разобрался, только не пойму почему в коде:
    Код (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
     
  16. rinsk

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    795
    Симпатии:
    78
    надо проверить первый элемент - какого он типа - isTotal и т.п. и если не isCategory - nav.getNextCategory() .

    И для информации:
    http://www.mindoo.com/web/blog.nsf/dx/17.01.2013085308KLEB9S.htm
    Следовательно -
    NotesView.AutoUpdate(false)
    NotesViewNavigator.setBufferMaxEntries(400)
    ...
     
  17. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    А может кто подсказать почему фт поиск не работает ?
    Код (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:
     
  18. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    Так работает:
    Код (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
    Но пропадают категории ((
     
  19. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    И тоталов нету по моему )
     
  20. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    Подскажите вообще можно результаты поиска категоризировать ?
     
Загрузка...

Поделиться этой страницей