# Registros, enlaces y jerarquía

- Human documentation: [https://docs.univer.ai/es-ES/guides/bases/features/core/records](https://docs.univer.ai/es-ES/guides/bases/features/core/records)

- Agent Markdown: [https://docs.univer.ai/es-ES/guides/bases/features/core/records.md](https://docs.univer.ai/es-ES/guides/bases/features/core/records.md)

- Requested language: `es-ES`

- Content language: `es-ES`

- Documentation version: `1.2.0`

- Source: [bases/features/core/records.es-ES.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/bases/features/core/records.es-ES.mdx)

---

Un registro representa una tarea, un cliente, un pedido u otro objeto de negocio. Usa la API Facade para escribir por lotes, leer por páginas, vincular tablas y organizar registros padre e hijo.

## Crear y leer registros

```ts
const base = univerAPI.getActiveBase()
if (!base) throw new Error('Open a Base first')

const table = base.insertTable('Tasks', { primaryFieldName: 'Title' })
const titleId = table.getPrimaryFieldId()
const records = table.addRecords([
  { values: { [titleId]: 'Write documentation' } },
  { values: { [titleId]: 'Review examples' } },
])
records[0].setValue(titleId, 'Publish documentation')

const page = table.queryRecords({ offset: 0, limit: 20 })
console.log(page.total, page.records)
```

Los valores usan los ID de los campos como claves de forma predeterminada. Pasa `univerAPI.Enum.BaseFieldKeyEnum.Name` para datos cuyas claves sean nombres de campo. `queryRecords()` consulta los datos locales cargados; no recupera páginas del backend. Usa `viewId` para leer el ámbito de una vista o `sort` para especificar el orden.

Elimina un lote con `table.deleteRecords(recordIds)` o duplica un registro con `record.duplicate()`. Estas operaciones usan el sistema de comandos y admiten deshacer y rehacer.

## Buscar registros

Busca texto en los campos seleccionados:

```ts
const matches = table.search({ query: 'documentation', fieldIds: [titleId], limit: 20 })
console.log(matches)
```

## Vincular otra tabla

Por ejemplo, vincula cada tarea a un proyecto:

```ts
const projects = base.insertTable('Projects', { primaryFieldName: 'Name' })
const project = projects.addRecord({ [projects.getPrimaryFieldId()]: 'Website' })
const projectField = table.addField('Project', univerAPI.Enum.BaseFieldType.RecordLink, {
  field: { config: { targetTableId: projects.getId(), multiple: false } },
})
records[0].setLinkedRecordIds(projectField.getId(), [project.getId()])
console.log(records[0].getLinkedRecordIds(projectField.getId()))
```

Los destinos deben pertenecer a la misma Base. Configura `multiple: true` para vincular varios registros, `displayFieldId` para la etiqueta mostrada y `pickerFieldIds` para aportar contexto adicional en el selector. Usa las API de enlaces para leer y escribir ID en lugar de construir cadenas de almacenamiento internas.

## Registros padre e hijo

Convierte una revisión de la API en un registro hijo de la tarea de documentación:

```ts
const parent = records[0]
const parentFieldId = table.getHierarchyFieldId()
const child = parent.addChild(parentFieldId, { [titleId]: 'Check API examples' })
console.log(child.getParent(parentFieldId)?.getId())

child.setParent(parentFieldId, null)
```

La primera inserción de un hijo crea automáticamente el campo de enlace al padre necesario. Usa `getChildren()`, `getAncestors()` y `getDescendants()` para leer las relaciones. Las jerarquías admiten hasta cinco niveles; no se permite que un registro sea su propio padre ni que existan ciclos. Gestiona los errores de operación no válida en la interfaz.

La jerarquía pertenece a los datos de la tabla y no cambia al alternar o filtrar vistas. Consulta más métodos en [Bases Facade](https://docs.univer.ai/es-ES/reference/facade/base.md).
