AnsweredAssumed Answered

[Share] Ajout d'une action d'archive

Question asked by morganp1 on May 13, 2013
Latest reply on May 14, 2013 by morganp1
Bonjour,

Je travaille actuellement sur une version 4.2 d'Alfresco et il m'a été demandé d'ajouter une action 'archive' (un simple move vers un dossier que l'utilisateur ne peux pas choisir) à la liste des actions possible pour un document/dossier juste en dessous des autres comme 'Download', 'Copy to…', 'Move to…', etc

Je suis donc parti sur un projet Eclipse afin d'étendre le alfresco.war et share.war. J'ai commencé par ajouter un bouton dans un 'share/WEB-INF/classes/alfresco/web-extension/share-config-custom.xml' (deux boutons en réalité, le deuxième est pour tester le code java) :


<config evaluator="string-compare" condition="DocLibActions">
        <actions>
            <action id="document-archive" type="javascript" label="actions.<monEntreprise>.archive">
                <param name="function">onActionArchive</param>
                <param name="successMessage">message.archive.success</param>
                <param name="failureMessage">message.archive.failure</param>
                <evaluator negate="true">evaluator.doclib.action.isLocked</evaluator>
            </action>
            <action id="document-execute-script" type="javascript" label="actions.document.archive.by.script"></action>
        </actions>
       
        <actionGroups>
            <actionGroup id="document-browse">
                <action index="264" id="document-archive"/>
                <action index="266" id="document-execute-script"/>
            </actionGroup>
        </actionGroups>
    </config>

    <config evaluator="string-compare" condition="DocLibCustom">

        <dependencies>
            <!– <css src="my-custom-action.css" /> –>
            <js src="components/documentlibrary/archive.js"/>
        </dependencies>

        <dependencies/>
    </config>


A partir de là, j'ai au même endroit un fichier 'custom-slingshot-application-context.xml' permettant de définir un Bean dont la valeur est 'alfresco.messages.custom'. Donc ensuite je modifie le texte affiché sur ces boutons dans un fichier 'messages/custom.properties'.

J'ai également un fichier 'share/components/documentlibrary/archive.js' qui génère automatiquement un -min.js et une image 'share/components/documentlibrary/actions/document-archive-16.png' pour mon bouton. Jusque-là, tout fonctionne parfaitement puisque j'ai le résultat attendu à l'écran après un déploiement de mon .amp.


Donc maintenant il faut ajouter une action derrière le bouton et c'est là que les ennuis commencent. Du côté d'Alfresco cette fois, j'ai créé une classe ArchiveActionExecuter qui extends ActionExecuterAbstractBase et qui fait ce que je veux. Comme pour le custom.properties, j'ai un Bean qui me permet de référencer cette classe :


<bean id="archive" class="org.alfresco.module.<monEntrepriseAmp>.ArchiveActionExecuter" parent="action-executer">
        <property name="serviceRegistry">
            <ref bean="ServiceRegistry"/>
        </property>
        <property name="repository">
            <ref bean="repositoryHelper"/>
        </property>
    </bean>


A partir de là, que faut-il faire pour que ma classe java soit appelée lorsque j'appuie sur mon bouton 'Archive' ? Que faut-il mettre dans le fichier 'archive.js' dont j'ai parlé au-dessus ?

Actuellement, je suis sûr que ma classe java est bonne puisque si j'ajoute un document archive-action.js par exemple dans le repository sous 'Company Home/Data Dictionary/Scripts' avec comme contenu :


var archiveAction = actions.create("archive");
archiveAction.execute(document);


Si je clic sur mon 2ème bouton et que je choisis le script que je viens d'ajouter archive-action.js, alors ma classe java est bien appelée et l'action est réalisée comme je le souhaite.

Maintenant, si je clic sur l'autre bouton 'Archive', rien ne se passe.


Actuellement, dans le fichier 'share/components/documentlibrary/archive.js', j'ai le code suivant mais je dois dire que je n'y connais rien :


(function() {
    YAHOO.Bubbling.fire("registerAction",
    {
        actionName: "onActionArchive",
        fn: function <monEntreprise>_onActionArchive(file) {
           var archiveAction = actions.create("archive");
           archiveAction.execute(document);
        }
    });
})();



Je pense que le problème viens de ce fichier 'archive.js' mais je suis un peu perdu et ne vois pas réellement ce qu'il manque pour que l'action soit lancée lors d'un appui sur le bouton, donc si quelqu'un pourrait m'aider ça serait très gentil !


Merci d'avoir lu et pour votre aide

Edit: je tiens a préciser également que mon action 'archive' est bien présente comme 'Content rule' que l'on peut ajouter à un dossier afin que dés que quelqu'un upload un document, cette action soit appelée par exemple.

Outcomes