From 0a2dc1230524063b383c88dfe23d6cedb1c04816 Mon Sep 17 00:00:00 2001 From: George Date: Wed, 14 Oct 2026 17:41:08 -0500 Subject: [PATCH] Log de errores del Service Layer: DOCENTRY = BaseEntry del documento base; columnas VARCHAR(100) Co-Authored-By: Claude Sonnet 5.5 --- CLAUDE.md | 10 ++++---- .../HelperData/Log/HelperLogServiceLayer.cs | 23 ++++++++++++++++--- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index c9a033e..e6b87fb 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -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`) en los fallos de `PostAsync`, `PatchAsyncSBA` y `PatchNoContentAsync`. Guarda en `ITC_WMS_SAP.ITCA_LOG_INTEGRACION`: `ORIGEN = "ServiceLayer"`, - `PROCESO = "ServiceLayer Error"`, `NRO_ORDEN`/`DOCENTRY` = ruta del recurso - (p. ej. `CreditNotes`, truncada a 30), `TRAMA_ORIGEN` = JSON enviado, + `PROCESO = "ServiceLayer Error"`, `NRO_ORDEN` = ruta del recurso (p. ej. + `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 consumidor no cambia y si el log falla no rompe el flujo. No cubre - `PostActionAsync` (cuerpo `{}`) ni `PostReOpen`/`PostClose`. Los tamaños de las - columnas del log no se verificaron. + `PostActionAsync` (cuerpo `{}`) ni `PostReOpen`/`PostClose`. Las columnas `PROCESO`, `NRO_ORDEN` + y `DOCENTRY` son `VARCHAR(100)`. - **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 línea completa generaba una línea de NC con cantidad 0); (2) la transferencia diff --git a/Net.Data/HelperData/Log/HelperLogServiceLayer.cs b/Net.Data/HelperData/Log/HelperLogServiceLayer.cs index 771d47c..24f4c20 100644 --- a/Net.Data/HelperData/Log/HelperLogServiceLayer.cs +++ b/Net.Data/HelperData/Log/HelperLogServiceLayer.cs @@ -1,4 +1,5 @@ using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using Sap.Data.Hana; using System; using System.Text; @@ -15,9 +16,11 @@ namespace Net.Data.HelperData.Log try { 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 ?? ""); 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("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("DOCENTRY", HanaDbType.VarChar).Value = docEntryBase; 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"); @@ -45,5 +48,19 @@ namespace Net.Data.HelperData.Log // 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 ""; + } + } } }