Estás importando una plantilla de aprovisionamiento PnP y falla con:
Index was out of range. Must be non-negative and less than the size of the collection.
Un error genérico de colección .NET sin contexto útil — sin nombre de página, sin número de sección, sin referencia al web part. A continuación, qué lo causa y cómo corregirlo.
TL;DR: Este error generalmente significa que un web part está asignado a una columna que no existe en su sección. Busca discrepancias entre el atributoTypeen los elementos<pnp:Section>y los valores deColumnen los controles dentro de ellos.
La causa
Las plantillas de aprovisionamiento PnP almacenan los diseños de página como XML. Cada página está compuesta por secciones, y cada sección tiene un tipo definido — OneColumn, TwoColumnLeft, TwoColumnRight, ThreeColumn, etc.
Dentro de cada sección, los web parts se posicionan usando un atributo Column. El problema ocurre cuando la columna a la que hace referencia un web part no existe en el tipo de sección.
El error proviene del manejo de colecciones .NET subyacente dentro del motor de aprovisionamiento, por eso no proporciona contexto sobre páginas o secciones — simplemente intenta acceder a un índice de lista que no existe y lanza un error genérico.
Por ejemplo:
<pnp:Section Order="9" Type="TwoColumnRight">
<pnp:CanvasControl ... Order="1" Column="3" />
<pnp:CanvasControl ... Order="2" Column="3" />
</pnp:Section>
Una sección TwoColumnRight solo tiene dos columnas. Estos web parts hacen referencia a la Columna 3, que no existe — de ahí el error.
Cómo ocurre
Esto casi siempre ocurre cuando el diseño de una sección de página fue cambiado después de exportar la plantilla. La secuencia típica:
- Se construye una página con una sección de tres columnas
- Se añaden web parts en las tres columnas
- Alguien cambia el diseño de la sección a dos columnas en la interfaz de SharePoint
- Los web parts que estaban en la columna 3 quedan colapsados — SharePoint lo gestiona visualmente
- Se exporta la plantilla — pero el XML ahora tiene un tipo de sección
TwoColumnRightcon web parts que aún hacen referencia aColumn="3" - Al intentar importar esa plantilla, PnP intenta colocar un web part en una columna que no existe
Lo frustrante es que la página se ve bien en SharePoint. El problema solo aparece durante el aprovisionamiento.
Cómo encontrarlo
Abre tu archivo de plantilla .xml y busca discrepancias entre los tipos de sección y las referencias de columna. Los números de columna válidos para cada tipo de sección son:
| Tipo de sección | Columnas válidas |
|---|---|
| OneColumn | 1 |
| OneColumnFullWidth | 1 |
| TwoColumnLeft | 1, 2 |
| TwoColumnRight | 1, 2 |
| ThreeColumn | 1, 2, 3 |
Busca en el XML Column="3" y comprueba si alguno de esos controles está dentro de una sección que no sea ThreeColumn. Del mismo modo, comprueba si hay Column="2" dentro de secciones OneColumn.
Un bloque típico con el problema tiene este aspecto:
<!-- Sección definida como dos columnas -->
<pnp:Section Order="9" Type="TwoColumnRight">
<!-- Web part haciendo referencia a una tercera columna que no existe -->
<pnp:CanvasControl WebPartType="QuickLinks"
Order="1" Column="3">
...
</pnp:CanvasControl>
</pnp:Section>
La corrección
Tienes dos opciones dependiendo de cómo debería verse realmente la página:
Opción 1 — Corregir el tipo de sección para que coincida con la realidad
Si la página realmente tiene tres columnas, el tipo de sección en el XML es incorrecto. Cámbialo:
<!-- Antes -->
<pnp:Section Order="9" Type="TwoColumnRight">
<!-- Después -->
<pnp:Section Order="9" Type="ThreeColumn">
Opción 2 — Mover los web parts a una columna válida
Si la página realmente tiene dos columnas y los web parts afectados necesitan moverse, actualiza el atributo Column:
<!-- Antes -->
<pnp:CanvasControl ... Order="1" Column="3" />
<!-- Después -->
<pnp:CanvasControl ... Order="1" Column="2" />
Después de hacer el cambio, vuelve a ejecutar el aprovisionamiento — el error debería haber desaparecido.
Atención a múltiples ocurrencias
Esto rara vez es un problema puntual. Las plantillas exportadas de sitios que han evolucionado con el tiempo a menudo tienen esta discrepancia en múltiples secciones de múltiples páginas. Corrige una ocurrencia y puede que encuentres otra en la siguiente ejecución.
Trabaja la plantilla sistemáticamente — comprueba cada tipo de sección contra los números de columna usados por sus controles antes de intentar el aprovisionamiento.
Prevención y validación
Al exportar plantillas PnP de sitios que han cambiado de diseño con el tiempo, una auditoría rápida del XML antes de importar puede ahorrarte una sesión de depuración frustrante.
Para plantillas más grandes, considera añadir un paso de validación que analice el XML en busca de referencias de columna inválidas antes del aprovisionamiento — un script corto de PowerShell que analice el XML y marque cualquier valor de Column que supere el máximo para su tipo de sección padre. Es un bucle de retroalimentación mucho más rápido que una ejecución de aprovisionamiento fallida.