private OperationResult InvoiceCreateRequest(JObject jsonObject, Guid processId) { OperationResult operationResult = new OperationResult(); try { if (jsonObject != null) { try { using (HttpClient client = ConnectionHelper.GetHttpClient(connectionString, ConnectionHelper.clientId, ConnectionHelper.redirectUrl)) { client.DefaultRequestHeaders.Add("Accept", "application/json"); client.DefaultRequestHeaders.Add("OData-MaxVersion", "4.0"); client.DefaultRequestHeaders.Add("OData-Version", "4.0"); client.DefaultRequestHeaders.Add("Prefer", "return=representation"); client.DefaultRequestHeaders.Add("MSCRM.SuppressDuplicateDetection", "false"); MethodBase m = MethodBase.GetCurrentMethod(); string url = $"{this.EntityPluralName}?$select={InvoiceFields.EntityId}"; LogEventInfo log = new LogEventInfo(LogLevel.Debug, Logger.Name, $"ProcessID: {processId} Url:{url} Data:{jsonObject.ToString(Formatting.None)}"); log.Properties["ProcessID"] = processId; log.Properties["AppID"] = AboxDynamicsBase.Classes.Constants.ApplicationIdWebAPI; log.Properties["MethodName"] = System.Reflection.MethodBase.GetCurrentMethod().Name; Logger.Log(log); HttpContent c = new StringContent(jsonObject.ToString(Formatting.None), Encoding.UTF8, "application/json"); var response = client.PostAsync(url, c).Result; if (response.IsSuccessStatusCode) { //Get the response content and parse it. JObject body = JObject.Parse(response.Content.ReadAsStringAsync().Result); string userId = (string)body[InvoiceFields.EntityId]; operationResult.Code = ""; operationResult.Message = "Factura creada correctamente en el CRM"; operationResult.IsSuccessful = true; operationResult.Data = userId; } else { sharedMethods.RemoveCacheIfStatusIsUnauthorized(response.StatusCode); //Get the response content and parse it. JObject body = JObject.Parse(response.Content.ReadAsStringAsync().Result); //CrmWebAPIError userId = (CrmWebAPIError)body["error"]; JObject userId = JObject.Parse(body.ToString()); CrmWebAPIError err = userId.ToObject <CrmWebAPIError>(); if (err != null) { log = new LogEventInfo(LogLevel.Error, Logger.Name, $"Url:{url} ErrorCode:{err.error.code} ErrorMessage:{err.error.message} ResponseReasonPhrase:{response.ReasonPhrase}"); log.Properties["ProcessID"] = processId; log.Properties["AppID"] = AboxDynamicsBase.Classes.Constants.ApplicationIdWebAPI; log.Properties["MethodName"] = System.Reflection.MethodBase.GetCurrentMethod().Name; Logger.Log(log); } operationResult.Code = ""; operationResult.Message = "Error al crear la factura en el CRM"; operationResult.IsSuccessful = false; operationResult.Data = null; operationResult.InternalError = err; } } } catch (Exception ex) { //TODO: Crear Queue de procesos fallidos en BD para reprocesar LogEventInfo log = new LogEventInfo(LogLevel.Error, Logger.Name, null, "", null, ex); log.Properties["ProcessID"] = processId; log.Properties["AppID"] = AboxDynamicsBase.Classes.Constants.ApplicationIdWebAPI; log.Properties["MethodName"] = System.Reflection.MethodBase.GetCurrentMethod().Name; Logger.Log(log); operationResult.Code = ""; operationResult.Message = ex.ToString(); operationResult.IsSuccessful = false; operationResult.Data = null; } } return(operationResult); } catch (Exception ex) { LogEventInfo log = new LogEventInfo(LogLevel.Error, Logger.Name, null, "", null, new Exception(ex.ToString())); log.Properties["ProcessID"] = processId; log.Properties["AppID"] = AboxDynamicsBase.Classes.Constants.ApplicationIdWebAPI; log.Properties["MethodName"] = System.Reflection.MethodBase.GetCurrentMethod().Name; Logger.Log(log); operationResult.Code = ""; operationResult.Message = ex.ToString(); operationResult.IsSuccessful = false; operationResult.Data = null; return(operationResult); } }