Моя проблема:
у меня есть клиент PHP http://community.jaspersoft.com/wiki/php-client-sample-code#About_the_Class из сообщества Джаспер.
Я хочу добавить домен с PHP в репозиторий Jasper, и у меня есть необходимые данные в формате XML, такие как метка и т. Д.
В этом клиенте PHP я должен использовать класс SemanticLayerDataSource для создания домена.
Этот класс получил схему открытых переменных.
Но я не могу найти то, что эта схема должна работать и добавить правильный домен в хранилище. Нет информации ни на сайте, ни в классе.
$semLayer = new SemanticLayerDataSource();
$semLayer->schema = ?????
$semLayer->label = (string)$xml->label; //SimpleXml
.
.
.
Каким данным нужна схема? Массив, ресурс или что-то еще? Спасибо.
Также пример кода с PHP Client был бы действительно хорош, потому что документация не очень хороша в этом пункте.
Редактировать: я пытался создать XML как локальный файл набор для схемы URI этого XML. Для создания XML я использовал это: http://community.jaspersoft.com/wiki/php-client-sample-code#Creating_Binary_Resources
Я могу создать домен, но не работает AdHoc. Я получаю нулевое исключение от Джаспера.
Согласно REST API документы вам нужно предоставить ресурс схемы:
<schemaFileReference>
<uri>{schemaFileResourceUri}</uri>
</schemaFileReference>
Этот ресурс представляет всю структуру, как написано в описание службы метаданных домена (согласно абзацу Работа с доменными схемами):
Служба v2 / domains / metadata возвращает только отображаемую информацию о Домене, а не его внутреннее определение. Поля, объединения, фильтры и вычисляемые поля, которые определяют внутреннюю структуру домена, составляют дизайн домена. XML-представление конструкции домена называется схемой домена.
В настоящее время нет службы REST для взаимодействия со схемами домена, но вы можете использовать службу v2 / resources для получения необработанной схемы. Сначала получите дескриптор ресурса для домена. Например, чтобы просмотреть дескриптор для домена Supermart, используйте следующий запрос (при входе в систему как jasperadmin):
GET http://<host>:<port>/jasperserver-pro/rest_v2/resources/Domains/supermartDomain <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <semanticLayerDataSource> <creationDate>2013-10-10 15:30:31</creationDate> <description>Comprehensive example of Domain (pre-joined table sets for complex reporting, custom query based dataset, column and row security, I18n bundles)</description> <label>Supermart Domain</label> <permissionMask>1</permissionMask> <updateDate>2013-10-10 15:30:31</updateDate> <uri>/organizations/organization_1/Domains/supermartDomain</uri> <version>1</version> <dataSourceReference> <uri>/organizations/organization_1/analysis/datasources/FoodmartDataSourceJNDI</uri> </dataSourceReference> <bundles> <bundle> <fileReference><uri>/organizations/organization_1/Domains/supermartDomain_files/supermart_domain.properties</uri></fileReference> <locale></locale> </bundle>
(отрывок) […]
Схема домена представляет собой файл XML со структурой, описанной в Руководстве пользователя сервера JasperReports. Если вы хотите изменить схему программно, вы должны написать свой собственный анализатор для доступа к его полям и определениям. Затем вы можете заменить файл схемы в Домене одним из способов обновления файла, описанных в.
Ну, я нашел решение.
Если вы хотите создать схему для каждого php-клиента, создайте новый объект file.
$file = new \Jaspersoft\Dto\Resource\File();
$file->type = "xml";
$file->label = "MyDomain_schema";
$file->content = base64_encode((string)$schemaXML);
Содержимое файла — это кодированная (действительная) схема домена base64.
Сейчас установлено $semLayer->schema = $file
, Этот способ работает довольно хорошо.
Также есть способ создать домен с помощью многокомпонентного запроса, но этот способ довольно сложен для клиента php. В клиенте PHP есть функция multipartrequest, но, похоже, эта функция состоит из устаревшего кода.