SharePoint:DateTimeControl não funciona em formulário customizado. “Sorry, something went wrong”
Olá!
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
Olá!
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!