Android Azure移动服务脱机同步软删除

时间:2017-08-16 17:03:30

标签: android .net azure soft-delete

我已经实现了支持Azure移动服务和离线同步的Android应用程序。我用两种不同的设备测试它。我在第一台设备上执行删除操作(软删除),这样就可以了。然后我让它同步,检查服务器端记录,删除列标记为'true'标记它。但我似乎无法让第二个平板电脑同步以反映新的更改,即不显示已删除的记录。

要启用软删除,我已将enableSoftDelete:true添加到Azure上应用服务的表控制器中。我没有在删除过程中触及我的应用程序,但下面是典型的删除:

    Save save = getSave(SaveID);
try {
            mtblSave.delete(save);
            return true;

        } catch (Exception exception) {
            exception.printStackTrace();
            return false;
        }

我正在使用.NET后端和Azure SQL Server。

有什么想法吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

  

但我似乎无法让第二个平板电脑同步以反映新的更改,即不显示已删除的记录。

Using soft delete in Mobile Services所述:

  

使用Offline data Sync for Mobile Services功能时,客户端SDK会自动查询已删除的记录并将其从本地数据库中删除。如果未启用软删除,则需要在后端编写其他代码,以便客户端SDK知道要从本地存储中删除哪些记录。否则,客户端本地存储和后端将与这些已删除的记录不一致,并且必须调用客户端方法PurgeAsync()以清除本地存储。

我认为您可以在处理拉取操作时利用fiddler来捕获网络跟踪。此外,您可以在构建用于提取数据的查询时添加includeDeleted方法,以便更好地了解此功能。

var pullQuery = mClient.getTable(ToDoItem.class).where().field("complete").eq(false).includeDeleted();
mToDoTable.pull(mPullQuery).get();

此外,有关在移动服务中使用离线数据同步的详细信息,您可以参考here

<强>更新

query参数是一个可选查询,用于过滤结果。

正如How offline synchronization works提到的增量同步

  

如果使用非null queryId,Azure Mobile SDK将执行增量同步。每次pull操作返回一组结果时,该结果集中的最新updatedAt时间戳存储在SDK本地系统表中。后续的pull操作仅在该时间戳之后检索记录。

     

查询名称可以是您选择的任何字符串,但对于您应用中的每个逻辑查询,它必须是唯一的。否则,不同的拉取操作可能会覆盖相同的增量同步时间戳,并且您的查询可能会返回错误的结果

您可以参考此answer并解决您的问题。