J'ouvre le bal avec 2 trucs un peu tarabiscotés qui ne vous impacteront peut-être pas mais que j'ai envie de conserver histoire de potentiellement éviter de l'arrachage de cheveux à d'autres personnes.
- isdefined("") et cfoutput
Test classique :
- <cfif i eq 2>
- <cfset toto = mafonction() />
- </cfif>
- <cfif isdefined("toto")><cfoutput>#toto#</cfoutput></cfif>
Dans le cas où mafonction() est censée retourner une chaine (returntype "string" dans le cffunction) mais qu'on a fait un "cfreturn" sans rien derrrière (par exemple dans le cas d'un "else") alors :
- En CF8 aucun message d'erreur mais le <cfset toto = ...> ne créait pas la variable toto
donc le isdefined("toto")> retournait false
- En CF9 aucun message d'erreur non plus pour le cfset, mais la variable toto est bien créée MAIS avec une valeur "undefined"
donc le test isdefined("toto") renvoie TRUE (on rentre dans le cfif) mais le cfoutput de #toto# est invalide et fait crasher la page car la valeur est undefined (et n'est donc pas une string)
Ca se corrige assez facilement en s'assurant que le retour de la fonction est bien une chaine (même vide genre cfreturn "") et non pas une valeur non définie. (On pourrait penser que ça aurait dû faire planter CF à ce niveau car <cfreturn /> ne retourne pas une chaine alors que le returntype requis est justement une chaine, mais CF ne réagit pas à ce moment là)
2è découverte : le composant cfx_excel2query ne fonctionne plus sous CF9. Je pense qu'il s'agit de la même problématique que d'habitude (je l'avais eu avec l'introduction de cfimage); à savoir qu'Adobe reprend les librairies classiques de Java pour faire ses nouveaux tags (cfspreadsheet est probablement basé sur POI en l'occurence). du coup on ne peut plus appeler POI comme on le faisait avant.
Solution : en attendant une suggestion de Ryan Emerle http://www.emerle.net (le créateur du tag) le plus simple reste d'adapter son code pour utiliser les nouvelles balises de CF.
Bon par contre (allez savoir pourquoi) le composant qui fait l'inverse (cfx_query2Excel) lui continue à fonctionner et c'est bien cool parce que c'est le truc le plus chiant à adapter (notamment l'ajout de données sur un template xls existant qui est super simple avec le cfx et a l'air plus pénible avec la fonction de CF)

CFforum.eu | Coldfusion Forum