Compartilhar via


Implementar lógica comercial e validação de dados em um aplicativo do Windows Phone para SharePoint

Implemente a validação de dados em um aplicativo do Windows Phone criado usando o modelo de Aplicativo de Lista do SharePoint para Windows Phone.

Em um aplicativo do Windows Phone destinado a produção usar, você provavelmente precisará validar os dados inseridos pelos usuários para, por exemplo, impor a lógica de negócios relevante à sua situação específica, ou para garantir a formatação apropriada dos valores inseridos ou simplesmente para capturar erros antes de salvar valores de uma lista do SharePoint. Projetos com base no modelo de aplicativo para Windows Phone SharePoint lista incluem lógica de validação de dados padrão, mas tais projetos também fornecem um mecanismo para desenvolvedores implementar a validação de dados personalizados.

Importante

Se você estiver desenvolvendo um aplicativo para Windows Phone 8, deverá usar Visual Studio Express 2012 em vez do Visual Studio 2010 Express. Com exceção do ambiente de desenvolvimento, todas as informações neste artigo se aplicam à criação de aplicativos para Windows Phone 8 e Windows Phone 7. > Para obter mais informações, consulte Como configurar um ambiente para desenvolver aplicativos móveis para o SharePoint.

Regras de validação de dados padrão

Alguns tipos de dados para campos em listas do SharePoint estão associados, por padrão, com formatação simples ou validação de dados. Se você inserir um URL inválido para um campo com base no campo de hiperlink ou imagem digite em uma lista do SharePoint e tentar salvar suas alterações, você verá uma mensagem indicando que o endereço inserido é inválido. Se você digitar um nome de cliente como um valor de um campo com base em data e hora de tipo de campo, você recebe uma mensagem instruindo você inserir uma data dentro de um intervalo válido para o campo.

Observação

[!OBSERVAçãO] Validação de entrada de data está em relação ao formato de data do SharePoint. Se o formato de data da localidade do telefone for necessário, personalize o campo e adicionar validações adequadamente.

Algumas dessas regras de validação básica também são impostas por padrão em um aplicativo do Windows Phone criado usando o modelo de aplicativo para Windows Phone SharePoint lista. Se você inserir qualquer outra coisa que não seja um valor de data em um campo vinculado a um campo do SharePoint de Tipo de Data e Hora no formulário Editar de um aplicativo Windows Phone com base em uma lista do SharePoint, você verá uma mensagem de erro de validação quando o foco mudar do TextBox controle associado ao campo. (Consulte a Figura 1.)

Figura 1. Validation error cue in a Windows Phone app

Validation error cue in a Windows Phone app

A caixa de texto rotulada "Hora de início" no formulário de edição estiver acoplada a um campo de data e hora da lista do SharePoint na qual este aplicativo de amostra se baseia. A sugestão de erro de validação (em texto vermelho) mostrada na Figura 1 será exibida se uma data inválida for inserida na caixa de texto (e a caixa de texto posteriormente perder o foco) porque a ValidatesOnNotifyDataErrors propriedade do Binding objeto associado à Text propriedade do TextBox controle está definida como True na declaração XAML que define o TextBox no arquivo EditForm.xaml .

<StackPanel Orientation="Vertical" Margin="0,5,0,5">
   <TextBlock TextWrapping="Wrap"
              HorizontalAlignment="Left"
              Style="{StaticResource PhoneTextNormalStyle}">Start Time*
   </TextBlock>
   <TextBox Height="Auto"
            Style="{StaticResource TextValidationTemplate}"
            FontSize="{StaticResource PhoneFontSizeNormal}"
            Width="470"
            HorizontalAlignment="Left"
            Name="txtEventDate"
            Text="{Binding [EventDate], Mode=TwoWay, ValidatesOnNotifyDataErrors=True,
                       NotifyOnValidationError=True}"
            TextWrapping="Wrap" />
   <TextBlock FontSize="16"
              TextWrapping="Wrap"
              HorizontalAlignment="Left"
              Style="{StaticResource PhoneTextSubtleStyle}"
              Text="{Binding DateTimeFormat}" />
</StackPanel>

(Se a ValidatesOnNotifyDataErrors propriedade estiver definida como False, o usuário não terá nenhuma indicação de que os dados inseridos são inválidos até que o botão Salvar seja escolhido. Nesse ponto, o usuário vê uma mensagem de erro em relação a erros de validação, pois a validação de formato em valores de data inseridos ainda é realizada pela classe base da qual a EditItemViewModel classe é derivada.)

Mas alguns campos talvez não forneça qualquer notificação para dados inválidos em um aplicativo do Windows Phone. E os modelos de projeto bem projetado Visual Studio são necessariamente generalizados para ser usado como um ponto de partida para muitos aplicativos diferentes. O modelo de aplicativo para Windows Phone SharePoint lista não pode incluir as regras de validação relevantes para contextos específicos e ainda manter seu valor como um modelo generalizado. Dependendo de suas necessidades e as circunstâncias em que seu aplicativo do Windows Phone específico será usado, você provavelmente desejará implementar suas próprias regras de validação de dados personalizados.

Implementar as regras de validação de dados personalizados

You can validate data entered by users of your Windows Phone app in several ways. A project created by using the Windows Phone SharePoint List Application template includes classes that serve as intermediaries between the forms (that is, the views) of the data in the Windows Phone app (for example, the EditForm.xaml file) and the data itself in the SharePoint list on which the app is based. Essas classes podem ser consideradas implementações do componente ViewModel do padrão de design Model-View-ViewModel (Figura 2). (For more information about how the Windows Phone SharePoint List Application template conforms to the MVVM software design pattern, see Arquitetura do modelo de Aplicativo de Lista do SharePoint para Windows Phone.)

Observação

[!OBSERVAçãO] Os modelos de lista do SharePoint não incluir validações padrão (por exemplo, a porcentagem concluída em uma lista de tarefas do SharePoint, seleção de postagem para uma lista de discussão de equipe e validação de tipo de campo decimal SP), mas você pode implementar tais validações.

Figura 2. Template files in ViewModel component

Template files in ViewModel component

Em aplicativos projetados com base no padrão MVVM, validação de dados geralmente é tratada na camada de dados (ou seja, no componente de modelo). Em projetos criados usando o modelo de aplicativo para Windows Phone SharePoint lista, um amplo mecanismo para validação de dados ficou "enviados" uma camada e implementado no componente ViewModel, para facilitar para os desenvolvedores a gerenciar a validação de dados. Projetos com base no modelo, portanto, o lugar mais adequado para o código personalizado que valida a entrada do usuário ou caso contrário, gerencia dados está nessas classes ViewModel. Em termos de validação de dados, a EditItemViewModel classe e a NewItemViewModel classe (as classes associadas aos formulários mais propensos a envolver edição e atualização de dados de lista) fornecem uma implementação aberta de um método de validação (chamado Validate()) que substitui o método de validação base na classe da qual essas duas classes são derivadas.

public override void Validate(string fieldName, object value)
{
  base.Validate(fieldName, value);
}

Esse método oferece um mecanismo conveniente para o desenvolvedor para adicionar lógica de validação personalizada que campos individuais de destinos. A abordagem geral é verificar o valor do fieldName argumento passado para o Validate() método para identificar o campo que você deseja associar ao código de validação personalizado. Você pode, por exemplo, usar uma switch instrução na implementação desse método para fornecer lógica de validação específica para vários campos no formulário Editar (EditForm.xaml) do seu aplicativo Windows.

Para o exemplo de código a seguir, suponha que uma instalação do SharePoint Server tem uma lista de ordens de produto criada usando o modelo de lista personalizada. A lista foi criada com as colunas e os tipos de campo mostrados na tabela 1.

Tabela 1. Lista de Pedidos de Produto

Coluna Tipo Obrigatório
Produto (ou seja, título) Linha única de texto (texto) Sim
Descrição Linha única de texto (texto) Não
Quantidade Número Sim
Data da ordem Data e hora (DateTime) Não
Data de adequação Data e hora (DateTime) Não
Número de contato Linha única de texto (texto) Não

Novamente, para os fins deste exemplo, suponha que as regras de validação simples a seguir devem ser impostas, com base na lógica de negócios empregada na empresa fictícia Contoso, Ltd., para um determinado produto ordenação sistema:

  • Datas de execução para os pedidos devem ser posteriores à data em que o pedido foi feito.
  • Se um cliente deseja fazer um pedido para um produto chamado dos dados difusa, os dados devem ser solicitados em pares. Conforme as regras peculiar na Contoso, Ltd., há simplesmente algo como um Die difusa.
  • Na lista de ordens de produto, o tipo de campo para números de telefone é "Única linha de texto" (ou seja, texto), que pode ser qualquer texto (até 255 caracteres, por padrão). Neste exemplo, uma regra de validação de formatação será imposta que exige dados inseridos para estar em um dos formatos de número de telefone comuns; Por exemplo, "(555) 555-5555".

Para implementar as regras de validação personalizadas

  1. Supondo que você tenha criado uma lista do SharePoint com base no modelo de Lista Personalizada que inclui as colunas e os tipos especificados na Tabela 1, crie um aplicativo Windows Phone usando o modelo Windows Phone Aplicativo de Lista do SharePoint no Visual Studio seguindo as etapas detalhadas em Como: Criar um aplicativo de lista do SharePoint Windows Phone.

  2. Em Gerenciador de Soluções, na pasta ViewModels para o projeto, clique duas vezes no arquivo EditItemViewModel.cs (ou escolha o arquivo e pressione F7) para abrir o arquivo para edição.

  3. Adicione as diretivas a seguir using à lista de diretivas na parte superior do arquivo.

    using System.Globalization;
    using System.Text.RegularExpressions;
    
  4. Substitua a implementação padrão do Validate() método no arquivo pelo código a seguir.

    public override void Validate(string fieldName, object value)
    {
        string fieldValue = value.ToString();
        if (!string.IsNullOrEmpty(fieldValue)) //Allowing for blank fields.
        {
            bool isProperValue = false;
    
            switch (fieldName)
            {
                case "Quantity":
                    // Enforce ordering Fuzzy Dice in pairs only.
                    int quantityOrdered;
                    isProperValue = Int32.TryParse(fieldValue, out quantityOrdered);
                    if (isProperValue)
                    {
                        if ((quantityOrdered % 2) != 0) // Odd number of product items ordered.
                        {
                            if ((string)this["Title"] == "Fuzzy Dice")
                            {
                                AddError("Item[Quantity]", "Fuzzy Dice must be ordered in pairs.
                                                                       No such thing as a Fuzzy Die!");
                            }
                            else
                            {
                                // Restriction on ordering in pairs doesn't apply to other products.
                                RemoveAllErrors("Item[Quantity]");
                            }
                        }
                        else
                        {
                            RemoveAllErrors("Item[Quantity]");
                        }
                    }
                    break;
                case "Fulfillment_x0020_Date":
                    // Determine whether fulfillment date is later than order date.
                    DateTime fulfillmentDate;
                    isProperValue = DateTime.TryParse(fieldValue, CultureInfo.CurrentCulture,
                                  DateTimeStyles.AssumeLocal, out fulfillmentDate);
                    if (isProperValue)
                    {
                        DateTime orderDate;
                        isProperValue = DateTime.TryParse((string)this["Order_x0020_Date"],
                                   CultureInfo.CurrentCulture, DateTimeStyles.AssumeLocal, out orderDate);
    
                        if (fulfillmentDate.CompareTo(orderDate) > 0)
                        {
                            RemoveAllErrors("Item[Fulfillment_x0020_Date]");
                        }
                        else
                        {
                            AddError("Item[Fulfillment_x0020_Date]",
                                    "Fulfillment Date must be later than Order Date.");
                        }
                    }
                    break;
                case "Contact_x0020_Number":
                    // Check that contact number is in an appropriate format.
                    Regex rx = new Regex(@"^\\(?([0-9]{3})\\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$");
                    if (rx.IsMatch(fieldValue))
                    {
                        RemoveAllErrors("Item[Contact_x0020_Number]");
                    }
                    else
                    {
                        //Specified Contact Number is not a valid phone number.
                        AddError("Item[Contact_x0020_Number]", "Specified Contact Number is invalid.");
                    }
                    break;
                default:
                    // Not adding custom validation for other fields.
                    break;
            }
        }
    
        //And then proceed with default validation from base class.
        base.Validate(fieldName, value);
    }
    

    Tenha em mente que os nomes de campo especificados neste exemplo de código se baseiam em Propriedades da lista de ordens de produto de amostra especificado na tabela 1. (Observe que no esquema XML para campos de lista no SharePoint Server, os espaços nos nomes dos campos são substituídos pela cadeia de caracteres "x0020" para o atributo Name do elemento Field que define um determinado campo. O modelo usa o atributo Name para um elemento Field como ele é definido no esquema XML no servidor, não no atributo DisplayName .) Você pode identificar os nomes de campo desses campos para os quais deseja implementar a lógica de validação examinando as declarações de associação das propriedades Text para os objetos TextBox definidos em EditForm.xaml ou examinando a cadeia de caracteres ViewFields da classe CamlQueryBuilder no arquivo ListProvider.cs.

  5. Salve o arquivo.

O código de validação personalizada neste exemplo é executado apenas se o argumento value passado para o método Validate não for uma cadeia de caracteres nula ou vazia. Conforme indicado na tabela 1, os campos Data de adequação e número de contato não são necessários para conter dados (como a lista é definida para as finalidades deste exemplo em SharePoint Server ), portanto, queremos permitir que esses campos em branco. Uma verificação simples para determinar se o argumento value é nulo não for suficiente, porque o valor passado poderia ser uma cadeia de caracteres de comprimento zero (que não correspondem a um valor nulo) e para esta amostra não queremos invalidar cadeias de caracteres de comprimento zero para campos que podem estar em branco. A lógica de validação para os campos de quantidade e o cumprimento da data inclui verificações adicionais dos valores passados para garantir que eles são do tipo apropriado. Se a verificação inicial aqui (antes da instrução de comutador ) confirmasse apenas que o valor passado não era nulo (em vez de verificar a condição mais estreita de ser uma cadeia de caracteres de comprimento zero), essas validações ainda não seriam executadas se o valor fosse uma cadeia de caracteres de comprimento zero, mas a lógica para validar dados para o campo Número de Contato ainda seria executada se o valor passado fosse uma cadeia de caracteres de comprimento zero. E, neste exemplo, que queremos para permitir o campo número do contato estar em branco (uma cadeia de caracteres de comprimento zero), especialmente quando um usuário começa a editar um item de lista, abra o formulário de edição.

Se você compile o projeto e implantá-lo no emulador do Windows Phone para executá-lo, você pode testar sua lógica de validação inserindo dados que viola suas regras de negócios para os campos da lista no formato editar o App. (veja a Figura 3).

Figura 3. Custom validation error cues

Custom validation error cues

O código neste exemplo, se ele está incluído no arquivo EditItemViewModel.cs apenas, impõe essas regras de validação para os dados inseridos pelos usuários somente no formulário Editar. Se você quiser impor as regras de validação tanto quando os usuários adicionam novos itens quanto quando os editam, você deve incluir a mesma lógica de validação no Validate() método no arquivo NewItemViewModel.cs (ou, preferencialmente, criar um arquivo de classe separado com uma função que inclua essa lógica de validação e chamar essa mesma função dos Validate() métodos no arquivo EditItemViewModel.cs e no arquivo NewItemViewModel.cs).

The validation logic in this sample enforces given business rules by indicating to the user that entered data is not in a format permitted by the rules, but the entered data is not intercepted and changed by this code. To intercept and, for example, format phone numbers in a consistent way before saving the data to the SharePoint list, you can implement custom data conversion for entered phone numbers. Para obter uma explicação da conversão de dados personalizada para campos de item de lista, consulte Como dar suporte e converter tipos de campo do SharePoint para aplicativos Windows Phone.

Confira também