martes, 25 de octubre de 2011

Alfresco WebScript cambiando propiedades y permismos de los espacios

Lo primero, os pongo los links que voy he estado utilizando:
Aquí no voy a explicar como se hace un webscript, con los links de arriba tendréis bastante para entenderlo y crear el vuestro propio.

El Script que os muestro es una modificación del que hay contenido en el rar que se puede descargar del primer link, en la sección XML Data WebScripts de la página.

Este código corresponde a la decripción del webscript en xml, properties.get.desc.xml



 FlexSpaces get properties data
 Gets properties of a doc or folder
 /flexspaces/getProperties?nodeid={nodeid}&tipo={tipo}&desc={desc}&resp={resp}&ot={ot}&pro={pro}&cli={cli}&sol={sol}&exo={exo}&rp={rp}&dob={dob}
 /flexspaces/getProperties?nodeid={nodeid}
 /flexspaces/getProperties?storeid={storeid}&path={path}
 /flexspaces/getProperties?path={path}
 argument
 user
 required
 
   false
          


El siguiente código corresponde a la respuesta, en este caso en xml, properties.get.xml.ftl


  
  ${node.name}
  ${node.id}
  ${node.displayPath}/${node.name}

  <#if node.isContainer>
      <#assign isFolder="true">
      <#assign size="">
      <#assign encoding="">
      <#assign mimetype="">
  <#else>
      <#assign isFolder="false">
      <#assign size=node.size/1024 + " KB">
      <#assign encoding=node.properties.content.encoding!>
      <#assign mimetype=node.properties.content.mimetype!>
  

  ${node.icon16}
  ${node.icon32}
  ${isFolder}
  ${node.properties.title!}
  ${node.properties.description!}
  ${node.properties.author!}
  ${size}
  ${node.properties.creator}
  ${node.properties.created?datetime}
  ${node.properties.modifier}
  ${node.properties.modified?datetime}
  ${node.properties.editInline!}
  ${emailid}
  ${encoding}
  ${mimetype}
    


Por ultimo, esto es el javascript que se ejecutará al llamar a la url contenida en la descripción. properties.get.js


if ((args.nodeid) && (args.nodeid != ""))
{
  model.node = search.findNode("workspace://SpacesStore/" + args.nodeid);
  model.emailid=model.node.properties["{http://www.alfresco.org/model/system/1.0}node-dbid"];

  if(args.tipo.equals("O"))
  {
   model.node.properties["{modelo.ejemplo}Descripcion"] = args.desc;
  }
  var permitted = model.node.getPermissions();
  for (x = 0; x < permitted.length; x++)    {  var obje = permitted[x];  if(obje.search("NombrePermiso")>=0)
{
 var cortado = permitted[x].split(";");
 var user = cortado[1];
 try
 {
  model.node.setInheritsPermissions(false);
  model.node.removePermission("NombrePermiso", user);
  model.node.setInheritsPermissions(true);
 }
 catch(e)
 {
 
 }
}
  }
 
  model.node.setPermission("NombrePermiso",args.resp);
 
  model.node.save();
}
else if ( (args.storeid) && (args.storeid != "") && (args.path) && (args.path != "") )
{
  // use avm storeid and path
  var store = avm.lookupStore(args.storeid);
  if (store != null)
  {
     var pathWithStore = args.storeid + ":" + args.path;
     model.node = avm.lookupNode(pathWithStore);
     model.emailid = "";
  }
}
else
{
  // use doc mgt path
  if ((args.path) && (args.path != ""))
  {
     model.node = roothome.childByNamePath(args.path);
     model.emailid=model.node.properties["{http://www.alfresco.org/model/system/1.0}node-dbid"];
  }
}


He tenido que recurrir a un bucle ante la imposibilidad de utilizar la función removePermission("NombrePermiso"), en el bucle recorre todos los permisos y borra uno a uno los que coincidan con el nombre del mismo, ademas de quitar los permisos heredados antes de borrar cualquier permiso y volver a setearlos al terminar.

No hay comentarios:

Publicar un comentario

Arriba