Description
La fonction Switch évalue les expressions de gauche à droite, puis renvoie la valeur associée à la première expression qui a la valeur True (vrai).
Arguments
expression1, expression2 et ainsi de suite sont des expressions booléennes.
valeur1, valeur2 et ainsi de suite sont les valeurs qui peuvent être renvoyées. Toutes les valeurs doivent être du même type. Une valeur peut être de type "simple" (Nombre, Devise, Chaîne, Booléen, Date, Heure ou Date/heure) ou de type "plage" (plage de nombres, plage de devises, plage de chaînes, plage de dates, plage d'heures ou plage de valeurs de type date/heure), mais non un tableau.
Résultat
L'une des valeurs de la liste valeur1, valeur2, etc. Le type de la valeur renvoyée est le même que le type des autres valeurs.
Action
La liste des arguments de la fonction Switch se compose de paires d'expressions et de valeurs. La fonction Switch évalue les expressions de gauche à droite, puis renvoie la valeur associée à la première expression qui a la valeur True (vrai).
Par exemple, si "expression1" a la valeur True (vrai), Switch renvoie "valeur1". Si "expression1" a la valeur False (faux) et "expression2" la valeur True (vrai), Switch renvoie "valeur2". Si "expression1" et "expression2" ont la valeur False (faux) et "expression3" la valeur True (vrai), Switch renvoie "valeur3".
Si toutes les expressions ont la valeur False (faux), Switch renvoie une valeur par défaut. (La valeur par défaut renvoyée dépend du type de valeur figurant dans la liste. Par exemple, si les valeurs sont de type nombre, la valeur par défaut est 0 ; si les valeurs sont de type chaîne, la valeur par défaut est la chaîne vide ("")).
Exemple d'utilisation
Dans certains cas, la fonction Switch peut remplacer les opérateurs If-Then-Else et les expressions Select (syntaxe Crystal).
La fonction Switch peut par exemple être préférable à une structure de commande lors de la création de formules de sélection d'enregistrements qui doivent être transmises au serveur de la base de données. Voir les exemples ci-dessous. Pour obtenir une explication des techniques en question, voir "Utilisation de formules améliorées de sélection d'enregistrements" dans le chapitre Conception de rapports Web optimisés du Guide de l'utilisateur de Crystal Reports.
Exemples
Supposons que votre société souhaite classer les commandes en fonction de leur importance, soit "grande", "moyenne" ou "petite".
Switch ({Orders.Order Amount} > 5000, "large",
{Orders.Order Amount} > 1000, "medium",
True, "small")Si {Commandes.Montant commande} est supérieur à 5 000 €, la formule renvoie la chaîne "grande". Si {Commandes.Montant commande} est supérieur à 1 000 €, la formule renvoie la chaîne "moyenne". Sinon, la formule renvoie "petite".
L'exemple ci-dessous explique comment utiliser la fonction Switch pour créer une formule de sélection d'enregistrements pouvant être empilée sur le serveur de la base de données. La création de cette formule à l'aide des opérateurs If-Then-Else ou des expressions Select (syntaxe Crystal) empêche que cette tâche fasse l'objet d'un empilage sur le serveur.
Pour obtenir une explication des techniques en question, voir "Utilisation de formules améliorées de sélection d'enregistrements" dans le chapitre Conception de rapports Web optimisés du Guide de l'utilisateur de Crystal Reports.
Exemple de rapport
Une version plus complète de l'exemple comprenant 27 conditions Switch est fournie avec l'exemple de rapport "Record Selection on DateRange.rpt".
Les exemples de rapports se trouvent dans le répertoire Crystal Reports, sous \Samples\xx\Reports.
Lorsque vous visualisez le rapport, vous fournissez un paramètre date de commande de référence {?date de référence} et une condition de plage {?condition de référence} pour indiquer une plage de dates incluant la date de commande de référence. Le rapport est ensuite prévisualisé : il contient uniquement les enregistrements dont les dates de commande correspondent à la plage spécifiée.
La procédure de sélection des enregistrements est effectuée sur le serveur de base de données. Ainsi, la fonction Switch et ses arguments peuvent être évalués avant d'accéder à la base de données.
Remarque :
Dans cet example de rapport, la fonction Switch renvoie une plage de dates.
Les mises en retrait de certaines lignes de code présentent l'appel de fonction Switch de manière semblable à une structure de commande, ce qui en facilite la lecture.
La dernière expression est la valeur booléenne True (vrai).
L'appel de fonction Switch fournit une valeur par défaut explicite. En effet, si aucune des autres expressions n'est égale à True, la dernière expression est automatiquement la valeur True, et par conséquent la plage de dates CDate (1899, 12, 30) To CDate(1899, 12, 30) est renvoyée.
//Crystal syntax record selection formula
{Orders.Order Date} in
Switch
(
{?reference condition} = "Aged 0 to 30 days",
({?reference date} - 30) To {?reference date},
{?reference condition} = "Aged 31 to 60 days",
({?reference date} - 60) To ({?reference date} - 31),
{?reference condition} = "Aged 61 to 90 days",
({?reference date} - 90) To ({?reference date} - 61),
True, // provide default handling and specify a valid range
CDate(1899, 12, 30) To CDate(1899, 12, 30)
)
Commentaires
Chaque argument de la fonction Switch est évalué avant que le résultat ne soit renvoyé. Par conséquent, il est conseillé d'être prudent lors de l'utilisation de la fonction Switch.
Exemple : si l'une des valeurs implique une division par zéro, une erreur sera générée même si cette valeur n'est pas celle qui est renvoyée par la fonction Switch.