Разные вопросы по Java

Обсуждение Stimulsoft Reports.JAVA
alexeyfressko
Сообщения: 103
Зарегистрирован: 17 фев 2015, 00:40

Разные вопросы по Java

Сообщение alexeyfressko »

Здравствуйте. Недавно скачал версию для Java (FXJAVA_2015.02.13_Trial)

Возникли некоторые вопросы:

1. Пример с MyRenderReportAction для определения своих функций работает с Flex, но не работает с html5 web designer (не подгружается, оно и понятно т.к. в ApplicationInitializer StiFlexConfig - для Flex версии). Что нужно сделать, чтобы в html5 версии тоже подгружались свои функции?

2. Функция ToCurrencyWordsEs существует или нет? Выдает ошибку class java.lang.RuntimeException Parser error: The name '%s' does not exist in the current context, ToCurrencyWordsEs, , ,

3. Видел пример с MyLoadDataAction для Flex. Что если есть несколько баз данных, несколько пользователей (mysql) и паролей к ним. В зависимости от текущей сессии (Request HttpSession) необходимо конфигурировать подключение к одной базе или к другой. Если пользователь нажимает на кнопку Редактировать подключение - он не должен видеть данные подключения (имя, пароль, сервер). Возможно ли сделать так с помощью MyLoadDataAction? Можно ли сделать что-то похожее для webdesigner (html5)?

Спасибо.
Vadim
Сообщения: 109
Зарегистрирован: 04 апр 2013, 12:26

Re: Разные вопросы по Java

Сообщение Vadim »

Здравствуйте.
Для использования CustomFunctions вы можете на основе примера \Samples\webdesigner\index.jsp добавить функции в нужный обработчик событий, например:

Код: Выделить всё

 
public StiReport getEditedReport(HttpServletRequest request){
			            try{
			              StiReport report = StiWebDesigner.getNewReport(null); 
			              report.getCustomFunctions().add(new StiCustomFunction() {
				                public Object invoke(List<Object> args) {
				                    return ((String) args.get(0)).substring(((Long) args.get(1)).intValue(),
				                            ((Long) args.get(2)).intValue());
				                }
				                @SuppressWarnings({ "rawtypes", "unchecked" })
				                public List<Class> getParametersList() {
				                    return new ArrayList<Class>(Arrays.asList(String.class, Long.class,
				                            Long.class));
				                }

				                public String getFunctionName() {
				                    return "subStr";
				                }
				            });
			              return report;
			            } catch (Exception e){
			                e.printStackTrace();
			            }
			            return null;
			        }
Будет доступно с версии 2014.3.10

2. Функция ToCurrencyWordsE будет доступно с версии 2014.3.10
3. Для Flex, на примере Samples\webfx\src\my\servlet\ApplicationInitializer.java вы можете указать свойство

Код: Выделить всё

stiConfig.getProperties().setProperty("Designer.Dictionary.AllowModifyConnections", "False");
stiConfig.getProperties().setProperty("Designer.Dictionary.AllowModifyDataSources", "False");
Для WebDesigner (html) используйте опции:

Код: Выделить всё

StiWebDesignerOptions options = new StiWebDesignerOptions();
options.setPermissionDataSources(StiDesignerPermissions.View);
options.setPermissionDataConnections(StiDesignerPermissions.View);


alexeyfressko писал(а):Здравствуйте. Недавно скачал версию для Java (FXJAVA_2015.02.13_Trial)

Возникли некоторые вопросы:

1. Пример с MyRenderReportAction для определения своих функций работает с Flex, но не работает с html5 web designer (не подгружается, оно и понятно т.к. в ApplicationInitializer StiFlexConfig - для Flex версии). Что нужно сделать, чтобы в html5 версии тоже подгружались свои функции?

2. Функция ToCurrencyWordsEs существует или нет? Выдает ошибку class java.lang.RuntimeException Parser error: The name '%s' does not exist in the current context, ToCurrencyWordsEs, , ,

3. Видел пример с MyLoadDataAction для Flex. Что если есть несколько баз данных, несколько пользователей (mysql) и паролей к ним. В зависимости от текущей сессии (Request HttpSession) необходимо конфигурировать подключение к одной базе или к другой. Если пользователь нажимает на кнопку Редактировать подключение - он не должен видеть данные подключения (имя, пароль, сервер). Возможно ли сделать так с помощью MyLoadDataAction? Можно ли сделать что-то похожее для webdesigner (html5)?

Спасибо.
alexeyfressko
Сообщения: 103
Зарегистрирован: 17 фев 2015, 00:40

Re: Разные вопросы по Java

Сообщение alexeyfressko »

Хорошо.

По поводу классов StiLoadAction, MySaveAction, MyLoadDataAction.

Есть ли возможность узнать сессию пользователя в процессе загрузки или сохранения отчета? Необходимо сохранять отчеты (и загружать их) в разные базы данных, узнать параметры соединения которых (имя, пароль, хост, база) можно только из сессии пользователя.
alexeyfressko
Сообщения: 103
Зарегистрирован: 17 фев 2015, 00:40

Re: Разные вопросы по Java

Сообщение alexeyfressko »

Еще вопросы.

При использовании webdesigner при каждом открытии страницы с отчетом designer загружает кучу ресурсов типа

/webdesigner/Scripts/Initialize/PropertiesPanel/InitializeShapePropertiesGroup.js
/webdesigner/Scripts/Initialize/Controls/InitializeColorControl.js
...

штук 150 наверно, причем они подгружаются через /stimulsoft_web_resource? и поэтому не кэшируются.

Какие у вас планы по оптимизации есть? Нельзя ли сделать так чтобы грузился только один большой javascript? Причем статический файл? Мелкие картинки на кнопки в одну большую не планируете объединять?

Когда будет следующая версия 3.10?

Нельзя ли узнать какие планы по развитию именно Java решения? С какой скоростью будут выходить обновления?
Vadim
Сообщения: 109
Зарегистрирован: 04 апр 2013, 12:26

Re: Разные вопросы по Java

Сообщение Vadim »

Здравствуйте.
* В классы *Action мы добавили методы с параметром HttpServletRequest request
* Мы оптимизировали загрузку WebDesigner и WebViewer. Загрузка WebViewer около секунды, WebDesigner около 3 секунд (удаленно из интернета)
Эти изменения будут доступны с версии 2014.3.10 в эту пятницу.
Пререлизы, если есть изменения, выходят еженедельно.
Новый функционал, появляющийся в Net версии переносится в Java в течении релиза.
alexeyfressko писал(а):
По поводу классов StiLoadAction, MySaveAction, MyLoadDataAction.

Есть ли возможность узнать сессию пользователя в процессе загрузки или сохранения отчета? Необходимо сохранять отчеты (и загружать их) в разные базы данных, узнать параметры соединения которых (имя, пароль, хост, база) можно только из сессии пользователя.

Еще вопросы.

При использовании webdesigner при каждом открытии страницы с отчетом designer загружает кучу ресурсов типа

/webdesigner/Scripts/Initialize/PropertiesPanel/InitializeShapePropertiesGroup.js
/webdesigner/Scripts/Initialize/Controls/InitializeColorControl.js
...

штук 150 наверно, причем они подгружаются через /stimulsoft_web_resource? и поэтому не кэшируются.

Какие у вас планы по оптимизации есть? Нельзя ли сделать так чтобы грузился только один большой javascript? Причем статический файл? Мелкие картинки на кнопки в одну большую не планируете объединять?

Когда будет следующая версия 3.10?

Нельзя ли узнать какие планы по развитию именно Java решения? С какой скоростью будут выходить обновления?
alexeyfressko
Сообщения: 103
Зарегистрирован: 17 фев 2015, 00:40

Re: Разные вопросы по Java

Сообщение alexeyfressko »

Обновил до последней версии. Пробую html5 дизайнер.

Теперь ресурсы запрашиваются так:

http://localhost:8086/stimulsoft_web_re ... ts/Main.js

Разумеется 404 - не найден. Какие нибудь изменения в web.xml нужно делать? В архиве "Stimulsoft Reports.Fx for Java 2014.3.13 from 2015.02.20" никаких статический файлов не было.
alexeyfressko
Сообщения: 103
Зарегистрирован: 17 фев 2015, 00:40

Re: Разные вопросы по Java

Сообщение alexeyfressko »

Еще вопрос.

- в дизайнере (html5) загружается отчет с одним getReportGuid().
- отчет редактируется
- в событии onSaveReportTemplate у отчета уже другое getReportGuid().

Это нормально?
alexeyfressko
Сообщения: 103
Зарегистрирован: 17 фев 2015, 00:40

Re: Разные вопросы по Java

Сообщение alexeyfressko »

Еще вопросы:

При печати из ViewerFX и DesignerFX ориентация страницы становится альбомной. Тогда как в настройках принтера (в самом принтере, и в браузере) стоит книжная. При печати из Html5 Viewer - все нормально. Во вложении можно посмотреть как выглядит пробный отчет.

При экспорте в PDF на файле PDF стоит запрет на печать. Это потому что версия триальная или баг?
Вложения
print.zip
Вывод принтера (FX и HTML5)
(584.1 КБ) 308 скачиваний
alexeyfressko
Сообщения: 103
Зарегистрирован: 17 фев 2015, 00:40

Re: Разные вопросы по Java

Сообщение alexeyfressko »

При попытке загрузить файл локализации для FX выдается ошибка:

File: D:\Projects\JavaEE\MobilVendorReports\WebContent\localization\ru.xml

Код: Выделить всё

java.lang.NullPointerException
	at com.stimulsoft.lib.io.StiIOUtil.copy(StiIOUtil.java:124)
	at com.stimulsoft.lib.io.StiIOUtil.writeInputStream(StiIOUtil.java:44)
	at com.stimulsoft.flex.events.StiLoadingLanguageResource.process(StiLoadingLanguageResource.java:28)
	at com.stimulsoft.flex.events.StiAbstractAction.run(StiAbstractAction.java:19)
	at com.stimulsoft.web.servlet.StiServlet.runAction(StiServlet.java:23)
	at com.stimulsoft.web.servlet.StiDesignerFxServlet.processingParam(StiDesignerFxServlet.java:69)
	at com.stimulsoft.web.servlet.StiDesignerFxServlet.processing(StiDesignerFxServlet.java:49)
	at com.stimulsoft.web.servlet.StiDesignerFxServlet.doPost(StiDesignerFxServlet.java:37)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Unknown Source)
фев 20, 2015 1:26:38 PM com.stimulsoft.web.servlet.StiServlet error
SEVERE: Error
java.lang.NullPointerException
	at com.stimulsoft.lib.io.StiIOUtil.copy(StiIOUtil.java:124)
	at com.stimulsoft.lib.io.StiIOUtil.writeInputStream(StiIOUtil.java:44)
	at com.stimulsoft.flex.events.StiLoadingLanguageResource.process(StiLoadingLanguageResource.java:28)
	at com.stimulsoft.flex.events.StiAbstractAction.run(StiAbstractAction.java:19)
	at com.stimulsoft.web.servlet.StiServlet.runAction(StiServlet.java:23)
	at com.stimulsoft.web.servlet.StiDesignerFxServlet.processingParam(StiDesignerFxServlet.java:69)
	at com.stimulsoft.web.servlet.StiDesignerFxServlet.processing(StiDesignerFxServlet.java:49)
	at com.stimulsoft.web.servlet.StiDesignerFxServlet.doPost(StiDesignerFxServlet.java:37)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Unknown Source)
Файл точно существует. Вот код MyLocalizationAction:

Код: Выделить всё


package com.mobilvendor.reports;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import com.stimulsoft.base.exception.StiException;
import com.stimulsoft.base.localization.StiLocalizationInfo;
import com.stimulsoft.base.utils.StiXmlMarshalUtil;
import com.stimulsoft.flex.StiLocalizationAction;
import com.stimulsoft.lib.io.StiFileUtil;

public class MyLocalizationAction extends StiLocalizationAction {

    @Override
    public List<StiLocalizationInfo> getLocalizations() throws StiException, FileNotFoundException {
        List<StiLocalizationInfo> list = new ArrayList<StiLocalizationInfo>();

        File localizationDir = getLocalizationDir();

        if (localizationDir.exists()) {
            Iterator<File> iterateLocalization = StiFileUtil.iterateFiles(localizationDir, new String[] { "xml" }, false);

            for (; iterateLocalization.hasNext();) {
                File fileLoc = iterateLocalization.next();
                InputStream is = new BufferedInputStream(new FileInputStream(fileLoc));
                StiLocalizationInfo localization = StiXmlMarshalUtil.unmarshal(is, StiLocalizationInfo.class);
                localization.setKey(fileLoc.getName());
                list.add(localization);
            }
        }

        return list;
    }

    @Override
    protected File getLocalizationDir() {
        return new File("D:\\Projects\\JavaEE\\MobilVendorReports\\WebContent\\localization");
    }

    @Override
    public InputStream getLocalization(String key) throws StiException, FileNotFoundException {
        File file = new File(getLocalizationDir(), key);

        System.out.println("File: " + file.getAbsolutePath());
        
        return new BufferedInputStream(new FileInputStream(file));
        //return new FileInputStream(file);
    }

}

Vadim
Сообщения: 109
Зарегистрирован: 04 апр 2013, 12:26

Re: Разные вопросы по Java

Сообщение Vadim »

Здравствуйте.
alexeyfressko писал(а):Обновил до последней версии. Пробую html5 дизайнер.
Теперь ресурсы запрашиваются так:
http://localhost:8086/stimulsoft_web_re ... ts/Main.js
Разумеется 404 - не найден. Какие нибудь изменения в web.xml нужно делать? В архиве "Stimulsoft Reports.Fx for Java 2014.3.13 from 2015.02.20" никаких статический файлов не было.
Используйте mapping: <url-pattern>/stimulsoft_web_resource/*</url-pattern>
При печати из ViewerFX и DesignerFX ориентация страницы становится альбомной. Тогда как в настройках принтера (в самом принтере, и в браузере) стоит книжная. При печати из Html5 Viewer - все нормально. Во вложении можно посмотреть как выглядит пробный отчет.
Попробуйте изменить на False значения свойств\: Print.AutoPageOrientation Print.AutoPageScale
Как показано в примере \Samples\webfx\src\my\servlet\ApplicationInitializer.java stiConfig.getProperties().setProperty("Engine.Type", "Flex");
При экспорте в PDF на файле PDF стоит запрет на печать. Это потому что версия триальная или баг?
Проверьте значения "Allow Print Document" в свойствах "Document Security" окна параметра экспорта.
Еще вопрос.
- в дизайнере (html5) загружается отчет с одним getReportGuid().
- отчет редактируется
- в событии onSaveReportTemplate у отчета уже другое getReportGuid().
Это нормально?
Да. Отчет изменился => другой Guid.
При попытке загрузить файл локализации для FX выдается ошибка:
File: D:\Projects\JavaEE\MobilVendorReports\WebContent\localization\ru.xml
java.lang.NullPointerException
at com.stimulsoft.lib.io.StiIOUtil.copy(StiIOUtil.java:124)
В этом месте InputStream = null
Ответить