Files

78 lines
3.5 KiB
Markdown
Raw Permalink Normal View History

2026-09-16 07:41:25 -05:00
# Del alta de una Orden al archivo JSON
Cómo viaja un evento de SAP Business One hasta quedar guardado en disco por
`sap-webhook-api`: los dos servidores involucrados, sus componentes,
puertos e IPs de ejemplo, y dónde entra en juego el certificado
autofirmado.
## Diagrama
```mermaid
flowchart LR
subgraph SAP["SAP Business One — servidor Windows · 192.168.1.205"]
direction TB
SL["Service Layer\nsap10:50000\nLogin · EventSubscriptions\ncert propio autofirmado"]
SQL["SQL Server (MSSQL)\nDB: SBODemoCL\nTablas: OEVC · OEVN · EVN1\nlogin: sa"]
WM["Webhook Messenger\npuerto 40008\nWebhookMessenger.jar\nDEFAULT_LANGUAGE=us_english (workaround)"]
SL <-->|"Login / EventSubscriptions"| SQL
SQL <-->|"SELECT/UPDATE OEVN, EVN1 (login sa)"| WM
end
subgraph MAC["Mac de desarrollo · 192.168.1.166"]
direction TB
CFG["Configuración\ncurl / sl.http"]
API["sap-webhook-api (NestJS)\n192.168.1.166:3000\nPOST /webhooks/sap\ncert CN/SAN=192.168.1.166"]
FS["data/events/*.json\n1 archivo por notificación"]
API -->|guarda| FS
end
CFG -- "HTTPS :50000\nLogin, EventSubscriptions" --> SL
WM -- "HTTPS :3000\nCloudEvents batch\nPOST /webhooks/sap" --> API
classDef warn fill:#faf0dd,stroke:#a8690b,color:#7a4c08;
class WM warn
```
Dos servidores en la misma LAN. La Mac llama al Service Layer para
configurar la suscripción (flecha superior); el Webhook Messenger — que
corre dentro del servidor SAP y lee la cola de eventos en SQL Server
autenticado como `sa` — es quien llama de vuelta a la Mac para entregar
cada evento (flecha inferior). El recuadro en ámbar marca el workaround de
`DATEFORMAT` aplicado para que esa segunda flecha funcione.
## Componentes e IPs de ejemplo
| Componente | Host : puerto | Protocolo | Notas |
|---|---|---|---|
| **Service Layer** (SAP Business One) | `sap10 : 50000` | HTTPS | Certificado propio autofirmado; nuestras llamadas lo ignoran con `curl -k`. |
| **Webhook Messenger** (servicio Windows) | `192.168.1.205 : 40008` | TCP (health) + JDBC a SQL Server | Se conecta a SQL Server como `sa`; despacha los eventos por HTTPS hacia el `WebhookURL` suscripto. |
| **SQL Server** (MSSQL) | — (interno) | TDS | DB `SBODemoCL`. Tablas `OEVC` / `OEVN` / `EVN1`. |
| **sap-webhook-api** (NestJS) | `192.168.1.166 : 3000` | HTTPS | Certificado autofirmado propio, `CN/SAN = 192.168.1.166`. |
| **data/events/** (filesystem local) | — (disco) | — | Un archivo `.json` por notificación recibida. |
## 🔐 Certificado autofirmado
Generado en la Mac para `CN/SAN = 192.168.1.166` — la IP donde corre
`sap-webhook-api`, no la del servidor SAP.
Ese nombre **tiene que coincidir** con el host que se declara como
`WebhookURL` al crear la suscripción
(`https://192.168.1.166:3000/webhooks/sap`). Como la suscripción usa
`VerifyCertificate: tNO`, SAP nunca valida este certificado — si más
adelante se activa la verificación, hay que importarlo además en el
keystore del propio Webhook Messenger.
## 🟠 Estado del bug de fechas
El Webhook Messenger construye el SQL contra `OEVN` con la fecha como
texto plano. Con el login `sa` en idioma `Español` (`DATEFORMAT dmy`),
cualquier día del mes mayor a 12 rompía la consulta.
Workaround confirmado en este ambiente de desarrollo: cambiar `sa` a
`DEFAULT_LANGUAGE = us_english` y reiniciar el servicio. Sigue pendiente
confirmar si `FP2605 HFX1` lo corrige oficialmente.
---
Detalle completo del diagnóstico, la evidencia y los pasos de instalación
en `CLAUDE.md` y `PASOS-REALIZADOS.md` de este repositorio.