Fala pessoal! Bom dia a todos,
ultimamente aqui na empresa temos feitos muitos desenvolvimentos para XML Publisher com procedures que escrevem o XML.
Quando imaginamos que um relatório parece ser mais simples usamos Definição de Dados (Data Template ou Data definition), acontece que me deparei com um problema bizarro esses dias:
Eu gero o meu relatório a partir de um programa concorrente, então tenho a minha lista de valores de fornecedores que exibe um nome ao usuário e joga o ID para o relatório.
Acontece que ao imprimir os parâmetros informados pelo usuário no relatório eu não quero o ID do fornecedor e sim o nome do mesmo.
Em package eu resolvia isso com uma função que recebia o ID e preenchia uma tag com o nome do mesmo.
Fiz algumas gambiarras aqui em definição de dados mais ainda não descobri um jeito legal e funcional(o jeito que estou usando não exibe parâmetros se o relatório não retornar dados) de se fazer isso em DD...
Alguém sabe de alguma solução ou pode me dar um caminho para a solução deste problema??
Desde já agradeço,
Renan.
XML Publisher - Definição de dados em XML e LOV's
-
- Rank: Estagiário Pleno
- Mensagens: 5
- Registrado em: Ter, 22 Fev 2011 11:01 am
- Localização: Juiz de Fora
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você pode tratar isso direto no seu SELECT dentro do Data Definition.
Exemplo:
Digamos que você tenha um parametro chamado p_representante (que é um codigo "20" que vem do concurrent). Mas é um parametro opcional, pode vir nulo.
Dai no seu select, você faz join buscando a DESCRICAO do representante normalmente:
Uma outra forma que é perfeitamente possível, é você criar um outro SELECT dentro do data definition. Dai basta você usar ele como quiser.
Exemplo:
Esse é um exemplo bem "completo", pois eu estou usando um monte de somatórios por grupo também.
Se tiver dúvida, manda o codigo aí pra gente ver e poder dar um help melhor!
Exemplo:
Digamos que você tenha um parametro chamado p_representante (que é um codigo "20" que vem do concurrent). Mas é um parametro opcional, pode vir nulo.
Dai no seu select, você faz join buscando a DESCRICAO do representante normalmente:
SELECT
A.ID_REPRES
, B.NOME_REPRESENTANTE
, A.VALOR
FROM
SUATABELA A
, REPRESENTANTES B
WHERE A.ID_REPRES = B.ID_REPRES
-- trata parametro opcional. Se é null, busca tudo. Se veio preenchido, filtra buscando apenas o repres informado.
AND ( p_representante IS NULL
OR
A.ID_REPRES = p_representante
)
Exemplo:
<?xml version="1.0" encoding="UTF-8"?>
<dataTemplate name="XXXXXXXX" description="RELATORIO DE TESTE" version="1.0">
<parameters>
<parameter name="p_gl_period" dataType="varchar2" />
<parameter name="p_tipo_comissao" dataType="varchar2" />
<parameter name="p_repres_numero" dataType="varchar2" />
</parameters>
<dataQuery>
<sqlStatement name="Q_DATAS">
<![CDATA[
--BUsca as datas do periodo informado
SELECT
to_char(start_date, 'dd/mm/yyyy') DTINI
, to_char(end_date, 'dd/mm/yyyy') DTFIM
FROM gl_periods
WHERE UPPER(period_name) = UPPER(:p_gl_period) --'JAN-11'--
AND period_set_name = 'GL_CALENDARIO'
]]>
</sqlStatement>
<sqlStatement name="Q_PRINC">
<![CDATA[
SELECT BLA BLA BLA BLA BLA BLA
]]>
</sqlStatement>
<sqlStatement name="Q_EMPRESA">
<![CDATA[
SELECT XG_FUN_XX_ORG_LE( TO_NUMBER(fnd_profile.value('ORG_ID')) ) NOME_EMPRESA
FROM dual
]]>
</sqlStatement>
</dataQuery>
<dataStructure>
<group name="G_EMPRESA" source="Q_EMPRESA">
<element name="NOME_EMPRESA" value="NOME_EMPRESA" />
</group>
<group name="G_DATAS" source="Q_DATAS">
<element name="DTINI" value="DTINI" />
<element name="DTFIM" value="DTFIM" />
</group>
<group name="G_REPRES" source="Q_PRINC">
<element name="VENDOR_NAME" value="VENDOR_NAME" />
<element name="INSCRICAO" value="INSCRICAO" />
<element name="T_REPRES_COMISSAO" value="G_LINHAS.COMISSAO" function="SUM()"/>
<element name="T_REPRES_BASE" value="G_LINHAS.BASE" function="SUM()"/>
<group name="G_TIPO" source="Q_PRINC">
<element name="TIPO" value="TIPO" />
<element name="T_TIPO_COMISSAO" value="G_LINHAS.COMISSAO" function="SUM()"/>
<element name="T_TIPO_BASE" value="G_LINHAS.BASE" function="SUM()"/>
<group name="G_LINHAS" source="Q_PRINC">
<element name="CLIENTE_NOME" value="CLIENTE_NOME" />
<element name="PEDIDO" value="PEDIDO" />
<element name="NOTA" value="NOTA" />
<element name="TITULO" value="TITULO" />
<element name="EMISSAO" value="EMISSAO" />
<element name="VENCIMENTO" value="VENCIMENTO" />
<element name="PAGTO" value="PAGTO" />
<element name="BASE" value="BASE" />
<element name="PERCENTUAL" value="PERCENTUAL" />
<element name="COMISSAO" value="COMISSAO" />
<element name="CATEGORY" value="CATEGORY" />
</group>
</group>
</group>
<element name="T_TOT_COMISSAO" value="G_LINHAS.COMISSAO" function="SUM()"/>
<element name="T_TOT_BASE" value="G_LINHAS.BASE" function="SUM()"/>
</dataStructure>
</dataTemplate>
Se tiver dúvida, manda o codigo aí pra gente ver e poder dar um help melhor!
-
- Rank: Estagiário Pleno
- Mensagens: 5
- Registrado em: Ter, 22 Fev 2011 11:01 am
- Localização: Juiz de Fora
Opa, muito obrigado pela resposta!!!
O segundo exemplo parece resolver o meu problema com clareza!!!
Eu criei um select separado e tal, ai lá embaixo eu setava um grupamento da mesma forma que você fez:
Só que não cheguei a submeter, o que eu fazia era o seguinte:
- Salvava o xml
- Carregava no template builder indo em Dados -> Carregar Esquema XML
Só que ele simplismente não exibe grupamentos que não tenham pais ou filhos igual esse ai de empresa que você fez...
O correto seria então eu fazer upload desta definição, geração de um XML de dados e importação do mesmo no bi publisher pelos Dados -> Carregar Dados??? Que ai sim ele traria esses campos de nome isolados para mim???
Valeu!
O segundo exemplo parece resolver o meu problema com clareza!!!
Eu criei um select separado e tal, ai lá embaixo eu setava um grupamento da mesma forma que você fez:
<group name="G_EMPRESA" source="Q_EMPRESA">
<element name="NOME_EMPRESA" value="NOME_EMPRESA"/>
</group>
- Salvava o xml
- Carregava no template builder indo em Dados -> Carregar Esquema XML
Só que ele simplismente não exibe grupamentos que não tenham pais ou filhos igual esse ai de empresa que você fez...
O correto seria então eu fazer upload desta definição, geração de um XML de dados e importação do mesmo no bi publisher pelos Dados -> Carregar Dados??? Que ai sim ele traria esses campos de nome isolados para mim???
Valeu!
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Bom, se o campo possui referencia dentro do dataStructure (lá onde se diz de qual SQL vem cada campo e também a estrutura dos grupos do XML), então ele tem que aparecer na saída do XML.
Normalmente, eu faço assim pra testar:
* Após carregado o data-definition dentro do XML-Publisher, eu rodo o concurrent, mas antes de submeter, eu tiro o LAYOUT associado no concurrent. (deixo tudo nulo, a LINGUA, LAYOUT, saida PDF, etc).
Dai submeto. Com isso, o request vai ficar amarelo, em WARNING. Isso porque não tinha nenhum layout associado. Se você clicar em SAIDA, vai aparecer o XML pra você salvar e ler no WORD.
Normalmente, eu faço assim pra testar:
* Após carregado o data-definition dentro do XML-Publisher, eu rodo o concurrent, mas antes de submeter, eu tiro o LAYOUT associado no concurrent. (deixo tudo nulo, a LINGUA, LAYOUT, saida PDF, etc).
Dai submeto. Com isso, o request vai ficar amarelo, em WARNING. Isso porque não tinha nenhum layout associado. Se você clicar em SAIDA, vai aparecer o XML pra você salvar e ler no WORD.
-
- Rank: Estagiário Pleno
- Mensagens: 5
- Registrado em: Ter, 22 Fev 2011 11:01 am
- Localização: Juiz de Fora
Muito obrigado pela sua ajuda dr_gori!
Para desativar o modelo RTF eu geralmente desativava o mesmo no admin do xml publisher colocando uma data final anterior ao dia atual.
Esse jeito que você mostrou parece bem mais prático!
Questão resolvida, obrigado e abraços.
Para desativar o modelo RTF eu geralmente desativava o mesmo no admin do xml publisher colocando uma data final anterior ao dia atual.
Esse jeito que você mostrou parece bem mais prático!
Questão resolvida, obrigado e abraços.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 13 visitantes