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`)
|
||||
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
|
||||
|
||||
@@ -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 "";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user