Enlace a carpeta personal de usuarios

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

Enlace a carpeta personal de usuarios

Hola a todos!

Estoy tratando de incluir un enlace en el Dashlet "Mi perfil" de Share para que el usuario navegue hasta su carpeta personal.

El caso es que estoy un poco verde aún en qué objetos puedo utilizar en cada caso.

Lo que estoy haciendo es:

- He creado un fichero llamado my-profile.get.js que he colocado a la altura de my-profile.get.html.ftl (no existía)
- Ahí tengo pensado hacer un par de llamadas a "remote.call" para primero obtener una propiedad de person del usuario logueado que se llama "homeFolder" (parece el nodeId de la carpeta del usuario), y después otra llamada para obtener el nombre de dicha carpeta
- Pasarle al modelo el nombre de la carpeta mediante "model.nombreDeLaVariable"
- Una vez en la plantilla, formar la url para el enlace:
<a href="/share/page/site/Usuarios/documentlibrary#filter=path%7C/${nombreDeLaVariable?url}" style="col……

Bueno, pues lo tengo todo controlado menos las dichosas llamadas a "remote.call". Nada de lo que le pongo vale. No sé cómo obtener ni siquiera los datos del usuario logueado para, no sé, ¿pasarle el nombre con una llamada así?
GET /alfresco/service/api/people/{userName}
Esto último lo estoy mirando en "http://localhost:8080/alfresco/service/index/all"

¿Alguien sabe más o menos cómo enfocarlo?

Muchas gracias, un saludo!
5 Replies
rhakaro
Member II

Re: Enlace a carpeta personal de usuarios

Hola de nuevo,

Tengo nuevos avances. He descubierto que el username está disponible en los javasctipt *.get.js.
Tengo este código, pero no funciona (evidentemente, no tengo ni idea de cómo obtener info de usuarios):

var userHome = "NOT_FOUND";
   
   var resultCall = remote.call("/alfresco/service/api/people/" + user.name);
   var resultEval = eval('(' + resultCall + ')');
   
   if(resultEval != null){
      
      userHome = resultEval.homeFolder;
   }
   
        /*AQUI TODAVIA FALTA OBTENER EL NOMBRE DE LA CARPETA QUE REPRESENTA EL NODEID "userHome"  */

   model.userHomeFolderName = userHome;

¿Alguien podría ayudarme a refinar este código? Yo creo que estoy cerca
rhakaro
Member II

Re: Enlace a carpeta personal de usuarios

Siento ser tan pesado  :shock:

Tengo nuevos datos. Esta línea de código:
var resultCall = remote.call("/api/people/" + user.name);

Me da un montón de datos del usuario logueado. El problema es que justo el campo que busco, homeFolder, no viene (no es que no esté relleno, es que no aparece entre los datos que se retornan).
En cambio sí que veo campos de "people" similares a los que se pueden consultar navegando por navegador de nodos de Alfresco Explorer.

¿Alguien sabe cómo puedo obtener este campo?

Muchas gracias, un saludo!
rhakaro
Member II

Re: Enlace a carpeta personal de usuarios

Más avances.

He conseguido obtener el id del user home. Al final he tenido que crear un webscript en alfresco, para llamarlo desde share, ya que desde repositorio sí que se puede acceder a este campo desde una plantilla ftl.

Así que tengo el siguiente webscript en Alfresco:

userhome.get.desc.xml

<webscript>
   <shortname>Get User Home</shortname>
   <description>Get the userHome field from alfresco</description>
   <url>/getuserhome</url>
   <format default="json"/>
   <authentication>user</authentication>
</webscript>

userhome.get.json.ftl

{
"userhomeRef":"${userhome}"
}

Y ahora en el webscript de Share necesito obtener el nodo completo (a través del identificador) para sacar el nombre de la carpeta. Estoy intentando esto (pero claro, no funciona):

var resultCallRef = remote.call("/getuserhome");
   var nodeTmpRef = eval('(' + resultCallRef + ')');
   
   if(nodeTmpRef != null){
      nodeRef = nodeTmpRef.userhomeRef;
      var resultCallName = remote.call("/api/metadata?nodeRef=" + nodeRef);
     /* Esto aquí ya rompe */
      […………]
      […………]

Me aparece una excepción que dice lo siguinte:

Error Code Information: 500 - An error inside the HTTP server which prevented it from fulfilling the request.
Error Message: 02190004 Failed to execute script 'classpath*:alfresco/web-extension/site-webscripts/org/alfresco/components/dashlets/my-profile.get.js': 02190003 Invalid uri 'http://localhost:8080/alfresco/s/api/metadata?nodeRef=Node Type: {http://www.alfresco.org/model/content/1.0}folder Node Ref: workspace://SpacesStore/6c638df1-da34-4896-8205-c15b2ff36cab&alf_ticket=TICKET_b1c08581643c02fa09abd2014443e91ffce3e3c9': Invalid query
Server: Alfresco Spring WebScripts - v1.0.0 (Release Candidate 2 948) schema 1.000
Time: 19-mar-2012 15:57:42

¿Alguna idea?

Muchas gracias, un saludo!
jordiv
Active Member

Re: Enlace a carpeta personal de usuarios

Puedes obtener el User Home del usuario actual accediendo directamente a la variable userhome.


var userHome = userhome;
var userHomeName = userHome.properties.name;

http://wiki.alfresco.com/wiki/4.0_JavaScript_API#Root_Scope_Objects


Saludos,
Jordi
rhakaro
Member II

Re: Enlace a carpeta personal de usuarios

Hola jordiv, muchas gracias por responder (menuda rapidez Smiley Wink ),

La verdad es que es para darme de cabezazos. Tanto me preocupé de obtener un ID que no me di cuenta de que podía obtener directamente el nombre desde el webscript de Alfresco.

La solución entonces sería ésta (por si le sirve a alguien en un futuro):

En Alfresco, un nuevo webscript:

userhome.get.desc.xml

<webscript>
   <shortname>Get User Home</shortname>
   <description>Get the userHome field from alfresco</description>
   <url>/getuserhome</url>
   <format default="json"/>
   <authentication>user</authentication>
</webscript>

userhome.get.json.ftl

{
"userhome":"${userhome.properties.name}"
}

En Share, se añade el siguiente fichero para cargar un dato el la plantilla de perfil de usuario:

my-profile.get.js

function main()
{   
   var userHome = "NOT_FOUND";
   
   // Getting user home
   var resultCall = remote.call("/getuserhome");
   
   var nodeTmp = eval('(' + resultCall + ')');
   
   if(nodeTmp != null){
      userHome = nodeTmp.userhome;
   }
   
   model.userHomeFolderName = userHome;
}

main();

Y en la plantilla, se pone el enlace donde mejor quede:

my-profile.get.html.ftl

[……………..]
[……………..]
<a href="/share/page/site/Usuarios/documentlibrary#filter=path%7C/${userHomeFolderName?url}" style="color: #6CA5CE; font-weight: bold;" title="Mi carpeta personal">Mi carpeta personal</a>
[……………..]
[……………..]

Un saludo!