Saltar al contenido principal

Resumen

Los Seeds te permiten exportar e importar objetos en todo CXF. Úsalos para mover configuración y datos entre entornos —por ejemplo, para promover una configuración de una instancia a otra, inicializar un entorno nuevo o cargar grandes volúmenes de registros—. Hay dos tipos de seed, con distintas concesiones entre funcionalidad y velocidad.

Tipos de seed

Seeds estructuralesSeeds de instancias
Para qué sirveExportar e importar la estructura y configuración de los objetosInsertar cantidades muy grandes de datos
Cobertura de featuresSoportan todos los features; pueden volverse muy complejosLimitada — reservados solo para instancias de templates
ProcesamientoUno por unoBulk insert (aprovecha el bulk insert de MongoDB)
VelocidadMás lento, mayor fidelidadRápido, alto volumen

Seeds estructurales

Los seeds estructurales soportan todos los features de CXF y pueden representar objetos complejos con todo el detalle. Como cada objeto se procesa uno por uno, ofrecen más funcionalidad a costa de velocidad. Úsalos cuando importa la fidelidad —exportar e importar la estructura y configuración de tus objetos—.

Seeds de instancias

Los seeds de instancias están hechos para volumen. Aprovechan el bulk insert de MongoDB para cargar grandes cantidades de registros rápidamente. A cambio, el soporte de features es más limitado y están reservados solo para instancias de templates.
Flujo típico: una vez que definiste la estructura de un Content Template, usa un seed de instancias para insertar grandes cantidades de instancias de ese template.

Cómo armar un seed estructural

Un seed estructural es un array JSON. Cada ítem declara un object_type y un objeto data con los campos del registro — los mismos campos documentados en la página de referencia de ese objeto. Los ítems se procesan en orden, así que un registro puede referenciar a otro creado antes en el mismo seed. Como los ids no se conocen de antemano, los seeds estructurales usan reference helpers — expresiones {{...}} que resuelven al id de un registro en el momento de la inserción:
HelperResuelve a
getRecordAttribute(object_type, field, value)El id de un registro localizado por un campo — se usa para template_id.
getAttributeGroup(object_type, group_slug, template_slug, template_type)El id de un attribute group padre — se usa para parent_id.
getContentInstance(template_slug, field, value)El id de un content instance. Los content instances (y los documents) viven en una colección por template, así que el template slug es obligatoriogetRecordAttribute no puede resolverlos.
El ejemplo de abajo siembra un content template Blog, un grupo de attributes Default, y dos attributes anidados dentro:
[
  {
    "object_type": "content_templates",
    "data": {
      "title": "Blog",
      "slug": "blog",
      "type": "stories"
    }
  },
  {
    "object_type": "attributes",
    "data": {
      "title": "Default",
      "slug": "default",
      "data_type": "group",
      "appearance": "default",
      "object_type": "content_versions",
      "template_type": "stories",
      "template_id": "{{getRecordAttribute('content_templates', 'slug', 'blog')}}",
      "full_slug": "default"
    }
  },
  {
    "object_type": "attributes",
    "data": {
      "title": "Lecture time",
      "slug": "lecture_time",
      "data_type": "text",
      "appearance": "short",
      "object_type": "content_versions",
      "template_type": "stories",
      "template_id": "{{getRecordAttribute('content_templates', 'slug', 'blog')}}",
      "parent_id": "{{getAttributeGroup('content_versions', 'default', 'blog', 'stories')}}",
      "full_slug": "default.lecture_time"
    }
  },
  {
    "object_type": "attributes",
    "data": {
      "title": "Cover Image",
      "slug": "cover_image",
      "data_type": "media",
      "appearance": "image",
      "is_required": true,
      "object_type": "content_versions",
      "template_type": "stories",
      "template_id": "{{getRecordAttribute('content_templates', 'slug', 'blog')}}",
      "parent_id": "{{getAttributeGroup('content_versions', 'default', 'blog', 'stories')}}",
      "full_slug": "default.cover_image"
    }
  }
]
Los attributes de contenido se definen contra el object type content_versions y se scopean a su content template mediante template_id. Los campos anidados apuntan a su grupo con parent_id y usan un full_slug con puntos (por ejemplo, default.cover_image).

Cómo armar un instance seed

Un instance seed es un array JSON plano de registros insertados en bulk en las instancias de un solo template. A diferencia del estructural, no tiene envoltorio object_type ni reference helpers — cada registro apunta al mismo template (elegido al ejecutar el seed), así que no hay ids que cruzar. Para contenido, los valores de cada registro viven dentro de sus versions, y los valores de los attributes se agrupan bajo el slug de su attribute group (por ejemplo default):
[
  {
    "slug": "sample-content-1",
    "title": "Sample Content 1",
    "versions": [
      {
        "language": "en",
        "environment": "production",
        "status": "draft",
        "title": "English Production Version",
        "slug": "en-production",
        "default": {
          "description": "<p>Sample <strong>formatted</strong> text</p>"
        }
      }
    ]
  }
]
Los instance seeds están reservados para instancias de templates y no soportan jerarquía. Para crear relaciones padre-hijo (por ejemplo entre Taxonomies), usa un seed estructural o defínelas en la UI después.

Comportamiento y reglas

  • Un seed se escribe como un array JSON y se pega directamente en el importador — hay una preview en vivo que valida el JSON mientras escribes, así solo puede importarse una entrada válida.
  • Los seeds estructurales se procesan un registro a la vez, en el orden del array, para que un registro posterior pueda referenciar a uno creado antes vía reference helpers; los instance seeds se insertan en bloque en las instancias de un único template.
  • Los seeds son idempotentes — reimportar el mismo seed no crea duplicados.
  • Un seed puede ejecutarse de forma síncrona, o de forma asíncrona como un background job cuyo progreso sigues en Jobs. Una importación síncrona está limitada a 50 objetos; para seeds más grandes, ejecútala de forma asíncrona (sin límite).

Dónde encontrarlo

Los seeds se importan desde Docs Explorer → Schemas. Haz clic en Import structure seeds para abrir el panel Import Structure Seeds:
  • Import — pega tu array JSON en JSON Input; la Preview se actualiza automáticamente. Activa Run asynchronously (background job) para importaciones grandes, y luego haz clic en Import Seeds.
  • Jobs — sigue el estado de los jobs de importación asíncronos.

Gobernanza y permisos

Solo un super admin o un Master puede importar seeds.

Relacionado

Schemas

La forma de la data que cargan los seeds.

Content Templates

Los seeds de instancias operan sobre instancias de templates.