logo Alfresco
Version Enterprise 3.4.2

Lors de la création d’utilisateur via le WebScript people, l’erreur « User already exists » peut survenir. L’utilisateur existe partiellement dans la base et on ne peut pas finaliser la création de façon « classique ».

Solution

Le WebScript de création dont le code métier se trouve dans le fichier people.post.json.js appelle la méthode :
people.createPerson(userName, firstName, lastName, email, password, enableAccount)

En allant dans le code source d’Alfresco on peut voir le détail de cette méthode (org.alfresco.repo.jscript.People) et en particulier les lignes suivantes :
person = createPerson(userName, firstName, lastName, emailAddress);
if(person != null && password != null)
{
authenticationService.createAuthentication(userName, password.toCharArray());
authenticationService.setAuthenticationEnabled(userName, setAccountEnabled);
person.save();
}

La méthode createPerson(userName, firstName, lastName, emailAddress) créé l’utilisateur dans workspace://SpaceStore
La méthode createAuthentication(userName, password) créé l’utilisateur (où plutôt son authentification) dans user://alfrescoUserStore

C’est ce second appel qui renvoie l’erreur « User name already exists » car l’utilisateur existe déjà dans user://alfrescoUserStore

Étapes à suivre pour corriger le problème

  1. Accéder au Navigateur de nœuds
  2. Vérifier que l’utilisateur est bien présent dans le Store user://alfrescoUserStore en exécutant la requête de type lucene : @usr\:username: »jdoe » (remplacer jdoe par le login de l’utilisateur concerné)
  3. Vérifier que l’utilisateur n’est pas présent dans le Store workspace://SpaceStore en exécutant la requête de type lucene : @cm\:userName: »jdoe » (remplacer jdoe par le login de l’utilisateur concerné)
  4. Sur Alfresco, créer le fichier à exécuter en se basant sur le script suivant (en remplaçant les infos de jdoe par celles de l’utilisateur concerné):
    var user = people.getPerson("jdoe");
    if (user == null) {
    user = people.createPerson("jdoe");
    user.properties["cm:userName"]="jdoe";
    user.properties["cm:lastName"]="John";
    user.properties["cm:firstName"]="Doe";
    user.properties["cm:email"]="jdoe@doktapepa.com";
    user.save();
    }
  5. Exécuter le script http://localhost:8080/alfresco/command/script/execute/workspace/SpacesStore/NODEID (NODEID est l’id du fichier qui vient d’être créé)
  6. Vérifier que l’utilisateur a bien été créé (grâce à la requête plus haut)

A vous de jouer !

Publicités