1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Poi Зависает После Создания Отчета

Тема в разделе "Lotus - Xpages", создана пользователем Bob84, 17 дек 2014.

  1. Bob84

    Bob84 Well-Known Member

    Репутация:
    0
    Регистрация:
    16 май 2012
    Сообщения:
    48
    Симпатии:
    0
    Здравствуйте.
    С помощью библиотеки POI создаем отчеты в Excel. После того как пользователю предоставляется файл с результатом, для загрузки, на некоторое время (10-20 сек) в окне перестают работать кнопки и ссылки для перехода на другие Xpage.
    Примерный код кнопки, для создания отчета:
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">onClick, ServerSide</div></div><div class="sp-body"><div class="sp-content">
    Код:
    try{	
    importPackage(java.lang);
    importPackage(org.apache.poi.hssf.usermodel);
    importPackage(org.apache.poi.hssf.util);
    
    var sheetName = "Лист1";
    var workbookName = "workbook1";
    
    var doc: NotesDocument;
    
    var prevDoc: NotesDocument;	
    
    var wb = new HSSFWorkbook();
    
    var sheet1 = wb.createSheet(sheetName);
    
    var query = "формула отбора"
    
    var dcNotSorted: NotesDocumentCollection = database.search(query);
    
    // <бегаем по коллекции>***************************************
    rows=sheet1.getLastRowNum();
    var dc: NotesDocumentCollection = SortCollection(dcNotSorted, ["ключ для сортировки"]); 
    
    doc = dc.getFirstDocument();
    
    while (doc != null) {
    //обработка документа, создаем строки таблици и заполняем их данными из документа
    
    prevDoc = doc;
    doc = dc.getNextDocument(doc);		
    }	
    // </бегаем по коллекции>***************************************
    
    // <вывод результата>
    try {
    //Create the filename for the spreadsheet	
    var fileName = workbookName + ".xls";
    // The Faces Context global object provides access to the servlet environment via the external content
    var extCont = facesContext.getExternalContext();
    // The servlet's response object provides control to the response object
    var pageResponse = extCont.getResponse();
    //Get the output stream to stream binary data
    var pageOutput = pageResponse.getOutputStream();
    // Set the content type and headers
    pageResponse.setContentType("application/x-ms-excel");
    pageResponse.setHeader("Cache-Control", "no-cache");
    pageResponse.setHeader("Content-Disposition", "inline; filename=\"" + fileName + "\"");
    //Write the output, flush the buffer and close the stream
    wb.write(pageOutput);
    } catch (e) {
    print(e.toString());
    } finally {
    pageOutput.flush();
    pageOutput.close();
    // Terminate the request processing lifecycle.
    facesContext.responseComplete();
    }
    // </вывод результата>
    }catch (e) {
    view.postScript('alert("' + e.toString() + '")');	
    }

    Для работы используем следующий jar POI - poi-3.10.1-20140818.jar

    Спасибо.
     
  2. NickProstoNick

    NickProstoNick Статус как статус :)
    Lotus team

    Репутация:
    0
    Регистрация:
    22 авг 2008
    Сообщения:
    1.785
    Симпатии:
    42
    Лучше навесь этот код на отдельную страницу.. в событие afterPageLoad.
    А по кнопке или ссылке открывай эту страницу
     
  3. Bob84

    Bob84 Well-Known Member

    Репутация:
    0
    Регистрация:
    16 май 2012
    Сообщения:
    48
    Симпатии:
    0
    Сделал xpage report2Click.xsp, создание отчета повесил на afterPageLoad. На старнице отчета сдела кнопку с кодом:
    Код:
    context.redirectToPage("report2Click.xsp");
    Эффект тот же, пробовал вешать на событие BeforeRenderResponse, при установленом rendered в false - все равно есть подвисание после отработки.
     
  4. NickProstoNick

    NickProstoNick Статус как статус :)
    Lotus team

    Репутация:
    0
    Регистрация:
    22 авг 2008
    Сообщения:
    1.785
    Симпатии:
    42
    Ну у меня тоже этот метод используется, но проблем никаких.
    Но с другой стороны, а почему не должно быть тормозов?
    Какой объем данных передается?
     
  5. Bob84

    Bob84 Well-Known Member

    Репутация:
    0
    Регистрация:
    16 май 2012
    Сообщения:
    48
    Симпатии:
    0
    Объем совершенно незначительный, база тестовая, как правило около десяти документов обрабатывает.
     
Загрузка...

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