Voyons un exemple avec des avantages plus évidents . L' ISO (International Standards Organization) définit un standard (ISO 8601) pour calculer la semaine de l'année dans laquelle tombe une certaine date. Selon ce standard, lundi marque le début de la semaine et la première semaine d'une année contient le premier
Engranger les bénéfices
jeudi de l’année. Il s’en suit que la première semaine de l’année est celle qui contient le 4 janvier. Ecrire le code qui appliquera ces règles peut sembler simple à première vue. Et bien, sachez qu’un tel code réserve quelques surprises. Le fait que les semaines puissent chevaucher deux années calendaires accentue la complexité. La figure 2A montre un programme RPG qui calcule la valeur semaine de l’année (week-of-year) pour une date arbitraire (en pratique, on coderait un programme de service pour opérer sur n’importe quelle date).
Le programme contient deux procédures, RtvDayOfWeek et RtvISOWeek. L’exemple précédent vous a déjà familiarisé avec la procédure RtvDayOfWeek (figure 2A, en A). La procédure RtvISOWeek utilise RtvDayOfWeek pour appliquer la norme ISO 8601. La procédure RtvISOWeek accepte une date comme entrée et renvoie une valeur qui indique le numéro de la semaine standard en ISO 8601 dans laquelle tombe la date. Les définitions de données de RtvISOWeek commencent avec une structure de données que la procédure utilise pour construire une date 4 janvier et continue avec des variables utilisées dans les calculs de la procédure. La procédure calcule d’abord la date du dernier jour de la semaine (Sunday) dans lequel tombe la date cible. Toutes les dates qui tombent dans la semaine se terminant par ce Sunday (dimanche) sont dans la même semaine de l’année. Souvenez-vous qu’une semaine peut franchir les limites de l’année calendaire. Ensuite, RtvISOWeek construit une date 4 janvier en utilisant l’année juste calculée. La procédure utilise cette date pour tirer la date du premier Monday (lundi) de cette année.
Ensuite, la procédure calcule la valeur semaine de l’année (week-of-year) et la renvoie à l’appelant. Elle calcule le nombre de jours (Days) entre la fin de la semaine cible (SundayDate) et le premier Monday de l’année calculée (MondayDate). Une valeur négative pour ce nombre de jours indique que la semaine se termine avant le premier Monday de l’année calculée. Dans ce cas, la procédure décrémente l’année (utilise l’année précédente) et recalcule le nombre de jours entre la fin de la semaine cible et ce nouveau premier Monday de l’année. La procédure divise ensuite ce nombre de jours écoulés par sept. Quand le résultat de cette division est non négatif, RtvISOWeek ajoute 1 pour tirer la valeur week-ofyear (ISOWeek). La procédure définit la valeur week-of-year à 53 quand le nombre de jours écoulés est une valeur négative. Finalement, RtvISOWeek renvoie la valeur week-of-year à son appelant. Vous conviendrez que ce code est confus et prédisposé à l’introduction d’erreurs. Voyons maintenant l’instruction SQL Select suivante qui extrait une date et sa valeur week-of-year ISO 8601 associée :
Select SomeDate, Week_ISO(SomeDate) From SomeFile
à‡a semble simple, n’est-ce pas ? Voyons comment vous pouvez utiliser le support de la V5R1 pour la fonction scalaire Week_ISO dans un programme RPG. La figure 2B présente un programme de fonction identique à l’exemple précédent, mais utilise Week_ISO pour remplacer la logique du calcul de la semaine de l’année dans laquelle tombe une date. Le programme définit simplement une variable hôte (ISOWeek) dans laquelle placer la valeur week-of-year, puis utilise une instruction SQL Set pour attribuer la valeur à cette variable. Les avantages des fonctions scalaires SQL devraient maintenant apparaître clairement. La méthode SQL utilise beaucoup moins de code que la méthode RPG seule, est bien plus facile à comprendre et prête peu le flanc aux erreurs.
Téléchargez cette ressource
Plan de sécurité Microsoft 365
Les attaquants savent comment prendre le contrôle de votre tenant Microsoft 365, et vous, savez-vous comment le reprendre en main ?
Les articles les plus consultés
- Partager vos images, vidéos, musique et imprimante avec le Groupe résidentiel
- Activer la mise en veille prolongée dans Windows 10
- N° 2 : Il faut supporter des langues multiples dans SharePoint Portal Server
- Cybersécurité Active Directory et les attaques de nouvelle génération
- Et si les clients n’avaient plus le choix ?
Les plus consultés sur iTPro.fr
- De l’adoption à la maîtrise : le véritable défi de l’IA en entreprise
- Microsoft Digital Defense Report 2026 : dix priorités pour bâtir une cyber résilience durable
- L’IA ne manque pas d’intelligence mais les entreprises manquent de préparation
- Raccourcis Réseau et Navigateur : le kit de Diagnostic des Professionnels IT
Articles les + lus
Continuer avec Exchange Server : quelles conséquences ?
Raccourcis Réseau et Navigateur : le kit de Diagnostic des Professionnels IT
Raccourcis PowerShell et Windows Terminal pour les Professionnels IT
Commandes Windows 11 : le Guide des Outils accessibles avec Win + R
Sécurité : une approche dans la durée avant tout
À la une de la chaîne Tech
- Continuer avec Exchange Server : quelles conséquences ?
- Raccourcis Réseau et Navigateur : le kit de Diagnostic des Professionnels IT
- Raccourcis PowerShell et Windows Terminal pour les Professionnels IT
- Commandes Windows 11 : le Guide des Outils accessibles avec Win + R
- Sécurité : une approche dans la durée avant tout
