Фон CommandExecuteIn выдает ошибку "Не (кодируемое) значение"
В настоящее время я пытаюсь реализовать экспорт файлов в фоновом режиме, чтобы пользователь мог выполнять некоторые действия во время загрузки файла.
Я использовал Apache Isis CommandExexuteIn:Background
атрибут действия. Тем не менее, я получил сообщение об ошибке "Не (кодируемое) значение", это ошибка, выданная классом ScalarValueRenderer.
Вот как выглядит мой метод:
@Action(semantics = SemanticsOf.SAFE,
command = CommandReification.ENABLED)
commandExecuteIn = CommandExecuteIn.BACKGROUND)
public Blob exportViewAsPdf() {
final Contact contact = this;
final String filename = this.businessName + " Contact Details";
final Map<String, Object> parameters = new HashMap<>();
parameters.put("contact", contact);
final String template = templateLoader.buildFromTemplate(Contact.class, "ContactViewTemplate", parameters);
return pdfExporter.exportAsPdf(filename, template);
}
Я думаю, что ошибка связана с командой, которая на самом деле не вызывает действие, а возвращает постоянную фоновую команду.
Эта реализация фактически работала над методом, в котором нет возвращаемого типа. Я что-то пропустил? Или есть способ реализовать фоновую команду и получить ожидаемые результаты?
1 ответ
Интересный вариант использования, но я не ожидал, что эта часть фреймворка будет реализована, поэтому я не удивлен, что он не работает. Очевидно, что сообщение об ошибке, которое вы здесь получаете, довольно неясно, поэтому я поднял билет JIRA, чтобы посмотреть, сможем ли мы хотя бы улучшить это.
Мне интересно узнать, какой пользовательский опыт, по вашему мнению, должен предоставить фреймворк здесь?
В приложении Estatio, над которым мы работаем (которое вытеснило многие функции, добавленные в платформу за последние несколько лет), у нас есть несколько похожее требование для получения PDF-файлов с сервера отчетов (что занимает от 5 до 10 секунд), а затем скачать их. Это для всех арендаторов в торговом центре, так что может быть от 5 до 50 из них, чтобы генерировать за один раз. Дизайн, который мы использовали, заключался в том, чтобы переместить рендеринг в фоновую команду (аналогично вызовам методов templateLoader.buildFromTemplate(...) и pdfExporter.exportAsPdf(...) во фрагменте кода и захватить вывод в виде документа). через модуль документа. Затем мы используем аддон pdfbox, чтобы сшить все документы PDF вместе как один загружаемый PDF для печати.
Надеемся, что это даст вам некоторые идеи о другом способе поддержки вашего варианта использования.
Спасибо Дэн