173 lines
5.7 KiB
TypeScript
173 lines
5.7 KiB
TypeScript
/**
|
|
* Ejemplo de conexión básica con Tryton
|
|
*
|
|
* Este ejemplo demuestra cómo:
|
|
* 1. Conectarse al servidor Tryton
|
|
* 2. Obtener información del usuario y el token de sesión
|
|
* 3. Buscar terceros (party.party) y mostrar sus nombres
|
|
*
|
|
* Instrucciones de uso:
|
|
* 1. Instala las dependencias: npm install
|
|
* 2. Compila el proyecto: npm run build
|
|
* 3. Edita las variables de configuración abajo con tus datos de conexión
|
|
* 4. Ejecuta: node dist/examples/basic-connection.js
|
|
*/
|
|
|
|
import { TrytonClient } from "../src/client";
|
|
|
|
// ====================================================
|
|
// CONFIGURACIÓN - EDITA ESTOS VALORES CON TUS DATOS
|
|
// ====================================================
|
|
const config = {
|
|
hostname: "https://demo7.6.tryton.org", // Servidor demo con HTTPS
|
|
port: 8000, // Puerto del servidor Tryton (generalmente 8000)
|
|
database: "demo7.6", // Base de datos demo
|
|
username: "admin", // Usuario demo
|
|
password: "admin", // Contraseña demo
|
|
language: "es", // Idioma (es, en, etc.)
|
|
options: {
|
|
verbose: true, // Mostrar información detallada de conexión
|
|
timeout: 30000, // Timeout en milisegundos
|
|
},
|
|
};
|
|
|
|
// Verificar que se han completado los datos de configuración
|
|
function validateConfig() {
|
|
const requiredFields: (keyof typeof config)[] = [
|
|
"hostname",
|
|
"database",
|
|
"username",
|
|
"password",
|
|
];
|
|
const missingFields = requiredFields.filter((field) => !config[field]);
|
|
|
|
if (missingFields.length > 0) {
|
|
console.error(
|
|
"❌ Error: Faltan los siguientes campos de configuración:"
|
|
);
|
|
missingFields.forEach((field) => console.error(` - ${field}`));
|
|
console.error(
|
|
"\n💡 Edita este archivo y completa la configuración antes de ejecutar."
|
|
);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
// Interfaz para los terceros (party.party)
|
|
interface Party {
|
|
id: number;
|
|
name: string;
|
|
code?: string;
|
|
active: boolean;
|
|
lang?: string;
|
|
}
|
|
|
|
async function main() {
|
|
console.log("🚀 Iniciando ejemplo de conexión con Tryton...\n");
|
|
|
|
// Validar configuración
|
|
validateConfig();
|
|
|
|
// Crear cliente
|
|
console.log("📡 Creando cliente Tryton...");
|
|
const client = new TrytonClient(config);
|
|
|
|
try {
|
|
// Conectar al servidor
|
|
console.log("🔗 Conectando al servidor...");
|
|
const connected = await client.connect();
|
|
|
|
if (!connected) {
|
|
throw new Error("No se pudo establecer la conexión");
|
|
}
|
|
|
|
console.log("✅ Conexión exitosa!\n");
|
|
|
|
// ====================================================
|
|
// INFORMACIÓN DEL USUARIO Y SESIÓN
|
|
// ====================================================
|
|
console.log("👤 INFORMACIÓN DEL USUARIO");
|
|
console.log("=".repeat(40));
|
|
|
|
// Mostrar información básica del usuario
|
|
console.log(`Usuario: ${config.username}`);
|
|
console.log(`Base de datos: ${config.database}`);
|
|
console.log(`Servidor: ${config.hostname}:${config.port}`);
|
|
|
|
// Mostrar token de sesión
|
|
const sessionToken = client.getSession();
|
|
console.log(`Token de sesión: ${sessionToken}`);
|
|
console.log("");
|
|
|
|
// ====================================================
|
|
// BÚSQUEDA DE TERCEROS
|
|
// ====================================================
|
|
console.log("🏢 LISTA DE TERCEROS");
|
|
console.log("=".repeat(40));
|
|
|
|
// Buscar todos los terceros activos (limitado a 20 para el ejemplo)
|
|
console.log("Buscando terceros...");
|
|
const partiesData = await client.searchRead<Party>(
|
|
"party.party", // Modelo de terceros
|
|
[], // Dominio: todos los terceros (sin filtros)
|
|
["id", "name", "code"], // Campos a obtener
|
|
0, // Offset
|
|
20 // Límite de resultados
|
|
// Sin parámetro order
|
|
);
|
|
|
|
if (partiesData.length === 0) {
|
|
console.log("❌ No se encontraron terceros.");
|
|
} else {
|
|
console.log(`✅ Se encontraron ${partiesData.length} terceros:\n`);
|
|
|
|
// Mostrar lista de terceros
|
|
partiesData.forEach((party, index) => {
|
|
const code = party.code ? ` (${party.code})` : "";
|
|
console.log(
|
|
`${(index + 1).toString().padStart(2)}. ${
|
|
party.name
|
|
}${code}`
|
|
);
|
|
});
|
|
}
|
|
|
|
console.log("\n🎉 ¡Ejemplo completado exitosamente!");
|
|
} catch (error) {
|
|
console.error("❌ Error durante la ejecución:");
|
|
const errorMessage =
|
|
error instanceof Error ? error.message : String(error);
|
|
console.error(errorMessage);
|
|
|
|
if (config.options.verbose && error instanceof Error && error.stack) {
|
|
console.error("\nStack trace:");
|
|
console.error(error.stack);
|
|
}
|
|
|
|
// Sugerencias de solución de problemas
|
|
console.error("\n💡 Posibles soluciones:");
|
|
console.error(" - Verifica que el servidor Tryton esté ejecutándose");
|
|
console.error(" - Confirma que los datos de conexión sean correctos");
|
|
console.error(
|
|
" - Asegúrate de que el usuario tenga permisos adecuados"
|
|
);
|
|
console.error(" - Verifica la conectividad de red al servidor");
|
|
|
|
process.exit(1);
|
|
} finally {
|
|
// Cerrar la conexión si está abierta
|
|
if (client && client.isConnected) {
|
|
console.log("\n🔌 Cerrando conexión...");
|
|
client.close();
|
|
console.log("\n✅ Conexión cerrada.");
|
|
}
|
|
}
|
|
}
|
|
|
|
// Ejecutar el ejemplo si se llama directamente
|
|
if (require.main === module) {
|
|
main().catch(console.error);
|
|
}
|
|
|
|
export { main };
|