Um dos cenários mais comuns que você enfrenta como desenvolvedor de aplicativo móvel é permitir aos usuários ser produtivos quando há conectividade limitada ou nenhuma conectividade. O PowerApps tem um conjunto de recursos e comportamentos que ajudam você a desenvolver aplicativos com capacidade offline. Você pode:

  • Iniciar o aplicativo móvel do PowerApps quando estiver offline.
  • Executar os aplicativos desenvolvidos quando estiver offline.
  • Determinar quando um aplicativo está offline, online ou em uma conexão limitada usando o objeto de sinal Conexão.
  • Usar coleções e funções como LoadData e SaveData para o armazenamento básico de dados quando estiver offline.

Como criar aplicativos com capacidade offline

A primeira coisa a pensar em cenários offline é como seus aplicativos funcionam com os dados. Basicamente, os aplicativos no PowerApps acessam dados por meio de um conjunto de conectores fornecidos pela plataforma, como SharePoint, Office 365 e o Common Data Service. Você também pode criar conectores personalizados que permitem aos aplicativos acessar qualquer serviço que fornece um ponto de extremidade RESTful. Isso pode ser uma API Web ou um serviço como o Azure Functions. Todos esses conectores usam o HTTPS na Internet, o que significa que os usuários devem estar online para acessar dados e outras funcionalidades oferecidas por um serviço.

Aplicativo do PowerApps com conectores

Manipulando dados offline

Um dos aspectos mais interessantes do PowerApps é seu conjunto de funcionalidades e fórmulas, que possibilitam filtrar, pesquisar, classificar, agregar e manipular dados de forma consistente, independentemente da fonte de dados. As fontes variam de coleções em memória no aplicativo a listas do SharePoint, bancos de dados SQL e o Common Data Service. Essa consistência permite redirecionar um aplicativo com facilidade para usar outro back-end. O mais importante aqui é que ela também permite usar coleções locais para o gerenciamento de dados, quase sem nenhuma alteração à lógica de um aplicativo. Na verdade, as coleções locais são o principal mecanismo para a manipulação de dados offline.

Criando um aplicativo do Twitter offline

Para manter o foco nos aspectos offline do desenvolvimento de aplicativos, mostraremos um cenário simples centrado no Twitter. Criaremos um aplicativo que permite ler as postagens do Twitter e enviar tweets mesmo quando estiver offline. Quando o aplicativo fica online, o aplicativo posta os tweets e recarrega os dados locais.

Em um alto nível, o aplicativo faz o seguinte:

  1. Na inicialização do aplicativo (com base na propriedade OnVisible da primeira tela):

    • Se o dispositivo estiver online, acessamos o conector do Twitter diretamente para buscar dados e populamos uma coleção com esses dados.
    • Se o dispositivo estiver offline, carregamos os dados de um arquivo de cache local usando LoadData.
    • Permitimos ao usuário enviar tweets – se estiver online, postaremos diretamente no Twitter e atualizaremos o cache local.
  2. A cada 5 minutos, se estiver online:

    • Postaremos todos os tweets que temos no cache local.
    • Atualizaremos o cache local e o salvaremos usando SaveData.

Etapa 1: Criar um novo aplicativo de telefone

  1. Abra o PowerApps Studio.
  2. Clique ou toque em Novo > Aplicativo em branco > Layout de telefone.

    Aplicativo em branco, layout de telefone

Etapa 2: Adicionar uma conexão do Twitter

  1. Clique ou toque em Conteúdo > Fontes de dados e escolha Adicionar fonte de dados no painel Fontes de dados.
  2. Clique ou toque em Nova Conexão, selecione Twitter e clique ou toque em Criar.
  3. Insira suas credenciais e crie a conexão.

    Adicionar uma conexão do Twitter

Etapa 3: Carregar tweets em uma coleção LocalTweets durante a inicialização do aplicativo

Selecione a propriedade OnVisible em Screen1 no aplicativo e copie a seguinte fórmula:

If(Connection.Connected,

    ClearCollect(LocalTweets, Twitter.SearchTweet("PowerApps", {maxResults: 100}));

    UpdateContext({statusText: "Online data"})

    ,

    LoadData(LocalTweets, "Tweets", true);

    UpdateContext({statusText: "Local data"})

);

LoadData(LocalTweetsToPost, "LocalTweets", true);

SaveData(LocalTweets, "Tweets")

Fórmula para carregar tweets

Esta fórmula verifica se o dispositivo está online:

  • Se o dispositivo estiver online, ele carregará até 100 tweets em uma coleção LocalTweets com o termo de pesquisa “PowerApps”.
  • Se o dispositivo estiver offline, ele carregará o cache local de um arquivo chamado “Tweets”, caso esteja disponível.

Etapa 4: Adicionar uma galeria e associá-la à coleção LocalTweets

  1. Insira uma nova galeria com uma altura flexível: Inserir > Galeria > Altura flexível em branco.
  2. Defina a propriedade Items como LocalTweets.
  3. Adicione quatro controles Rótulo para exibir dados de cada tweet e defina a propriedades Text como:
    • ThisItem.TweetText
    • ThisItem.UserDetails.FullName & " @" & ThisItem.UserDetails.UserName
    • "RT: " & ThisItem.RetweetCount
    • Text(DateTimeValue(ThisItem.CreatedAtIso), DateTimeFormat.ShortDateTime)
  4. Adicione um controle Imagem e defina a propriedade Image como ThisItem.UserDetails.ProfileImageUrl.

Etapa 5: Adicionar um rótulo de status de conexão

Insira um novo controle Rótulo e defina sua propriedade Text com a seguinte fórmula:

If (Connection.Connected, "Connected", "Offline")

Essa fórmula verifica se o dispositivo está online. Se ele estiver, o texto do rótulo indicará “Conectado”; caso contrário, “Offline”.

Etapa 6: Adicionar uma entrada de texto para escrever novos tweets

  1. Insira um novo controle Entrada de texto chamado “NewTweetTextInput”.
  2. Defina a propriedade Reset da entrada de texto como resetNewTweet.

Etapa 7: Adicionar um botão para postar o tweet

  1. Adicione um controle Botão e defina sua propriedade Text como “Tweet”.
  2. Defina a propriedade OnSelect com a seguinte fórmula:

    If (Connection.Connected,
    
        Twitter.Tweet("", {tweetText: NewTweetTextInput.Text}),
    
        Collect(LocalTweetsToPost, {tweetText: NewTweetTextInput.Text});
    
        SaveData(LocalTweetsToPost, "LocalTweetsToPost")
    
    );
    
    UpdateContext({resetNewTweet: true});
    
    UpdateContext({resetNewTweet: false})
    

Esta fórmula verifica se o dispositivo está online:

  • Se o dispositivo estiver online, ele enviará tweets do texto imediatamente.
  • Se o dispositivo estiver offline, ele capturará o tweet em uma coleção LocalTweetsToPost e o salvará no aplicativo.

Em seguida, a fórmula redefinirá o texto na caixa de texto.

Etapa 8: Adicionar um temporizador para verificar se há tweets a cada cinco minutos

Adicione um novo controle Temporizador:

  • Defina a propriedade Duration como 300000.
  • Defina a propriedade AutoStart como verdadeiro.
  • Defina OnTimerEnd com a seguinte fórmula:

    If(Connection.Connected,
    
        ForAll(LocalTweetsToPost, Twitter.Tweet("", {tweetText: tweetText}));
    
        Clear(LocalTweetsToPost);
    
        Collect(LocalTweetsToPost, {tweetText: NewTweetTextInput.Text});
    
        SaveData(LocalTweetsToPost, "LocalTweetsToPost");
    
        UpdateContext({statusText: "Online data"})
    )
    

Essa fórmula verifica se o dispositivo está online. Se ele estiver, o aplicativo enviará tweets de todos os itens da coleção LocalTweetsToPost. Em seguida, ela limpará a coleção.

Agora que o aplicativo foi concluído, vamos ver sua aparência antes de passarmos ao teste. À esquerda, o aplicativo está conectado; e, à direita, ele está offline, com um tweet pronto para ser postado quando estiver online novamente.

Aplicativo concluído com os modos online e offline

Testando o aplicativo

Use as seguintes etapas para testar o aplicativo:

  1. Execute o PowerApps em um dispositivo móvel quando estiver online.

    É necessário executar um aplicativo pelo menos uma vez quando estiver online, de forma que você possa baixar o aplicativo no dispositivo.

  2. Inicie o aplicativo do Twitter.

  3. Observe que os tweets são carregados e que o status mostra Conectado.

  4. Feche o PowerApps completamente.

  5. Coloque o dispositivo no modo avião para garantir que ele está offline.

  6. Execute o PowerApps.

    Agora, é possível executar o aplicativo do Twitter offline e você tem acesso aos outros aplicativos que executou anteriormente nesse dispositivo quando estava online (ou seja, o PowerApps oculta todos os aplicativos que ainda não foram baixados no dispositivo).

  7. Execute o aplicativo novamente.

  8. Observe como ele reflete o estado de conexão corretamente, com o status Offline.

  9. Escreva um novo tweet. Ele será armazenado localmente na coleção LocalTweetsToPost.

  10. Saia do modo avião. Depois que o temporizador for disparado, o aplicativo postará o tweet.

Esperamos que este artigo forneça uma ideia das funcionalidades contidas no PowerApps para a criação de aplicativos offline. Como sempre, forneça comentários em nosso fórum e compartilhe seus exemplos de aplicativos offline no blog da comunidade do PowerApps.