我想使用PHP SOAP客戶端從JasperServer運行報告。我在網上找到了這個例子,但我想附加一個用於報表數據的XML數據源,但我不確定它應該如何正確連接。使用PHP SOAP客戶端從JasperServer運行報告
如何將我的XML數據源附加到SOAP請求,這是Jasper Server可接受的?
public function requestReport($report, $format, $params) {
$params_xml = "";
foreach ($params as $name => $value) {
$params_xml .= "<parameter name=\"$name\"><![CDATA[$value]]></parameter>\n";
}
$request = "
<request operationName=\"runReport\" locale=\"en\">
<argument name=\"RUN_OUTPUT_FORMAT\">$format</argument>
<resourceDescriptor name=\"\" wsType=\"\"
uriString=\"$report\"
isNew=\"false\">
<label>null</label>
$params_xml
</resourceDescriptor>
</request>
";
$client = new SoapClient(null, array(
'location' => $this->url,
'uri' => 'urn:',
'login' => $this->username,
'password' => $this->password,
'trace' => 1,
'exception'=> 1,
'soap_version' => SOAP_1_1,
'style' => SOAP_RPC,
'use' => SOAP_LITERAL
));
$pdf = null;
try {
$result = $client->__soapCall('runReport', array(
new SoapParam($request,"requestXmlString")
));
$pdf = $this->parseReponseWithReportData(
$client->__getLastResponseHeaders(),
$client->__getLastResponse());
} catch(SoapFault $exception) {
$responseHeaders = $client->__getLastResponseHeaders();
if ($exception->faultstring == "looks like we got no XML document" &&
strpos($responseHeaders, "Content-Type: multipart/related;") !== false) {
$pdf = $this->parseReponseWithReportData($responseHeaders, $client->__getLastResponse());
} else {
throw $exception;
}
}
if ($pdf)
return $pdf;
else
throw new Exception("Jasper did not return PDF data. Instead got: \n$pdf");
}
完整的例子我發現這裏https://gist.github.com/26205
我們的目標是要像這樣創造的東西:
您是否要求某人爲您編寫代碼?你必須深入研究你的問題,而不是「我想要一個我整個項目的實例」。 –
不,只需要知道如何在PHP中使用Jasper Server可以接受的XML數據附件。其餘的大部分工作都已完成,並將成爲開放源代碼。 – FlappySocks