Microsoft图形更改跟踪

时间:2017-10-12 14:28:43

标签: c# microsoft-graph

我正在使用我从Nuget获得的Microsoft.Graph库。关于使用增量进行更改跟踪,我遇到了问题。假设

我正在使用类似下面代码的内容对用户进行更改:

var usersDeltaRequest = client
    .Users
    .Delta()
    .Request(usersDeltaLink == null ? new Option[0] : new []
    {
        new QueryOption("$deltatoken", usersDeltaLink)
    });

var users = await usersDeltaRequest.GetAsync();

foreach (var user in users)
{
    //code that updates the user goes here
}

我的问题是,在这种情况下,返回的是一个User对象。但是,由于这是delta,因此不会填充对象中的所有字段。保证仅填充已更改的那些。

现在我要解析手动返回的JSON,很容易看出哪些字段实际上已包含在响应中,因为只有那些字段才会包含在JSON中。

但是,库会返回一个User对象,并将尚未返回的字段保留为null。在这种情况下,似乎无法消除在delta中尚未返回的字段与实际包含空值的字段之间的歧义。

在库应该如何使用方面我是否缺少某些东西?因为现在看起来好像库确实丢失了一些关键信息,因为我不能依赖返回的User对象来可靠地更新我的数据库,因为包含null值的更改字段并且一个未更改的字段都会在返回的.Net对象中生成null值。

这显然也适用于其他类型的资源,我只选择了Users作为示例。

1 个答案:

答案 0 :(得分:0)

当我在https://developer.microsoft.com/en-us/graph/docs/concepts/delta_query_users阅读API文档时,sez:

  

可选的$ select查询参数包含在请求中   演示了如何在将来自动包含查询参数   请求。

我还没试过这个。您是否在原始请求中包含了要跟踪更改的属性?或者尝试$select=*返回一切? API sez:

  

默认情况下,仅返回一组有限的属性   ( businessPhones,displayName,givenName,id,jobTitle,mail,   mobilePhone,officeLocation,preferredLanguage,surname,   的UserPrincipalName )。