如何通过 PHP 客户端在 Jasper 上创建域
How to create Domain on Jasper via PHP Client
我的问题是:
我从 Jasper 社区获得了 PHP 客户端 http://community.jaspersoft.com/wiki/php-client-sample-code#About_the_Class。
我想向 Jasper 存储库添加一个带有 PHP 的域,并且我在 .xml 中获得了所需的数据,如标签等。
在这个 PHP 客户端中,我必须使用 class SemanticLayerDataSource 来创建域。
这个 class 得到了一个 public 变量模式。
但是我找不到这个模式需要什么来工作并向存储库添加正确的域。网页上和 class.
都没有信息
$semLayer = new SemanticLayerDataSource();
$semLayer->schema = ?????
$semLayer->label = (string)$xml->label; //SimpleXml
.
.
.
哪些数据需要模式?数组、资源还是其他?谢谢你。
另外,带有 PHP 客户端的代码示例会非常好,因为在这一点上文档不是很好。
编辑:我试图创建一个 xml 作为一个本地文件集,用于模式 xml 的 uri。为了创建 xml 我使用了这个:http://community.jaspersoft.com/wiki/php-client-sample-code#Creating_Binary_Resources
我能够创建一个域,但该域的 AdHoc 视图不起作用。我从 jasper 得到一个空异常。
根据REST API docs您需要提供架构资源:
<schemaFileReference>
<uri>{schemaFileResourceUri}</uri>
</schemaFileReference>
此资源表示整个结构,如 domain metadata service description 中所写(在 使用域架构 段落下):
The v2/domains/metadata service returns only the display information about a Domain, not its internal definition. The fields, joins, filters, and calculated fields that define the internal structure of a Domain make up the Domain design. The XML representation of a Domain design is called the Domain schema.
Currently, there is no REST service to interact with Domain schemas, but you can use the v2/resources service to retrieve the raw schema. First, retrieve the resource descriptor for the Domain. For example, to view the descriptor for the Supermart Domain, use the following request (when logged in as 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>
(snip) [...]
The Domain schema is an XML file with a structure explained in the JasperReports Server User Guide. If you wish to modify the schema programmatically, you must write your own parser to access its fields and definitions. You can then replace the schema file in the Domain with one of the file updating methods described in .
好吧,我找到了解决方案。
如果您想为每个 php 客户端创建一个模式,请创建一个新的文件对象。
$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,但是这个函数似乎由遗留代码组成。
我的问题是:
我从 Jasper 社区获得了 PHP 客户端 http://community.jaspersoft.com/wiki/php-client-sample-code#About_the_Class。 我想向 Jasper 存储库添加一个带有 PHP 的域,并且我在 .xml 中获得了所需的数据,如标签等。 在这个 PHP 客户端中,我必须使用 class SemanticLayerDataSource 来创建域。 这个 class 得到了一个 public 变量模式。 但是我找不到这个模式需要什么来工作并向存储库添加正确的域。网页上和 class.
都没有信息$semLayer = new SemanticLayerDataSource();
$semLayer->schema = ?????
$semLayer->label = (string)$xml->label; //SimpleXml
.
.
.
哪些数据需要模式?数组、资源还是其他?谢谢你。 另外,带有 PHP 客户端的代码示例会非常好,因为在这一点上文档不是很好。
编辑:我试图创建一个 xml 作为一个本地文件集,用于模式 xml 的 uri。为了创建 xml 我使用了这个:http://community.jaspersoft.com/wiki/php-client-sample-code#Creating_Binary_Resources 我能够创建一个域,但该域的 AdHoc 视图不起作用。我从 jasper 得到一个空异常。
根据REST API docs您需要提供架构资源:
<schemaFileReference>
<uri>{schemaFileResourceUri}</uri>
</schemaFileReference>
此资源表示整个结构,如 domain metadata service description 中所写(在 使用域架构 段落下):
The v2/domains/metadata service returns only the display information about a Domain, not its internal definition. The fields, joins, filters, and calculated fields that define the internal structure of a Domain make up the Domain design. The XML representation of a Domain design is called the Domain schema.
Currently, there is no REST service to interact with Domain schemas, but you can use the v2/resources service to retrieve the raw schema. First, retrieve the resource descriptor for the Domain. For example, to view the descriptor for the Supermart Domain, use the following request (when logged in as 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>
(snip) [...]
The Domain schema is an XML file with a structure explained in the JasperReports Server User Guide. If you wish to modify the schema programmatically, you must write your own parser to access its fields and definitions. You can then replace the schema file in the Domain with one of the file updating methods described in .
好吧,我找到了解决方案。 如果您想为每个 php 客户端创建一个模式,请创建一个新的文件对象。
$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,但是这个函数似乎由遗留代码组成。