Afficher le document dans une balise <objet>

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

Afficher le document dans une balise <objet>

Bonjour,
Je cherche à remplacer la preview flash de share par un plugin externe (pour les extensions .dwf)
pour cela il me suffit de rajouter dans le template ftl ce type de code :
<object id = "viewer"

     classid = "clsid:A662DA7E-CCB7-4743-B71A-D817F6D575DF"
      CODEBASE="http://www.autodesk.com/global/dwfviewer/installer/DwfViewerSetup.cab"
     border = "1"
      width = "500"
      height = "300">
     <param name = "Src" value="${page.url.context}/proxy/alfresco-feed/api/node/content/workspace/SpacesStore/${node.nodeRef?substring(24)}/${node.name?html}">

</object>

seul problème, l'authentification est perdue donc le plugin n'arrive pas à récupérer le fichier.
est-ce que quelqu'un aurait une piste ?
Merci d'avance
12 Replies
rguinot
Customer

Re: Afficher le document dans une balise <objet>

alfresco-feed n'utilise pas nécessairement le même connecteur surf. essayez avec /proxy/alfresco a la place de /proxy/alfresco-feed
swiggy
Member II

Re: Afficher le document dans une balise <objet>

Merci de votre aide, malheureusement ça ne change rien. je suis d'ailleurs obligé de rajouter mon url avant ${page.url.context}, je ne sais pas si ça joue…
si j'envoie le ticket de ma session en cours dans l'url, ça devrait résoudre le problème ?
j'essaie désespérément de récupérer la variable session.ticket, par exemple avec ${session.ticket} dans le ftl mais ça ne marche pas.
savez-vous comment récupérer le ticket de session dans un ftl ?
merci
rguinot
Customer

Re: Afficher le document dans une balise <objet>

$(session.ticket} est censé contenir le ticket courant as a string. si ce n'est pas le cas et que c'est reproductible, logger un bug en précisant bien la version, et un exemple de template
swiggy
Member II

Re: Afficher le document dans une balise <objet>

Merci,
Avant de déclarer un bug je voudrais être sûr que ce n'est pas moi le bug  :?

mon code dans tomcat/webapps/share/WEB-INF/classes/alfresco/site-webscripts/org/alfresco/components/preview/web-preview.get.html.ftl :

(j'ai juste ajouté ${session.ticket} en plein milieu)

<#assign el=args.htmlid?html>
<#if (node?exists)>
<script type="text/javascript">//<![CDATA[
new Alfresco.WebPreview("${el}").setOptions(
{
   nodeRef: "${node.nodeRef}",
   name: "${node.name?js_string}",
   icon: "${node.icon}",
   mimeType: "${node.mimeType}",
   previews: [<#list node.previews as p>"${p}"<#if (p_has_next)>, </#if></#list>],
   size: "${node.size}",
   disableI18nInputFix: ${args.disableI18nInputFix!"false"}
}).setMessages(${messages});
//]]>
</script>
</#if>

${session.ticket}

<div class="web-preview shadow">
   <div class="hd">
      <div class="title">
         <h4>
            <img id="${el}-title-img" src="${url.context}/res/components/images/generic-file-32.png" alt="File" />
            <span id="${el}-title-span"></span>
         </h4>
      </div>
   </div>
   <div class="bd">
      <div id="${el}-shadow-swf-div" class="preview-swf">
         <div id="${el}-swfPlayerMessage-div"><#if (node?exists)>${msg("label.preparingPreviewer")}</#if></div>
      </div>
   </div>
</div>

erreur :

Error Code Information: 500 - An error inside the HTTP server which prevented it from fulfilling the request.
Error Message: 00100117 Failed to process template org/alfresco/components/preview/web-preview.get.html.ftl
Server: Alfresco Spring WebScripts - v1.0.0 (Release Candidate 2 739) schema 1 000
Time: 10 janv. 2011 18:48:46
Click here to view full technical information on the error.
Exception: freemarker.core.InvalidReferenceException - Expression session is undefined on line 18, column 3 in org/alfresco/components/preview/web-preview.get.html.ftl.

Cordialement
bertrandf
Active Member

Re: Afficher le document dans une balise <objet>

L'objet 'session' est accessible seulement par les webscripts situés coté entrepôt, il ne l'est pas coté Share.

A ma connaissance, il n'est pas possible de récupérer directement un ticket coté Share.

Une solution (un peu moche ?), serait de créer un webscript coté Alfresco qui renvoie le ticket (session.ticket).
Ensuite vous appelez ce webscript dans le webscript Share avec l'objet 'remote', vous passez le résultat (le ticket) dans le 'model', vous le récupérez dans le template et vous ajoutez alf_ticket=… à la fin de votre URL (sans passer par le proxy).
L'URL serait du type : http://serveur/alfresco/s/api/node/content/workspace/SpacesStore/votre-node-id?alf_ticket=TICKET_...
swiggy
Member II

Re: Afficher le document dans une balise <objet>

Bonjour,
Merci pour l'info je pouvais toujours essayer de récupérer cette variable dans share…
votre solution est un peu alambiquée, autant utiliser un petit script d'authentification dans share, non ?
une chose me chiffonne, share doit bien utiliser un ticket à l'authentification ? il ne serait pas dans une autre variable ?
swiggy
Member II

Re: Afficher le document dans une balise <objet>

Résolu !

Dans le fichier js, on récupère le ticket :


var connector = remote.connect("alfresco");
var ticket = new String(connector.get("/api/login?u=admin&pw=admin"));
ticket = ticket.split("<ticket>")[1];
ticket = ticket.split("</ticket>")[0];
      model.ticket = ticket;

dans le ftl, l'url de download du fichier avec le ticket est la suivante :

http://url:port/alfresco/s/api/node/content/workspace/SpacesStore/${node.nodeRef?substring(24)}?alf_...}

Merci Bertrand pour les pistes notamment l'url !
Cordialement
bertrandf
Active Member

Re: Afficher le document dans une balise <objet>

En fait, ce que vous avez fait revient au même que la solution que je vous ai proposé au détail près que vous appelez un webscript déjà existant dans alfresco.

Un petit bémol tout de même, devoir passer le login et mot de passe à chaque fois c'est quand même pas top.
Deuxième point, j'espère que vous êtes en https car faire passer en GET le login mot de passe en clair en HTTP c'est risqué.
Je vous conseillerai de faire au moins l'appel en POST : avec un connector.post http://wiki.alfresco.com/wiki/Surf_Platform_-_Freemarker_Template_and_JavaScript_API#Connectors
swiggy
Member II

Re: Afficher le document dans une balise <objet>

Vous avez raison, j'ai pris mon courage à 2 mains pour créer mon premier (petit) webscript  Smiley Happy

Pour ceux que ça intéresse, le détail pour récupérer le ticket alfresco dans share :

Les 3 fichiers créés dans Alfresco Explorer > Dictionnaire de données > extensions de webscripts

getticket.get.desc.xml
<webscript>
<shortname>getticket</shortname>
<description>Renvoi ticket</description>
<url>/getticket</url>
<authentication>user</authentication>
</webscript>

getticket.get.js
var ticket = session.ticket;
model.ticket = ticket;

getticket.get.xml.ftl
${session.ticket}

On rafraichit le script sur http://urlSmiley Tongueort/alfresco/service/index, puis on appelle le webscript côté share :

fichier js
var ticket = new String(remote.call("/getticket.xml"));
ticket = ticket.split("<ticket>")[1];
ticket = ticket.split("</ticket>")[0];
model.ticket = ticket;

enfin on récupère le ticket dans le fichier ftl
${ticket}