stores y user home folders

cancel
Showing results for 
Search instead for 
Did you mean: 
jaime_martin
Member II

stores y user home folders

hola:
Creando usuarios desde java no tengo muy claro cual es el mejor valor a asignar a la propiedad Constants.PROP_USER_HOMEFOLDER.
En el tema de ¿Cómo crear usuarios y espacios masivamente? http://forums.alfresco.com/es/viewtopic.php?f=6&t=711
comentabais que era mejor definirlo en workspace://SpacesStore/XXXX
He hecho varias pruebas y me choca mucho lo siguiente:
Asignando a Constants.PROP_USER_HOMEFOLDER estos valores:
- "user://SpacesStore/Usuarios"
- "workspace://SpacesStore/"+username   (siendo usernmae aaa)
- "workspace://SpacesStore/"
y para las 3 pruebas a Constants.PROP_USERNAME el valor de "aaa"

En la pantalla de administración de usuarios, para los anteriores valores SIEMPRE se muestra Home Space con este valor:
/Company Home/User Homes/aaa

Simplemente quiero crear un usuario desde java y almacenarlo en el store de usuarios, cual sería el mejor valor a asignar a PROP_USER_HOMEFOLDER. Dudo entre la 2ª y 3ª opción de arriba ("workspace://SpacesStore/username  y workspace://SpacesStore/)
gracias!
4 Replies
jaime_martin
Member II

Re: stores y user home folders

Estoy usando la 3ª opción, es decir "workspace://SpacesStore/" sin añadir nada detrás y me va bien, creo que es más limpio que añadir detras algo en plan /usuarios. Solo voy a tener un tipo de usuarios.
No obstante si alguien con más experiencia me puede confirmar si es la opción correcta se o agradecería.  Smiley Very Happy
ajv
Member II

Re: stores y user home folders

Hola Jaime,

Por lo que he estado averiguando, va a dar lo mismo, pongas lo que pongas…
Supongo que sabes que existe un "proveedor" de espacios de usuario. Cada vez que se crea un usuario, Alfresco le proporciona un espacio en /company home/user homes.
La propiedad Constants.PROP_USER_HOMEFOLDER se utiliza para aquellos casos en que dispongas de un espacio existente en Alfresco y quieras que ese espacio sea el "home" del usuario.

Te pongo un ejemplo:
Imagina que me he creado un espacio en el propio Company home (no en User homes), que se llama "Buenos dias", y su referencia es esta (me la invento):    workspace://SpacesStore/046fc85b-8fda-11dd-baf9-d1d8da1d6f05.
Entonces, si te interesa que el usuario "Simpatico" tenga ese espacio como inicio (y no quieres que el proveedor le genere uno para él que coincida con su nombre de usuario), pues haces algo así como lo siguiente [aprovecho parte de tu código, que te resultará más sencillo]:


NewUserDetails[] newUsers = new NewUserDetails[] { new NewUserDetails(
                        usuario, password, createPersonProperties(
                              "workspace://SpacesStore/046fc85b-8fda-11dd-baf9-d1d8da1d6f05",
                              "Simpatico", "saludando", "siempre", "buenos@dias.com", "saludador")) };
WebServiceFactory.getAdministrationService().createUsers(newUsers);
                  System.out.println("Usuario creado");


private static NamedValue[] createPersonProperties(String homeFolder,
         String firstName, String middleName, String lastName, String email,
         String orgId) {
      // Create the new user objects
      return new NamedValue[] {
            new NamedValue(Constants.PROP_USER_HOMEFOLDER, false,
                  homeFolder, null),
            new NamedValue(Constants.PROP_USER_FIRSTNAME, false, firstName,
                  null),
            new NamedValue(Constants.PROP_USER_MIDDLENAME, false,
                  middleName, null),
            new NamedValue(Constants.PROP_USER_LASTNAME, false, lastName,
                  null),
            new NamedValue(Constants.PROP_USER_EMAIL, false, email, null),
            new NamedValue(Constants.PROP_USER_ORGID, false, orgId, null) };
   }
Por lo que he comprobado, parece ser que si especificas una referencia en homefolder que no existe, arranca el proveedor por defecto. Y si la referencia es válida, asigna ese homfolder.
Por tanto, si ya te va bien con lo que te ofrece el proveedor de espacios, puedes quitar esa propiedad del createPersonProperties.

Bueno, espero que te sirva!
Hasta luego!!  Smiley Very Happy
jaime_martin
Member II

Re: stores y user home folders

Muchas gracias, ahora entriendo por que siempre sucedía lo mismo.  Smiley Very Happy
Me surge una duda. ¿como obtengo la referencia de un espacio ya creado?
Es decir, bajo Company Home me creo un espacio llamado Prueba ¿cómo obtengo la referencia a Prueba?
Para crear espacios bajo otros espacios obtengo la referencia a partir del ParentReference y me funciona bien. Lo hago con ParentReference, pero en las trazas ni el uuid ni el path, me dan una referencia del estilo a la que has puesto de ejemplo.
Lo que yo obtengo es de esta manera:
/app:company_home/*[@cm:name="User Homes"]/*[@cm:name="7777"]
muy diferente a
workspace://SpacesStore/046fc85b-8fda-1 … d8da1d6f05

¿aparte de por Java también se podría obtener la referencia desde la interfaz gráfica?
ajv
Member II

Re: stores y user home folders

Hola Jaime!

Claro que se puede obtener desde la interfaz gráfica. Para ello, tienes que entrar como admin, acceder al panel de administración y pulsar en el explorador de nodos.
Allí te aparece un atributo "reference" para cada nodo del repositorio.

Por otro lado, puedes hacerlo desde java. Necesitarás tener un objeto Reference, el cual dispone del método getUuid(), que te da el numerito ese tan complicado.  Smiley Very Happy
He empleado una búsqueda lucene para obtener las referencias…te adjunto un fragmento de código de ejemplo:
String path = "/app:company_home/cm:para_x0020_Jaime";
     
   // Montamos la query para encontrar el id de nodo
      String texto_query = "+PATH:\"" + path + "\"";
      System.out.println("Query para obtener id de nodo: " + texto_query);
      Query query = new Query(Constants.QUERY_LANG_LUCENE, texto_query);

      try {
         // Ejecutamos la consulta para encontrar la bustia del usuario
         QueryResult queryResult = repositoryService.query(STORE, query,
               false);

         // Mostramos los resultados…
         ResultSet resultSet = queryResult.getResultSet();
         ResultSetRow[] rows = resultSet.getRows();

         if (rows != null) {
            // Obtenemos los registros de la query…en principio sólo 1…
            for (ResultSetRow row : rows) {
               String id = row.getNode().getId();
               System.out.println("Encontrado store de usuarios con id: " + id);
               Reference reference = new Reference(STORE, id, null);
               
               NewUserDetails[] newUsers = new NewUserDetails[] { new NewUserDetails(
                        usuario, password, createPersonProperties(
                              "workspace://SpacesStore/" + reference.getUuid(),
                              nombre, apellido1, apellido2, email, nombre)) };
                 
                  WebServiceFactory.getAdministrationService().createUsers(newUsers);
                  System.out.println("Usuario creado");
            }
         }
      } catch (java.rmi.RemoteException exp) {
         System.out.println("ERROR al realizar la consulta");
         exp.printStackTrace();
      }

Venga, un saludo!!