Liferay 7 - Alte Versionen aus Dokumenten und Medien entfernen

 

Es kann unterschiedliche Gründe geben, warum man für ein und dieselbe Datei im Laufe der Zeit eine Vielzahl von aktualisierten Versionen in seiner Liferay-Umgebung hat. Sei es weil sie durch automatische Importe von externen Systemen überschrieben werden oder weil das PDF mit dem "aktuellen Informationen" wöchentlich von der Contentredaktion aktualisiert wird. Möchte man die Versionen nun Löschen ergibt sich hier, im Gegensatz zu etwa Webcontents das Problem, dass man über die Liferay GUI das nicht regeln kann. Nach kurzer Suche mit Google findet sich ein alter Blogbeitrag bei Liferay, der ein Groovy Script enthält mit welchem sich alle nicht-aktuellen Versionen löschen lassen. Hierzu muss man nur die Group ID angeben für die das passieren soll, und die FolderID. Möchte man es über alle Dateien einer Group laufen lassen, ist die FolderID = 0.

https://liferay.dev/blogs/-/blogs/how-to-clean-previous-version-of-documents-from-document-and-media

Dank an Mitesh S Panchal für diesen Beitrag!

Da der Beitrag schon etwas älter ist (zum Zeitpunkt dieses Beitrages ganze 7 Jahre), haben sich die Packagenamen mittlerweile geändert. Für Liferay 7.3+ ergibt sich daher das nachfolgende Script. Dieses haben wir an einer Stelle durch einen try-catch-Block erweitert, weil das ursprüngliche Script bei Dateien, welche sich im Draft befinden einen Fehler wirft:

import com.liferay.portal.kernel.model.User;
import com.liferay.portal.kernel.service.UserLocalServiceUtil;
import java.util.List;
 
import com.liferay.portal.kernel.repository.model.FileEntry;
import com.liferay.portal.kernel.repository.model.FileVersion;
import com.liferay.portal.kernel.repository.model.Folder;
import com.liferay.document.library.kernel.service.DLAppServiceUtil;
import com.liferay.document.library.kernel.service.DLFileVersionLocalServiceUtil;
import com.liferay.document.library.kernel.model.DLFileVersion
 
// Param1: Group ID
// Param2: Folder ID
listFiles(58023, 0);
 
def listFiles(groupId, folderId) {
    allfiles = DLAppServiceUtil.getFileEntries(groupId,folderId)
    for (FileEntry file:allfiles) {
         System.out.println("File Title: " + file.getTitle());
         System.out.println("File Version: " + file.getVersion());
         List results = file.getFileVersions(-1);
         latestversion = file.getVersion();
         for(FileVersion fv : results) {
             if(fv.getVersion() != latestversion){
                  try{
                    System.out.println("Deleting >>" + fv.getVersion()  );
                    DLAppServiceUtil.deleteFileVersion(file.getFileEntryId(), fv.getVersion());
                  }catch(Exception e){
                    System.out.println("ERROR: " + e.getMessage()  );                     
                  }
             }
         }
     }
 
     allfolders = DLAppServiceUtil.getFolders(groupId,folderId);
     for (Folder folder:allfolders) {
           System.out.println("Folder Name: " + folder.getName());
           listFiles(groupId,folder.getFolderId());
     }
}

 

Da hier Daten WIRKLICH gelöscht werden, bitte immer vorher ein Backup ziehen!

Ansonsten dieses Script unter Serveradministration -> Skript einfügen, IDs für Group und Folder anpassen und laufen lassen!

Happy day and #keepITfast !

 

Photo by Towfiqu barbhuiya on Unsplash ​​​​​​​