cancel
Showing results for 
Search instead for 
Did you mean: 

[RESOLU] Déverrouillage de tous les fichiers d'un site

jlocke
Champ in-the-making
Champ in-the-making
Bonjour.

Je veux déverrouiller tous les fichiers d'un site site Alfresco (verrous d'édition hors-ligne par d'autres utilisateurs) que je ne peux pas déverrouiller manuellement un par un car trop long…

N'ayant pas trouvé de moyens existants pour faire ça (voir mon précédent post : https://forums.alfresco.com/fr/viewtopic.php?f=8&t=5894 ), j'ai décidé de créer un web script java backed. Ce que j'ai essayé de faire exactement :

Je récupère l'espace documentaire d'un site (documentLibrary), représenté par un NodeRef. Je fais appel à la méthode unlock du service LockService qui peut déverrouiller des fichiers et ses enfants.
Cependant, j'ai l'erreur : Accès réfusé, vous n'avez pas les permissions pour effectuer cette opération.
Pourtant, je me connecte via AuthenticationUtils en administrateur, donc je devrais avoir tous les droits .

J'ai même essayé de déverrouiller un seul fichier, toujours la même erreur.

Voici le code Java intéressant (dans ce code, je récupère le noeud de documentLibrary, et parcourt tous ses fils directs pour les déverrouiller un par un, j'ai essayé cette méthode car je me suis dit qu'on ne pouvait peut-être pas appliquer directement la méthode unlock sur le noeud documentLibrary).

public void execute(WebScriptRequest req, WebScriptResponse res) throws IOException
{
      String resUnlock;

      AuthenticationUtils.startSession("admin", "admin");

      SiteInfo siteInfo = site.getSite("site1");
      NodeRef docLib = site.getContainer(siteInfo.getShortName(), "documentlibrary");

      List<ChildAssociationRef> children = nodeService.getChildAssocs(docLib);
      for (ChildAssociationRef childAssoc : children)
      {
            NodeRef childNodeRef = childAssoc.getChildRef();
            
            try
            {
               lockService.unlock(childNodeRef, true);
            }
            catch (UnableToReleaseLockException exception)
            {
               System.out.println(exception.getMessage());
            }
      }
}

Quel est le problème ?

Merci d'avance.
2 REPLIES 2

cleseach
Star Contributor
Star Contributor
Bonjour,

Le problème vient du fait que AuthenticationUtils est, il me semble, prévue pour le développement de clients des webservices SOAP.
Dans votre cas, il faut utiliser AuthenticationUtil (sans le s).

Votre code devrait donc ressembler à cela :


public void execute(WebScriptRequest req, WebScriptResponse res) throws IOException
{
RunAsWork<Object> actionRunAs = new RunAsWork<Object>() {
  public Object doWork() {
      SiteInfo siteInfo = site.getSite("site1");
      NodeRef docLib = site.getContainer(siteInfo.getShortName(), "documentlibrary");
      List<ChildAssociationRef> children = nodeService.getChildAssocs(docLib);
      for (ChildAssociationRef childAssoc : children)
      {
            NodeRef childNodeRef = childAssoc.getChildRef();           
            try
            {
               lockService.unlock(childNodeRef, true);
            }
            catch (UnableToReleaseLockException exception)
            {
               System.out.println(exception.getMessage());
            }
      }
      return null;
  };
  AuthenticationUtil.runAs(actionRunAs, AuthenticationUtil.getSystemUserName());
}

Je vous laisse tester et ajuster si besoin.

Cordialement,
Charles Le Seac'h

jlocke
Champ in-the-making
Champ in-the-making
Merci beaucoup, l'authentification a fonctionné comme ça !

Problème résolu, j'ai réussi à supprimer mes verrous.
Pour info, j'ai dû utiliser LockService et la méthode cancelCheckout de checkOutCheckInService (LockService ne supprime pas tous les verrous on dirait).