2016-08-05 38 views
2

在我的离线同步Xamarin.Forms移动应用程序中,我想通知用户新东西可供审阅。要做到这一点,我需要知道何时通过PullAsync()拉动CHANGES。确定使用Azure移动应用程序服务拉动多少次更改?

我可以做一个countRecordsAfterPull() - countRecordsBeforePull()但这只会告诉我新记录的数量。我还需要知道UPDATED记录的数量。 (如果某些记录是软删除的,它们不应该干扰这些计数。)

当然,我需要引用所有这些记录,所以我可以使用它们。

可以这样做吗?

+1

对于推箱来说,有一个方便的'client.SyncContext.PendingOperations'属性(尽管它只给出* count *而不是引用推送的实体)。对于拉箱,我还没有发现任何类似的东西。 –

+1

我通常将该逻辑构建到数据中,并使用增量同步,通过'updatedAt'和'Version'字段过滤同步/数据以确定发生了什么变化。 – SushiHangover

+0

@SushiHangover嗯,我认为这是有效的,但是对于如此简单的事情来说,这是一个很大的努力......是否没有内置功能? –

回答

6

要获取记录更改通知,请使用连接到MobileServiceClient对象的EventManager对象,并在初始化期间设置本地存储库跟踪更改。 (由于此功能仅存在于.NET Azure Mobile客户端SDK中,因此尚未提供完整的文档和示例。)

本地存储操作可以通过使用跟踪选项初始化本地存储连接到事件管理器:

await client.SyncContext.InitializeAsync(store, StoreTrackingOptions.NotifyLocalAndServerOperations);` 

您可以订阅存储操作的事件,像这样:

subscription = client.EventManager.Subscribe<StoreOperationCompletedEvent>(StoreOperationEventHandler); 

我只是增加了一个wiki页面,涵盖了基础知识,这将在未来更多地充实:How to get notifications of new records added during Pull operation

+1

哇,很高兴这是开箱即用!和许多细致的选项来鼓捣,谢谢!就像我上面评论@AdrianHall一样,Azure是惊人的。 –

+0

我使用'StoreTrackingOptions.NotifyServerPullOperations'来知道其他客户端(或服务器)是否进行了插入或更新。这些枚举选项中的一个还告诉我什么时候记录被软删除(即被其他客户端删除,所以当我进行拉取时,我会发现它被软删除)? –

相关问题