SAP: una sesión por conexión, reutilizada y renovada solo ante un 401
Antes se abría un login por orden (un cliente por orden, con la sesión guardada solo en la instancia) y nunca se cerraba. Ahora el B1SESSION se guarda por conexión (URL + base + usuario) en un caché del proceso, se renueva solo si SAP responde 401 y se cierra con Logout al terminar el proceso (SAPServiceLayerClient.cerrar_sesiones). Probado contra SAP: 6 clientes de ambas tiendas hacen 1 login; una sesión inválida provoca 1 login tras el 401; la integración de 3 órdenes con SAP bloqueado para escrituras hace 1 login. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
901dd8763d
commit
38b152d6b5
3 files changed
+96
-42
No files matched your search
@@ -277,5 +277,8 @@ Este documento describe el flujo base. Las reglas siguientes lo complementan (de
|
||||
- **Idempotencia contra SAP:** antes de crear Invoice, ITR, StockTransfer o Delivery se busca un documento ya
|
||||
existente para la orden (`U_ShopifyOrderId` + `U_ShopifyStore`, y mismas líneas); si existe se adopta y no se
|
||||
duplica. Una Invoice ya pagada en SAP no genera otro pago.
|
||||
- **Sesión de SAP:** el `B1SESSION` se guarda por conexión (URL + base + usuario) y se reutiliza entre órdenes y
|
||||
ciclos; solo se vuelve a hacer `Login` si SAP responde 401, y se hace `Logout` al terminar el proceso
|
||||
(`SAPServiceLayerClient.cerrar_sesiones()`). Antes se abría una sesión por orden y nunca se cerraba.
|
||||
- **Red:** `ShopifyClient` reintenta hasta 4 veces ante fallos de red (SSL, conexión, timeout), con espera creciente.
|
||||
- **Cursor:** `max(id máximo en BD, initial_since_id)`.
|
||||
@@ -77,6 +77,8 @@ Estado al 2026-09-30. Ver `docs/flujo_pipeline.md`, `docs/mapeo_campos.md` y
|
||||
- **Idempotencia contra SAP**: antes de crear Invoice, ITR, StockTransfer o Delivery se busca un documento
|
||||
existente de la orden (`U_ShopifyOrderId`, `U_ShopifyStore`, mismas líneas) y se adopta; una Invoice ya
|
||||
pagada no genera otro pago.
|
||||
- **Sesiones de SAP**: una por conexión, reutilizada y renovada solo ante un 401; `Logout` al cerrar el proceso
|
||||
(antes: un login por orden, sin cierre).
|
||||
- **Reintentos de red** en `ShopifyClient` (4 intentos con espera creciente).
|
||||
- Invoice igual a lo cobrado (líneas canceladas o devueltas, reembolsos), fulfillments limitados a lo facturado,
|
||||
órdenes anuladas (`cancelled`), pedidos ignorados (`ignored`), despachadas y luego reembolsadas se integran.
|
||||
|
||||
Reference in new issue
Block a user