Este es el paso que diferencia a las Code Apps de cualquier otra forma de construir apps web: la generación automática de un SDK tipado para acceder a Dataverse. Vamos a conectar nuestro proyecto con la tabla de incidencias que creamos y a entender qué genera exactamente el CLI.
Objetivos de aprendizaje
- Conectar el proyecto al entorno de Dataverse usando PAC CLI
- Generar el SDK de tipos y servicios para la tabla de incidencias
- Entender la estructura de los archivos generados
- Usar el SDK en un componente React básico
Comando de terminal: Conexión con Dataverse
Para conectar la tabla de incidencias al proyecto, necesitamos que PAC CLI esté autenticado (lo hicimos en el módulo anterior) y ejecutar el siguiente comando en la terminal de VS Code:
# Primero, asegúrate de estar en el directorio del proyecto
cd gestor-incidencias
# Conectamos la tabla de incidencias al proyecto
# El nombre lógico de la tabla es cr_incidencia (sin el prefijo de entidad)
pac code add-data-source --dataverse --table cr_incidencia
# Si quisieras añadir más tablas después:
pac code add-data-source --dataverse --table otra_tabla
Después de ejecutar este comando, el CLI se conectará a tu entorno de Dataverse, recuperará el esquema completo de la tabla cr_incidencia y generará automáticamente los archivos TypeScript en la carpeta src/generated/.
Qué se genera: los archivos del SDK
Dentro de src/generated/services/ encontrarás algo similar a esto:
src/generated/
├── services/
│ ├── CrIncidenciaService.ts # Clase de servicio con métodos CRUD
│ ├── types/
│ │ └── CrIncidencia.ts # Interface TypeScript de la entidad
│ └── enums/
│ ├── CrEstado.ts # Enum con los valores del estado
│ └── CrPrioridad.ts # Enum con los valores de la prioridad
└── index.ts # Re-exporta todo para importación fácil
[Placeholder para imagen: Captura de VS Code mostrando el IntelliSense completo con los tipos de Dataverse generados]
La interface TypeScript generada
El archivo CrIncidencia.ts contendrá algo como:
import { CrEstado } from '../enums/CrEstado';
import { CrPrioridad } from '../enums/CrPrioridad';
export interface CrIncidencia {
cr_incidenciaid?: string; // GUID del registro (opcional en creación)
cr_titulo: string; // Campo principal
cr_descripcion?: string;
cr_estado?: CrEstado; // Enum de estado
cr_prioridad?: CrPrioridad; // Enum de prioridad
cr_solicitante?: string;
cr_notas?: string;
createdon?: Date; // Campo del sistema
modifiedon?: Date; // Campo del sistema
}
El servicio generado
La clase CrIncidenciaService.ts tendrá métodos listos para usar:
import { CrIncidenciaService } from '../generated';
import { CrEstado } from '../generated/enums/CrEstado';
// Obtener todas las incidencias abiertas
const incidenciasAbiertas = await CrIncidenciaService.getAll({
filter: `cr_estado eq ${CrEstado.Abierta}`
});
// Obtener una incidencia por ID
const incidencia = await CrIncidenciaService.getById('guid-del-registro');
// Crear una nueva incidencia
const nueva = await CrIncidenciaService.create({
cr_titulo: 'El servidor no responde',
cr_prioridad: CrPrioridad.Alta,
cr_solicitante: 'Juan García'
});
// Actualizar una incidencia
await CrIncidenciaService.update('guid', {
cr_estado: CrEstado.EnProgreso
});
// Eliminar una incidencia
await CrIncidenciaService.delete('guid');
pac code add-data-source en tu terminal para regenerar el SDK y que los nuevos campos estén disponibles en TypeScript.
Puntos clave
- El comando de terminal
pac code add-data-source --dataverse --tableconecta la tabla y genera el SDK - El SDK genera interfaces TypeScript, enums y clases de servicio automáticamente
- Los conjuntos de opciones de Dataverse se convierten en enums TypeScript
- El servicio generado tiene métodos CRUD listos para usar sin escribir llamadas REST
- Si el esquema cambia, hay que regenerar el SDK ejecutando el comando nuevamente en terminal