Добрый день.
Стоит задача распаковать архив 7z с файлами и содержимое файлов записать в соответствующие таблицы BPMOnline 7.8
Казалось бы тривиальная задача, но всё осложняется тем, что продуктивная среда клиента развёрнута на on-demand и соответственно к файловой системе сервера доступа нет. Можно было бы воспользоваться вкладкой "Внешние сборки", но библиотека 7zip.dll написана на С++ и её подключить не представляется возможным, т.к. можно добавлять только dll-ки, написанные на C#.
Может кто сталкивался с такой задачей, а именно распаковка архива с несколькими файлами из потока?
Сам я смотрю в сторону библиотеки SevenZipSharp, а точнее класса SevenZip.Compression.LZMA.Decoder и SevenZipHelper.cs. Но пока при выполнении метода SevenZipHelper.Decompress(byteArray) получаю ошибку Data Error на шаге
decoder.Code(newInStream, newOutStream, compressedSize, outSize, null);
Буду очень благодарен за помощь. Спасибо
Нравится
Здравствуйте, Игорь!
Если Вам необходимо добавить какие-либо библиотеки на облачный сервер, это можно сделать, обратившись в техническую поддержку с данной просьбой.
Что касается самого вопроса, уточните, как файлы будут попадать в систему?
При попытке загрузить библиотеку 7z.dll из файловой системы BPMOnline выдаёт следующую ошибку:
Инициализатор типа "SevenZip.SevenZipLibraryManager" выдал исключение. ---> System.ArgumentException: Путь имеет недопустимую форму.
Библиотека лежит в Terrasoft.WebApp/bin/. Доступы к библиотеке для пользователя IIS_IUSRS открыт. Как мне получить доступ к dll-файлам из файловой системы?
В VisualStudio всё хорошо. Ошибка возникает только в BPMOnlline.
Здравствуйте.
Подключить к BPM’online можно только .NET-библиотеки.
Те, что написаны на С++, просто так не присоединить, нужно писать .NET-обёртки.
Что касается опыта решения задачи с распаковкой из *.7z не подскажу, к сожалению. Могу только рекомендовать поиск решения в открытых источниках.
"Александр Зубков" написал:Здравствуйте.
Подключить к BPM’online можно только .NET-библиотеки.
Те, что написаны на С++, просто так не присоединить, нужно писать .NET-обёртки.
Да, Александр, об этом я и писал в топике этой темы.
"Александр Зубков" написал:Что касается опыта решения задачи с распаковкой из *.7z не подскажу, к сожалению. Могу только рекомендовать поиск решения в открытых источниках.
В том то и дело, что если использовать чистый проект в visual Studio, то всё прекрасно работает, проблема возникает при переносе кода в "Исходный код" BpmOnline.
Вопрос остаётся открытый. Как распаковать из BPMOnline архив 7Zip?
Вариант распаковки в каталог также не работает
var processStartInfo = new ProcessStartInfo(); processStartInfo.FileName = @"C:\Program Files\7-Zip\7z.exe"; processStartInfo.Arguments = @"e C:\test.7z"; Process.Start(processStartInfo);
Возможно, что сайт, который находится в облаке не понимаем локальный путь @"C:\Program Files\7-Zip\7z.exe"
В данном случае нужно разворачивать локально сайт и проводить отладку - https://academy.terrasoft.ru/documents/technic-sdk/7-7-0/otladka-server…