cancel
Showing results for 
Search instead for 
Did you mean: 

Ajout de règles en automatique sur des espaces [Résolu]

huberd
Champ in-the-making
Champ in-the-making
Bonjour,

Je souhaite mettre en place une règle sur tous les répertoires drafts de mon arborescence qui est créée en automatique par une règle d'espace.

A ce jour j'arrive grâce à une régle pré-défini à créer une arboresence complète lorsque je créé un dossier à la racine de mon référentiel. Cette arborescnce contient des repertoires DRAFTS sur lesquels je souhaite implémenter une règle. Cette règle est la suivante :

    <!–***************************–>
    <!–* Preparateur de document *–>
    <!–***************************–>   
    <bean id="lpr-prepare-document" class="lpr.alfresco.repo.PrepareDocument" parent="action-executer" >
       <property name="nodeService">
          <ref bean="nodeService" />
       </property>
       <property name="permissionService">
          <ref bean="permissionService" />
       </property>
       <!–property name="fileFolderService">
          <ref bean="FileFolderService" />
       </property–>
       <!–property name="contentService">
          <ref bean="contentService" />
       </property–>
    </bean>

J'ai noté qu'il existait 2 méthodes pour arriver à mes fin dont une pas très conseillée, la RulesWizard. L'autre méthode consisterait à utiliser le RuleService.

L'action serait executée sur des élément de type contenu uniquement, et en entrée uniquement avec application aux sous-espaces

Quelqu'un pourrait-il me dire comment faire pour appliquer ma règle lpr.alfresco.repo.PrepareDocument sur mes dossiers DRAFTS en utilisant le RuleService où m'indiquer où trouver des exemples complets.

Merci pour votre aide.
3 REPLIES 3

huberd
Champ in-the-making
Champ in-the-making
Bon j'ai trouvé, mais j'ai tout de même un petit problème d'application.

Voici mon code source:
Rule rule = new Rule();
rule.setRuleType("inbound");

// setup the rule and add it to the space
rule.setTitle("Document Preparator (In)");
rule.setDescription("Prepare new document imported in repository");
rule.applyToChildren(true);
rule.setExecuteAsynchronously(true);
rule.setRuleDisabled(false);

CompositeAction compositeAction = actionService.createCompositeAction();
rule.setAction(compositeAction);
      
compositeAction.addAction(actionService.createAction("lpr-prepare-document"));
compositeAction.addActionCondition(actionService.createActionCondition("no-condition"));
ruleService.saveRule(nodeRef, rule);

mon problème est que la condition est no-condition, alors que je sougaite appliquer la règle uniquement sur les élelments de sous-type contenu.

Je pense avoir trouvé une partie de la soltion en remplacant:

compositeAction.addActionCondition(actionService.createActionCondition("no-condition"));

par

compositeAction.addActionCondition(actionService.createActionCondition("is-subtype"));

mais comment indiquer le type contenu ou espace

rivarola
Champ on-the-rise
Champ on-the-rise
Il faut utiliser la seconde méthode createActionCondition, celle qui permet de passer une map de paramètres pour construire la condition. Tu peux alors spécifier le type qui t'intéresse (param "type", voir classe IsSubTypeEvaluator).

huberd
Champ in-the-making
Champ in-the-making
Il faut utiliser la seconde méthode createActionCondition, celle qui permet de passer une map de paramètres pour construire la condition. Tu peux alors spécifier le type qui t'intéresse (param "type", voir classe IsSubTypeEvaluator).

Ben c'est bien ce que j'ai trouvé ce WE, et cela fonctionne.

Pour ceux qui souhaiteraient le code source le voici.

Rule rule = new Rule();
rule.setRuleType("inbound");

// setup the rule and add it to the space
rule.setTitle("Processus Space Creator (In)");
rule.setDescription("Make Processus Space");
rule.applyToChildren(false);
rule.setExecuteAsynchronously(false);
rule.setRuleDisabled(false);

CompositeAction compositeAction = actionService.createCompositeAction();
rule.setAction(compositeAction);
      
compositeAction.addAction(actionService.createAction("lpr-make-processus-space"));
//compositeAction.addActionCondition(actionService.createActionCondition("no-condition"));

Map<String,Serializable> actionMap = new HashMap<String, Serializable>();
actionMap.put("type", ContentModel.TYPE_FOLDER);
compositeAction.addActionCondition(actionService.createActionCondition("is-subtype",actionMap));
ruleService.saveRule(nodeRef, rule);

et le bean associé.

    <!–*********************************–>
    <!–*    Createur d'arborescence    *–>
    <!–*********************************–>
    <bean id="lpr-make-processus-space" class="lpr.alfresco.repo.MakeProcessusSpace" parent="action-executer" >
       <property name="nodeService">
          <ref bean="nodeService" />
       </property>
       <property name="fileFolderService">
          <ref bean="FileFolderService" />
       </property>
       <property name="ruleService">
          <ref bean="RuleService" />
       </property>
       <property name="actionService">
          <ref bean="ActionService" />
       </property>
    </bean>

    <bean id="lpr-make-processus-space-action-messages" class="org.alfresco.i18n.ResourceBundleBootstrapComponent">
      <property name="resourceBundles">
        <list>
          <value>alfresco/messages/action-executer/lpr-make-processus-space-action-messages</value>
        </list>
      </property>
    </bean>

Encore une étape franchie dans mon avancement  Smiley Very Happy, bon celà dit, il m'en reste encore beaucoup qui demeurrent toujours sans réponses  :cry: .