SURF : vos retours ?

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

SURF : vos retours ?

Bonjour,

J'aimerais savoir si quelqu'un a déjà créé une application ex-nihilo avec SURF, et si c'est le cas, avoir un retour sur l'usage de cette technologie.
Sur le papier c'est très séduisant mais la pauvreté de la documentation technique semble un vrai frein aujourd'hui.
7 Replies
michaelh
Active Member

Re: SURF : vos retours ?

Je ne peux que confirmer pour la doc …  Smiley Surprisedops:
Regarder les sources de Share c'est bien, mais pas très efficace.

Quelques points sur ce sujet :
- Jeff Potts vient de mettre en ligne sur son site la doc de son "code camp" sur le sujet : http://ecmarchitect.com/archives/2009/02/05/891
- Ben Hagan commence une série sur le sujet sur son blog : http://www.benh.co.uk/alfresco/surf-part-1-getting-started/
- Yong Qu est en train de construire des exemples supplémentaires pour donner à manger à http://share.alfresco.com/
- Il y a une grosse mise à jour sur la partie Surf du wiki planifiée pour bientôt (ahh, les développeurs et la doc Smiley Tongue)
- Il devrait y avoir une demi journée entière dédiée à Surf/Share lors de la conférence communautaire à venir à Paris (annonce à suivre, quand ce sera prêt)

Bref, le retard existe, mais ça va avancer bientôt (si si) !

Sur le reste, je laisse parler les développeurs, les vrais (Thomas ?) Smiley Happy
thomasb
Member II

Re: SURF : vos retours ?

Une chose qui n'est jamais indiquée: SURF ne supporte que les requêtes HTTP GET (et HEAD, bien entendu). Ce qui signifie que pour toutes modifications de données (POST ou autre), il faut appeler un webscript (ou autre servlet) plutôt qu'une page et, au choix:
  • gérer la réponse dans le webscript (ce qui signifie grosso-modo ne pas appeler de webscript via /proxy/ sinon on a un couplage fort entre l'appli et l'entrepôt ou autre endpoint); si pour une réponse "OK" on peut faire une redirection vers une page (303 See Other, c'est fait pour), pour la gestion des erreurs par contre…

  • faire la requête via AJAX (ce qui permet d'échanger des données sans mise en forme, genre JSON ou XML, et donc de faire appel à /proxy/ tout en gardant un couplage au niveau données uniquement); c'est le choix fait dans Share. La limitation est bien évidemment pour les uploads de fichiers, qui ne peuvent se faire via AJAX (nécessite un formulaire HTML, éventuellement envoyé vers une IFRAME cachée façon pièces jointes dans GMail, ou un uploader en Flash, comme dans Share, mais qui bien souvent est alors limité à l'envoi de fichiers uniquement, sans données connexes, contrairement aux formulaires HTML)
Attention, ne me faites pas dire ce que je n'ai pas dit: c'est un bon choix d'architecture de ne supporter que GET/HEAD sur les pages (quel composant gérerait le POST sinon? et que signifierait une requête PUT ou DELETE?), …mais il faut le savoir.
michaelh
Active Member

Re: SURF : vos retours ?

michaelh
Active Member

Re: SURF : vos retours ?

chaer
Member II

Re: SURF : vos retours ?

Bonjour, J'ai lu et j'ai appliqué les 3 tutoriaux se trouvant sur blog - Ben Hagan commence une série sur le sujet sur son blog : http://www.benh.co.uk/alfresco/surf-part-3-alfresco-wcm-content
Je suis arrivé dans la partie Dynamicbet j'ai un soucis j'ai erreur suivante:

Web Script Status 500 - Internal Error

The Web Script /surf/service/products/left has responded with a status of 500 - Internal Error.

500 Description: An error inside the HTTP server which prevented it from fulfilling the request.
 
Message: Failed to load script 'org.alfresco.web.scripts.LocalFileSystemStore$LocalFileSystemStoreScriptContent@6fb3d6': TypeError: Cannot read property "length" from undefined (/surf-sample/sample/deploy/alfresco/site-webscripts/products.left.get.js#22)
  
Exception: org.mozilla.javascript.EcmaError - TypeError: Cannot read property "length" from undefined (/surf-sample/sample/deploy/alfresco/site-webscripts/products.left.get.js#22)
  
org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3350)
org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3340)
org.mozilla.javascript.ScriptRuntime.typeError(ScriptRuntime.java:3356)
org.mozilla.javascript.ScriptRuntime.typeError2(ScriptRuntime.java:3375)
org.mozilla.javascript.ScriptRuntime.undefReadError(ScriptRuntime.java:3388)
org.mozilla.javascript.ScriptRuntime.getObjectProp(ScriptRuntime.java:1362)
org.mozilla.javascript.gen.c2._c0(/surf-sample/sample/deploy/alfresco/site-webscripts/products.left.get.js:22)
org.mozilla.javascript.gen.c2.call(/surf-sample/sample/deploy/alfresco/site-webscripts/products.left.get.js)
org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:393)
org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:2834)
org.mozilla.javascript.gen.c2.call(/surf-sample/sample/deploy/alfresco/site-webscripts/products.left.get.js)
org.mozilla.javascript.gen.c2.exec(/surf-sample/sample/deploy/alfresco/site-webscripts/products.left.get.js)
org.alfresco.web.scripts.PresentationScriptProcessor.executeScriptImpl(PresentationScriptProcessor.java:256)
org.alfresco.web.scripts.PresentationScriptProcessor.executeScript(PresentationScriptProcessor.java:148)
org.alfresco.web.scripts.AbstractWebScript.executeScript(AbstractWebScript.java:800)
org.alfresco.web.scripts.DeclarativeWebScript.execute(DeclarativeWebScript.java:90)
org.alfresco.web.scripts.PresentationContainer.executeScript(PresentationContainer.java:60)
org.alfresco.web.scripts.LocalWebScriptRuntimeContainer.executeScript(LocalWebScriptRuntimeContainer.java:169)
org.alfresco.web.scripts.AbstractRuntime.executeScript(AbstractRuntime.java:261)
org.alfresco.web.scripts.AbstractRuntime.executeScript(AbstractRuntime.java:139)
org.alfresco.web.scripts.WebScriptProcessor.executeBody(WebScriptProcessor.java:329)
org.alfresco.web.framework.render.AbstractProcessor.execute(AbstractProcessor.java:85)
org.alfresco.web.framework.render.RenderHelper.processComponent(RenderHelper.java:332)
org.alfresco.web.framework.render.RenderUtil.renderRawComponent(RenderUtil.java:451)
org.alfresco.web.framework.render.RenderUtil.renderRawComponent(RenderUtil.java:434)
org.alfresco.web.site.taglib.ComponentIncludeTag.doStartTag(ComponentIncludeTag.java:46)
org.alfresco.tools.TagUtil.execute(TagUtil.java:142)
org.alfresco.tools.TagUtil.execute(TagUtil.java:78)
org.alfresco.web.scripts.FreemarkerTagSupportDirective.executeTag(FreemarkerTagSupportDirective.java:89)
org.alfresco.web.scripts.GenericFreemarkerTagDirective.execute(GenericFreemarkerTagDirective.java:127)
freemarker.core.Environment.visit(Environment.java:261)
freemarker.core.UnifiedCall.accept(UnifiedCall.java:126)
freemarker.core.Environment.visit(Environment.java:208)
freemarker.core.Environment.process(Environment.java:188)
freemarker.template.Template.process(Template.java:237)
org.alfresco.web.scripts.PresentationTemplateProcessor.process(PresentationTemplateProcessor.java:146)
org.alfresco.web.scripts.FreemarkerProcessor.executeBody(FreemarkerProcessor.java:240)
org.alfresco.web.framework.render.AbstractProcessor.execute(AbstractProcessor.java:85)
org.alfresco.web.framework.render.RenderHelper.processRenderable(RenderHelper.java:276)
org.alfresco.web.framework.render.bean.ChromeRenderer.body(ChromeRenderer.java:60)
org.alfresco.web.framework.render.AbstractRenderer.render(AbstractRenderer.java:105)
org.alfresco.web.framework.render.bean.ComponentRenderer.body(ComponentRenderer.java:129)
org.alfresco.web.framework.render.RenderUtil.renderRegionComponents(RenderUtil.java:328)
org.alfresco.web.site.taglib.RegionIncludeTag.doStartTag(RegionIncludeTag.java:43)
org.alfresco.tools.TagUtil.execute(TagUtil.java:142)
org.alfresco.tools.TagUtil.execute(TagUtil.java:78)
org.alfresco.web.scripts.FreemarkerTagSupportDirective.executeTag(FreemarkerTagSupportDirective.java:89)
org.alfresco.web.scripts.GenericFreemarkerTagDirective.execute(GenericFreemarkerTagDirective.java:127)
freemarker.core.Environment.visit(Environment.java:261)
freemarker.core.UnifiedCall.accept(UnifiedCall.java:126)
freemarker.core.Environment.visit(Environment.java:208)
freemarker.core.MixedContent.accept(MixedContent.java:92)
freemarker.core.Environment.visit(Environment.java:208)
freemarker.core.Environment.process(Environment.java:188)
freemarker.template.Template.process(Template.java:237)
org.alfresco.web.scripts.PresentationTemplateProcessor.process(PresentationTemplateProcessor.java:146)
org.alfresco.web.scripts.FreemarkerProcessor.executeBody(FreemarkerProcessor.java:240)
org.alfresco.web.framework.render.AbstractProcessor.execute(AbstractProcessor.java:85)
org.alfresco.web.framework.render.RenderHelper.processRenderable(RenderHelper.java:276)
org.alfresco.web.framework.render.bean.ChromeRenderer.body(ChromeRenderer.java:60)
org.alfresco.web.framework.render.AbstractRenderer.render(AbstractRenderer.java:105)
org.alfresco.web.framework.render.bean.RegionRenderer.body(RegionRenderer.java:134)
org.alfresco.web.framework.render.AbstractRenderer.render(AbstractRenderer.java:105)
org.alfresco.web.framework.render.RenderUtil.startRegionRenderer(RenderUtil.java:273)
org.alfresco.web.framework.render.RenderUtil.renderRegion(RenderUtil.java:213)
org.alfresco.web.framework.render.PresentationUtil.renderRegion(PresentationUtil.java:124)
org.alfresco.web.site.taglib.RegionTag.doStartTag(RegionTag.java:109)
org.alfresco.tools.TagUtil.execute(TagUtil.java:142)
org.alfresco.tools.TagUtil.execute(TagUtil.java:78)
org.alfresco.web.scripts.FreemarkerTagSupportDirective.executeTag(FreemarkerTagSupportDirective.java:89)
org.alfresco.web.scripts.RegionFreemarkerTagDirective.execute(RegionFreemarkerTagDirective.java:128)
freemarker.core.Environment.visit(Environment.java:261)
freemarker.core.UnifiedCall.accept(UnifiedCall.java:126)
freemarker.core.Environment.visit(Environment.java:208)
freemarker.core.MixedContent.accept(MixedContent.java:92)
freemarker.core.Environment.visit(Environment.java:208)
freemarker.core.Environment.process(Environment.java:188)
freemarker.template.Template.process(Template.java:237)
org.alfresco.web.scripts.PresentationTemplateProcessor.process(PresentationTemplateProcessor.java:146)
org.alfresco.web.scripts.FreemarkerProcessor.executeBody(FreemarkerProcessor.java:240)
org.alfresco.web.framework.render.AbstractProcessor.execute(AbstractProcessor.java:85)
org.alfresco.web.framework.render.RenderHelper.processTemplate(RenderHelper.java:376)
org.alfresco.web.framework.render.bean.TemplateInstanceRenderer.body(TemplateInstanceRenderer.java:135)
org.alfresco.web.framework.render.AbstractRenderer.render(AbstractRenderer.java:105)
org.alfresco.web.framework.render.bean.PageRenderer.body(PageRenderer.java:81)
org.alfresco.web.framework.render.AbstractRenderer.render(AbstractRenderer.java:105)
org.alfresco.web.framework.render.RenderUtil.startPageRenderer(RenderUtil.java:144)
org.alfresco.web.framework.render.RenderUtil.renderPage(RenderUtil.java:117)
org.alfresco.web.framework.render.PresentationUtil.renderPage(PresentationUtil.java:85)
org.alfresco.web.site.servlet.DispatcherServlet.dispatchPage(DispatcherServlet.java:459)
org.alfresco.web.site.servlet.DispatcherServlet.dispatch(DispatcherServlet.java:336)
org.alfresco.web.site.servlet.DispatcherServlet.service(DispatcherServlet.java:153)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176)
org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:381)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
java.lang.Thread.run(Thread.java:619)
  
Exception: org.alfresco.web.scripts.WebScriptException - TypeError: Cannot read property "length" from undefined (/surf-sample/sample/deploy/alfresco/site-webscripts/products.left.get.js#22)
  
org.alfresco.web.scripts.PresentationScriptProcessor.executeScriptImpl(PresentationScriptProcessor.java:261)
  
Exception: org.alfresco.web.scripts.WebScriptException - Failed to load script 'org.alfresco.web.scripts.LocalFileSystemStore$LocalFileSystemStoreScriptContent@6fb3d6': TypeError: Cannot read property "length" from undefined (/surf-sample/sample/deploy/alfresco/site-webscripts/products.left.get.js#22)
  
org.alfresco.web.scripts.PresentationScriptProcessor.executeScript(PresentationScriptProcessor.java:152)
  
Server: Alfresco Labs v3.0.0 (Stable r13140) schema 2.000
Time: 16-mars-2009 17:41:46

Est ce que quelqu'un peut m'aider?
christophes
Member II

Re: SURF : vos retours ?

Il faudrait que tu nous fournisse le fichier products.left.get.js mais à priori, il semblerait qu'on essaye de lire la longueur (length) d'un objet qui ne supporte pas cette propriété ou qui est null d'où le message "Cannot read property "length" from undefined"… Cette erreur apparait apparemment à la ligne 22.

Christophe
thomasb
Member II

Re: SURF : vos retours ?

Bonjour, J'ai lu et j'ai appliqué les 3 tutoriaux se trouvant sur blog - Ben Hagan commence une série sur le sujet sur son blog : http://www.benh.co.uk/alfresco/surf-part-3-alfresco-wcm-content
Je suis arrivé dans la partie Dynamicbet j'ai un soucis j'ai erreur suivante:

Web Script Status 500 - Internal Error

The Web Script /surf/service/products/left has responded with a status of 500 - Internal Error.

500 Description: An error inside the HTTP server which prevented it from fulfilling the request.
 
Message: Failed to load script 'org.alfresco.web.scripts.LocalFileSystemStore$LocalFileSystemStoreScriptContent@6fb3d6': TypeError: Cannot read property "length" from undefined (/surf-sample/sample/deploy/alfresco/site-webscripts/products.left.get.js#22)
[…]
Est ce que quelqu'un peut m'aider?

Ben Hagan peut-être ?
http://www.benh.co.uk/alfresco/surf-part-3-alfresco-wcm-content/#comment-61

(et surtout, la prochaine fois –voire même pour cette fois, c'est pas trop tard–, merci d'ouvrir un nouveau "sujet")