Exemple #1
0
        public async Task <RetrieveMultipleResponse> RetrieveMultipleAsync(string entityCollection, RetrieveOptions options)
        {
            string fullUrl = ApiUrl + entityCollection;

            fullUrl = options.GetRetrieveUrl(new Uri(fullUrl));
            var request = new HttpRequestMessage(new HttpMethod("GET"), fullUrl);

            foreach (string header in options.GetPreferList())
            {
                request.Headers.Add("Prefer", header);
            }

            HttpResponseMessage response = await Authorization.GetHttpClient().SendAsync(request);

            ResponseValidator.EnsureSuccessStatusCode(response);

            string data = await response.Content.ReadAsStringAsync();

            JObject result = JObject.Parse(data);
            var     retrieveMultipleResponse = new RetrieveMultipleResponse(result);

            while (!string.IsNullOrWhiteSpace(retrieveMultipleResponse.NextLink))
            {
                HttpResponseMessage nextResults = await Authorization.GetHttpClient().GetAsync(retrieveMultipleResponse.NextLink);

                ResponseValidator.EnsureSuccessStatusCode(nextResults);
                string nextData = await nextResults.Content.ReadAsStringAsync();

                JObject nextValues = JObject.Parse(nextData);
                retrieveMultipleResponse.AddResult(nextValues);
            }

            string           logicalName      = WebApiMetadata.GetLogicalName(entityCollection);
            EntityDefinition entityDefinition = WebApiMetadata.EntityDefinitions.FirstOrDefault(e => e.LogicalName == logicalName);
            string           primaryKey       = entityDefinition?.PrimaryIdAttribute;

            foreach (Entity entity in retrieveMultipleResponse.Entities)
            {
                if (entity.Contains(primaryKey))
                {
                    entity.Id = Guid.Parse(entity.GetAttributeValue <string>(primaryKey));
                }

                entity.LogicalName = logicalName;
            }

            return(retrieveMultipleResponse);
        }
        public async Task <BatchRequestResponse> ExecuteBatchRequestAsync(BatchRequest batchRequest)
        {
            string requestBody = BatchRequestParser.GetRequestString(batchRequest, this);

            var request = new HttpRequestMessage(new HttpMethod("POST"), ApiUrl + "$batch");

            SetRequestContent(request, requestBody, batchRequest.BatchId);

            HttpResponseMessage response = await Authorization.GetHttpClient().SendAsync(request);

            ResponseValidator.EnsureSuccessStatusCode(response);
            string data = await response.Content.ReadAsStringAsync();

            var batchRequestResponse = new BatchRequestResponse(data);

            foreach (Entity entity in batchRequestResponse.Entities)
            {
                entity.LogicalName = WebApiMetadata.GetLogicalName(entity.LogicalName);
            }

            return(batchRequestResponse);
        }