Evento de Atualização do Item do SharePoint - Cancelar o evento de volta à página EditForm?
-
20-09-2019 - |
Pergunta
Eu tenho um receptor de evento para um tipo de conteúdo para validar alguns dados no evento ItemUpdating. Se eu cancelar o evento (alguns dos dados não são válidos, por exemplo), defino as propriedades canceladas como true:
properties.Cancel = true;
properties.ErrorMessage = "...";
O SharePoint cancela o evento de atualização OK, mas mostra a página de erro padrão do SharePoint (com a mensagem especificada). O único problema é que tenho uma reclamação de que isso não é realmente muito útil - devemos retornar à página Editform para que os detalhes possam ser atualizados.
Alguém fez isso, existe uma maneira fácil? A única sugestão que tive é que posso implementar minha própria página de erro, mas isso parece uma solução bastante pesada para um processo simples (teoricamente).
Solução
Você pode tentar produzir o código HTML (que inclui JavaScript também) no errorMessage. Mas mesmo se você o fizer, o problema é que você não tem um caminho seguro de volta aos dados que o usuário inseriu. Ou você faz um redirecionamento HTTP/301 e depois é um novo carregamento de página, ou você faz o cliente ir history.back()
com JavaScript e, em seguida, o navegador pode recarregar a página.
A maneira oficial de fazer isso é que você cria uma definição de lista e personaliza o modelo de lista. Em seguida, você edita o modelo de formulário de edição e inclui tantos controles do validador ASP.NET conforme necessário. Em seguida, implemente a lógica do lado do servidor conforme necessário. Este artigo explica a técnica: http://msdn.microsoft.com/en-us/library/aa543922.aspx
Editar: Para anexar um controle personalizado para a edição de um contentType específico, você adiciona uma seção XMLDocuments à sua definição de contentType. Por exemplo, assim
<ContentType
..........
<XmlDocuments>
<XmlDocument NamespaceURI="http://schemas.microsoft.com/sharepoint/v3/contenttype/forms">
<FormTemplates xmlns="http://schemas.microsoft.com/sharepoint/v3/contenttype/forms">
<Display>ContentTypeName_DispForm</Display>
<Edit>ContentTypeName_EditForm</Edit>
<New>ContentTypeName_NewForm</New>
</FormTemplates>
</XmlDocument>
</XmlDocuments>
.......
Então você cria o seu próprio yoursolution_controltemplates.ascx
arquivo, que contém também esses blocos: "
<SharePoint:RenderingTemplate ID="ContentTypeName_DispForm" runat="server">
<Template>
<!-- put whatever controls you need here, we typically create a
separate custom control which implements everything-->
</Template>
</SharePoint:RenderingTemplate>
Outras dicas
Você pode tentar redirecionar usando o copyutil: http://weblogs.asp.net/jan/archive/2008/02/26/copyutil-aspx-a-little-sharepoint-gem.aspx
Page.Response.redirect (link)
Talvez isso funcione