Hola a todos,
En una entrada anterior, os comentaba cómo podíamos ocultar listas de SharePoint con Power Automate: OCULTAR LISTA DE SHAREPOINT CON POWER AUTOMATE
Como continuación, os mostraré cómo podemos detectar listas ocultas en un sitio de SharePoint utilizando Power Automate y mostrando posteriormente el resultado en Power Apps.
Para este ejemplo voy a utilizar un sitio de SharePoint llamado Weyland-Yutani, que ya me ha servido para preparar muchos de los ejemplos publicados en esta web.
En este sitio tenemos varias listas de tipo Custom, es decir, listas personalizadas. Estas serán las listas que vamos a analizar con el flujo, concretamente aquellas que hayan sido ocultadas.
En la siguiente imagen, las listas marcadas con un recuadro negro corresponden a listas personalizadas y, en rojo, aparece la lista que voy a ocultar para utilizarla en el ejemplo.

Antes de entrar en el flujo, os dejo el listado de tipos de listas de SP:
BaseTemplate - Tipo
-1 = InvalidType
0 = NoListTemplate
100 = GenericList - Lista personalizada
101 = DocumentLibrary - Biblioteca de documentos
102 = Survey - Encuesta
103 = Links - Vínculos
104 = Announcements - Anuncios
105 = Contacts - Contactos
106 = Events - Calendario / Eventos
107 = Tasks - Tareas
108 = DiscussionBoard - Panel de discusión
109 = PictureLibrary - Biblioteca de imágenes
110 = DataSources - Orígenes de datos
111 = WebTemplateCatalog - Galería de plantillas de sitio
112 = UserInformation - Información de usuario
113 = WebPartCatalog - Galería de elementos web
114 = ListTemplateCatalog - Galería de plantillas de listas
115 = XMLForm - Biblioteca de formularios XML
116 = MasterPageCatalog - Galería de páginas maestras
117 = NoCodeWorkflows - Flujos de trabajo sin código
118 = WorkflowProcess - Proceso personalizado de flujo
119 = WebPageLibrary - Biblioteca de páginas Wiki
120 = CustomGrid - Cuadrícula personalizada / lista personalizada
121 = SolutionCatalog - Galería de soluciones
122 = NoCodePublic - Flujos públicos sin código
123 = ThemeCatalog - Galería de temas
124 = DesignCatalog - Catálogo de diseños
125 = AppDataCatalog - Datos de aplicaciones
126 = AppFilesCatalog - Archivos de aplicaciones
130 = DataConnectionLibrary - Biblioteca de conexiones de datos
140 = WorkflowHistory - Historial de flujos de trabajo
150 = GanttTasks - Tareas de proyecto / Gantt
151 = HelpLibrary - Biblioteca de ayuda
160 = AccessRequest - Solicitudes de acceso
170 = PromotedLinks - Vínculos promocionados
171 = TasksWithTimelineAndHierarchy - Tareas con cronología y jerarquía
175 = MaintenanceLogs - Registros de mantenimiento
200 = Meetings - Serie de reuniones
201 = Agenda - Agenda de reunión
202 = MeetingUser - Asistentes a reunión
204 = Decision - Decisiones de reunión
207 = MeetingObjective - Objetivos de reunión
210 = TextBox - Cuadro de texto de reunión
211 = ThingsToBring - Elementos que llevar a una reunión
212 = HomePageLibrary - Páginas de área de reunión
301 = Posts - Entradas de blog
302 = Comments - Comentarios de blog
303 = Categories - Categorías de blog
402 = Facility - Recursos / instalaciones
403 = Whereabouts - Disponibilidad / ubicación
404 = CallTrack - Seguimiento de llamadas
405 = Circulation - Circulación
420 = Timecard - Parte de horas
421 = Holidays - Festivos
499 = IMEDic - Diccionario IME
600 = ExternalList - Lista externa
700 = MySiteDocumentLibrary - Biblioteca de documentos de My Site
1100 = IssueTracking - Seguimiento de incidencias
1200 = AdminTasks - Tareas de administración
1220 = HealthRules - Reglas de mantenimiento
1221 = HealthReports - Informes de mantenimiento
1230 = DeveloperSiteDraftApps - Aplicaciones en borrador
3100 = AccessApp - Aplicación de Access
3101 = AlchemyMobileForm
3102 = AlchemyApprovalWorkflow
3300 = SharingLinks - Enlaces compartidos
3400 = HashtagStore
3410 = RecipesTable
3411 = FormulasTable
3415 = WebTemplateExtensionsList - Extensiones de plantillas web
3500 = ItemReferenceCollection
3501 = ItemReferenceReference
3502 = ItemReferenceReferenceCollection
Valor adicional / legado observado:
10102 = Converted Forms - Formularios convertidos
Y ahora ya podemos iniciar el flujo:

El flujo parte de Power Apps y consulta mediante una solicitud HTTP las listas ocultas del sitio de SharePoint. Después filtra únicamente las listas personalizadas que queremos analizar, selecciona los campos necesarios, como nombre, identificador, número de elementos y tipo de plantilla, y construye una respuesta estructurada. Finalmente, esa información se devuelve a Power Apps, donde podremos mostrar las listas ocultas en una galería de forma clara y ordenada.
Aquí os dejo las acciones y los códigos de cada una:
1. POWER APPS (V2)
Nombre puesto: POWER APPS (V2)
Acción real: Power Apps (V2)
Entrada:
[Sin entradas en este caso]
2. OBTENER LISTAS OCULTAS
Nombre puesto: OBTENER LISTAS OCULTAS
Acción real: Enviar una solicitud HTTP a SharePoint
Método:
GET
URI:
_api/web/lists?$select=Id,Title,Hidden,ItemCount,BaseTemplate&$filter=Hidden%20eq%20true
3. FILTRAR LISTAS SISTEMA
Nombre puesto: FILTRAR LISTAS SISTEMA
Acción real: Filtrar matriz
Desde:
body('OBTENER_LISTAS_OCULTAS')?['d']?['results']
Filtro:
@equals(item()?['BaseTemplate'], 120)
4. SELECCIONAR LISTAS
Nombre puesto: SELECCIONAR LISTAS
Acción real: Seleccionar
Desde:
body('FILTRAR_LISTAS_SISTEMA')
Nombre:
item()?['Title']
Id:
item()?['Id']
Oculta:
item()?['Hidden']
Elementos:
item()?['ItemCount']
Item:
item()?['BaseTemplate']
5. FORMATEAR RESPUESTA
Nombre puesto: FORMATEAR RESPUESTA
Acción real: Componer
{
"TOTAL": @{length(body('SELECCIONAR_LISTAS'))},
"LISTAS": @{body('SELECCIONAR_LISTAS')}
}
6. RESPONDER A POWER APPS
Nombre puesto: RESPONDER A POWER APPS
Acción real: Responder a una aplicación de Power Apps o flujo
Salida:
RESULTADO
Valor:
string(outputs('FORMATEAR_RESPUESTA'))
En caso de que queráis ver cualquier tipo de lista oculta, debéis cambiar el filtro a true
3. FILTRAR LISTAS SISTEMA
Nombre puesto: FILTRAR LISTAS SISTEMA
Acción real: Filtrar matriz
Desde:
body('OBTENER_LISTAS_OCULTAS')?['d']?['results']
Filtro:
@true
@true hace que todos los elementos pasen el filtro, independientemente de su BaseTemplate.
Luego, obtendremos una información que podemos mostrar en la app:

En el botón de la app vamos a poner lo siguiente:
Set(
varResultado;
GESTIONAR_LISTAS_OCULTAS_SHAREPOINT.Run().resultado
);;
ClearCollect(
colListasOcultas;
ForAll(
Table(ParseJSON(varResultado).LISTAS);
{
NOMBRE: Text(ThisRecord.Value.Nombre);
ID: Text(ThisRecord.Value.Id);
OCULTA: Boolean(ThisRecord.Value.Oculta);
ELEMENTOS: Value(ThisRecord.Value.Elementos);
TIPO: Value(ThisRecord.Value.Item)
}
)
)
Este código ejecuta el flujo de Power Automate, guarda la respuesta JSON en varResultado y después transforma la matriz LISTAS en una colección de Power Apps llamada colListasOcultas.
Para cada lista recupera y convierte los campos NOMBRE, ID, OCULTA, ELEMENTOS y TIPO, dejándolos preparados para mostrarlos directamente en una galería o utilizarlos en otros controles de la aplicación.
Y pasamos los datos a la galería:
En items ponemos la colección: colListasOcultas y en los campos, vamos a poner el Nombre, número de elementos y el tipo.
Y esto es todo, espero que sea de utilidad.
