cancel
Showing results for 
Search instead for 
Did you mean: 

[Share] Ajout d'une action d'archive

morganp1
Confirmed Champ
Confirmed Champ
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.
2 REPLIES 2

jayjayecl
Confirmed Champ
Confirmed Champ
Hello, une technique plus simple, dans aucun développement, est :
- d'utiliser une règle de contenu qui applique un "workflow simple" à tous les nouveaux documents
- nommer l'action d'approbation en "archiver", et sélectionner le dossier de destination.

Avez-vous testé ce scénario ?

Bonjour et merci pour votre réponse.

Quel est l'intérêt d'ajouter un workflow simple sur des milliers de documents si on utilise ce workflow dans 1% des cas ? Donc pour vous répondre non j'ai écarté dés le début le passage par un workflow car je ne trouve pas que cela correspondait aux besoins

Cette action doit être présente à chaque endroit du Repository et doit être réalisé avec un simple et unique clic sur un bouton 'Archiver'. La seule façon de le faire simplement que j'ai trouvé est d'utiliser l'action déjà implémenté qui permet d'exécuter un script <action id="document-execute-script" … /> mais du coup, il faut 3 clics et c'est beaucoup moins ergonomique.