Esempio n. 1
0
        public async Task <List <Entity> > QualifyLeadAsync(QualifyLeadRequest action)
        {
            string  fullUrl = $"{ApiUrl}/leads({action.LeadId:P})/Microsoft.Dynamics.CRM.QualifyLead";
            JObject jObject = action.GetRequestObject();

            var request = new HttpRequestMessage(new HttpMethod("POST"), fullUrl)
            {
                Content = new StringContent(JsonConvert.SerializeObject(jObject), Encoding.UTF8, "application/json")
            };

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

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

            var           data     = JsonConvert.DeserializeObject <JObject>(responseContent);
            List <Entity> entities = QualifyLeadResponseFormatter.GetCreatedEntities(data);

            foreach (Entity entity in entities)
            {
                EntityDefinition entityDefinition = WebApiMetadata.GetEntityDefinition(entity.LogicalName);
                string           primaryKey       = entityDefinition?.PrimaryIdAttribute;
                if (entity.Contains(primaryKey))
                {
                    entity.Id = Guid.Parse(entity.GetAttributeValue <string>(primaryKey));
                }
            }

            return(entities);
        }
Esempio n. 2
0
        public async Task <RetrieveMultipleResponse> RetrieveMultipleAsync(FetchXmlExpression fetchXml)
        {
            string entityCollection = WebApiMetadata.GetEntitySetName(fetchXml.LogicalName);
            var    retrieveOptions  = new RetrieveOptions {
                FetchXml = fetchXml
            };

            return(await RetrieveMultipleAsync(entityCollection, retrieveOptions));
        }
Esempio n. 3
0
        public async Task <Guid> CreateAsync(Entity entity)
        {
            string  fullUrl = ApiUrl + WebApiMetadata.GetEntitySetName(entity.LogicalName);
            JObject jObject = RequestEntityParser.EntityToJObject(entity, WebApiMetadata);
            var     request = new HttpRequestMessage(new HttpMethod("Post"), fullUrl)
            {
                Content = new StringContent(JsonConvert.SerializeObject(jObject), Encoding.UTF8, "application/json")
            };

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

            ResponseValidator.EnsureSuccessStatusCode(response);

            return(GetEntityIdFromResponse(fullUrl, response));
        }
Esempio n. 4
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);
        }
Esempio n. 5
0
        public WebApi(BaseAuthorization authorization, string apiUrl)
        {
            Authorization = authorization;
            Authorization.ConfigureHttpClient();

            ApiUrl         = new Uri(apiUrl);
            WebApiMetadata = new WebApiMetadata(authorization, apiUrl);

            JsonConvert.DefaultSettings = () => new JsonSerializerSettings
            {
                ContractResolver = new WebApiContractResolver(),
                Converters       = new List <JsonConverter> {
                    new EntityReferenceJsonConverter(WebApiMetadata)
                }
            };
        }
        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);
        }
Esempio n. 7
0
        public async Task <Guid> AddToQueueAsync(Guid queueId, EntityReference entity)
        {
            string           fullUrl           = $"{ApiUrl}/queues{queueId:P}/Microsoft.Dynamics.CRM.AddToQueue";
            EntityDefinition entityDefinitions = WebApiMetadata.GetEntityDefinition(entity.LogicalName);
            var target = new JObject();

            target[entityDefinitions.PrimaryIdAttribute] = entity.Id.ToString("D");
            target["@odata.type"] = $"Microsoft.Dynamics.CRM.{entityDefinitions.LogicalName}";
            var requestObject = new JObject();

            requestObject.Add("Target", target);

            var request = new HttpRequestMessage(new HttpMethod("POST"), fullUrl)
            {
                Content = new StringContent(JsonConvert.SerializeObject(requestObject), Encoding.UTF8, "application/json")
            };
            HttpResponseMessage response = await Authorization.GetHttpClient().SendAsync(request);

            ResponseValidator.EnsureSuccessStatusCode(response);
            var data = JsonConvert.DeserializeObject <JObject>(await response.Content.ReadAsStringAsync());

            return(data["QueueItemId"].ToObject <Guid>());
        }
Esempio n. 8
0
        public async Task <Entity> RetrieveAsync(string entityName, Guid entityId, params string[] properties)
        {
            string entityCollection = WebApiMetadata.GetEntitySetName(entityName);
            string fullUrl          = ApiUrl + entityCollection + entityId.ToString("P");

            if (properties?.Any() ?? false)
            {
                fullUrl += "?$select=" + string.Join(",", properties);
            }

            var request = new HttpRequestMessage(new HttpMethod("GET"), fullUrl);
            HttpResponseMessage response = await Authorization.GetHttpClient().SendAsync(request);

            ResponseValidator.EnsureSuccessStatusCode(response);

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

            JObject result = JObject.Parse(data);
            Entity  entity = ResponseAttributeFormatter.FormatEntityResponse(result);

            entity.LogicalName = entityName;
            entity.Id          = entityId;
            return(entity);
        }