Иногда возникает задача получения отчета на рабочем месте клиента без использования интерактивного средства взаимодействия в виде браузера.
Во времена Oracle Reports подобная задача решалась через применение утилиты rwclient. Что можно применить для подобного в Oracle BIEE? — используем предоставленный API REST-интерфейс для Oracle BI Publisher:
- Создаем отчет, пусть он будет будет доступен в каталоге: /~scott.tiger/Example;
- Запросом через утилиту curl получаем ответ сервера, сохраняя его в файле:
curl -X POST -u login:password -o report_out.xlsx -H "Content-Type:multipart/form-data" -v -F 'ReportRequest={"attributeFormat":"xlsx","attributeTemplate":"Publisher Template"};type=application/json' http://hostname:port/xmlpserver/services/rest/v1/reports/~scott.tiger%2FExample/run
- Так как содержимое ответа в документе report_out.xlsx это ещё не Excel, а multipart-документ (см. RFC 7578), то обрабатываем документ, откусывая излишние детали:
perl -i -pe 'BEGIN{undef $/;} s/.*\r\n\r\n(.*?)\r\n--Boundary[^\n]*?--\r\n/$1/sm' report_out.xlsx
- Убеждаемся в работоспособности отчёта, открывая его через Excel на клиентской машине.
- Cклеиваем наработки вместе через пайп и получаем готовое решение:
curl -X POST -u login:password -H "Content-Type:multipart/form-data" -v -F 'ReportRequest={"attributeFormat":"xlsx","attributeTemplate":"Publisher Template"};type=application/json' http://nameserv:port/xmlpserver/services/rest/v1/reports/~scott.tiger%2FExample/run | perl -pe 'BEGIN{undef $/;} s/.*\r\n\r\n(.*?)\r\n--Boundary[^\n]*?--\r\n/$1/sm' > report_output.xlsx