1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/youseries_admin-ureport

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
STORAGE-DATASOURCE.md 19 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 28.02.2025 05:47 36820fd

Хранение отчетов

В разделе 2 мы представили, как создается проект с использованием UReport2. После запуска проекта автоматически генерируется директория с названием «ureportfiles» в директории WEB-INF проекта. Это является стандартной директорией хранения отчетов, предоставляемой UReport2. Другими словами, отчетные файлы будут сохраняться в директории WEB-INF/ureportfiles проекта по умолчанию.

Если проект выполняется в среде разработки Eclipse, используется jetty (например, плагин run-jetty-run для Eclipse). В этом случае вы увидите директорию с названием «ureportfiles» в директории WEB-INF проекта.

Если проект работает на основе Tomcat, нет директории «ureportfiles» в директории WEB-INF, так как Tomcat создаёт временную рабочую директорию при работе в Eclipse (обычно она находится в директории workspace.metadata.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapp). Поэтому, если проект работает на основе Tomcat, вам потребуется найти соответствующий временный рабочий каталог и затем найти соответствующую директорию «ureportfiles» в директории WEB-INF проекта.

Запустив созданный проект, откройте конструктор отчетов, щелкните кнопку Сохранить на панели инструментов и выберите «сохранить». Затем вы увидите окно, показанное ниже:

В этом окне вам нужно ввести имя отчета и выбрать директорию хранения отчета, чтобы сохранить текущий файл отчета. Вы можете видеть, что стандартное место хранения UReport2 — это «серверная файловая система», то есть директория «ureportfiles» в директории WEB-INF вашего проекта.

Эта директория автоматически создается системой по умолчанию. Вы можете изменить местоположение этой директории, добавив атрибут, если это необходимо.

Создайте файл config.properties в директории WEB-INF проекта, откройте конфигурационный файл Spring с именем context.xml в директории WEB-INF и добавьте следующий Bean для загрузки файла config.properties.

<bean id="propertyConfigurer" parent="ureport.props">
    <property name="location">
        <value>/WEB-INF/config.properties</value>
    </property>
</bean>

Примечание: вышеуказанный конфигурационный Bean фактически представляет собой стандартную конфигурацию класса org.springframework.beans.factory.config.PropertyPlaceholderConfigurer. Мы знаем, что можно загружать внешние свойства Spring, используя конфигурацию PropertyPlaceholderConfigurer. Если проект уже настроен с помощью класса PropertyPlaceholderConfigurer, соответствующие свойства UReport2 могут быть добавлены непосредственно в файл свойств, соответствующий этому классу конфигурации, и нет необходимости настраивать файл config.properties.

Откройте файл config.properties и добавьте атрибут с именем «ureport.fileStoreDir», где значение этого атрибута используется для определения стандартной директории хранения отчетов, предоставляемой UReport2. Например, атрибут может быть определён следующим образом:

ureport.fileStoreDir=D:/ureportfiles

Это указывает на сохранение файлов отчетов в директории ureportfiles на диске D. При назначении конкретной директории важно сохранить её существование, иначе она не будет использоваться. Например, директория ureportfiles на диске D должна существовать заранее.

Механизм хранения отчетов, известный как «серверная файловая система», предоставленный UReport2 по умолчанию, действительно реализует интерфейс com.bstek.ureport.provider.report.ReportProvider, предоставленный UReport2. Исходный код интерфейса представлен ниже:

package com.bstek.ureport.provider.report; import java.io.InputStream;
import java.util.List;
/**
*  @author Jacky.gao
*  @since 2016 года 12 месяца 4 число
*  @since 4 декабря 2016 года
*/
public interface ReportProvider {
/**
*      Загрузить файл отчета по имени отчета
* Load the report file according to the report name
*@param file имя отчета
* @param file report name
*@return  вернуть InputStream
* @return  returned InputStream
*/
InputStream loadReport(String file);
/**
*       Удалить определённый файл отчета по имени отчета
* Delete the specific report file according to the report name
*  @param file имя отчета
*  @param file report name
*/
void deleteReport(String file);
/**
*     Получить все файлы отчетов
* Acquire all report files
*  @return  вернуть список файлов отчетов
*  @return  return the list of report file
*/
List<ReportFile> getReportFiles();
/**
*   Сохранить файлы отчетов
* Save report files
*@param file имя отчета
* @param file report name
*@param content XML содержимое отчета
* @param content XML content of report
*/
void saveReport(String file,String content);
/**
*  @return  вернуть название хранилища
*  @return  return storage name
*/
String getName();
/**
*  @return  вернуть, отключено ли
*  @return  return if deactivation
*/
boolean disabled();
/**
*  @return  вернуть префикс имени отчета
*  @return  return prefix of report name
*/
String getPrefix();
}

После реализации интерфейса ReportProvider настройте реализующий класс в Spring и сделайте его стандартным Bean Spring. Затем UReport2 обнаружит, найдёт и загрузит его. Исходный код механизма хранения отчетов, известного как «серверная файловая система», предоставленный UReport2 по умолчанию, приведён ниже:

package com.bstek.ureport.provider.report.file;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import javax.servlet.ServletContext;

import org.apache.commons.io.IOUtils;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.web.context.WebApplicationContext;

import com.bstek.ureport.exception.ReportException;
import com.bstek.ureport.provider.report.ReportFile;
import com.bstek.урепорт.provider.report.ReportProvider;

/**
 * @author Jacky.gao
 * @since 2017 года 2 месяца 11 число
 */
public class FileReportProvider implements ReportProvider, ApplicationContextAware {
    private String prefix = "file:";
    private String fileStoreDir;
    private boolean disabled;

    @Override
    public InputStream loadReport(String file) {
        if (file.startsWith(prefix)) {
            file = file.substring(prefix.length(), file.length());
        }
        String fullPath = fileStoreDir + "/" + file;
        try {
            return new FileInputStream(fullPath);
        } catch (FileNotFoundException e) {
            throw new ReportException(e);
        }
    }

    @Override
    public void deleteReport(String file) {
        if (file.startsWith(prefix)) {
            file = file.substring(prefix.length(), file.length());
        }
        String fullPath = fileStoreDir + "/" + file;
        File f = new File(fullPath);
        if (f.exists()) {
            f.delete();
        }
    }

    @Override
    public List<ReportFile> getReportFiles() {
        File file = new File(fileStoreDir);
        List<ReportFile> list = new ArrayList<>();
        for (File f : file.listFiles()) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(f.lastModified());
            list.add(new ReportFile(f.getName(), calendar.getTime()));
        }
        Collections.sort(list, new Comparator<ReportFile>() {
            @Override
            public int compare(ReportFile f1, ReportFile f2) {
                return f2.getUpdateDate().compareTo(f1.getUpdateDate());
            }
        });
        return list;
    }

    @Override
    public String getName() {
        return "Серверная файловая система";
    }

    @Override
    public void saveReport(String file, String content) {
        if (file.startsWith(prefix)) {
            file = file.substring(prefix.length(), file.length());
        }
        String fullPath = fileStoreDir + "/" + file;
        FileOutputStream outStream = null;
        try {
            outStream = new FileOutputStream(new File(fullPath));
            IOUtils.write(content, outStream, "utf-8");
        } catch (Exception ex) {
            throw new ReportException(ex);
        } finally {
            if (outStream != null) {
                try {
                    outStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    @Override
    public boolean disabled() {
        return disabled;
    }

    public void setDisabled(boolean disabled) {
        this.disabled = disabled;
    }

    public void setFileStoreDir(String fileStoreDir) {
        this.fileStoreDir = fileStoreDir;
    }
}    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        File file = new File(fileStoreDir);
        if (file.exists()) {
            return;
        }
        if (applicationContext instanceof WebApplicationContext) {
            WebApplicationContext context = (WebApplicationContext) applicationContext;
            ServletContext servletContext = context.getServletContext();
            String basePath = servletContext.getRealPath("/");
            fileStoreDir = basePath + fileStoreDir;
            file = new File(fileStoreDir);
            if (!file.exists()) {
                file.mkdirs();
            }
        }
    }

    
    @Override
    public String getPrefix() {
        return prefix;
    }
}

Отключите стандартное хранение отчетов системы. Если вы хотите настроить свое хранение отчетов и не использовать стандартное хранение отчетов "серверной файловой системы", предоставленное системой, достаточно добавить атрибут ureport.disableFileProvider в файл config.properties и установить его значение как true.

Учитывая вышеуказанное описание, легко разрабатывать другие типы хранения отчетов путем реализации интерфейса ReportProvider, например, разработка нового хранения отчетов для сохранения отчетов в базе данных и FTP.

Настройка источника данных

Откройте конструктор отчетов в UReport2. Вы можете увидеть три типа источников данных отчетов, предоставляемых UReport2, как показано на рисунке ниже:

Три типа источников данных связаны соответственно с базой данных напрямую, Spring Bean и встроенным источником данных через интерфейс com.bstek.ureport.definition.datasource.BuildinDatasource.

Подключение к базе данных очень простое. Добавьте JAR-пакет, управляемый соответствующей базой данных, в classpath проекта и настройте информацию о соединении с источником данных в появившемся окне, как показано на рисунке ниже:

Источник данных типа Spring Bean может выбрать Bean, определённый в контексте Spring, щелкнув значок и введя имя источника данных и ID Bean для использования в появившемся окне, как показано на рисунке ниже:

После сохранения вы можете добавить конкретный набор данных под источником данных. Щелкните правой кнопкой мыши под источником данных, выберите «добавить набор данных» в появившемся меню и определите имя набора данных, соответствующее имя метода и тип объекта возврата, как показано на рисунке ниже:

В конфигурации набора данных Spring-бин мы можем щелкнуть по «выбор метода» справа, чтобы выбрать метод для типа, соответствующего текущему бину. Требования к методу следующие: метод должен состоять из трех параметров, включая соответственно String, String, Map. Например, тестовый бин, определенный выше, состоит из двух легальных методов, как показано ниже:

package com.ureport.test;

import java.util.List;
import java.util.Map;

public class TestBean {
	public List<Map<String, Object>> loadReportData(String dsName, String datasetName, Map<String, Object> parameters) {
		return null;
	}

	public List<User> buildReport(String dsName, String datasetName, Map<String, Object> parameters) {
		return null;
	}
}

Метод легального набора данных бина должен состоять из трех параметров, включая String, String, Map, соответственно соответствующих имени источника данных, имени источника данных и внешнему параметру Map. Метод бина может быть выбран только при такой структуре. В настоящее время здесь поддерживаются два типа значений возврата метода набора данных: список типов Map<String, Object> , как в TestBean, и список типов POJO, как в методе ниже:

public List<User> loadData(String dsName, String datasetName, Map<String, Object> parameters) { 
    return null;
}

В приведенном выше примере возвращается множество объектов User. Объект User здесь является обычным объектом POJO.

Встроенные источники данных

Этот тип источников данных требует реализации интерфейса BuildinDatasource и конфигурирования реализованного класса интерфейса BuildinDatasource в Spring. Исходный код интерфейса BuildinDatasource представлен ниже:

package com.bstek.ureport.definition.datasource;

import java.sql.Connection;

/**
 * @author Jacky.gao
 * @since OnClickListener 2017-02-09
 */
public interface BuildinDatasource {
	/**
	 * @return Возвращает имя источника данных
	 */
	String name();

	/**
	 * @return Возвращает соединение с текущим источником данных
	 */
	Connection getConnection();
}

После конфигурирования реализованного класса интерфейса BuildinDatasource в Spring он автоматически распознается UReport2. Затем в дизайнер отчетов нажмите кнопку "Добавить встроенное соединение" в вкладке источника данных и выберите определенный встроенный источник данных в открывшемся окне, как показано на рисунке ниже:

Скриншот диалогового окна

Три типа источников данных, предоставляемых UReport2, имеют различные характеристики и области применения. Пользователи должны гибко выбирать между ними, основываясь на их характеристиках.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/youseries_admin-ureport.git
git@api.gitlife.ru:oschina-mirror/youseries_admin-ureport.git
oschina-mirror
youseries_admin-ureport
youseries_admin-ureport
master