J'essaye d'améliorer la séléection de document (dans...

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

Re: J'essaye d'améliorer la séléection de document (dans...

Bonjour,

Voici très précisément la méthode que j'ai suivi :

Tout d'abord, j'ai créé une classe Java dans laquelle j'ai créé une méthode permettant de faire une recherche :

public class SearchBean {

  private NodeService nodeService;
     
  private static final Log logger = LogFactory.getLog(SearchBean.class);
     
  public void searchContent() throws IOException {
    FacesContext context = FacesContext.getCurrentInstance();
    ResponseWriter out = context.getResponseWriter();
    Map<?, ?> requestMap = context.getExternalContext().getRequestParameterMap();
    String strQName = (String)requestMap.get("qname");
    String strRequest = (String)requestMap.get("request");
    …
    out.write('The result!');
  }
}
J'ai compilé cette classe et je l'ai mis dans un fichier JAR puis mis dans le dossier lib d'Alfresco.

Afin d'accéder à ce bean, j'ai ajouté sa configuration dans le fichiers faces-config-custom.xml :

  <managed-bean>
    <managed-bean-name>SearchBean</managed-bean-name>
    <managed-bean-class>myPackage.SearchBean</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
    <managed-property>
      <property-name>nodeService</property-name>
        <value>#{NodeService}</value>
    </managed-property>
  </managed-bean>
Après avoir relancé Alfresco, on peut tester son efficacité de cette manière (et donc voir le résultat) :
http://localhost:8080/alfresco/ajax/invoke/SearchBean.searchContent?arg1=value1&arg2=value2

Après, il faut changer la visualisation des associations. Dans la classe BaseAssociationEditor (org.alfresco.web.ui.repo.component.property), il faut surcharger la méthode encodeBegin (qui génère les balises d'affichage). Pour le cas de la recherche, il faut changer le contenu de renderSearchField. Alfresco utilise la méthode generateFormSubmit. Personnellement, j'ai changé çà en lien et j'appelle une méthode Javascript expliqué plus loin. Il ne faut pas oublier d'inclure le fichier javascript et DOJO.

Pour la méthode Javascript, voici un squelette :

function searchDocument(value,qName) {

   dojo.io.bind({
         method: 'post',
      url: getContextPath() + '/ajax/invoke/SearchBean.searchContent',
         content: { qname : qName, request : value},
         load: function handleInfo(type, data, evt)
         {
         /*La variable data contient tout ce que vous avez écrit dans le
         bean, il suffit de récupérer la liste, la nettoyer et la recompléter*/
         },
         error: handleErrorDojo,
         mimetype: 'text/html'
   });
};
J'espère que ce forum vous aidera car j'y ai passé beaucoup de temps afin de comprendre le fonctionnement global d'Alfresco. Ceci résume ce qu'il faut faire pour la recherche mais la méthode est exactement similaire pour l'ajout dans une association ou la suppression (s'inspirer de addTarget et removeTarget).