ASP .NET Core - Criando serviços backend para aplicações móveis nativas - III

 Neste artigo eu vou mostrar como criar serviços backend usando ASP .NET Core MVC com suporte a aplicações móveis nativas.(Android, iOS e Windows Phone)

Continuando o artigo anterior vamos concluir o nosso projeto, completando a segunda parte do artigo e definindo o código para incluir, alterar, excluir e selecionar tarefas via acessando o serviço ASP .NET Core Web API  que esta atendendo no endereço:  http://192.168.1.18:5000/api/tarefa/

Para tornar mais simples o projeto não estou usando o padrão MVVM e assim estou acessando diretamente a camada de serviço a partir das Views. Em um projeto mais robusto isso não é recomendado.

Também não estou implementando a interface INotifyPropertyChanged nem usando a coleção ObservableCollection que permitiria atualizar a view automaticamente após qualquer alteração dos dados.

Para fazer a atualização estou chamando o método AtualizaDados() que acessa a web api e retorna todos os dados das tarefas. Essa abordagem simplifica o projeto mas não é aconselhável ser usada em um projeto de produção.

Recursos usados:

Nota: Baixe e use a versão Community 2017 do VS ela é grátis e é equivalente a versão Professional.

Definindo o código dos métodos CRUD no arquivo code-behind MainPage.xaml.cs

Abrindo o arquivo MainPage.axml.cs vamos começar definindo os namespaces usados:

using System;
using System.Collections.Generic;
using System.Linq;
using Xamarin.Forms;
using XF_Tarefas.Models;
using XF_Tarefas.Service;

No início do arquivo vamos declarar duas variáveis:

 que iremos usar e que precisam ser vísiveis em todo o arquivo:

 DataService dataService;
 List<TarefaItem> tarefas;

Código do construtor MainPage

No construtor da classe MainPage inclua o código abaixo onde criamos uma nova instância da classe DataService() e chamamos o método AtualizaDados();

   public MainPage()
    {
          InitializeComponent();
          dataService = new DataService();
           AtualizaDados();
  }

Método AtualizaDados()

A seguir temos o código do método AtualizaDados():

   async void AtualizaDados()
   {
            tarefas = await dataService.GetTarefasAsync();
            listaTarefas.ItemsSource = tarefas.OrderBy(item => item.Nome).ToList();
   }

Estamos obtendo as tarefas a partir da nossa web api usando o método GetTarefasAsync() e exibindo o resultado no controle ListView usando sua propriedade ItemSource.

Assim quando a aplicação for iniciada ela vai exibir todas as tarefas que definimos em nossa web api.

Código do evento Clicked do botão : Adicionar Tarefa

Para incluir uma nova tarerfa basta digitar as informações para Nome, Notas e marcar se a tarefa foi concluida ou não e clicar no botão Adicionar Tarefa.

O evento Clicked possui o seguinte código:

        private async void btnAdicionar_Clicked(object sender, EventArgs e)
        {
            if (Valida())
            {
                TarefaItem novaTarefa = new TarefaItem
                {
                    ID = "T" + DateTime.Now.Millisecond.ToString(),
                    Nome = txtNome.Text.Trim(),
                    Notas = txtNotas.Text.Trim(),
                    Concluido = opConcluido.IsToggled
                };
                try
                {
                    await dataService.AddTarefaAsync(novaTarefa);
                    LimpaTarefa();
                    AtualizaDados();
                }
                catch (Exception ex)
                {
                    await DisplayAlert("Erro", ex.Message, "OK");
                }
            }
            else
            {
                await DisplayAlert("Erro", "Dados inválidos...", "OK");
            }
        }

Este código chama o método Valida() que irá verificar se as informações da tarefa foram informadas e, em caso positivo, retornar true.

A seguir criamos uma nova tarefa e atribuimos os valores digitados.

Depois usamos o método AddTarefaAsync() da classe DataService passando a nova tarefa para ser incluída e atualizamos os dados do Listview.

Código do método Valida()

O código do método Valida() apenas retorna true se os dados foram informados e false caso contrário:

       private bool Valida()
        {
            if( string.IsNullOrEmpty(txtNome.Text) && string.IsNullOrEmpty(txtNotas.Text))
            {
                return false;
            }
            else
            {
                return true;
            }
       }

Código da ação de contexto do Listview para atualizar uma tarefa: OnAtualizar

Se você não sabe o que uma ação de contexto do ListView veja o meu artigo:  Xamarin.Forms - Trabalhando com ListView - Macoratti

       private async void OnAtualizar(object sender, EventArgs e)
        {
            if (Valida())
            {
                try
                {
                    var mi = ((MenuItem)sender);
                    TarefaItem tarefaAtualizar = (TarefaItem)mi.CommandParameter;

                    tarefaAtualizar.Nome = txtNome.Text;
                    tarefaAtualizar.Notas = txtNotas.Text;
                    tarefaAtualizar.Concluido = opConcluido.IsToggled;
                    await dataService.UpdateTarefaAsync(tarefaAtualizar);
                    LimpaTarefa();
                    AtualizaDados();
                }
                catch (Exception ex)
                {
                    await DisplayAlert("Erro", ex.Message, "OK");
                }
            }
            else
            {
                await DisplayAlert("Erro", "Dados inválidos...", "OK");
            }
        }

Para atualizar uma tarefa você tem que selecionar a tarefa que deseja alterar no ListView para que os dados da tarefa sejam exibidos nas views Entry/Switch acima do ListView.

Após isso altere os dados e depois, na tarefa selecionado no ListView, mantenha o mouse pressionado por alguns segundos para que as ações de contexto sejam exibidas.

Clique então em Alterar para acionar o evento OnAtualizar() que vai usar o método UpdateTarefaAsync() para atualizar os dados da tarefa.

Código do evento ItemSelected do ListView

No evento ItemSelected do ListView temos o código que vai permitir obter os dados de um item selecionado e exibí-los nas views Entry/Switch da página:

       private void listaTarefas_ItemSelected(object sender, SelectedItemChangedEventArgs e)
        {
            var tarefa = e.SelectedItem as TarefaItem;
            txtNome.Text = tarefa.Nome;
            txtNotas.Text = tarefa.Notas;
            opConcluido.IsToggled = tarefa.Concluido;
        }

Código da ação de contexto do Listview para remover uma tarefa: OnDeletar

Na ação de contexto do ListView definida no evento OnDeletar temos o código que irá remover a tarefa selecionada:

        private async void OnDeletar(object sender, EventArgs e)
        {
            try
            {
                var mi = ((MenuItem)sender);
                TarefaItem tarefaDeletar = (TarefaItem)mi.CommandParameter;

                await dataService.DeletaTarefaAsync(tarefaDeletar);
                LimpaTarefa();
                AtualizaDados();
            }
            catch (Exception ex)
            {
                await DisplayAlert("Erro", ex.Message, "OK");
            }
        }

Este código chama o método DeletaTarefaAsync() da classe DataService passando a tarefa selecionada para que ele seja removido via web api.

Executando o projeto iremos obter o seguinte resultado:

Pegue o projeto aqui :   XF_Tarefas.zip  (sem as referências)

Jesus dizia, pois, aos judeus que criam nele: Se vós permanecerdes na minha palavra, verdadeiramente sereis meus discípulos;
E conhecereis a verdade, e a verdade vos libertará.

João 8:31,32

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti