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); }
public async Task <RetrieveMultipleResponse> RetrieveMultipleAsync(FetchXmlExpression fetchXml) { string entityCollection = WebApiMetadata.GetEntitySetName(fetchXml.LogicalName); var retrieveOptions = new RetrieveOptions { FetchXml = fetchXml }; return(await RetrieveMultipleAsync(entityCollection, retrieveOptions)); }
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)); }
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 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); }
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>()); }
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); }