Este post demonstra o exercício 14.
Para baixar o material para esse exercício, acesse https://www.outsystems.com/learn/lesson/786/data-synchronization-exercise/
- Sincronização Automática
- Abra o projeto ToDo
- Abra a aba Logic e OfflineDataSyncConfiguration
- Mude os parâmetros SyncOnOnline, SyncOnLogin, SyncOnResume e RetryOnError para “Default Value” igual a “True”
- Publique a aplicação e rode. Se estiver logado, efetuar logoff e login para visualizar
- Habilitando mudanças Offline
- Na aba Data (ToDo) criar uma entidade estática SyncStatus
- Adicionar registro para None, Added e Updated
- Alterar a entidae LocalToDo, adicionando o campo SyncStatusId (relacionado a SyncStatus Identifier)
- Modificar a ação SaveOnClick (tela ToDoDetails)
- Excluir o If “not GetNetworkStatus()”, pois precisamos gravar localmente, mesmo sem conexão
- Criar If para verificação de data de encerramento passada
- GetLocalToDoById.List.Current.LocalToDo.DueDate <> NullDate() and GetLocalToDoById.List.Current.LocalToDo.DueDate < CurrDate()
- Setar Input_DueDate.Valid = False
- Input_DueDate.Message = “Data de encerramento não pode estar no passado”
- Criar If de Form1.Valid()
- Se Form1.Valid() = False, vá para o nó End
- Senão, prosseguir
- Criar If Offline (not GetNetworkStatus())
- Se verdadeiro, ir para If New To Do?
- Se falso
- Ir para CreateOrUpdateToDoWrapper (gravação direta no servidor)
- Marcar SyncStatus = None
- Ir para “CreateOrUpdateLocalToDo
- Criar If “New To Do?”
- LocalToDoId = NullIdentifier()
- Se falso, ir para If “Added SyncStatus?” (verifica se o status do registro está com Added)
- Senão
- Assign GetLocalToDoById.List.Current.LocalToDo.SyncStatusId = Entities.SyncStatus.Added
- Ir para “CreateOrUpdateLocalToDo”
- Criar If “Added SyncStatus?”
- Condição
- GetLocalToDoById.List.Current.LocalToDo.SyncStatusId = Entities.SyncStatus.Added
- True, ir para “CreateOrUpdateLocalToDo”
- False
- assign GetLocalToDoById.List.Current.LocalToDo.SyncStatusId = Entities.SyncStatus.Updated
- Ir para “CreateOrUpdateLocalToDo”
- Condição
- Fluxo completo
- Modificar a ação StarOnClick para que fique igual a figura abaixo
- Modificar a ação TakePictureOnClick
- Modificando ações de sincronização
- Na aba Logic, abra “Server Actions” e selecione “ServerDataSync” em “OfflineDataSync”
- Adicionar parâmetro “AddedLocalToDos”
- Dois cliques em “DataType”
- Adicionar outro parâmetro “UpdatedLocalToDos” e repetir o procedimento do item 2
- Na aba Logic, abra “Server Actions” e selecione “ServerDataSync” em “OfflineDataSync”
- Criando a lógica necessária para ServerDataSync
- Abrir o fluxo ServerDataSync (duplo clique)
- Tratamento AddedLocalToDos
- Adicionar “For Each” entre LogMessage e GetCategories
- Adicionar “Run Server Action” e colocar do lado direito do “For Each” e escolher ação de entidade “CreateToDo”
- Criar um “Cicle” entre o “For Each” e “CreateToDo”
- Selecionar “For Each” e configurar a propriedade “Record List” para “AddedLocalToDos” no parâmetro de entrada
- Selecione “CreateToDo” e configure a propriedade Source para “AddedLocalToDos.Current.LocalToDo”
- No mapeamento “LocalToDo to ToDo” configure “Id” para “NullIdentifier()” e “UserId” para “GetUserId()”
- Adicionar componente “If” abaixo do “CreateToDo”
- Label: “Has Resource?”
- Condition: AddedLocalToDos.Current.LocalResource.Id <> NullIdentifier()
- Adicione componente “Run Server Action” e colocar à esquerda do “If”
- Tratamento UpdatedLocalToDos
- Repetir o procedimento do item 2. / 8. / 2.
- Utilizar UpdateLocalToDos no “For Each”
- “Run Server Action” “UpdateToDo”
- Action: UpdateToDo
- Source: UpdateLocalToDos.Current.LocalToDo
- “Mapping from LocalToDo to ToDo”
- “If” “Has Resource?”
- Condition: UpdatedLocalToDos.Current.LocalResource.Id <> NullIdentifier()
- “Run Server Action” “CreateOrUpdateResource”
- Action: CreateOrUpdateResource
- Source: UpdatedLocalToDos.Current.LocalResource
- Implementando OfflineDataSync
- Em “Client Actions” selecione a ação “OfflineDataSync” (dentro de “OfflineDataSync”)
- Adicione um “Aggregate” entre “Start” e “ServerDataSync” e abra (duplo clique)
- Arraste a entidade “LocalToDo” para o “Data”
- Repita o procedimento acima para a entidade “LocalResource”
- Em “Filters” configure: LocalToDo.SyncStatusId = Entities.SyncStatus.Added
- Em “Sources” modifique a cláusula entre LocalToDo e LocalResource para “With or Without”
- Nomear para “GetAddedLocalToDos”
- Repetir o procedimento do item 2, agora para “GetUpdatedLocalToDos”
- Em “Filters” configure: LocalToDo.SyncStatusId = Entities.SyncStatus.Updated
- Retorne para ação Client “OfflineDataSync”
- Modificando Offline ícone
- Na aba Interface, abra “BottomBar” localizada no fluxo “Common”
- Usando “Widget Tree”, localize “BottomBarItem” que contém “Offline” ícone e apague-o
- Clique com o botão direito no “Link” que contém “New To Do” e escolha “Remove Enclosing If”
- Arraste um componente “Container” para o mesmo nível do “bottom-bar-ph”
- Configure a propriedade “Visible” do “Container como, “not NetworkIsOnline”
- Configure no “Container”
- Align: Center
- Style: “background-light-grey text-italic text-dark-red”
- Arraste um componente “Icon” para dentro do “Container” e escolha “Pic an Icon” como “power off”
- Configure a propriedade “Size” para “Font Size”
- Coloque o cursor ao lado direito do “Icon” e digite: “You are currently offline”
- Publique e teste a aplicação