| auteur : Florian | Il existe deux types de fonctions :
- les fonctions avec valeur de retour.
- les fonctions sans valeur de retour.
Dans le 1er cas, on utilise le mot-clé Function. Dans le 2ème cas, on peut utiliser indifférement le mot-clé Function ou le mot-clé Sub, même si par convention on utilise plutôt Sub. On parle alors de procédure. Et comme vous le signifie le message d'erreur, l'appel d'une procédure (i.e. d'une fonction sans valeur de retour) s'écrit sans parenthèses. Une alternative est d'utiliser l'instruction Call et dans ce cas alors il faut mettre des parenthèses. <%
Sub Ecrire_Texte_Nfois(texte, Nfois)
Dim i
For i=1 To Nfois
Response.Write "Le texte est " & texte & "<br>"
Next
End Sub
Ecrire_Texte_Nfois "toto", 3
Call Ecrire_Texte_Nfois("toto", 3)
%> |
|
| auteur : Florian | L'un des grands manques de VBScript est la possibilité de commenter de façon simple plusieurs lignes de code. En effet, dans la majorité des langages, il existe des délimiteurs qui permettent de commenter un bloc de code, comme /* ... */ par exemple. En VBScript, il est nécéssaire de commenter chaque ligne avec le caractère ' ou l'instruction REM. Voici une astuce pour commenter malgré tout un bloc de code sans commenter chaque ligne, opération qui peut s'avérer fastidieuse. Il suffit d'encapsuler le code en question dans une procédure... et de ne pas appeler cette procédure. <%
...
Sub bloc_de_code_a_commenter
...
...
...
End Sub
...
%> |
Et lorsque l'on veut à nouveau tester le bloc de code, il suffit de commenter Sub et End Sub
<%
...
...
...
...
...
%> |
|
| auteur : Florian | Nota : Les explications suivantes concernent le langage vbscript.
Il y a deux cas de figure à considérer :
- les tableaux statiques : tableaux dont le nombre d'éléments n'évolue pas au cours du script.
- les tableaux dynamiques : tableaux redimensionnables.
Les tableaux statiques :
On utilise l'instruction Dim en précisant le nombre de dimensions (jusqu'à 60 !) et l'indice maximum de chaque dimension. Comme l'indice du premier élément est 0, le nombre d'éléments d'une dimension est donc indice max + 1. <%
Dim montableau_1(3)
montableau_1(0) = "élément 0"
montableau_1(1) = "élément 1"
montableau_1(2) = "élément 2"
montableau_1(3) = "élément 3"
Dim montableau_2(3,2)
montableau_2(0,0) = "ligne0 - col0" : montableau_2(0,1) = "ligne0 - col1" : montableau_2(0,2) = "ligne0 - col2"
montableau_2(1,0) = "ligne1 - col0" : montableau_2(1,1) = "ligne1 - col1" : montableau_2(1,2) = "ligne1 - col2"
montableau_2(2,0) = "ligne2 - col0" : montableau_2(2,1) = "ligne2 - col1" : montableau_2(2,2) = "ligne2 - col2"
montableau_2(3,0) = "ligne3 - col0" : montableau_2(3,1) = "ligne3 - col1" : montableau_2(3,2) = "ligne3 - col2"
%> |
Les tableaux dynamiques :
Il est possible de déclarer un tableau dynamique de 2 façons : en le déclarant à l'aide de l'instruction Dim mais sans préciser le nombre d'éléments ni de dimensions, puis en lui donnant ses dimensions avec l'instruction Redim, ou bien en le déclarant directement avec l'instruction Redim. <% Dim montableau_1()
Redim montableau_1(3)
montableau_1(0) = "élément 0" : montableau_1(1) = "élément 1" : montableau_1(2) = "élément 2" : montableau_1(3) = "élément 3"
Redim montableau_2(3,2)
For l=0 to Ubound(montableau_2, 1)
For c=0 to Ubound(montableau_2, 2)
montableau_2(l,c) = "ligne" & l & " - col" & c
Next
Next
Redim montableau_1(9)
Redim Preserve montableau_2(3,3)
%> |
Plusieurs remarques concernant le redimensionnement :
- Pour calculer la limite supérieure d'une dimension, on utilise la fonction Ubound(nomtableau, dimension) (ceci est vrai également pour les tableaux statiques).
- Le mot-clé Preserve permet lors du redimensionnement de conserver les valeurs actuelles du tableau.
- Si vous donnez un indice maximum inférieur à celui utilisé avant le redimensionnement, les valeurs contenues dans les éléments éliminés sont perdues.
- Lors de l'utilisation du mot-clé Preserve sur un tableau à plusieurs dimensions, seule la dernière dimension peut être redimensionnée.
- Si vous n'utilisez pas le mot-clé Preserve lors du redimensionnement, il est possible d'ajouter ou d'enlever des dimensions au tableau (passer par exemple d'un tableau à une dimension à un tableau à 2 dimensions).
- Il est possible d'utiliser l'instruction Redim dans une structure itérative, toutefois ce n'est pas conseillé.
Une autre possibilité de déclarer un tableau dynamique est l'utilisation de la fonction Array() qui va retourner un Variant contenant un tableau, au lieu d'avoir un tableau de Variant. Pour bien appréhender cette nuance, comparez le code pour l'affichage avec celui que vous écririez pour le tableau montableau_2. <%
Dim montableau
montableau = array(array("l1un", "l1deux", "l1trois"), array("l2un", "l2deux", "l2trois"), array("l3un", "l3deux", "l3trois"))
For i=0 to Ubound(montableau,1)
For j=0 to Ubound(montableau(i),1)
Response.Write "montableau(" & i & ")("& j & ") : " & montableau(i)(j) & "<br>"
Next
Next
%> |
|
| auteur : Florian | En ASP, il n'est pas possible de choisir la cible (cadre/frame) dans laquelle effectuer une redirection avec la méthode Redirect de l'objet Response. La redirection va forcément s'effectuer dans celle dans laquelle se trouve le fichier qui contient cette instruction. Donc si l'on veut rediriger dans une autre frame, il faut soit charger la page qui contient l'instruction de redirection déjà dans la bonne frame, soit faire cela en javascript.
Une solution alternative apparue avec ASP 3.0 est d'utiliser la méthode Transfer de l'objet Server. Cette instruction va, comme son nom l'indique, suspendre l'exécution de la page en cours et transférer le contrôle à la page spécifiée. <%
Server.Transfer("url_autre_page.asp")
%> |
Alternative : la méthode Execute de l'objet Server qui, contrairement à Transfer, va redonner la main à la page de départ. Voir un exemple de cette méthode ici
.
|
| auteur : Florian | Il faut pour cela utiliser les méthodes du composant WSH(Windows Scripting Host).
Voici un aperçu des différentes versions installées par défaut suivant le système d'exploitation utilisé
Système d'exploitation |
1.0 |
2.0 |
5.6 |
Microsoft Windows 98 |
X |
|
|
Microsoft Windows NT 4 Option Pack |
X |
|
|
Microsoft Windows 2000 |
|
X |
|
Microsoft Windows XP |
|
|
X |
Vous pouvez toutefois installer la dernière version disponible dans les liens du post-it correspondant dans le forum ASP. Voici un exemple qui va lancer une instance de notepad sur le serveur <%
Dim WshShell
Set WshShell = Server.CreateObject("Wscript.Shell")
WshShell.Run "%windir%\notepad "
Set WshShell = nothing
%> |
Voici un autre exemple qui va lancer une instance de l'interpréteur de commande, changer le chemin pour qu'il pointe sur C, exécuter la commande DIR et envoyer le résultat dans le fichier ArboC.txt sur C <%
Dim WshShell
Set WshShell = Server.CreateObject("Wscript.Shell")
WshShell.Run "cmd /C CD C:\ & DIR>ArboC.txt"
Set WshShell=nothing
%> |
Attention, dans l'exemple avec notepad, vous ne verrez pas le bloc-note s'ouvrir. Il ne faut en effet pas oublier ici que tout se passe sur le serveur. Il faut donc bien savoir ce que vous faites avant d'utiliser ces instructions.
Il est toutefois possible d'exécuter ces instructions sur le client.
<script language="vbscript">
Dim WshShell
Set WshShell = CreateObject("Wscript.Shell")
WshShell.Run "%windir%\notepad "
Set WshShell = nothing
</script> |
Cependant vous devez savoir que ce code ne s'effectuera pas sur le client sans un message d'alerte de la part du navigateur, comme montré sur l'image suivante.
En effet, l'exécution de ce genre de code représente une agression qui peut engendrer de gros trous de sécurité. C'est pour cela que vous ne pouvez (devez) pas vous appuyer sur ce genre de code client, beaucoup d'utilisateurs étant susceptibles de désactiver purement et simplement l'exécution de code activeX dans leur navigateur. De plus, seul Internet Explorer sera capable d'interpréter ce code.
Une dernière remarque : les codes présentés sont écrits en vbscript, mais il est tout à fait possible d'utiliser le JScript pour obtenir les mêmes résultats.
|
| auteur : Gynsu | Pour créer un fichier word : <%
Set WordApp = CreateObject("word.application")
Set WordDoc = WordApp.Documents.Add()
WordApp.Application.Visible = False
Set MyRange1 = WordDoc.Paragraphs.Add.Range
MyRange1.InsertBefore("Appraisal Form")
MyRange1.Style = "Heading 1"
Set MyRange1 = WordDoc.Paragraphs.Add.Range
MyRange1.InsertBefore("Manager: " & Manager & vbcrlf & "Appraisee: " & Appraisee)
MyRange1.Font.Bold = true
Set MyRange1 = WordDoc.Paragraphs.Add.Range
MyRange1.InsertBefore(vbcrlf & "Please fill in all the required sections and return to HR via the internal mail system.")
WordDocPath = Server.MapPath("\alastair\appraisals\forms")
WordDoc.SaveAs WordDocPath & "\" & session.sessionID & ".doc"
WordDoc.Close
WordApp.Quit
Set WordDoc = Nothing
Set WordApp = Nothing %> |
Note : MS Word doit être installé sur le serveur.
|
| auteur : Jérôme | Pour supprimer (ou ne pas garder) la page dans le cache du navigateur, on peut utiliser ceci : Response.Expires = -1
Response.AddHeader "Pragma", "no-cache"
Response.AddHeader "cache-control", "no-store" |
|
| auteur : Jérôme | Pour affecter une variable avec un objet, on utilise le mot-clé SET.
On applique donc ce principe à notre fonction :
function retourneObjet()
...
set retourneObjet = objet
end function |
Pour utiliser cet objet retourné par la fonction, on va utiliser une fois de plus le même principe
set objetretourne = retourneObjet() |
|
| auteur : Jérôme | Pour les créer :
<%response.cookies("identite")("nom") = "toto"
response.cookies("identite")("prenom") = "bonptitgars"
response.cookies("identite").expires = DateAdd("h", 1, time)%> |
Pour les récupérer :
<%nomcook = request.cookies("identite")("nom")%>
<input type="text" name="nom" value="<%=nomcook%>"> |
|
| auteur : Jérôme | Pour arrondir un nombre, il existe la fonction Round :
Round(expression[, numdecimalplaces]) |
Pour formatter un nombre, il existe la fonction FormatNumber :
FormatNumber(Expression [,NumDigitsAfterDecimal]) |
|
Consultez les autres F.A.Q's
|