Exemple #1
0
        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);
            }
        }