Obtendo o caminho do arquivo do Business Objects Enterprise programaticamente
-
12-12-2019 - |
Pergunta
Dentro das APIs do Crystal Reports que vêm como padrão com o Visual Studios, existe alguma maneira de extrair um caminho de arquivo de um relatório existente em um servidor Business Objects Enterprise?Criamos um objeto ReportDocument e o carregamos usando um InfoStore e um EnterpriseSession.Estamos procurando uma maneira de extrair programaticamente o nome do caminho do arquivo para que possamos usá-lo como metadados em nosso processo de extração.Além disso, tentamos usar a propriedade FileName na classe ReportDocument, mas ela apenas retorna um CUID de relatório.
Se não conseguirmos descobrir uma maneira de fazer isso, faremos isso programaticamente por meio de uma função recursiva, mas eu definitivamente faria isso prefiro para encontrar uma propriedade que tenha isso armazenado.
Solução 2
Para sua informação, foi assim que encontramos uma solução para o problema.
Tudo o que usamos é um StringBuilder
e um InfoObject
consulta que se parece com o seguinte:
string sReportQueryString =
"SELECT SI_ID, SI_CUID, SI_NAME, SI_PATH, SI_PARENT_CUID " +
"FROM CI_INFOOBJECTS " +
"WHERE SI_PROGID='CrystalEnterprise.Report' AND SI_INSTANCE = 0";
Depois, chamamos nosso método recursivo e executamos o seguinte código:
if (rptInfo.ParentID != 0)
{
pathName.Insert(0, "\\" + rptInfo.Parent.ToString());
getPath(rptInfo.Parent, ref pathName);
}
Onde rptInfo
é um InfoObject
e pathName
é um StringBuilder
.
Outras dicas
Isso é possível apenas do Infostore.Na sua consulta, você deseja incluir os SI_Files na resposta.Se você já está fazendo um Select * from ci_infoobjects whem si_name= 'xyz' , então você já terá voltado.
A parte complicada é que a propriedade Si_Files está em uma sacola de propriedade e tem 2 partes que você se preocupa:
- .
- si_file1
- si_path
si_file1 é o nome do arquivo verdadeiro como ele foi armazenado dentro do sistema de repositório de arquivos (FRS).O SI_PATH é o caminho do arquivo dentro do FRS.O caminho será semelhante a frs: // entrada / a_135 / 028/000/7303 / A primeira seção frs: // entrada refere-se ao caminho como configurado para o caminho conformeFRS dentro do CMC.O restante do caminho é um caminho regular do sistema de arquivos para onde o Si_File1 é armazenado.