Log de errores del Service Layer: DOCENTRY = BaseEntry del documento base; columnas VARCHAR(100)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
4ad0754ba0
commit
0a2dc12305
2 files changed
+26
-7
No files matched your search
@@ -47,12 +47,14 @@ transferencias siempre, sin depender de `Notificacion`. Detalle y tabla en
|
|||||||
`ErrorLogger` (asignado en `Startup` a `Net.Data/HelperData/Log/HelperLogServiceLayer.AddError`)
|
`ErrorLogger` (asignado en `Startup` a `Net.Data/HelperData/Log/HelperLogServiceLayer.AddError`)
|
||||||
en los fallos de `PostAsync`, `PatchAsyncSBA` y `PatchNoContentAsync`. Guarda en
|
en los fallos de `PostAsync`, `PatchAsyncSBA` y `PatchNoContentAsync`. Guarda en
|
||||||
`ITC_WMS_SAP.ITCA_LOG_INTEGRACION`: `ORIGEN = "ServiceLayer"`,
|
`ITC_WMS_SAP.ITCA_LOG_INTEGRACION`: `ORIGEN = "ServiceLayer"`,
|
||||||
`PROCESO = "ServiceLayer Error"`, `NRO_ORDEN`/`DOCENTRY` = ruta del recurso
|
`PROCESO = "ServiceLayer Error"`, `NRO_ORDEN` = ruta del recurso (p. ej.
|
||||||
(p. ej. `CreditNotes`, truncada a 30), `TRAMA_ORIGEN` = JSON enviado,
|
`CreditNotes`), `DOCENTRY` = `BaseEntry` de la primera línea del JSON (factura o
|
||||||
|
solicitud base; vacío si no hay), `DOCENTRYSAP`/`DOCNUMSAP` = `0` (SAP rechazó),
|
||||||
|
`TRAMA_ORIGEN` = JSON enviado,
|
||||||
`TRAMA_RESPUESTA` = mensaje de SAP. Solo en error. La respuesta de la API al
|
`TRAMA_RESPUESTA` = mensaje de SAP. Solo en error. La respuesta de la API al
|
||||||
consumidor no cambia y si el log falla no rompe el flujo. No cubre
|
consumidor no cambia y si el log falla no rompe el flujo. No cubre
|
||||||
`PostActionAsync` (cuerpo `{}`) ni `PostReOpen`/`PostClose`. Los tamaños de las
|
`PostActionAsync` (cuerpo `{}`) ni `PostReOpen`/`PostClose`. Las columnas `PROCESO`, `NRO_ORDEN`
|
||||||
columnas del log no se verificaron.
|
y `DOCENTRY` son `VARCHAR(100)`.
|
||||||
- **v2.1.6.0 — cantidades**: (1) la NC de PICKING (estado 13) solo incluye líneas
|
- **v2.1.6.0 — cantidades**: (1) la NC de PICKING (estado 13) solo incluye líneas
|
||||||
con `cantidad facturada − CantidadPedida > 0`, igual que DESPACHO (antes una
|
con `cantidad facturada − CantidadPedida > 0`, igual que DESPACHO (antes una
|
||||||
línea completa generaba una línea de NC con cantidad 0); (2) la transferencia
|
línea completa generaba una línea de NC con cantidad 0); (2) la transferencia
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
using Sap.Data.Hana;
|
using Sap.Data.Hana;
|
||||||
using System;
|
using System;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
@@ -15,9 +16,11 @@ namespace Net.Data.HelperData.Log
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
var recurso = query ?? "";
|
var recurso = query ?? "";
|
||||||
if (recurso.Length > 30) recurso = recurso.Substring(0, 30);
|
if (recurso.Length > 100) recurso = recurso.Substring(0, 100);
|
||||||
|
|
||||||
var trama = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(jsonEnviado));
|
var json = JsonConvert.SerializeObject(jsonEnviado);
|
||||||
|
var docEntryBase = ObtenerDocEntryBase(json);
|
||||||
|
var trama = Encoding.UTF8.GetBytes(json);
|
||||||
var tramaRespuesta = Encoding.UTF8.GetBytes(respuesta ?? "");
|
var tramaRespuesta = Encoding.UTF8.GetBytes(respuesta ?? "");
|
||||||
|
|
||||||
using (var hana = new HanaConnection(LocalData.ConnectionString))
|
using (var hana = new HanaConnection(LocalData.ConnectionString))
|
||||||
@@ -32,7 +35,7 @@ namespace Net.Data.HelperData.Log
|
|||||||
hanaCommand.Parameters.Add("PROCESO", HanaDbType.VarChar).Value = "ServiceLayer Error";
|
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("FECHA", HanaDbType.Date).Value = DateTime.Now.ToString("yyyy-MM-dd");
|
||||||
hanaCommand.Parameters.Add("NRO_ORDEN", HanaDbType.VarChar).Value = recurso;
|
hanaCommand.Parameters.Add("NRO_ORDEN", HanaDbType.VarChar).Value = recurso;
|
||||||
hanaCommand.Parameters.Add("DOCENTRY", HanaDbType.VarChar).Value = recurso;
|
hanaCommand.Parameters.Add("DOCENTRY", HanaDbType.VarChar).Value = docEntryBase;
|
||||||
hanaCommand.Parameters.Add("DOCNUMSAP", HanaDbType.VarChar).Value = "0";
|
hanaCommand.Parameters.Add("DOCNUMSAP", HanaDbType.VarChar).Value = "0";
|
||||||
hanaCommand.Parameters.Add("DOCENTRYSAP", 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.Parameters.Add("HORA", HanaDbType.VarChar).Value = DateTime.Now.ToString("HH:mm:ss");
|
||||||
@@ -45,5 +48,19 @@ namespace Net.Data.HelperData.Log
|
|||||||
// el log nunca debe romper el flujo principal
|
// el log nunca debe romper el flujo principal
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DocEntry del documento base (factura o solicitud) de la primera linea del JSON; vacio si no hay
|
||||||
|
private static string ObtenerDocEntryBase(string json)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var baseEntry = JObject.Parse(json)["DocumentLines"]?[0]?["BaseEntry"];
|
||||||
|
return baseEntry == null || baseEntry.Type == JTokenType.Null ? "" : baseEntry.ToString();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user