Custom Action de règle de contenu lancé sans condition

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

Custom Action de règle de contenu lancé sans condition

Bonjour,
Je commencerais par dire un traditionnel "je suis nouveau et débutant sur tout ce qui touche à Alfresco".
J'ai fouillé les forum, les tutos et les codes sources, mais je n'ai pu trouver aucune piste.

Et voici mon problème :
Je cherche à donner la possibilité de créer une règle de contenu associé à un espace particulier. Cette règle devra lancer une custom action que j'ai ajouter qui se declenchera soit à la fin de la création de la règle soit au lancement d'alfresco pour les règles déja créer.
J'ai vu que du coté du wizard il n'existait pas de type pour une règle dite "immediat" à la place de entrant , sortant , ou mise a jour .

Le traitement à terme de ma custom action est de pouvoir mettre a jour une base de donnée en fonction du contenu de l'espace auxquel est appliqué la règle.

Alors pour le moment rien d'extraordinaire pour ma custom action :

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

   private NodeService nodeService;
   private ContentService contentService;
   private RuleService ruleService;

   public void init(){
    
      System.out.println("Je suis lancé OUAI \\o/");
      super.init();
   }
 
   public void setNodeService(NodeService nodeService)
   {
      System.out.println("########################## Node Service pret !!!");
      this.nodeService = nodeService;
   }
  
   public void setContentService(ContentService contentService)
   {
      System.out.println("########################## Content Service pret !!!");
       this.contentService = contentService;
   }
  
   public void setRuleService(RuleService ruleService)
   {
      System.out.println("########################## Rule Service pret !!!");
       this.ruleService = ruleService;
   }

  
   protected void executeImpl(Action action, NodeRef actionedUponNodeRef)
   {
      if (this.nodeService.exists(actionedUponNodeRef) == true)
      {
       System.out.println(nodeService.getProperty(ruleService.getOwningNodeRef(action),ContentModel.PROP_NAME));
      }
  }
  
   @Override
   protected void addParameterDefinitions(List<ParameterDefinition> paramList)
   {
      // there are no parameters
   }


et du coté du test-context.xml :
<beans>

<bean id="tags.dictionaryBootstrap" parent="dictionaryModelBootstrap" depends-on="dictionaryBootstrap">
     <property name="models">
         <list>
             <value>alfresco/extension/testModel.xml</value>
         </list>
     </property>
</bean>

<bean id="tag" class="org.alfresco.sample.TestActionExecuter" parent="action-executer" >
   <property name="nodeService">
      <ref bean="nodeService" />
   </property>
   <property name="contentService">
            <ref bean="ContentService" />
   </property>
   <property name="ruleService">
            <ref bean="RuleService" />
   </property>
</bean>


<bean id="test-action-messages" class="org.alfresco.i18n.ResourceBundleBootstrapComponent">
   <property name="resourceBundles">
      <list>
         <value>org.alfresco.sample.test-action-messages</value>
      </list>
   </property>
</bean>

</beans>

Bon je met tout ce code mais je sais pas si ca servira.
Mais auriez vous des idées afin que la custom action s'execute au moment de sa création et une seule fois.
S'il vous plait je suis désesperé  :cry:

Jack
12 Replies
rguinot
Customer

Re: Custom Action de règle de contenu lancé sans condition

avant toute chose, pouvez vous expliciter un peu plus votre besoin, la différence *pour vous* entre "immédiat" et ce qui existe déja comme moment d'éxécution et la distinction background/in-transaction actuellement en place.

D'autre part, pouvez vous expliciter le besoin fonctionnel qui vous a amené à dire :

Le traitement à terme de ma custom action est de pouvoir mettre a jour une base de donnée en fonction du contenu de l'espace auxquel est appliqué la règle.

Que mettez vous à jour et à quoi sert cette base de données externe ?
jack_8100
Member II

Re: Custom Action de règle de contenu lancé sans condition

Ce que j'ai pu comprendre jusqu'a présent est qu'au moment de definir une règle de contenu, on a la possibilité de lancer une action (extraction de metadonnee, archiver l'element , etc … ) soit sur des élément entrant (ajout , deplacer je crois aussi , …) , sortant ( suppression d'un element) et mise a jour .
Par rapport a l'interface je n'ai que ces trois possibilités. Mais moi je cherche a declencher mon action qu'au moment ou je finit de creer la règle ou dans le cas où la regle existe deja, au demarrage d'Alfresco.
En prenant le cas de la classe TestActionExecuter. Si je créer une nouvelle regle de contenu sur un espace que l'on nommerai "Test" et qui serai associé a cette classe, dés que je finis de la création de cette crègle , je dois pouvoir voir sur la sortie standard le nom de l'espace associé à la règle, c'est-à_dire "Test".

Maintenant pour l'option background, j'ai cru comprendre qu'il ne s'agissait que d'un mode ou l'action ne serait pas immédiatement declencher lorsque l'on a un element entrant , sortant ou en mise à jour.

Pour être un peu plus explicite , je cherche a avoir dans une base de donnée externe a Alfresco, un listing de fichier xml contenu dans l'espace alfresco lié à la règle. Pour ce faire j'essai de mettre en place une règle qui va mettre a jour régulièrement cette base de donné au moment de sa création.

En espérant que vous voyez un peu plus ce que je veux arriver à faire .

Jack
rivarola
Active Member

Re: Custom Action de règle de contenu lancé sans condition

Bonjour,

Je n'ai pas tout à fait compris ce que tu veux faire mais je pense que passer par des règles pour lancer une action au démarrage n'est pas la bonne solution. As-tu regardé du côté des Scheduled Actions ou des contextes de bootstrap ?
jack_8100
Member II

Re: Custom Action de règle de contenu lancé sans condition

Non je dois bien l'avouer.
Ce sera déja une première piste.
Je vais jeter un coup d'oeil  Smiley Very Happy
jack_8100
Member II

Re: Custom Action de règle de contenu lancé sans condition

Bon je reviens encore une fois pour eclaircir mon besoin car je crois que le fait de developper des scheduled actions doit supposer que l'on connaisse deja le chemin menant aux espaces que j'ai besoin.

Or ce que je voudrais c'est permettre à un admin (qui se connecte à Alfresco) de créer une règle sur contenu sur un espace (que je ne connais pas) par l'intermediaire de l'interface graphique.
Le but de cette règle doit au minimum lister l'ensemble des fichiers xml contenu dans l'espace sur la sortie standard (ce sera deja un début).
De plus je voudrais que cette regle puisse s'appliquer et se lancer une seule fois et immédiatement après sa création ou son initialisation au demarage d'alfresco.

Pensez vous que ce soit possible?
Désolé si je vous fait tourner en rond.

Mais j'ai besoin de savoir  Smiley Sad
jack_8100
Member II

Re: Custom Action de règle de contenu lancé sans condition

Pas de réponse ??? Smiley Sad
michaelh
Active Member

Re: Custom Action de règle de contenu lancé sans condition

Si … une …
Après Romain et Philippe, je vais le dire à mon tour : je ne comprends pas ce que tu veux faire.
jack_8100
Member II

Re: Custom Action de règle de contenu lancé sans condition

Bon je vais essayer une dernière fois.

Supposons qu'un utilisateur se connecte avec les droits admin (ce qui suppose qu'il peut créer des règles de contenu).
Il choisi un espace (ou dossier si vous voulez) particulier, et cet espace je ne le connait pas. Il existe et contient deja un ensemble de sous-espace et de contenu xml.

Je veux faire en sorte de pouvoir donnez la possibilité a cet utilisateur de créer une règle de contenu sur cet espace, qui va parcourir tout l'arborescence de cet espace et afficher tout les fichiers xml qu'il contient.

Ainsi si un espace se présente comme ca :

Espace Test
|–> sous-espace Test
            |–> contenu.xml
|–> sous-espace Test 2
            |–> contenu2.xml

Alors je dois pouvoir avoir en log (ou sortie standard)
Espace Test/sous-espace Test/contenu.xml
Espace Test/sous-espace Test 2/contenu2.xml

Bien seulement ce qui me gene est que cette règle tels qu'on peut le definir par l'interface, ne se declenchera que soit par ajout, soit suppression ou  soit mise a jour d'un fichier. Enfin si j'ai bien compris.
Ce que je voudrais c'est que cette règle puisse s'éxectuer après sa création.

Une première solution serait que l'utilisateur admin puisse créer trois regles dont la condition se positionnerai sur les élements de type mime XML.Il choisirait l'action tag , correspondant a la classe TestActionExecuter.java que je developperais en fonction , pour obtenir les informations que j'ai besoin, et choisirait en type de règle les type entrant , sortant et update.
Une fois les trois règles créer , il cliquerait sur actions supplémentaires –> appliquer les règles à nouveau. Cela dit je trouve que c'est peu lourd comme procedure.

Une deuxieme solution serait que mon TestActionExecuter.java , puisse parcourir l'arborescence de cet espace à intervalle régulier en tache de fond. Mais cela me pose problème car cette action doit être declencher une seule fois et une fois la création de la règle faite.

Est-ce que la deuxieme solution est possible ?
Y'a t il d'autres solutions a envisager. Je m'interresse deja au scheduled actions pour rechercher d'eventuel piste ainsi que des contextes bootstrap mais aucune piste pour le moment Smiley Sad

Voila j'espère qu'avec toute ces informations quelqu'un reussira a me comprendre.
Sinon c'est que mon cas est sans espoir.

Merci en tout cas pour le temps que vous me consacrer Smiley Happy
rguinot
Customer

Re: Custom Action de règle de contenu lancé sans condition

Je pense que vous ne choisissez pas la bonne approche.
Si vous souhaitez récupérer la liste des fichiers d'un espace dans un log comme vous dites, vous avez plusieurs solutions plus lègères que du développement Java.

* utiliser d'autres points d'accès au repository comme un montage CIFS : il vous suffira de faire un find en filtrant sur les fichiers et vous récupèrerez la liste des contenus.  Vous pouvez également faire un script qui passerait par l'accès FTP.

* Vous pouvez également développer rapidement un Web Script simplissime qui prendrait en paramètre un "chemin" vers un espace du repository et qui afficherait en HTML les noeuds de type "fichiers" contenus dans l'espace et les sous-espaces : par exemple via une requête lucene.

Vous ne précisez pas votre environnement donc je suppose que vous êtes sous linux, mais des approches similaires peuvent ss doute être adoptées ss windows.
Vous ne précisez pas non plus la finalité de la récupération de cette liste de fichiers, ce qui nous aiderait peut être à vous réorienter.