none
xml no SSRS RRS feed

  • Pergunta

  •  

    Galera,

     

    tenho uma aplicação pra vários bancos de dados que estão divididos em 2 servidores.

    Preciso montar um único relatório no SSRS que funcione pra todos esses bancos(clientes)!

    Sendo assim esse relatório tem que ter uma conexão dinâmica.

     

    Alguém tem algum idéia de como eu posso fazer isso sem perder a segurança dos dados?

    Não gostaria de passar por parâmetro o server nem o database.

     

    Minha outra alternativa(a que me agrada mais!) é eu não precisar fazer conexão alguma no SSRS.

    Alguém sabe se eu posso passar uma String Xml como parâmetro e o relatório ler direto dela?????????

    Ou se tiverem alguma opção em que eu não precise buscar os dados pelo reporting services tmb me ajuda!

     

    Help me!!!

     

    desde já agradeço!!!

    sexta-feira, 14 de dezembro de 2007 13:57

Todas as Respostas

  •  

    Bom dia Carlos,

     

    Você pode criar um datasource para um reposítório XML (ao invez de escolher base SQL seleciona XML na combo dos datasources), isso não resolve seu problema?

     

     

    Att

    Guilherme

    sexta-feira, 14 de dezembro de 2007 21:42
  • bom dia!

     

    como assim repositório xml??? me explica esse negócio ae cara!

    o meu pensamento era levar da aplicação uma string xml para o relatório, ou seja, o relatório só organizaria os dados!!

     

     

    é isso???

     

    att,

     

    segunda-feira, 17 de dezembro de 2007 11:19
  • O que você pode fazer para proteger é criar num banco uma procedure que acessa os bancos locais e remotos usando linked server

     

    Locais

    [BANCO].[OWNER].[TABELA]

     

    REMOTOS

    [SERVIDOR].[BANCO].[OWNER].[TABELA]

     

    Espero ter ajudado

    segunda-feira, 17 de dezembro de 2007 12:36
  •  

    Você pode ter um arquivo XML com seus dados, por exemplo:


    <dados>
     <linha>
      <coluna>teste </coluna>
      <coluna2>Nome </coluna2>
      <coluna3>Idade</coluna3>
     </linha>
     <linha>
      <coluna>teste </coluna>
      <coluna2>Nome </coluna2>
      <coluna3>Idade</coluna3>
     </linha>
     <linha>
      <coluna>teste </coluna>
      <coluna2>Nome </coluna2>
      <coluna3>Idade</coluna3>
     </linha>
    </dados>

     

    No seu relatório você cria um datasource XML apontando para esse arquivo XML. Você usa um path para indicar quais elementos do XML você quer no relatório e o RS vai te dar um DataSet a partir desse arquivo.

     

    No seu caso você teria que gerar esse XML com os dados para alimentar no seu relatório e publicar onde o RS tenha acesso.

     

    Espero ter esclarecido,

     

    Boreki

    segunda-feira, 17 de dezembro de 2007 19:35
  • cara!

     

    essas duas últimas dicas vão ser muito úteis pra mim!

    mas preciso de mais uma idéia! vamos ver se tu me ajuda com essa!

    sempre utilizei xml como parâmetro diretro entre minhas funções!

     

    mas acho q meu caso no momente tem mais algumas complicações!

     

    criar o xml com os dados é fácil! faço isso direto no sql e devolvo pra aplicação.

    mas como vou publicar esse xml? eu salvo ele como um arquivo .xml dentro de um diretório qualquer no server?

     

    "No seu relatório você cria um datasource XML apontando para esse arquivo XML."

     

    o que eu entendi disso é que cada relatório vai ter q ter um xml específico pra ele.

    mas como isso vai funcionar na prática?

    - meu cliente submete os dados de filtros do relatório.

    - minha aplicação acessa o banco e sobrepõe o arquivo .xml de mesmo nome no diretório

    - o SSRS acessa os dados que já vão estar atualizados

     

    é isso?

    não corro o risco de vários usuários de empresas (bancos) diferentes requisitarem o mesmo relatório e acabarem vendo dados de outros???

     

    desde já agradeço!!!

     

    att,

     

     

    terça-feira, 18 de dezembro de 2007 11:50
  •  

    Acho que agora entendo melhor o seu problema. E sim, se você estiver gerando o mesmo XML de bases diferentes em um arquivo com o mesmo nome, acredito que possa ocorrer de um cliente ver informação de outro banco.

     

    Você até pode variar o resultado do XML usando um WebService para prover o seu XML (ao invez do arquivo XML estático). Dessa forma com a sessão no web service você saberia qual o cliente está conectado, seu webservice conecta ao banco correto e publica o xml para o RS.

     

    Mas acredito que no seu caso você pode simplesmente fazer uma conexão baseada em expressão (direto ao banco SQL, sem usar XML como intermediário). Por exemplo, esse aqui é conteudo do meu data source:

     

    Code Block
    ="Data Source=" & Parameters!ServerName.Value & ";Initial Catalog=AdventureWorks2000"

     

     

    Então eu posso setar o valor de ServerName para o servidor de onde eu quero que seja lida a informação.

     

     

    Da mesma forma, se você REALMENTE quiser gerar um arquivo XML você pode gerar arquivos diferentes para cada cliente e tambem variar o seu XML Datasource para cada arquivo diferente:

     

    Code Block
    =Parameters!XMLPath.Value

     

     

     

     

    terça-feira, 18 de dezembro de 2007 19:06
  • Cara,

     

    eu vou testar com o XMLPath!

    Vou gerar um xml com um nome randômico qualquer e passar o nome por parâmetro.

     

    meu primeiro passo vai ser esse! se funcionar começo a me preocupar mais com o fato de que eu vou ter que usar um só dos dois servers como repositório RS.

     

    Vou testar agora e te dou um "grito" pra dizer se funfou!

     

    vlw

    quarta-feira, 19 de dezembro de 2007 11:18
  • Carlos,

    1 - Como o Fonseca disse, sugiro que vc crie uma procedure e passe por parametro o nome da base que vc quer acessar.

    2 - Crie um Linked Server para o caso de ter que acessar uma base em servidor diferente.

    3 - Crie um parametro no relatório com uma combo contendo o nome de cada base onde vc poderá extrair as informações.

    Abraço

     

    quarta-feira, 19 de dezembro de 2007 12:48
  • cara,

     

    tentei usar mas estou tento problemas! procurei nos grupos do google e tem alguma pessoas que estão na mesma mas ainda não tem nenhuma resposta la.

     

    quando eu coloco o data source do tipo xml eu tenho que colocar uma string de conexão.

     

    o que eu coloco?

    e como eu busco os dados do xml após isso? tem alguma sintaxe específica?

     

    vlw

    quarta-feira, 19 de dezembro de 2007 12:54
  • Lucas,

     

    não posso fazer isso!

     

    minha aplicação funciona assim;

     

    - os nossos cliente acessam da seguinte forma...www.nossodomínio.com.br/nome da empresa do cliente ..isso a apliação acessar o dirétório do cliente que tem apenas um aquivo com o id_cli, e este é colocado em uma variável de sessão

    - é digitado o usuário e a senha

    - uma conexão estática acessa um database de configuração (este possui um registro pra cada cliente nosso, com os dados do nome do banco, server, user e senha)

    - uma segunda conexão usa os dados acima e se conecta ao banco cliente (www.nossodomínio.com.br/nome da empresa do cliente )

     

    a segurança da aplicação é o principal pra nós! não podemos deixar um cliente acessar os dados de outro de maneira alguma.

     

    por isso não posso colocar um combo com os bancos. quem acessa são os próprios cliente.

     

    e fazer a conexão no próprio relatório ficou muito burocrático. eu não tenho tanta flexibilidado quando na aplicação.

     

    minha idéia é de passar os dados de alguma forma direto pro Reporting services e este só os organizaria.

     

    se tiver alguma idéia de como eu fazer isso agradeço desde já!

     

    vlw

     

     

    quarta-feira, 19 de dezembro de 2007 13:26
  • Vc esta utilizando o report viewer no ASP.net ou disponibilizou o report manager?

     

     

    quarta-feira, 19 de dezembro de 2007 13:47
  •  

    Lucas,

     

    na real minha aplicação é em asp 3.0 e eu quero acessar o relatório via url.

     

    estou desenvolvendo ele no visual studio 2005 mas os testes eu acesso direto via url.

     

    era isso que tu queria saber?

     

    vlw 

    quarta-feira, 19 de dezembro de 2007 14:10
  • Idéia:

    crie um iframe dentro da página que chamará seu report...

    Monte a url do relatório com os parametros para cada cliente a partir do momento que vc que ele entrar na página e atribua essa url ao iframe.

    Essa url pode ser montada a partir dos dados da sessão e também das informação armazenadas no seu xml.

    Monte uma Store Procedure como eu te falei anteriormente que irá extrair as informações de acordo com os parametros (utilizando um linked server para servidor remoto).

    Aí é só exibir o relatório.

    Essa solução resolve para vc?

    Abraço

    quarta-feira, 19 de dezembro de 2007 14:22
  • A string de conexão é um link direto para o arquivo XML.

     

    Ex: http://www.boreki.eng.br/dados.xml

     

    A maneira como o RS busca os dados no XML é um pouco diferente, não é um XPath tradicional. Se voce tiver um arquivo XML bem formatado

     

    Code Block

    <dados>
     <linha>
      <coluna>teste </coluna>
      <coluna2>Nome </coluna2>
      <coluna3>Idade</coluna3>
     </linha>
     <linha>
      <coluna>teste </coluna>
      <coluna2>Nome </coluna2>
      <coluna3>Idade</coluna3>
     </linha>
     <linha>
      <coluna>teste </coluna>
      <coluna2>Nome </coluna2>
      <coluna3>Idade</coluna3>
     </linha>

     

     

    A string de conexão pode ser "*" e o RS 'adivinha' a estrutura dos dados. Da mesma maneira você pode indicar qual o caminho você quer que ele use, algo como "\dados\linha\coluna".

     

    Só quero adicionar que não sou expert em banco de dados, portanto a solução do Lucas e do Fonseca devem estar bem mais perto de uma 'best practice' para DB Smile

     

    Abraço

     

    Boreki

     

     

    quarta-feira, 19 de dezembro de 2007 16:52
  • cara,

     

    consegui fazer meu relatório acessar os dados de um arquivo xml. Perfeito!

     

    eu acho q mais adiante vou ter que usar as idéias dos nossos comparças Lucas e Foncesa sim!

     

    to parado em um problema agora q me pareçe algum detalhe de configuração.

     

    quando meu xml tem algum acento ou "ç" da erro na linha!

     

    isso é alguma coisa fácil de se resolver???

     

    abraço pra todos q estão me ajudando!

    vcs são macacos gordos! tão me quebrando um galhão!

    quinta-feira, 20 de dezembro de 2007 14:14
  •  

    Não deveria dar problema principalmente se o conteúdo estiver dentro de uma sessão CDATA.
    quinta-feira, 20 de dezembro de 2007 16:50
  • Verifique o encoding do seu XML....

    Adicione um cabeçalho que pode funcionar:

    Code Snippet

    <?xml version="1.0" encoding="UTF-8"?>

     

     

    Abraço
    sexta-feira, 21 de dezembro de 2007 17:55