Archive

Posts Tagged ‘DateTimeControl’

SharePoint:DateTimeControl não funciona em formulário customizado. “Sorry, something went wrong”

Olá! Alegre

Cenário:

Precisei customizar um formulário no SharePoint 2013 e ao tentar abrir o calendário para selecionar uma data no DateTimeControl era exibido a mensagem de erro abaixo.

ERRO:

“Sorry, something went wrong”. Ou em português, algo similar a “Desculpe, algo deu errado.”

E ao procurar no ULS (LOGS) do SharePoint, a seguinte mensagem:

“Exception trying get context compatibility level: System.IO.FileNotFoundException: The site http://vmsp2013:80/_layouts/15/iframe.aspx?&cal=1&lcid=1046&langid=1046 could not be found in the Web application SPWebApplication Name=SharePoint – 80.”

SOLUÇÃO:

Demorei um tempo para reparar, mas percebi que a url não estava “correta”. Meu site utiliza “managed path”. Ou seja, seria algo como: http://vmsp2013/sites/meusite.

No SharePoint 2013 foi introduzido o “Host-Named SiteCollection” e acredito que por isso o DateTimeControl só está buscando no “root”. Mas, ainda há casos que precisamos manter compatibilidade antes de migrar para as novas tecnologias.

Enfim, o problema é causado por que NÃO existia sitecollection criada no root da WebApplication. Ao criar a sitecollection o problema foi resolvido, mas é necessário que o usuário tenha acesso a este site para que o controle DateTimeControl funcione.

Abraço!

Bug DateTimeControl perde “estado” no postback

October 21, 2012 1 comment

Olá! Smile

Cenário:

Já me deparei com esse “bug” algumas vezes, mas não tinha encontrado solução até então.

Ao utilizar o DateTimeControl no SharePoint 2010 e realizar alguns postbacks, o controle perdia o valor já preenchido anteriormente.

Encontrei um “workaround” para esse problema… bem #bizarro por sinal rs. Confira a seguir!

SOLUÇÃO:

Basta adicionar uma condição no método que causa o postback para o selected date do controle para que ele mantenha o estado. No meu caso, usava um DropDownList para dar postback e o evento SelectedIndexChanged coloquei minha condição:

if (dtcDateTime.SelectedDate < DateTime.Today) { }

Pronto, só isso já resolve. Não precisa fazer nada dentro da condição. Agora posso fazer quantos postbacks quiser, que o controle MANTEM o estado anterior.

Abraço!