UDFMethod
. Par la suite, pour tous les appels des fonctions, ColdFusion va
utiliser la réflexion (l'introspection) et les méta-informations pour exécuter
les fonctions. Par conséquent, les appels des fonctions risquent de causer des
problèmes de performances, mais ColdFusion "remédie" à ce problème en
instanciant les classes des fonctions une seule fois au chargement de la page
(ou du CFC) et affectant les instances à des variables statiques.ARGUMENTS
chaque fois qu'on lit ou modifie ces variables.ascii
» est scopée avec le scope ARGUMENTS
(lorsqu'elle est utilisée, en lecture ou modification, dans le code de la fonction).
Donc si l'appel de la fonction ne précise pas une valeur pour ce paramètre (<cfset getChar() />
),
alors ColdFusion va générer l'erreur suivante « VARIABLE ASCII IS UNDEFINED. ».ascii
» n'était pas scopée avec le scope ARGUMENTS
(lorsqu'elle est utilisée, en lecture ou modification, dans le code de la fonction),
et que l'appel de la fonction ne précise pas une valeur pour ce paramètre (<cfset getChar() />
),
alors ColdFusion va chercher s'il y a une variable avec le même nom définie dans un scope parent,
et si trouvée, il va juste utiliser cette variable, sinon ColdFusion va générer l'erreur suivante « VARIABLE ASCII IS UNDEFINED. ».
L'un ou l'autre comportement, la lecture du code ne permet pas de connaitre si c'est le comportement voulu par le développeur.chrValue
»
n'est pas scopée, et donc il y a deux cas qui peuvent arriver :ascii
» n'est pas une valeur numérique valide,
ColdFusion va sauter à l'instruction suivante « <cfreturn chrValue />
».
ColdFusion doit vérifier si cette variable a été définie à l'intérieur de la fonction ou dans l'un des scopes accessibles par le code de la fonction (exemple, le scope VARIABLES)
et si oui, il va juste utiliser cette variable, sinon ColdFusion va générer l'erreur suivante « VARIABLE CHRVALUE IS UNDEFINED. ».
L'un ou l'autre comportement, la lecture du code ne permet pas de connaitre si c'est le comportement voulu par le développeur.ascii
» est une valeur numérique valide,
ColdFusion va sauter à l'instruction suivante « <cfset chrValue = chr(val(ARGUMENTS.ascii)) />
».
Et si la variable « chrValue
» a été définie dans l'un des scopes accessibles par le code de la fonction (exemple, le scope VARIABLES) alors sa valeur sera écrasée.
Là aussi, la lecture du code ne permet pas de connaitre si ce comportement était voulu par le développeur.cfargument
défini un attribut required
qui précise si un paramètre est requis ou pas lors de l'appel de la fonction.
Attribut |
Requis |
Description |
---|---|---|
name |
|
Nom
de la fonction |
description |
Description
de la fonction |
|
displayName |
Nom
explicite de la fonction |
|
hint |
Information
supplémentaire sur la fonction |
|
output |
Cet attribut permet de préciser si la fonction peut générer du HTML. Voici les valeurs possibles pour cet attribut :
|
Attribut |
Requis |
Description |
---|---|---|
access |
(valeur par défaut : public) L'attribut « access » définit la propriété d'accessibilité des fonctions ; autrement dit il permet de préciser si une fonction est visible à l'extérieur du CFC ou non. Voici les valeurs possibles pour cet attribut :
|
|
returnType | Uniquement pour les services web |
(valeur par défaut : ANY) Cet attribut permet de préciser le type de la valeur retournée par la fonction. Si la valeur spécifiée pour cet attribut ne correspond pas à un des types reconnus par ColdFusion, alors ColdFusion considère que c'est un nom d'un CFC et donc à l'exécution, ColdFusion va générer une erreur si la valeur retournée ne correspond pas au nom d'un objet CFC défini dans l'un des scopes accessibles par le code de la fonction. ColdFusion génère une erreur si la valeur ne retourne aucune valeur alors que la valeur de cet attribut est « numeric ». ColdFusion ne génère pas d'erreur pour les autres types. |
returnformat |
Cet
attribut permet de préciser le format de données retournées par la fonction
en cas d'un appel distant. Cet attribut n'aucun effet pour les appels locaux. Voici les valeurs possibles pour cet attribut :
Par défaut, si cet attribut est omis, ColdFusion sérialise les valeurs (types simples ou complexes excepté XML) à retourner en format WDDX, et les retourne en format texte XML. Cette valeur peut être surchargée si la fonction est appelée, par exemple, par un tag CFHttp qui redéfinie la valeur de « returnformat » avec l'attribut CFHttpparam. |
|
secureJSON |
Cet attribut permet de préciser s'il faut ajouter
un préfixe de sécurité au début des valeurs retournées en format JSON par la
fonction en réponse à un appel à distance. Par défaut, cet attribut prend :
|
|
roles |
Cet attribut permet de préciser les droits d'exécution de la fonction. La valeur de cet attribut est une liste de « roles » (séparés par une virgule) qui donnent droit à invoquer la méthode. Si un utilisateur a un « role » qui match avec un des « roles » spécifiés dans cette attribut, alors il sera autorisé à exécuter la méthode. Par défaut, si cet attribut est omis, tous les utilisateurs peuvent exécuter la méthode. |
|
verifyClient |
(valeur par défaut : no) Cet attribut permet de préciser si un jeton (TOKEN) de sécurité encrypté est nécessaire pour les appels distants de la fonction. Cet attribut doit être utilisé uniquement pour les appels AJAX. |
cfscript
, il faut utiliser les métadonnées pour définir des valeurs aux attributs de la fonction. Voici un exemple d'utilisation des métadonnées :Type de données | Description |
---|---|
void | Ne retourne aucune valeur. |
any | La valeur retournée peut être de n'importe quel type. |
boolean | Valeur booléenne. |
numeric | Valeur numérique (entière et réel). |
string | Chaîne de caractères. |
date | Date. |
array | Tableau. |
struct | Structure. |
query | Objet requête. |
guid | La valeur retournée doit être un GUID dont le format est xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Avec x est un caractère qui représente une valeur hexadécimale valide [0-9A-F]. |
uuid | La valeur retournée doit être un UUID dont le format est xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx. Avec x est un caractère qui représente une valeur hexadécimale valide [0-9A-F]. |
component | La valeur retournée doit être un CFC. |
xml | La valeur retournée doit être un objet XML CFML ou une chaîne de caractères XML. |
binary | Valeur binaire. |
CFC_NAME | Une chaîne de caractères qui correspond à un nom de CFC. |
ARGUMENTS.myArg1
) ; je recommande d'utiliser cette syntaxe, encore une fois, pour rendre le code lisible et facilement compréhensible par les autres développeurs et aussi pour éviter d'utiliser accidentellement une autre variable ;Attribut | Requis | Description |
---|---|---|
name | Nom de l'argument. | |
displayName |
- Valeur par défaut : Nom de l'argument. Nom explicite de l'argument. |
|
hint | Information supplémentaire sur l'argument. |
Attribut | Requis | Description |
---|---|---|
required |
- Valeurs possibles : [no|yes] - Valeur par défaut : no |
|
type |
- Valeurs possibles : Voir la liste en bas - Valeur par défaut : any Type de l'argument. |
|
default | Si l'argument est omis, elle sera créer et initialiser par la valeur de cet attribut. |
Type de données | Description |
---|---|
any | N'importe quel type. |
boolean | Valeur booléenne. |
numeric | Valeur numérique (entière et réel). |
string | Chaîne de caractères. |
variableName |
La valeur de l'argument doit être une chaîne de caractères formatée selon les conventions de ColdFusion pour nommer des variables. Utile si on veut créer des variables avec les noms passés en argument à la fonction. |
date | Date. |
array | Tableau. |
struct | Structure. |
query | Objet requête. |
guid | L'argument doit être un GUID dont le format est xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Avec x est un caractère qui représente une valeur hexadécimale valide [0-9A-F]. |
uuid | L'argument doit être un UUID dont le format est xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx. Avec x est un caractère qui représente une valeur hexadécimale valide [0-9A-F]. |
component | L'argument doit être un CFC. |
xml | L'argument doit être un objet XML CFML ou une chaîne de caractères XML. |
binary | Valeur binaire. |
CFC_NAME | Une chaîne de caractères qui correspond à un nom de CFC. |