Como resolver erros de ‘NaN’ em views do SharePoint

2012-02-21 Off Por gambin

Olá Pessoal!

Quem trabalha com edições de dataviews e listviews no SharePoint Designer, se ainda não conhece terá grandes chances de conhecer o famoso ‘NaN‘!

Mas que raios é isso??

O NaN é uma mensagem carinhosa que significa Not a Number.

Pois bem, quando editamos uma dataview/ listview no SharePoint Designer, na verdade estamos editando um misto de HTML/ XSLT (linguagem de marcação visual largamente utilizada no SharePoint).

Mas o XSLT tem algumas regras e características que não se adequam bem em todos os cenários.

O exemplo abaixo é de uma view customizada que exibe os campos de um lista, sendo que o campo valor já é do tipo number:

 

Neste caso não se trata da configuração da lista ou algo do tipo, mas dos padrões de moedas regionais utilizadas (‘.’ como separador de milhar e ‘,’ como separador de centavos).

O XSLT segue um padrão semântico para exibição de números, e provavelmente, não está preparado para o Brasil ;p

Segue abaixo a cópia do código responsável pela formatação do conteúdo do campo Valor na view:

<xsl:value-of select="format-number(@Valor, &quot;R$#.##0,00;-R$#.##0,00&quot;, &quot;lcid1046&quot;)" />

Embora ainda vemos o formato lcid1046 mencionado no final, ele não funciona muito bem.

Podemos corrigir a exibição através da seguinte implementação:

<xsl:value-of select="translate(format-number(translate(@Valor,',','.'), 'R$#,##0.00;-R$#,##0.00'),'.',',')" />

Neste caso apenas utilizamos o recurso translate para que o XSLT possa compreender corretamente os separadores e fazer a exibição adequada trocando vírgula por ponto final.

Agora sim nossa view está bacana:

 

Confesso que esta não é a melhor solução codificadamente falando, entretanto foi a melhor solução que encontrei para este problema até o momento.

E você? Já viu essa peraltice do SharePoint? Conseguiu resolver de um jeito melhor? Arrebente nos comentários ;p

Abraços!

 

Obs: peço desculpas pela imagem neste post. Foi a primeira coisa que pensei quando vi uma série de NaN’s ;p