public async Task <string> SendEmailAsync(Guid activityId, bool issueSend, string trackingToken) { var jObject = new JObject(); jObject["IssueSend"] = issueSend; if (!string.IsNullOrWhiteSpace(trackingToken)) { jObject["TrackingToken"] = trackingToken; } string fullUrl = $"{ApiUrl}/emails({activityId:P})/Microsoft.Dynamics.CRM.SendEmail"; 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(); JObject data = JObject.Parse(responseContent); return(data["Subject"].ToString()); }
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 DisassociateAsync(Entity entity, string navigationProperty) { string fullUrl = ApiUrl + RequestEntityParser.GetEntityApiUrl(entity, WebApiMetadata) + "/" + navigationProperty + "/$ref"; var request = new HttpRequestMessage(new HttpMethod("DELETE"), fullUrl); HttpResponseMessage response = await Authorization.GetHttpClient().SendAsync(request); ResponseValidator.EnsureSuccessStatusCode(response); }
public async Task ExecuteAsync(IWebApiAction action) { string json = JsonConvert.SerializeObject(action); var content = new StringContent(json, Encoding.UTF8, "application/json"); string fullUrl = ApiUrl + action.RelativeUrl; HttpResponseMessage response = await Authorization.GetHttpClient().PostAsync(fullUrl, content); ResponseValidator.EnsureSuccessStatusCode(response); }
public async Task MergeAsync(MergeRequest mergeRequest) { string fullUrl = $"{ApiUrl}/Merge"; JObject requestObject = mergeRequest.GetRequestObject(WebApiMetadata); 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); }
public async Task DeleteAsync(Entity entity) { string fullUrl = ApiUrl + RequestEntityParser.GetEntityApiUrl(entity, WebApiMetadata); var request = new HttpRequestMessage(new HttpMethod("Delete"), fullUrl) { Content = new StringContent("{}", Encoding.UTF8, "application/json") }; HttpResponseMessage response = await Authorization.GetHttpClient().SendAsync(request); ResponseValidator.EnsureSuccessStatusCode(response); }
public async Task LoadEntityDefinitions() { var url = _apiUrl + _entityDefinitionsUrl; var request = new HttpRequestMessage(new HttpMethod("GET"), url); var response = await _baseAuthorization.GetHttpClient().SendAsync(request); ResponseValidator.EnsureSuccessStatusCode(response); var data = await response.Content.ReadAsStringAsync(); var result = JObject.Parse(data); entitiesDefinitions = result["value"].ToObject <List <EntityDefinition> >(); }
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 async Task AddListMembersListAsync(Guid listId, List <Entity> members) { var jObject = new JObject(); var list = new JObject(); var litsMembers = new JArray(); list["listid"] = listId.ToString("D"); list["@odata.type"] = "Microsoft.Dynamics.CRM.list"; foreach (Entity member in members) { var jMember = new JObject(); if (member.LogicalName.ToLower() == "contact") { jMember["@odata.type"] = "Microsoft.Dynamics.CRM.contact"; jMember["contactid"] = member.Id.ToString("D"); } else if (member.LogicalName.ToLower() == "account") { jMember["@odata.type"] = "Microsoft.Dynamics.CRM.account"; jMember["accountid"] = member.Id.ToString("D"); } else { throw new WebApiException($"Logical name {member.LogicalName} cannot be mapped to List Members"); } litsMembers.Add(jMember); } jObject["List"] = list; jObject["Members"] = litsMembers; string fullUrl = $"{ApiUrl}/AddListMembersList"; 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); }
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 UpsertAsync(Entity entity, UpsertOptions upsertOptions = UpsertOptions.None) { string fullUrl = ApiUrl + RequestEntityParser.GetEntityApiUrl(entity, WebApiMetadata); JObject jObject = RequestEntityParser.EntityToJObject(entity, WebApiMetadata); var request = new HttpRequestMessage(new HttpMethod("PATCH"), fullUrl) { Content = new StringContent(JsonConvert.SerializeObject(jObject), Encoding.UTF8, "application/json") }; if (upsertOptions == UpsertOptions.OnlyUpdate) { request.Headers.Add("If-Match", "*"); } if (upsertOptions == UpsertOptions.OnlyCreate) { request.Headers.Add("If-None-Match", "*"); } HttpResponseMessage response = await Authorization.GetHttpClient().SendAsync(request); ResponseValidator.EnsureSuccessStatusCode(response); }
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); }