Cuando elimina un elemento de lista al que hace referencia una columna de búsqueda en SharePoint, la columna de búsqueda sigue mostrando el elemento eliminado. Este comportamiento causa confusión porque los usuarios ven entradas en un campo de búsqueda que ya no existen en la lista de origen. La causa raíz es que las columnas de búsqueda de SharePoint almacenan una referencia estática al ID del elemento, no una consulta en vivo a la lista de origen. Este artículo explica por qué aparecen elementos eliminados en las columnas de búsqueda y proporciona un método paso a paso para quitarlos.
Puntos clave: Eliminar elementos eliminados de las columnas de búsqueda
- Comportamiento de la columna de búsqueda: Las columnas de búsqueda almacenan el ID del elemento, por lo que eliminar el elemento de origen deja una referencia rota que aún aparece como una opción.
- Script de PowerShell (Remove-PnPListItem): Use el módulo PnP PowerShell de SharePoint para quitar todas las referencias de búsqueda a un elemento eliminado específico en todas las listas.
- Activación de la característica de colección de sitios: Habilite la característica “Permitir campos de búsqueda que hacen referencia a esta lista” para controlar si las columnas de búsqueda pueden apuntar a una lista.
Por qué los elementos eliminados siguen apareciendo en las columnas de búsqueda
Una columna de búsqueda en SharePoint no ejecuta una consulta en vivo contra la lista de origen cada vez que se representa la columna. En su lugar, cuando agrega una columna de búsqueda a una lista, SharePoint crea una relación oculta entre las dos listas. La columna de búsqueda almacena el ID del elemento seleccionado de la lista de origen. Cuando elimina ese elemento de origen, la columna de búsqueda conserva el ID. SharePoint muestra el valor original en el campo de búsqueda porque no puede encontrar un elemento coincidente en la lista de origen. Esto no es un error; es el comportamiento diseñado de las relaciones de listas de SharePoint.
El problema se vuelve más visible cuando usa una columna de búsqueda en un campo de opción o en una vista filtrada. Los usuarios ven una entrada que parece válida pero conduce a un vínculo roto. La única forma de quitar el elemento eliminado de la columna de búsqueda es eliminar el valor de búsqueda de cada elemento que hace referencia a él. La eliminación manual consume mucho tiempo si la columna de búsqueda se usa en cientos de elementos. Un script de PowerShell puede automatizar esta tarea.
Método de PowerShell para quitar referencias de búsqueda eliminadas
Los siguientes pasos usan el módulo PnP PowerShell de SharePoint. Este módulo es gratuito y funciona con SharePoint Online y SharePoint 2019 local. Necesita permisos de administrador de SharePoint para ejecutar el script.
Instalar y conectar el módulo PnP PowerShell
- Instalar PnP PowerShell
Abra Windows PowerShell como administrador. Ejecute el comandoInstall-Module PnP.PowerShell -Scope CurrentUser. Presione Y para confirmar la instalación desde PSGallery. - Conectarse a su sitio de SharePoint
EjecuteConnect-PnPOnline -Url "https://yourtenant.sharepoint.com/sites/yoursite" -Interactive. Se abre una ventana del navegador. Inicie sesión con una cuenta de administrador de SharePoint.
Ejecutar el script para quitar los valores de búsqueda eliminados
- Identificar la lista de origen y el ID del elemento eliminado
Vaya a la lista de origen. Abra la configuración de la lista y anote el título de la lista. Si no conoce el ID del elemento eliminado, ejecuteGet-PnPListItem -List "SourceListName"para enumerar todos los elementos actuales. - Ejecutar el script de limpieza
Use el siguiente script. Reemplace “SourceListName” con el nombre de la lista de origen, “TargetListName” con el nombre de la lista que contiene la columna de búsqueda, “LookupColumnName” con el nombre interno de la columna de búsqueda y “DeletedItemID” con el ID del elemento eliminado.$items = Get-PnPListItem -List "TargetListName" -PageSize 500
foreach ($item in $items) {
if ($item["LookupColumnName"] -eq $DeletedItemID) {
Set-PnPListItem -List "TargetListName" -Identity $item.Id -Values @{"LookupColumnName" = $null}
}
}Este script recorre todos los elementos de la lista de destino. Para cada elemento en el que la columna de búsqueda es igual al ID del elemento eliminado, establece el valor de búsqueda en null. El cambio quita la referencia rota y el elemento eliminado ya no aparece en la columna de búsqueda.
- Verificar el resultado
Abra la lista de destino en un navegador. Haga clic en cualquier elemento que antes mostraba el elemento eliminado. La columna de búsqueda ahora debería estar vacía. Si la columna es obligatoria, debe seleccionar un elemento válido de la lista de origen.
Si la columna de búsqueda sigue mostrando elementos eliminados después del script
El script anterior quita el valor de búsqueda de todos los elementos de la lista de destino. Si el elemento eliminado sigue apareciendo, se aplica uno de los siguientes escenarios.
La columna de búsqueda hace referencia a una lista diferente de la esperada
Una columna de búsqueda puede hacer referencia a cualquier lista del mismo sitio. Es posible que la lista de origen no sea la que cree. Revise la configuración de la columna de búsqueda. Vaya a la configuración de la lista de destino, seleccione la columna de búsqueda y anote el campo “Obtener información de”. Esa es la lista de origen real. Ejecute el script con el nombre correcto de la lista de origen.
El elemento eliminado está en la papelera de reciclaje de la colección de sitios
Cuando elimina un elemento de una lista, SharePoint lo mueve a la papelera de reciclaje de la colección de sitios. El elemento se elimina de forma reversible. La columna de búsqueda todavía ve el ID del elemento porque el elemento aún existe en la papelera de reciclaje. Para quitar la referencia de forma permanente, elimine el elemento de la papelera de reciclaje. Vaya a la lista de origen, haga clic en el icono de engranaje, seleccione “Contenido del sitio” y luego abra la “Papelera de reciclaje de la colección de sitios” desde el menú superior. Busque el elemento eliminado, selecciónelo y haga clic en “Eliminar selección”. Después de eso, ejecute el script de PowerShell de nuevo.
La columna de búsqueda usa varios valores
Una columna de búsqueda configurada para permitir varios valores almacena una matriz de ID de elementos. El script anterior busca una coincidencia exacta. Si la columna de búsqueda contiene varios ID y solo uno de ellos es el elemento eliminado, el script establece toda la columna en null. Para conservar otros valores, necesita un script más avanzado que filtre la matriz. Use la siguiente modificación:
$items = Get-PnPListItem -List "TargetListName" -PageSize 500
foreach ($item in $items) {
$lookupValues = $item["LookupColumnName"]
if ($lookupValues -is [array] -and $lookupValues -contains $DeletedItemID) {
$newValues = $lookupValues | Where-Object { $_ -ne $DeletedItemID }
Set-PnPListItem -List "TargetListName" -Identity $item.Id -Values @{"LookupColumnName" = $newValues}
}
}
Medidas preventivas para las columnas de búsqueda
No puede impedir que los usuarios eliminen elementos de la lista de origen. Pero puede reducir el impacto de las referencias de búsqueda rotas con las siguientes prácticas.
Use una lista de origen de búsqueda dedicada
Cree una lista separada que contenga solo los valores usados por las columnas de búsqueda. Restrinja los permisos de esa lista para que solo los propietarios del sitio puedan agregar o eliminar elementos. Esto reduce la probabilidad de que un usuario elimine accidentalmente un elemento referenciado.
Habilitar el comportamiento de relación
Las relaciones de listas de SharePoint pueden aplicar integridad referencial. En la configuración de la lista de origen, en “Configuración avanzada”, habilite “Permitir campos de búsqueda que hacen referencia a esta lista”. Luego establezca “Aplicar comportamiento de relación” en “Eliminar en cascada”. Cuando elimina un elemento de la lista de origen, SharePoint elimina automáticamente todos los elementos relacionados de la lista de destino. Esta opción solo está disponible para listas de la misma colección de sitios. Tenga cuidado: Eliminar en cascada quita elementos de lista completos, no solo el valor de búsqueda. Pruebe este comportamiento primero en una copia de sus datos.
Limpieza manual con PowerShell frente a limpieza automatizada: diferencias clave
| Elemento | Limpieza manual | Limpieza automatizada (PowerShell) |
|---|---|---|
| Tiempo requerido | Varias horas para cientos de elementos | Minutos para miles de elementos |
| Riesgo de error | Alto: error humano al seleccionar elementos incorrectos | Bajo: el script apunta al ID exacto del elemento |
| Habilidad necesaria | Ninguna | Conocimientos básicos de PowerShell |
| Compatibilidad con varios valores | Edición manual de cada elemento | Script con filtrado de matrices |
| Manejo de la papelera de reciclaje | El usuario debe revisar la papelera de reciclaje manualmente | El script no revisa la papelera de reciclaje |
Ahora puede quitar elementos eliminados de las columnas de búsqueda con PowerShell. Ejecute el script después de verificar la lista de origen y el ID del elemento eliminado. Para la prevención continua, habilite Eliminar en cascada en la lista de origen o restrinja los permisos en la lista de origen de búsqueda. Si necesita manejar columnas de búsqueda con varios valores, use el script de filtrado de matrices proporcionado en este artículo.