from typing import Dict from fastapi import APIRouter, HTTPException from core.sap import forward_to_sapb1 router = APIRouter(tags=["Tablas de Usuario"]) # Mapea un nombre amigable de tabla de usuario (@...) a su nombre real de # entidad en Service Layer. La convención de nombre no es uniforme entre # tablas de un mismo cliente (una tabla de usuario puede exponerse con # prefijo "U_" y otra sin él), así que se centraliza acá en vez de que cada # módulo tenga que adivinar o repetir el nombre de endpoint real. Cada # cliente completa este mapeo según sus propias tablas de usuario en SAP. USER_TABLES: Dict[str, str] = {} @router.get("/api/UserTables/{name}") async def get_user_table(name: str): """ Catálogo Code/Name de una tabla de usuario de SAP B1, identificada por un nombre amigable (ver USER_TABLES) en vez del nombre real de tabla/entidad. Pensado para reutilizarse en cualquier formulario que necesite un select cargado desde una tabla de usuario de este tipo. """ entity = USER_TABLES.get(name) if not entity: raise HTTPException(status_code=404, detail=f"Tabla de usuario '{name}' no está registrada") # Service Layer limita el tamaño de página por defecto (server-side, no # depende solo de "$top") salvo que se indique explícitamente el header # B1S-PageSize; sin él, catálogos con más de ~20 filas quedaban truncados. return forward_to_sapb1( method="GET", endpoint_path=entity, params={"$select": "Code,Name", "$top": 200}, extra_headers={"B1S-PageSize": "200"}, ).json()