Actualizar CLAUDE.md y README.md: git y remoto, version 2.1.7.0, appsettings fuera de git, logs, pendientes
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
d0118d1848
commit
23f1a3df44
2 files changed
+76
-10
No files matched your search
@@ -3,10 +3,24 @@
|
|||||||
API de integración WMS ↔ SAP Business One, **ASP.NET Core 3.1**. Para
|
API de integración WMS ↔ SAP Business One, **ASP.NET Core 3.1**. Para
|
||||||
build/publish/despliegue en IIS ver [`README.md`](./README.md).
|
build/publish/despliegue en IIS ver [`README.md`](./README.md).
|
||||||
|
|
||||||
Esta carpeta (`backend_octubre`) es **el proyecto vigente**. Antes existía
|
Esta carpeta (`ITCA_API_SAP_WMS`, antes `backend_octubre`) es **el proyecto
|
||||||
una copia paralela, `ITCA_API_SAP_WMS`, con la funcionalidad nueva portada
|
vigente**. Antes existía una copia paralela con la funcionalidad nueva portada
|
||||||
desde la reescritura Python; se portó aquí y esa copia quedó **archivada en un
|
desde la reescritura Python; se portó aquí y esa copia quedó **archivada en un
|
||||||
comprimido (versión antigua)**. No hay `git` en esta carpeta.
|
comprimido (versión antigua)**.
|
||||||
|
|
||||||
|
## Versión y control de versiones
|
||||||
|
|
||||||
|
- **Versión actual: 2.1.7.0** (`Net.Business.Services.csproj`: `Version`,
|
||||||
|
`AssemblyVersion`, `FileVersion`). Cada versión tiene su commit; al publicar
|
||||||
|
se sube la versión (ver `publicar.ps1`).
|
||||||
|
- **Git**: rama `main`, remoto `origin` =
|
||||||
|
`http://100.68.242.27:30000/george/itca_api_sap_wms.git` (HTTP sin cifrar,
|
||||||
|
red interna; confirmar que el repositorio sea **privado**). Etiqueta
|
||||||
|
`v2.1.7.0` = último estado antes de la limpieza de código.
|
||||||
|
- `appsettings.json` y `appsettings.*.json` están en `.gitignore` (solo se
|
||||||
|
versiona `appsettings.example.json`); las credenciales no están en el
|
||||||
|
historial (verificado con `git log -S`).
|
||||||
|
- Los publish (`dist/`, zip del escritorio) no se versionan.
|
||||||
|
|
||||||
## Qué se portó desde `ITCA_API_SAP_WMS` (2026-10-05)
|
## Qué se portó desde `ITCA_API_SAP_WMS` (2026-10-05)
|
||||||
|
|
||||||
@@ -130,10 +144,21 @@ Picking, columna `HORA` en `B_Log`. Lo que **no** se trajo: `Chatbots` y
|
|||||||
- `ValidarCertificado` acepta cualquier certificado TLS (siempre `true`).
|
- `ValidarCertificado` acepta cualquier certificado TLS (siempre `true`).
|
||||||
- `HelperDB.SET(string query)` ejecuta SQL arbitrario; hoy sin llamadores
|
- `HelperDB.SET(string query)` ejecuta SQL arbitrario; hoy sin llamadores
|
||||||
(candidato a borrar).
|
(candidato a borrar).
|
||||||
- `appsettings.json` versionado en texto plano con credenciales reales
|
- `appsettings.json` (fuera de git, en `.gitignore`) contiene credenciales
|
||||||
(SAP Service Layer, **HANA `B1ADMIN`**, semilla JWT). Rotar la contraseña de
|
reales en texto plano (SAP Service Layer, **HANA `B1ADMIN`**, semilla JWT).
|
||||||
`B1ADMIN` (estuvo en el código fuente) y evaluar un usuario HANA de mínimos
|
Rotar la contraseña de `B1ADMIN` (estuvo en el código fuente) y evaluar un
|
||||||
permisos.
|
usuario HANA de mínimos permisos.
|
||||||
|
- Los logs (`B_Log` y `HelperLogServiceLayer`) escriben en el esquema fijo
|
||||||
|
`ITC_WMS_SAP` (`ITCA_LOG_INTEGRACION`), no en `LocalData.Schema`; si la tabla
|
||||||
|
está en otro esquema el `INSERT` falla. `B_Log.Add` no tiene `try/catch`, así
|
||||||
|
que un fallo del log puede devolver 500 tras haber creado el documento en SAP.
|
||||||
|
- Código sin uso (limpieza prevista en 2.1.8.0): `CancelAsyncSBA`,
|
||||||
|
`DeleteAsyncSBA`, `Logout`, `ValidarCertificado`, `HelperDB.SET`; 11
|
||||||
|
propiedades de `RepositoryWrapper` que ningún controller usa
|
||||||
|
(`CreditNotes`, `InvoiceRepository`, `ReturnRequest`, `StockTransfer`, etc.);
|
||||||
|
`TotalDetalle_Parcial` y `var _Invoice` (bloque PICKING) en
|
||||||
|
`PickingRepository`; `SerieOrigen` en `ReciboRepository`; el `if` vacío tras
|
||||||
|
`StockTransfer` en Picking (un fallo de la transferencia se ignora).
|
||||||
|
|
||||||
## Despliegue
|
## Despliegue
|
||||||
|
|
||||||
@@ -152,3 +177,12 @@ usa `processPath=".\ITCA_API_SAP_WMS.exe"`; el del código fuente apunta a
|
|||||||
- Verificar que existan en el esquema del sitio los procedimientos `ITCA_*`
|
- Verificar que existan en el esquema del sitio los procedimientos `ITCA_*`
|
||||||
y las tablas `@ITCA_PROWMS`, `@SYP_MOTIVOS`, `@SYP_NUMDOC`.
|
y las tablas `@ITCA_PROWMS`, `@SYP_MOTIVOS`, `@SYP_NUMDOC`.
|
||||||
- Decidir si se corrigen los bugs de la lista de arriba.
|
- Decidir si se corrigen los bugs de la lista de arriba.
|
||||||
|
- Validar con contabilidad la serie de NC de boletas (`BC10`) en Recibo y si ya
|
||||||
|
hay NC de boletas emitidas con `FC10` antes de la 2.1.7.0.
|
||||||
|
- Recibo (Devolución) no genera transferencias por almacén destino: nunca llena
|
||||||
|
`U_ITC_ALMDES` en las líneas de la NC.
|
||||||
|
- Confirmar en QA el log de errores del Service Layer (provocar un rechazo y
|
||||||
|
ver la fila con `PROCESO = 'ServiceLayer Error'`) y el esquema de la tabla de
|
||||||
|
log en cada servidor.
|
||||||
|
- Confirmar el repositorio remoto como privado; hacer la limpieza de código en
|
||||||
|
una rama aparte (2.1.8.0) partiendo de la etiqueta `v2.1.7.0`.
|
||||||
@@ -12,7 +12,10 @@ API de integración WMS ↔ SAP Business One (Service Layer + HANA directo),
|
|||||||
(ruta hardcodeada vía `HintPath` en los `.csproj` de `Net.Data` y
|
(ruta hardcodeada vía `HintPath` en los `.csproj` de `Net.Data` y
|
||||||
`Net.Business.Services` — sin esto no compila ningún proyecto que dependa
|
`Net.Business.Services` — sin esto no compila ningún proyecto que dependa
|
||||||
de HANA).
|
de HANA).
|
||||||
- **Compilar desde macOS/Linux**: el `HintPath` es relativo (6 niveles hacia
|
- **Compilar desde macOS/Linux** (forma simple): pasar la ruta de la DLL con
|
||||||
|
`-p:HanaDll=<ruta>/Sap.Data.Hana.Core.v2.1.dll` a `dotnet build`/`publish`
|
||||||
|
(los `.csproj` usan esa propiedad si está definida). Forma alternativa: el
|
||||||
|
`HintPath` es relativo (6 niveles hacia
|
||||||
arriba + `Program Files\sap\...`). Se puede compilar copiando el repo a
|
arriba + `Program Files\sap\...`). Se puede compilar copiando el repo a
|
||||||
`<raiz>/a/b/c/d/repo/` y poniendo la DLL en
|
`<raiz>/a/b/c/d/repo/` y poniendo la DLL en
|
||||||
`<raiz>/Program Files/sap/hdbclient/dotnetcore/v2.1/` — así el `HintPath`
|
`<raiz>/Program Files/sap/hdbclient/dotnetcore/v2.1/` — así el `HintPath`
|
||||||
@@ -70,6 +73,35 @@ dotnet publish Net.Business.Services/Net.Business.Services.csproj -c Release -r
|
|||||||
`web.config` del código fuente (ese apunta a `bin\Debug\...`, es el de
|
`web.config` del código fuente (ese apunta a `bin\Debug\...`, es el de
|
||||||
desarrollo) a una carpeta de publish.
|
desarrollo) a una carpeta de publish.
|
||||||
|
|
||||||
|
## Versión y script de publish
|
||||||
|
|
||||||
|
- La versión sale de `<Version>`/`<AssemblyVersion>`/`<FileVersion>` en
|
||||||
|
`Net.Business.Services/Net.Business.Services.csproj` (actual: **2.1.7.0**);
|
||||||
|
súbela en cada publish.
|
||||||
|
- `publicar.ps1` (solo Windows) genera `dist\ITCA_API_SAP_WMS_v<versión>.zip` sin
|
||||||
|
`appsettings.json`. Desde macOS se hace el mismo `dotnet publish` a mano con
|
||||||
|
`-p:HanaDll=...`, se borran `appsettings.json`/`appsettings.Development.json` de
|
||||||
|
la salida y se comprime.
|
||||||
|
- Control de versiones: rama `main` y etiquetas `vX.Y.Z.W` por versión
|
||||||
|
publicada (ver `CLAUDE.md`).
|
||||||
|
|
||||||
|
## Logs de integración
|
||||||
|
|
||||||
|
- **`B_Log`** (controllers): en cada llamada guarda en
|
||||||
|
`ITC_WMS_SAP.ITCA_LOG_INTEGRACION` el request del WMS (`TRAMA_ORIGEN`) y la
|
||||||
|
respuesta de la API (`TRAMA_RESPUESTA`), con `PROCESO` (Picking, Recibo...),
|
||||||
|
`NRO_ORDEN`, `DOCENTRY`, `DOCNUMSAP` y `DOCENTRYSAP`.
|
||||||
|
- **Log de errores del Service Layer** (desde 2.1.5.0): cuando SAP rechaza un
|
||||||
|
envío con cuerpo JSON (`PostAsync`, `PatchAsyncSBA`, `PatchNoContentAsync`)
|
||||||
|
se guarda en esa misma tabla el JSON enviado y el mensaje de SAP, con
|
||||||
|
`PROCESO = 'ServiceLayer Error'`, `NRO_ORDEN` = ruta del recurso y `DOCENTRY`
|
||||||
|
= `BaseEntry` del documento base. Solo en error; no cambia la respuesta de la
|
||||||
|
API.
|
||||||
|
- Ambos usan el esquema fijo `ITC_WMS_SAP` (columnas `PROCESO`, `NRO_ORDEN` y
|
||||||
|
`DOCENTRY` son `VARCHAR(100)`).
|
||||||
|
- Consulta de ejemplo:
|
||||||
|
`SELECT * FROM "ITC_WMS_SAP"."ITCA_LOG_INTEGRACION" WHERE "PROCESO" = 'ServiceLayer Error' ORDER BY "FECHA" DESC, "HORA" DESC`
|
||||||
|
|
||||||
## Desplegar/actualizar un sitio en IIS
|
## Desplegar/actualizar un sitio en IIS
|
||||||
|
|
||||||
### Si el sitio YA corre desde una carpeta de publish (actualización de versión)
|
### Si el sitio YA corre desde una carpeta de publish (actualización de versión)
|
||||||
@@ -137,8 +169,8 @@ para armar el body del `Login` contra el Service Layer.
|
|||||||
## Riesgos de seguridad heredados (documentados, no corregidos sin coordinar antes)
|
## Riesgos de seguridad heredados (documentados, no corregidos sin coordinar antes)
|
||||||
|
|
||||||
- `appsettings.json` tiene credenciales reales en texto plano (SAP Service
|
- `appsettings.json` tiene credenciales reales en texto plano (SAP Service
|
||||||
Layer, **HANA `B1ADMIN`**, semilla JWT) — no hay `git` en esta carpeta; si alguna vez se versiona o se sube
|
Layer, **HANA `B1ADMIN`**, semilla JWT). Está en `.gitignore` y no se
|
||||||
a un remoto compartido, hay que decidir qué hacer con ese archivo primero.
|
versiona (solo `appsettings.example.json`); no subirlo a ningún repositorio.
|
||||||
- `B1ADMIN` es un usuario administrador de SAP B1; la API solo necesita
|
- `B1ADMIN` es un usuario administrador de SAP B1; la API solo necesita
|
||||||
ejecutar los `ITCA_*` y leer algunas tablas. Conviene un usuario HANA de
|
ejecutar los `ITCA_*` y leer algunas tablas. Conviene un usuario HANA de
|
||||||
permisos mínimos y rotar la contraseña (estuvo en texto plano en el código
|
permisos mínimos y rotar la contraseña (estuvo en texto plano en el código
|
||||||
|
|||||||
Reference in new issue
Block a user