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:
GeorgeandClaude Sonnet 5.5 committed 2026-10-14 17:41:08 -05:00
1 parent 4ad0754ba0
commit 0a2dc12305
2 files changed
+26 -7

No files matched your search

+6 -4
View File
@@ -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 "";
}
}
} }
} }