Pesquisar este blog

quinta-feira, 18 de agosto de 2011

Dica da semana

Quem já viu o erro "CRX-API-0005"e conseguiu arrumar, sabe que isso é uma pegadinha da Cognos.

Descrição do erro:
Erro próximo à ou na posição '0'. A variável denominada '[Query].[Campo]' não é válida.
ou
An error on or around the position '0'. The variable named '[Query].[Field]' is invalid.

Isso sugere que o erro está em alguma variável condicional, porém esse mesmo erro pode aparecer em função de uma "Report Expression".

Como funciona:
O motor do ReportStudio tenta otimizar as queries removendo os Query Itens não utilizados no layout, variáveis condicionais e Report Expressions NÃO são considerados itens de layout por não possuirem containers(List, Crosstab, Repeater), ou seja, você pode colocar qualquer coisa neles, de qualquer query.

Então aparece o erro porque o campo não está no layout.

Como resolver:
Se você está com problema numa Lista então selecione-a e abra a propriedade "Propriedades"(genial esse nome), selecione o campo com problema.



No caso de um Crosstab ou Gráfico você deve selecionar o nó(ex.: crosstab node) que deve ter escopo com o campo, pode ser necessário ajusta em mais de um. Com o nó selecionado o procedimento é o mesmo da lista.


Explicação Cognos 8 e possivelmente Cognos 10 aqui.

segunda-feira, 15 de agosto de 2011

Javascript Parte 3 - Declarando javascripts

Muitas coisas são feitas via javascripts, mas já me acostumei a ver uns erros comuns, cometidos por mero desconhecimento.

Um deles é o simples fato de não declarar os parametros corretos na TAG <script>.

Esse simples fato pode fazer tudo ir por agua abaixo.

O jeito que identifiquei ser ideal é o abaixo, funciona para as versões 6, 7, 8, 9 do IE e ainda para as versões 3, 4 e 5 do Firefox.
<script type="text/javascript" language="javascript"></script>
Em browsers mais antigos a propriedade language era aceita sem problemas, mas nos mais novos se consolidou a propriedade type, então não deixe de declará-la.

Abs

quinta-feira, 4 de agosto de 2011

Dica da semana

Uma dica muito útil para processos de carga.

Você sabe a diferença entre UNION e UNION ALL?

A diferença é bem simples, UNION agrupa dois sources fazendo DISTINCT do resultset, enquanto UNION ALL  apenas junta os resultsets de cada source.

Em outras palavras, UNION ALL é mais performático por economizar o overhead da agregação.

Claro que cada um serve para uma coisa diferente, mas se você sabe o cenário em que trabalha, agora pode escolher se vai utilizar um ou outro.

Abs,

Data Manager 10.1 - Erro no Pivot

Vamos ao primeiro post sobre Data Manager.

Demorou mas por fim apareceu um erro na versão 10.1 do Data Manager, ele aparece com esse síntoma:

  DM-HDL-0104 The handle is valid, but not of the correct type.

Acontece ao editar um Datastream que possúi pivots mapeados, sem explicação aparente.
A explicação é simples, BUG!
Como resolver? Instalando o FP 1.

Agora vamos esperar pra ver se não aparece outro.

terça-feira, 2 de agosto de 2011

Javascript Parte 2 - Executar relatório

Muitas vezes precisamos executar o relatório com uma opção pré definida, mas sem exibir a página de prompt ao usuário.

Uma solução possível é exibir a página de prompt por uma fração de segundos, só para pegar as informaçõs dos prompts e executar o relatório.

Por eexemplo, você quer que o relatório seja executado com o último ano e mes carregado, mas também quer que seja possivel escolher outros períodos.

Então você configura seu prompt pra para trazer de modo decresce os periodos, remove os ifens e a linha de título e manda rodar o relatório, assim a primeira opção da lista será passada como parametro.

Então para executar o relatório via javascript o comando muda de acordo com a versão, veja abaixo os comandos para cada uma:
8.1 e 8.2 - setTimeout('promptActionFinish()',100);
8.3, 8.4 e 10.1 - setTimeout('promptAction(\'submit\')',100);  OU setTimeout('promptAction(\'finish\')',100);
Explanação: o comando setTimeout(arg 1, arg 2) server para chamar a função arg 1 de acordo com o tempo arg 2 em milisegundos.

Lembrando que esse comando deve estar sempre dentro de um HTML Item no rodapé da página, e dentro da TAG <script>