cancel
Showing results for 
Search instead for 
Did you mean: 

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

ethan
Champ in-the-making
Champ in-the-making
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 11

rivarola
Champ on-the-rise
Champ on-the-rise
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
Champ in-the-making
Champ in-the-making
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
Champ on-the-rise
Champ on-the-rise
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
Champ in-the-making
Champ in-the-making
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
Champ on-the-rise
Champ on-the-rise
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
Champ in-the-making
Champ in-the-making
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
Champ on-the-rise
Champ on-the-rise
Le plus simple est de mettre l'IP en dur dans le ftl : pas de classes Java, pas de config.

ethan
Champ in-the-making
Champ in-the-making
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
Champ in-the-making
Champ in-the-making
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.