cancel
Showing results for 
Search instead for 
Did you mean: 

Accès au repository

pilate
Champ in-the-making
Champ in-the-making
Bonjour,

Je suis en train de faire un test de dashlet mais je n'ai pas d'acces au repo avec l'EL ${space.name}. Alfresco me dit :

Expression space is undefined on line 15, column 31 in com/domain/mon-dashlet.get.html.ftl

Voici mes fichiers :

mon-dashlet.get.desc.xml

<webscript>
   <shortname>Mon Dashlet</shortname>
   <description>Dashlet de test d'accès au repository</description>
   <family>site-dashlet</family>
   <url>/com/domain/mon-dashlet</url>
   <authentication>user</authentication>
</webscript>
mon-dashlet.get.html.ftl

<div class="dashlet">
<div class="title">Mon Dashlet</div>
Test dashlet<br>
<table style="width: 100%; text-align: left;" border="1" cellpadding="5"
   cellspacing="0">
   <tbody>
      <tr>
         <td>HelloWorld</td>
      </tr>
      <tr>
         <td>HelloWorld</td>
         <td>${space.name}</td>
      </tr>
   </tbody>
</table>
<hr>
</div>

Ai-je oublié d'inclure un template ? Si oui, comment puis-je le faire ?

EDIT : alors pour le placement des fichiers, j'ai mis ça dans tomcat\webapps\share\WEB-INF\classes\alfresco\site-webscripts\com\domain et j'ai aussi essayé dans shared/classes/alfresco/site-webscripts\com\domain. Je peux mettre mon WS dans le tableau de bord de mon site mais à l'affichage, j'obtiens l'erreur sus-citée.

Merci pour votre aide.
17 REPLIES 17

bertrandf
Champ on-the-rise
Champ on-the-rise
Je serai tenté de dire que c'est normal que ca ne fonctionne pas …

Premièrement, qu'essayez-vous de faire exactement, faire une dashlet c'est bien beau mais vous voulez faire quoi dedans ?

Sachez que depuis votre webscript situé coté Share, vous n'aurez pas accès au repository comme lorsque vous créez un webscript coté alfresco.

La pluspart du temps, le fonctionnement est le suivant :
1- créer un webscript coté entrepot (coté Alfresco) qui renvoie des données structurées (JSON, XML, …).
2- créer un webscript coté Share (de type dashlet dans votre cas)
3- réceptionner les données de votre webscript (celui situé coté Alfresco) dans votre fichier javascript du webscript situé coté Share à l'aide des outils qui vont biens : http://wiki.alfresco.com/wiki/Surf_Platform_-_Freemarker_Template_and_JavaScript_API#Connectors
4- traiter les données et les mettre en forme dans votre dashlet avec freemarker

Cet article peut éventuellement vous aider à comprendre le mécanisme de communication entre Share et le repository via les webscripts (notamment vers la fin de l'article).
Je vous conseille également de regarder ce qui est fait dans les dashlets de base de Share qui sont de bonnes sources d'information.

J'espère avoir été assez précis.

pilate
Champ in-the-making
Champ in-the-making
ça c'est une réponse comme je les aime. Merci beaucoup (faut dire que je me suis amélioré niveau question  :mrgreen: ).
j'ai regardé les webscript côté share mais j'avoue ne pas tout biter :
- l'extension .head ?
- les @ et les # partout  ?
- …

Je vais regarder les liens. Merci encore !!

EDIT : et qu'en est-il des websdcripts dans shared/classes ?

bertrandf
Champ on-the-rise
Champ on-the-rise
Les fichiers .head ne sont pas indispensables mais très utiles pour les dashlets, ca vous permet d'intégrer vos css et script js proprement.
Les #, c'est pour la notation freemarker, n'est plus ni moins. Dans les fichiers .head, cela permet d'inclure le fichier component.head.inc grâce au <#include.
Après les @, c'est pour appeler des macros freemarker. Dans les fichiers .head, on fait appel à la macro script (<@script), cela permet juste de charger le bon fichier javascript (extension -min.js ou .js pour le mode debug).
Doc freemarker sur les macros : http://freemarker.sourceforge.net/docs/ref_directive_macro.html

Je serai vous, je commencerai pas un webscript simple.

Il vous suffit pour cela de créer :
un webscript coté Alfresco :
- 1 fichier XML (desc.xml)
- 1 fichier freemarker (.json.ftl par exemple)
(éventuellement un fichier javascript)

A placer dans :
/tomcat/webapps/alfresco/WEB-INF/classes/alfresco/extension/templates/webscripts/
ou /tomcat/webapps/alfresco/WEB-INF/classes/alfresco/templates/webscripts/
ou /tomcat/webapps/alfresco/WEB-INF/classes/alfresco/webscripts/

un webscript coté Share :
- 1 fichier XML (desc.xml)
- 1 fichier JavaScript (pour appeler votre wbscript coté alfresco)
- 1 fichier freemarker (.html.ftl)

A placer dans : /tomcat/webapps/share/WEB-INF/classes/alfresco/site-webscripts/org/alfresco/components/dashlets/


EDIT : Voici un exemple de code pour faire appel à votre webscript situé coté Alfresco
var connector = remote.connect("alfresco");

var result  = connector.get("/com/domain/votre-webscript-coté-alfresco);
if(result.status == 200){
  var data = eval( '(' + result + ')');
 
  //traiter ici vos données
  //écrire dans le model pour récupérer des données dans votre template
}

pilate
Champ in-the-making
Champ in-the-making
bah apparemment, les webscripts dans shared/classes ça fonctionne Smiley Happy.

Je voudrais récupérer les blogs du site courant. Sont-ils aussi dans le repository    Smiley Indifferent

EDIT : apparemment oui  Smiley Happy

pilate
Champ in-the-making
Champ in-the-making
Les fichiers .head ne sont pas indispensables mais très utiles pour les dashlets, ca vous permet d'intégrer vos css et script js proprement.
Les #, c'est pour la notation freemarker, n'est plus ni moins. Dans les fichiers .head, cela permet d'inclure le fichier component.head.inc grâce au <#include.
Après les @, c'est pour appeler des macros freemarker. Dans les fichiers .head, on fait appel à la macro script (<@script), cela permet juste de charger le bon fichier javascript (extension -min.js ou .js pour le mode debug).
Doc freemarker sur les macros : http://freemarker.sourceforge.net/docs/ref_directive_macro.html

Je serai vous, je commencerai pas un webscript simple.

Il vous suffit pour cela de créer :
un webscript coté Alfresco :
- 1 fichier XML (desc.xml)
- 1 fichier freemarker (.json.ftl par exemple)
(éventuellement un fichier javascript)

A placer dans :
/tomcat/webapps/alfresco/WEB-INF/classes/alfresco/extension/templates/webscripts/
ou /tomcat/webapps/alfresco/WEB-INF/classes/alfresco/templates/webscripts/
ou /tomcat/webapps/alfresco/WEB-INF/classes/alfresco/webscripts/

un webscript coté Share :
- 1 fichier XML (desc.xml)
- 1 fichier JavaScript (pour appeler votre wbscript coté alfresco)
- 1 fichier freemarker (.html.ftl)

A placer dans : /tomcat/webapps/share/WEB-INF/classes/alfresco/site-webscripts/org/alfresco/components/dashlets/


EDIT : Voici un exemple de code pour faire appel à votre webscript situé coté Alfresco
var connector = remote.connect("alfresco");

var result  = connector.get("/com/domain/votre-webscript-coté-alfresco);
if(result.status == 200){
  var data = eval( '(' + result + ')');
 
  //traiter ici vos données
  //écrire dans le model pour récupérer des données dans votre template
}

Merci pour le coup de main. Petite remarque, j'ai fait un tuto FreeMArker et il n'y avait pas de # devant les balises ??!!  :?

ex : <list orders as o></list>

et à quoi sert le fichier component.head.inc exactement ?

pilate
Champ in-the-making
Champ in-the-making
Par contre de la version 3.2r2 à la version 3.3, on dirait qu'il y a eut des modifications importantes.

Share utilise les webscripts de Spring, c'est ça ?

Et on peut exporter directement le webscript sous forme de jar dans le dossier lib de share.

Faut-il procéder de la même manière pour faire communiquer un Webscript avec le repository que sur la 3.2r2 ?

Les WS custom de la 3.2r2 fonctionneront-ils avec la 3.3 ?

EDIT : quelquechose me dit que le webscript côté Alfresco pour récupérer les blogs du site existe déjà, non ?

pilate
Champ in-the-making
Champ in-the-making
Bon voilà, j'ai fais beaucoup de tests pour comprendre la chose.

Il n'y a apparemment pas d'API js directe pour atteindre les blogs directement. Ou puis-je passer par le service js Activities.

J'avoue que ça reste en core un peu flou pour moi. D'ailleurs, quelle est la différence entre API et Service js ?

Ils font tous les deux plus ou moins la même chose, c'est-à-dire des accès et modification dans le repository…

pilate
Champ in-the-making
Champ in-the-making
Ok, j'essaie de me connecter au werbscript blogsearch.get via l'url /sample/blog/search?q={searchTerm} avec le code suivant :

function main() {

   var s = new XML(config.script);
   model.maxItems = parseInt(s.maxitems, 10);

   var result, blogs = {};

   var result = remote.call("/sample/blog/search?q=/company_home/sites/blog//*");

   if (result.status == 200 && result != "{}") {

      try {
         var blgs = eval('(' + result + ')');
      } catch (e) {
      }
   }
   model.blogs = blgs;
}

main();

Oui je sais c'est cracrin, j'ai encore du mal avec les requêtes lucene, et c'est tout ce que je suis capable de pondre à ce jour  :cry:

Quand j'affiche le resultat ${blogs} sur mon ftl, j'obtiens la string suivante : org.mozilla.javascript.Undefined@3ed3c4

Suis-je sur la bonne voie ?

Merci de votre aide  :wink:

pilate
Champ in-the-making
Champ in-the-making
Bonjour,

C'est vraiment très compliqué tous ces échanges entre le model, le remote, les différents formats.

Quelle(s) formation(s) me conseillez-vous de faire pour être plus à l'aise en développement Surf.