[résolu] faire un lien vers un fichier externe

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

[résolu] faire un lien vers un fichier externe

Bonjour Smiley Happy

Je sais que sous Alfresco il existe déjà une action appelée download qui récupère le fichier sélectionné du repository pour le proposer en téléchargement à l'utilisateur. Moi j'aimerais avoir une action télécharger qui aille chercher le fichier courant sur un serveur distant. J'ai pensé modifier l'action download avant de me rabattre sur la solution "créer sa propre action et l'ajouter à la liste des actions des fichiers indexés".

J'ai crée une action download_file que j'ai déclarée dans mon fichier web-client-config-custom.xml de la façon suivante:

<action id="download_file" replace="true">
   <permissions>
      <permission allow="true">Read</permission>
   </permissions>
   <label-id>download_file</label-id>
   <image>/custom/images/icons/download.gif</image>
   <action>download-file</action>
</action>

J'ai aussi crée un fichier de contexte pour cette action, download-file-action-context.xml :

<beans>
     
    <!– Download Action Bean –>
    <bean id="download-file" class="custom.alfresco.customUI.actions.DownloadActionExecuter" parent="action-executer" lazy-init="true">
       <property name="nodeService">
         <ref bean="NodeService" />
      </property>
      <property name="exchangeServerIP" value="192.168.20.241" />
      <property name="fileServerIP" value="192.168.20.221" />
      <property name="filesRootFolderPath" value="/company/shared/" />
      <property name="publicAction">
           <value>false</value>
         </property>
   
   </bean>
  
      <!– Action properties –>
   <bean id="extension.actionResourceBundles" parent="actionResourceBundles">
      <property name="resourceBundles">
         <list>
            <value>alfresco.extension.download-file-action-messages</value>
         </list>
      </property>
   </bean>
     
</beans>

En lisant quelques topics, j'ai cru comprendre qu'on peut injecter des paramètres dans la bean de l'action via le tag <property>. Donc j'en ai mis trois pour mon action ( exchangeServerIP / fileServerIP et fileRootFolderPath ) car j'ai besoin de ces paramètres dans le code de ma classe java DownloadFile. Cependant, je ne suis pas certain de la méthode à utiliser pour récupérer ces paramètres dans ma classe. Est ce que de simples get et set avec le nom des propriétés définies dans le fichier xml suffisent pour pouvoir les utiliser ou bien il faut faire autre chose?

Deuxièmement, concernant la déclaration de mon action dans le fichier web-client-config-custom.xml, j'ai lu dans certains exemples que le tag <action-listener> était utilisé. Je ne comprend pas bien à quoi sert cette classe et si elle est obligatoire? Je n'ai pas trouvé de documentation précise sur le sujet. Pourriez-vous m'aider sur ce point également?

Merci par avance Smiley Happy
11 Replies
rivarola
Active Member

Re: [résolu] faire un lien vers un fichier externe

Hum… Je ne suis pas sûr qu'on puisse définir une action de l'application Web comme ça. J'ai l'impression qu'il y a eu un mélange des genres entre les actions du repository (comme add-aspect) et du client Web (comme download_doc).
ethan
Member II

Re: [résolu] faire un lien vers un fichier externe

Mon but est le suivant : créer une action qui lors du clic sur celle-ci fait appel à une classe qui récupère la propriété mcmSmiley Tongueath du node du fichier sélectionné et en fonction de sa valeur, va télécharger le fichier sur le serveur exchange ou le serveur de partage. Je parle de faire appel à une classe java parce que je ne vois pas d'autre solution  Smiley Indifferent
rivarola
Active Member

Re: [résolu] faire un lien vers un fichier externe

Une vue personnalisée, scotchée sur le noeud via l'aspect cm:templatable, permettrait de générer facilement un lien externe. C'est juste un FreeMarker à mettre dans le Data Dictionary.
ethan
Member II

Re: [résolu] faire un lien vers un fichier externe

Je ne connais pas du tout Freemarker. J'ai lu quelques petits trucs dans le wiki Alfresco sur les templates. Si je comprend bien, ils permettent de changer la mise en page des informations propres à un document ? L'idée serait de créer un lien cliquable directement? Le problème c'est que la forme de l'url est dépendante du contenu de deux propriétés du node fichier. Est-ce que freemarker peut me permettre de gérer ça?

Autre question: en admettant que j'utilise cette méthode, comment associer le template crée à l'aspect cm:templatable ? Et comment faire pour les propriétés dont j'ai besoin (les ip des serveurs)? Est-ce que je peux les stocker dans un fichier et y faire appel dans mon template comme avec une bean? (Elles doivent pouvoir être modifiées facilement par l'administrateur du système ensuite !) .
rivarola
Active Member

Re: [résolu] faire un lien vers un fichier externe

La vue personnalisée ne remplace pas les informations affichée pour un document ; elle s'y ajoute. L'aspect cm:templatable peut être ajouté par règle. Pour tout ce qui est récupération des paramètres (IP, chemin) ou lecture des propriétés du document, il n'y a pas de soucis. A peu près tout est dans cette doc : http://wiki.alfresco.com/wiki/Template_Guide
ethan
Member II

Re: [résolu] faire un lien vers un fichier externe

J'ai lu le guide sur les templates mais c'est un peu au dessus de mon niveau. Je ne comprend pas bien comment ça fonctionne. J'ai commencé par ajouter l'aspect cm:templatable à mon modèle de données. Ensuite, j'ai compris qu'il me faut créer un fichier .ftl qui ajoute un lien href pour télécharger le fichier sélectionné.

Pour inclure les ip et les paths dont j'ai besoin, j'ai cru comprendre que je pouvais utiliser l'object args via un Template content servlet. Mais après ça je suis perdu : ( . En suivant les liens concernant freemarker j'ai cru comprendre qu'il faut séparer le traitement des données de l'affichage des données, donc j'imagine que je dois générer mon url dans une classe java et qu'il faut récupérer cette donnée dans mon fichier template ?! Mais je ne sais pas par ou commencer.

Il est question de configuration de moteurs de templates dans le fichier template-services-context.xml. J'y ai jeté un coup d'oeil mais je ne sais pas si je dois l'utiliser.
rivarola
Active Member

Re: [résolu] faire un lien vers un fichier externe

Le plus simple est de mettre l'IP en dur dans le ftl : pas de classes Java, pas de config.
ethan
Member II

Re: [résolu] faire un lien vers un fichier externe

Ma difficulté, c'est que j'ai besoin d'une classe java qui fasse le traitement pour générer l'URL, à cause de contraintes liées aux pièces jointes d'emails stockés sur un serveur exchange qui n'ont pas de path et par conséquent ne peuvent pas avoir d'url… J'aurai pu mettre l'ip en dur dans le fichier .ftl et me passer de classe java mais ça n'aurait fonctionné que pour une partie des documents indexés : (

Je pensais à une autre solution: J'ai déjà customisé le fichier documents-details.jsp qui est appelée lorsqu'on clique sur l'action show details. J'ai retiré certaines parties du code pour alléger la page. Mais est-ce qu'il serait possible d'ajouter le lien à cette page et de faire appel à une classe java dans cette jsp pour générer l'url ?
ethan
Member II

Re: [résolu] faire un lien vers un fichier externe

Bonjour : )

J'ai toujours le même problème. J'ai besoin d'une classe java (déjà créée) pour récupérer les fichiers stockés sur des serveurs externes et je voudrais rajouter un lien ou une action (si c'est possible) dans la page Details du document courant qui exécute cette classe java.