Pergunta

Há um novo recurso interessante no SP 2010 onde você pode especificar uma fórmula de validação personalizada e uma mensagem de erro para qualquer coluna.

Por algum motivo, não funciona quando você substitui o NewForm.aspx padrão por uma lista por um formulário personalizado usando "Criar novo formulário de lista -> Novo formulário de item" do designer do SharePoint.Ele cria um aspx onde coloca um controle FormField para cada campo do tipo de conteúdo selecionado em vez do ListFormWebpart que itera e renderiza cada campo sem campos mencionados explicitamente na página.

O código para cada campo em um formulário personalizado recém-criado é semelhante ao seguinte (apenas para ilustrar)

<tr>
  <td width="190px" valign="top" class="ms-formlabel">
    <H3 class="ms-standardheader">
    <nobr>PhoneNumber</nobr></H3>
  </td>
  <td width="400px" valign="top" class="ms-formbody">
    <SharePoint:FormField runat="server" id="ff4{$Pos}" ControlMode="New" FieldName="PhoneNumber" __designer:bind="{ddwrt:DataBind('i',concat('ff4',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@PhoneNumber')}"/>
    <SharePoint:FieldDescription runat="server" id="ff4description{$Pos}" FieldName="PhoneNumber" ControlMode="New"/>
  </td>
</tr>

O problema é que com um formulário "Criar novo formulário de lista -> Novo formulário de item" a validação da fórmula (novo sharepoint 2010) não funciona:ele passa na validação no formulário, falhando apenas no estágio de salvamento, resultando em uma página de erro.

É de alguma forma configurável com o controle FormField ou posso de alguma outra forma aproveitar esse novo mecanismo de validação sp2010 ao usar páginas de item personalizadas (não ListFormWebpart) ou preciso escrever uma validação de GUI personalizada neste caso?

Obrigado!

Foi útil?

Solução

O problema não está no controle FormField em si, mas na web part DataFormWebPart em que eu estava usando esses campos.Existem 2 problemas:

  1. Com a inexistência o campo lança uma exceção que deve ser tratada corretamente pelo WebPart mostrando a mensagem de que já existe um item com tal valor do campo.Mas o DataFormWebPart não trata essa exceção, enquanto o ListFormWebPart padrão o faz.É semelhante com a fórmula de validação personalizada.
  2. Os controles de campo do SharePoint implementam a interface IValidator para que o WebPart proprietário possa validá-los e exibir mensagens apropriadas (por exemplo,para campos de pesquisa obrigatórios), mas o DataFormWebPart não faz isso (o ListFormWebPart faz)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top