Фон 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 для печати.

Надеемся, что это даст вам некоторые идеи о другом способе поддержки вашего варианта использования.

Спасибо Дэн

Другие вопросы по тегам