jueves, 21 de noviembre de 2013

Personalización de Alfresco Share III - cómo añadir custom actions

En nuestro webinar de personalización de Alfresco Share mostramos cómo eliminar e incluir nuevos custom actions, templates y componentes.

En esta entrada explicaremos de forma sencilla cómo añadir custom actions, en la lista de opciones que los usuarios tienen disponible a través del visualizador de documentos de Alfresco Share.

¿Qué es un custom action?
Antes de continuar con la lectura es importante enteder qué son los custom actions y cómo eliminarlos. Si aún no has leído sobre esto te recomendamos echarle un vistazo a la sección previa.

Objetivo: añadir nuevos custom actions
Añadir los custom actions "Escala de grises",  "Invertir colores", "Ajustar contraste", "Múltiples efectos" al menú de opciones, tal y como se muestra en a continuación:



Estos custom actions realizarán operaciones sobre contenido de tipo imagen (jpeg, gif, png) dando la facilidad al usuario de crear copias de las imágenes y aplicarles una serie de efectos.

Para entender con claridad como llevar a cabo nuestro objetivo, analizaremos paso a paso los elementos necesarios para poner en funcionamiento uno de nuestros custom actions (Escala de grises) tanto en el lado de Alfresco como de Share:
  • En Alfresco
    • Crearemos un action
    • Registraremos el action creado
  • En Share
    • Crearemos un custom action
    • Incluiremos el custom action dentro de un actionGroup

Alfresco
Crear action
Del lado de Alfresco crearemos un action que en última instancia realizará las operaciones sobre el nodo de la imagen que el usuario estará visualizando. En nuestro caso lo hemos programado mediante Java (también es posible hacerlo mediante Javascript):

public class SetBlackWhiteColorActionExecuter extends GenericAbstractActionExecuter {
    public static final String NAME = "image-tool-blackWhite";
    public static final String IMAGE_TYPE = "BW";

    @Override
    protected void executeImpl(Action action, NodeRef imageNodeRef) {
        ImageProperties imageProperties = new ImageProperties();
        imageProperties.addBlackWhiteColor(true).setSourceImage(imageNodeRef)

        .setImageType(IMAGE_TYPE);
        Image newImage = imageService.createImage(imageNodeRef, imageProperties, true);
        imageService.createThumbnail(newImage.getNodeRef(), 190, 190, "imageGallery");
    }

    @Override
    protected void addParameterDefinitions(List<ParameterDefinition> paramList) {
    }
}


Registrar action
Para que Alfresco tenga constancia del nuevo action y lo registre dentro del servicio de actions, es imprescindible incluirlo en el contexto de Spring:

<bean id="image-tool-blackWhite"
  class="co.losi.imageTool.action.SetBlackWhiteColorActionExecuter"
  parent="image-tool-executer">
</bean>    

El identificador utilizado para este action, "image-tool-blackWhite", es el mismo que utilizaremos más adelante para realizar la llamada desde Share.

Share
Crear custom action 
En nuestro archivo de configuración de Share (share-config-custom.xml) incluiremos nuestro custom action "Escala de grises". Utilizaremos el id del action creado en Alfresco para atar ambos:

<config evaluator="string-compare" condition="DocLibActions">
  <actions>
    <action id="image-tool-blackWhite" type="javascript"
       label="actions.image.tool.blackWhite" icon="imageTool-add-image">
       <param name="function">onActionSimpleRepoAction</param>
       <param name="action">image-tool-blackWhite</param>
       <param name="success">refreshImageGallery</param>
       <param name="successMessage">message.image.blackWhite.success</param>
       <param name="failureMessage">message.image.blackWhite.failure</param>
       <permissions>
           <permission allow="true">Write</permission>
       </permissions>
       <evaluator>imageTool.evaluator.mimeType</evaluator>
    </action>
  </actions>
</config> 


Incluir custom action dentro de un actionGroup
Nuestro custom action puede mostrarse en diferentes contextos dentro de Share. De forma partircular, en nuestro caso, queremos mostrarlo en el menú de opciones del visualizar de documentos. Para ello incluiremos el id del nuevo custom action dentro del actionGroup "document-details" dentro del archivo de configuración share-config-custom.xml:

<config evaluator="string-compare" condition="DocLibActions">
  ...
 
   <actionGroups>
      <actionGroup id="document-details">
          <action index="500" id="image-tool-blackWhite"/>
      </actionGroup>
   </actionGroups>
</config> 

Interacción entre Share y Alfresco
Para entender correctamente la interacción que se produce entre Share y Alfresco, vamos a seguir la secuencia de eventos que se producen desde que el usuario selecciona el custom action "Escala de grises".


  1. El usuario se encuentra en el visualizando un imagen en Share, en la página "document-details" y selecciona la opción "Escala de grises".
  2. La aplicación Share envía una petición mediante AJAX a la aplicación Alfresco, pasándole la referencia del nodo y el identificador de la acción que se ejecutará sobre el mismo.
  3. Alfresco ejecuta la acción indicada sobre el nodo indicado, creando una copia de la imagen en blanco y negro.
  4. Alfresco responde a Share con un mensaje de éxito o error.

Cómo integrar nuestra personalización en Alfresco Share
Para incluir nuestros cambios en Share debemos colocar los nuevos archivos en el directorio de extensión de Share, <tomcat>/shared/classes/alfresco/web-extension. Los archivos relacionados con Alfresco debemos colocarlos en el directorio <tomcat>/shared/classes/alfresco/extension.

Recuerda que siempre puedes crear un AMP con tus archivos e instalar así tus cambios directamente en alfresco.war y share.war respectivamente.

Próximo paso
En nuestra próxima entrada explicaremos cómo añadir un nuevo componente a una página de Alfresco Share.

 

No hay comentarios:

Publicar un comentario