Atrás

Eliminar portlets repetidos en un sitio

A veces nos ha ocurrido que se han incluido repetidas veces por error multiples instancias de un portlet en una página (Por ejemplo teniendo un include en el menú que creaba el portlet en cada recarga). ¿Como puedo eliminar las instancias repetidas?

Desde el panel de control, en la instancia de gestión (Panel de control-> administración del servidor -> Panel de scripts y seleccionar groovy en el combo) , puedo ejecutar un script (en nuestro caso en groovy) y si tengo permisos para ello) que me recorra una lista de sitios (en el ejemplo los que aparecen en la variable Lista) y elimine los repetidos (si así lo indico con la variable delete).

layoutCount = com.liferay.portal.service.LayoutLocalServiceUtil.getLayoutsCount();

delta = 10

indice = 0

delete = false

prefsCounter = 0

lista = [22959L,22971L,23508L,23516L,23517L]

out.println('Iniciando proceso para ' + layoutCount + ' layouts');

 

while(indice < layoutCount){

layouts = com.liferay.portal.service.LayoutLocalServiceUtil.getLayouts(indice,indice+delta)

for          (layout in layouts){

for(portletPreferences in com.liferay.portal.service.PortletPreferencesLocalServiceUtil.getPortletPreferencesByPlid(layout.getPlid())){

 

for(idActual in lista){

if(idActual == portletPreferences.getPortletPreferencesId()){

out.println('Preferencia con id '+portletPreferences.getPortletPreferencesId() + ' debe ser borrada')                        

prefsCounter++

if(delete){

com.liferay.portal.service.PortletPreferencesLocalServiceUtil.deletePortletPreferences(portletPreferences.getPortletPreferencesId())

}

}

}

}

}

indice += delta

}

out.println('Terminando proceso con ' + prefsCounter + ' preferencias a borrar/borradas');