Я использую стороннее расширение в Symfony для подключения к SSRS: https://github.com/ChartBlocks/php-ssrs
Мне нужно сохранить мой источник данных SSRS как «запрос на ввод учетных данных», поскольку мы также используем другое решение, которое требует этого, но я не уверен, как установить DataSourceCredentials в моем решении. Я получаю сообщение об ошибке: System.Web.Services.Protocols.SoapException: один или несколько учетных данных источника данных, необходимых для запуска отчета, не были указаны.
Вот мой код в моем контроллере:
$options = [
'username' => $this->getParameter('ssrs_user'),
'password' => $this->getParameter('ssrs_password')
];
$ssrs = new SSRS\Report($this->getParameter('ssrs_server'), $options);
$result = $ssrs->loadReport($this->getParameter('ssrs_base').'/'.$request->get('report'));
$ssrs->setSessionId($result->executionInfo->ExecutionID);
$parameters = json_decode($request->get('parameters'),true);
$ssrs->setExecutionParameters(new SSRS\Object\ExecutionParameters($parameters));
$output = $ssrs->render('HTML4.0'); // PDF | XML | CSV | HTML4.0 | Excel
return $output;
Кто-нибудь знает, что мне нужно добавить, чтобы передать DataSourceCredentials?
Нашел ответ, создав собственный метод в файле Report.php, пока он не обновится в ядре:
public function setDataSourceCredentials($datasource,$username,$password) {
$this->checkSessionId();
$options = array(
'Credentials' => array(
'DataSourceCredentials' => array(
'DataSourceName' => $datasource,
'UserName' => $username,
'Password' => $password
)
)
);
$result = $this->getSoapExecution()->SetExecutionCredentials($options);
return new ExecutionInfo($result);
}
Я вызываю это в моем контроллере перед рендерингом отчета:
$ssrs->setExecutionParameters(new SSRS\Object\ExecutionParameters($parameters));
$ssrs->setDataSourceCredentials($this->getParameter('ssrs_datasource'),$this->getParameter('ssrs_sql_user'),$this->getParameter('ssrs_sql_password'));
Других решений пока нет …