using Newtonsoft.Json; using Sap.Data.Hana; using System; using System.Text; namespace Net.Data.HelperData.Log { // Guarda en ITCA_LOG_INTEGRACION el JSON enviado al Service Layer cuando SAP rechaza un envio (cualquier documento). // Misma tabla que Net.Business.Services.Log.B_Log (esa clase no se puede usar desde Net.Data). public class HelperLogServiceLayer { // query: ruta del recurso del Service Layer (ej. "CreditNotes", "StockTransfers") public static void AddError(string query, object jsonEnviado, string respuesta) { try { var recurso = query ?? ""; if (recurso.Length > 30) recurso = recurso.Substring(0, 30); var trama = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(jsonEnviado)); var tramaRespuesta = Encoding.UTF8.GetBytes(respuesta ?? ""); using (var hana = new HanaConnection(LocalData.ConnectionString)) { hana.Open(); HanaCommand hanaCommand = hana.CreateCommand(); hanaCommand.CommandText = "INSERT INTO \"ITC_WMS_SAP\".\"ITCA_LOG_INTEGRACION\" (\"CODIGO\", \"ORIGEN\", \"TRAMA_ORIGEN\", \"TRAMA_RESPUESTA\", \"PROCESO\", \"FECHA\", \"NRO_ORDEN\", \"DOCENTRY\", \"DOCNUMSAP\", \"DOCENTRYSAP\", \"HORA\") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; hanaCommand.Parameters.Add("CODIGO", HanaDbType.VarChar).Value = Guid.NewGuid().ToString(); hanaCommand.Parameters.Add("ORIGEN", HanaDbType.VarChar).Value = "ServiceLayer"; hanaCommand.Parameters.Add("TRAMA_ORIGEN", HanaDbType.Blob).Value = trama; hanaCommand.Parameters.Add("TRAMA_RESPUESTA", HanaDbType.Blob).Value = tramaRespuesta; hanaCommand.Parameters.Add("PROCESO", HanaDbType.VarChar).Value = "ServiceLayer Error"; hanaCommand.Parameters.Add("FECHA", HanaDbType.Date).Value = DateTime.Now.ToString("yyyy-MM-dd"); hanaCommand.Parameters.Add("NRO_ORDEN", HanaDbType.VarChar).Value = recurso; hanaCommand.Parameters.Add("DOCENTRY", HanaDbType.VarChar).Value = recurso; hanaCommand.Parameters.Add("DOCNUMSAP", HanaDbType.VarChar).Value = "0"; hanaCommand.Parameters.Add("DOCENTRYSAP", HanaDbType.VarChar).Value = "0"; hanaCommand.Parameters.Add("HORA", HanaDbType.VarChar).Value = DateTime.Now.ToString("HH:mm:ss"); hanaCommand.CommandType = System.Data.CommandType.Text; hanaCommand.ExecuteNonQuery(); } } catch { // el log nunca debe romper el flujo principal } } } }