Exemplo n.º 1
0
        private async Task SyncOrganizationUsersAsync(Organization org)
        {
            await WriteLogAsync($"Starting to sync users for the {org.Name} organization.");

            var dataSyncRecord = await GetOrCreateDataSyncRecord(org.TenantId, UsersQuery);

            await WriteLogAsync($"Send Differential Query.");

            if (dataSyncRecord.Id == 0)
            {
                await WriteLogAsync("First time executing differential query; all items will return.");
            }
            var differentialQueryService = new DifferentialQueryService(() => getTenantAccessTokenAsync(org.TenantId));

            var result = await differentialQueryService.QueryAsync <User>(dataSyncRecord.DeltaLink);

            await WriteLogAsync($"Get {result.Items.Length} users.");

            foreach (var differentialUser in result.Items)
            {
                await UpdateUserAsync(differentialUser);
            }

            dataSyncRecord.DeltaLink = result.DeltaLink;
            dataSyncRecord.Updated   = DateTime.UtcNow;
        }
Exemplo n.º 2
0
        private async Task SyncAsyncCore()
        {
            var consentedOrganizations = await dbContext.Organizations
                                         .Where(i => i.IsAdminConsented)
                                         .ToArrayAsync();

            if (!consentedOrganizations.Any())
            {
                await WriteLogAsync($"No consented organization found. This synch was canceled.");

                return;
            }

            foreach (var org in consentedOrganizations)
            {
                await WriteLogAsync($"Starting to sync users for the {org.Name} organization.");

                var dataSyncRecord = await GetOrCreateDataSyncRecord(org.TenantId, UsersQuery);

                var url = dataSyncRecord.DeltaLink += "&api-version=" + APIVersion;

                await WriteLogAsync($"Send Differential Query.");

                if (dataSyncRecord.Id == 0)
                {
                    await WriteLogAsync("First time executing differential query; all items will return.");
                }
                var differentialQueryService = new DifferentialQueryService(() => getTenantAccessTokenAsync(org.TenantId));
                var result = await differentialQueryService.QueryAsync <User>(url);
                await WriteLogAsync($"Get {result.Items.Length} users.");

                foreach (var differentialUser in result.Items)
                {
                    await UpdateUserAsync(differentialUser);
                }

                dataSyncRecord.DeltaLink = result.DeltaLink;
                dataSyncRecord.Updated   = DateTime.Now;
            }

            dbContext.SaveChanges();
            await WriteLogAsync($"All the changes were saved.");
        }