cancel
Showing results for 
Search instead for 
Did you mean: 

Ajout d'action

mfcp
Champ in-the-making
Champ in-the-making
Bonjour,

J'ai parcouru ce lien pour ajouter une nouvelle action sur Alfresco: http://wiki.alfresco.com/wiki/Custom_Action_UI
Etant débutant en Java, j'aimerai savoir comment on peut ajouter un fichier à un package.
Pour implémenter l'action sur le lien, il est marqué:
"Create a Java class called TagActionExecuter in the org.alfresco.sample package and have it extend org.alfresco.repo.action.executer.ActionExecuterAbstractBase"
Mais comment créer la classe dans le package et pouvoir utiliser l'extension.
Ce que j'ai fait, c'est :

package org.alfresco.sample
import org.alfresco.repo.action.executer.ActionExecuterAbstractBase
Puis j'ai défini la classe (en reprenant exactement la même que sur le lien).
J'ai exporté le fichier sur Eclipse pour obtenir un .JAR
Et je l'ai placé une fois sur : \tomcat\shared\classes\alfresco\extension
et l'autre fois sur : \tomcat\webapps\alfresco\WEB-INF\lib
mais  ça ne marche pas dans les 2 cas et Alfresco ne veut même pas démarrer.
Cette procédure a l'air basique. Je dois louper une étape ou mal faire qqch.

Merci à vous !
4 REPLIES 4

jayjayecl
Confirmed Champ
Confirmed Champ
Peut-on voir le reste du code de votre classe ?
Merci

mfcp
Champ in-the-making
Champ in-the-making
Voici le code complet:


package org.alfresco.sample;
import org.alfresco.repo.action.executer.ActionExecuterAbstractBase;

public class TagActionExecuter extends ActionExecuterAbstractBase
{
   public static final String NAME = "tag";

   private NodeService nodeService;

   public void setNodeService(NodeService nodeService)
   {
      this.nodeService = nodeService;
   }
  
   protected void executeImpl(Action action, NodeRef actionedUponNodeRef)
   {
      if (this.nodeService.exists(actionedUponNodeRef) == true)
      {
         // add the aspect if it is not already present on the node
         QName tagAspect = QName.createQName("extension.tags", "taggable");
         if (this.nodeService.hasAspect(actionedUponNodeRef, tagAspect) == false)
         {
            this.nodeService.addAspect(actionedUponNodeRef, tagAspect, null);
         }
      }
  }
  
   @Override
   protected void addParameterDefinitions(List<ParameterDefinition> paramList)
   {
      // there are no parameters
   }
}

mfcp
Champ in-the-making
Champ in-the-making
Bonjour,
Etant débutant en Java comme je l'avai dit, je n'avais pas installé le SDK d'Alfresco.
Maintenant que je l'ai, sur Eclipse, j'ai importé les projets de la SDK, je suis allé dans le projet sample: SDK CustomAction et j'ai ajouté ma classe: TagActionExecuter.
Maintenant contrairement à avant, je n'ai aucune erreur dans mon code. J'ai fait des imports supplémentaires quand cela a été nécessaire.
Sauf que maintenant, le restart de TomCat n'aboutit même pas.
J'ai vu sur Internet qu'il fallait peut être installé SVN pour avoir accès au code source d'Alfresco, est-ce vraiment nécessaire ou le SDK suffit ?
Mon .jar que j'obtient en exportant ma classe, dois-je le placer dans TOMCAT_HOME\webapps\alfresco\WEB-INF\lib ou bien dans TOMCAT_HOME\shared\classes\alfresco\extension ?
Pour info,
En ce moment, j'ai mon .jar dans le dossier extension ainsi qu'un fichier tagging-context.xml (pour enregistrer l'action).
Et Voici mon code:
TagActionExecuter.java

package org.alfresco.sample;

import java.util.List;

import org.alfresco.repo.action.executer.ActionExecuterAbstractBase;
import org.alfresco.service.cmr.action.Action;
import org.alfresco.service.cmr.action.ParameterDefinition;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.namespace.QName;

public class TagActionExecuter extends ActionExecuterAbstractBase {
   public static final String NAME = "tag";

      private NodeService nodeService;

      public void setNodeService(NodeService nodeService)
      {
         this.nodeService = nodeService;
      }
     
      protected void executeImpl(Action action, NodeRef actionedUponNodeRef)
      {
         if (this.nodeService.exists(actionedUponNodeRef) == true)
         {
            // add the aspect if it is not already present on the node
            QName tagAspect = QName.createQName("extension.tags", "taggable");
            if (this.nodeService.hasAspect(actionedUponNodeRef, tagAspect) == false)
            {
               this.nodeService.addAspect(actionedUponNodeRef, tagAspect, null);
            }
         }
     }
     
      @Override
      protected void addParameterDefinitions(List<ParameterDefinition> paramList)
      {
         // there are no parameters
      }
}

tagging-context.xml:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>

<beans>

<bean id="tag" class="org.alfresco.sample.TagActionExecuter" parent="action-executer" >
   <property name="nodeService">
      <ref bean="nodeService" />
   </property>
</bean>

</beans>

mfcp
Champ in-the-making
Champ in-the-making
Bonjour,

J'ai réussi à faire marcher le projet à priori, il fallait placer le .jar sur WEB-INF/lib et j'avais des problèmes sur ma config.
Maintenant, pour pouvoir faire apparaitre ma nouvelle action, il faut ajouter un jsp.
En fait, pour éviter d'avoir des problèmes supplémentaires, j'ai pris le sample: SDK TaggingSample. Il correspond exactement à ce qui est
décrit dans le lien (cité dans mon premier post). Tout est déja bien fait dedans. Sauf que le tagging existe par défaut
sur Alfresco (l'aspect taggable existe déja). J'ai donc modifié l'aspect tag par un aspect nommé "cp", bref j'ai tout adapté.
Pour le faire marcher, il faut générer un .jar et récupérer le .jsp:
Voici l'arborescence du projet SDK TaggingSample:
-SDK TaggingSample
—–+JRE System library
——Source
————alfresco.extension
—————–tagging-context.xml
—————–tagsModel.xml
—————–webclient.properties
—————–web-client-config-custom.xml
————org.alfresco.sample
—————–TagActionExecuter.java
—————–TagActionHandler.java
—————–tag-action-messages.properties
——web
———–jsp
—————–tag.jsp

Dans TagActionHandler, il y a cette méthode:

   public String getJSPPath()
   {
      return "/jsp/extension/tag.jsp";
   }
Ma question doit être très simple et clair pour qqu'un qui a déja fait ça:
Comment faire marcher ce projet sur Alfresco Explorer ?
J'ai exporter le répertoire "source" en .jar et je l'ai placé dans webapps/alfresco/WEB-INF/lib
J'ai récupéré le .jsp et je l'ai placé dans webapps/alfresco/jsp/extension  en créant ce dernier dossier extension (car il n'existe pas).
Après le restart de Tomcat, pas d'erreur. Mais je n'aperçois toujours pas mon action.

Avez vous une idée ?
Merci de votre aide !