Как вы уже заметили, если сохранить файл из InputDialog формы, то файл сохранится в байтовом массиве в объекте специального типа io.jmix.bpm.entity.FileDescription
. У нас есть задачка на добавление комментария, чтобы сделать этот тип более понятным для пользователя.
Чтобы получить FileRef нужно где-то явно сделать преобразование FileDescription в FileRef. Если сущность Attachment у вас создаётся выделенной сервис таской, то можно это преобразование сделать прямо в этой сервис таске.
Либо можно отдельной сервис-таской преобразовать FileDescription в FileRef, положить FileRef в переменные процесса и дальше уже работать с переменной FileRef (использовать её в дата-тасках и т.п.).
import io.jmix.bpm.entity.FileDescription;
import io.jmix.core.FileRef;
import io.jmix.core.FileStorage;
import org.springframework.stereotype.Component;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
@Component
public class ProcessFileManager {
private FileStorage fileStorage;
public ProcessFileManager(FileStorage fileStorage) {
this.fileStorage = fileStorage;
}
public FileRef saveFileToFileStorage2(FileDescription fileDescription) throws IOException {
try (InputStream is = new ByteArrayInputStream(fileDescription.getFileContent())) {
FileRef fileRef = fileStorage.saveStream(fileDescription.getFileName(), is);
return fileRef;
}
}
}
Проект, демонстрирующий данный подход: bpm-file.zip (128.1 КБ)
Третий вариант - использовать Jmix screen форму вместо Input Dialog и в этой форме сразу создавать процессную переменную с типом FileRef.