Champ de la fonction
Créez des champs de fonction et des scripts dans Now Platform pour effectuer des transformations et des calculs de base de données courants.
Les champs normaux stockent une valeur dans la base de données. Au lieu de stocker des données, un champ de fonction affiche les résultats d’une requête de base de données. Les champs de fonction n’ont pas de colonne de base de données associée. Au lieu de cela, les champs de fonction génèrent une valeur basée sur des calculs simples d’autres champs et constantes. Ils peuvent être utilisés comme n’importe quel autre champ du système : dans les formulaires, les listes, les conditions de requête, les rapports, etc.
Cas d'utilisation
Vous souhaitez identifier tous les incidents avec une description brève probablement inutile de moins de 10 caractères.Au lieu d’interroger tous les enregistrements pour déterminer lequel répond à un critère donné, créez un champ de fonction ou un script de fonction qui récupère uniquement les enregistrements qui répondent aux critères.
Pour un calcul simple, il est préférable d’utiliser un champ de fonction ou un script de fonction plutôt que de stocker une valeur calculée. La valeur est toujours calculée lors de la récupération. Un autre avantage de l’utilisation des champs de fonction est que c’est le serveur de base de données qui effectue la transformation à la place du nœud d’application.
Champs de fonction et champs calculés
Les valeurs des champs calculés sont stockées dans la base de données. Les valeurs des champs de fonction ou des scripts de fonction ne sont pas stockées dans la base de données, mais sont calculées au moment de la récupération. Les valeurs des champs de fonction sont toujours à jour.
Champs de fonction et règles métier
Utilisez des champs de fonction ou des scripts lorsque la logique métier est basée sur une transformation simple d’un ou plusieurs champs existants. Les champs de fonction et les scripts vous permettent d’implémenter une logique métier sans stocker et conserver le résultat d’une transformation.
Champs de fonction par rapport aux filtres, aux chaînes de requête et à Rhino
Plutôt que d’appeler Rhino pour effectuer des transformations de chaînes, vous pouvez utiliser un champ de fonction ou un script de fonction pour effectuer les transformations à votre place. Les champs de fonction et les scripts de fonction sont plus efficaces et permettent d’obtenir des valeurs à jour qui n’ont pas besoin d’être stockées ou gérées.
Limites des champs de fonction
- Les champs de fonction ne peuvent pas être directement audités ou indexés.Remarque :Pour indexer un champ de fonction comme s’il s’agissait d’un champ normal, assurez-vous que les champs individuels utilisés par la fonction sont indexés. Sinon, pour de meilleures performances, assurez-vous qu’il existe un index composite incluant tous les champs utilisés dans la fonction.
- Les champs de fonction ne peuvent pas être chiffrés, car une valeur de champ de fonction n’est jamais stockée dans la base de données.
- Les champs de fonction ne peuvent pas être convertis en champs normaux ou vice versa.
- Les champs de fonction que vous créez dans l’interface utilisateur de génération de rapports ne prennent pas en charge la remontée pas à pas. Pour plus d’informations, reportez-vous à la section Configurer les champs de fonction dans Reporting.
- La sécurité est évaluée sur les composants de la fonction et sur la valeur calculée du champ. Lorsqu’elles sont utilisées dans des visualisations, les sections qui contiennent des informations que l’utilisateur n’est pas autorisé à voir sont masquées à l’utilisateur.
- Les noms des fonctions de champ doivent être uniques.
Définir les fonctions de la plateforme
- Utilisez les interfaces de programmation d’application (API) suivantes pour créer et utiliser des fonctions dans un script.
Tableau 1. API de fonction API Description GlideDBFunctionBuilder inclus dans le champ d’application Construisez la fonction pour effectuer une opération SQL. GlideRecord : addFunction(fonction d’objet) Appliquez la fonction à un objet GlideRecord. GlideDBFunctionCaseBuilder - Global Créer des instructions de ticket. - Créez un champ contenant la définition de la fonction, comme illustré dans l’exemple suivant.
Cochez la case Champ Fonction dans le formulaire Entrée de dictionnaire [sys_dictionary]. Cette action spécifie que le champ exécute une fonction plutôt que de stocker une valeur.
Opérations GlideFunction
glidefunction :<operation> . Lorsque vous fournissez un champ comme argument, vous pouvez remonter pas à pas vers les champs connexes. Par exemple, cmdb_ci.name.| Opération | Description | Exemple |
|---|---|---|
| ajouter() | Utilise deux champs de nombre comme entrée, les ajoute et renvoie les résultats comme valeur de champ. Cette fonction accepte également des valeurs numériques pour l’une ou l’autre entrée. Placez les valeurs numériques entre guillemets simples ou doubles. |
glidefunction :add(child_incidents, parent_incident) Renvoie la valeur 6 si l’incident comporte cinq incidents enfants et un incident parent. Types de retour possibles : Décimal, Nombre à virgule flottante, Grand nombre entier, Nombre entier |
| coalesce() | Utilise un nombre quelconque de champs séparés par des virgules comme entrée et renvoie la première valeur non vide. | glidefunction :coalesce(closed_at, resolved_at, sys_updated_on) Si la valeur de closed_at est vide, la fonction renvoie la valeur de resolved_at. Si la valeur de resolved_at est également vide, la fonction renvoie la valeur de sys_updated_on. Type de retour : texte |
| concat() | Utilise un nombre quelconque de champs et de constantes séparés par des virgules comme entrée, concatène l'entrée et renvoie une seule chaîne comme valeur de champ. | glidefunction :concat(incident_number, '/', short_description) Renvoie « INC0001 / Mon client a besoin d’un nouvel ordinateur portable » si la valeur du champ numérique est « INC0001 » et le short_description est « Mon client a besoin d’un nouvel ordinateur portable ». Type de retour : texte |
| datediff() | Utilise deux champs de date/heure comme entrée, calcule la différence entre les dates, en jours, en minutes et en secondes, et renvoie les résultats sous forme de valeur de champ de durée. | glidefunction :datediff(closed_at, sys_created_on) Renvoie la durée d’un incident de la date de création à la date de fermeture. Exemple de résultat : 10 jours, 8 heures 23 minutes 11 secondes Type de retour : Durée |
| jourdesemaine() | Utilise deux arguments : un champ de date et une constante correspondant à « 1 » (la semaine commence le dimanche) ou « 2 » (la semaine commence le lundi). Renvoie les résultats sous forme de valeur entière qui représente le jour de la semaine. La fonction dayofweek() utilise les dates UTC, mais ajuste les valeurs de comparaison en fonction du fuseau horaire de l’instance. |
glidefunction :dayofweek(resolved_at, '1'). Si resolved_at se produit un mercredi, renvoie 4 si le nombre entier est 1 et renvoie 3 si le nombre entier est 2. Type de retour : nombre entier |
| distance_sphere() | Prend deux emplacements et renvoie la distance entre eux en mètres. |
Type de retour : Décimal |
| diviser() | Utilise deux champs de nombre comme entrée, divise le premier par le second et renvoie les résultats comme valeur de champ. Cette fonction accepte également des valeurs numériques pour l’une ou l’autre entrée. Placez les valeurs numériques entre guillemets simples ou doubles. |
glidefunction :divide(u_num2,u_num1) Renvoie 5 si num2 = 10 et num1 = 2. Types de retour possibles : Décimal, Nombre à virgule flottante, Grand nombre entier, Nombre entier |
| le plus grand() | Utilise deux valeurs ou plus comme entrée et renvoie la plus grande valeur de la liste d’arguments. | GlideFunction : le plus grand(10,100,1000) Renvoie 1000 Types de retour numérique possibles : Décimal, Nombre à virgule flottante, Grand nombre entier, Nombre entier Cette fonction fonctionne également avec les champs de date et de chaîne. |
| least() | Utilise deux valeurs ou plus comme entrée et renvoie la valeur la plus basse de la liste des arguments. | glidefunction :least(10,100,1000) Renvoie 10 Types de retour numérique possibles : Décimal, Nombre à virgule flottante, Grand nombre entier, Nombre entier Cette fonction fonctionne également avec les champs de date et de chaîne. |
| longueur() | Utilise un champ de chaîne comme entrée, calcule la longueur du champ en caractères et renvoie les résultats sous forme de valeur de champ. | glidefunction :longueur(short_description) Renvoie 37 if short_description = « Cette application effectue un test ». Type de retour : nombre entier |
| multiply() | Utilise deux champs de nombre comme entrée, effectue la multiplication et renvoie les résultats comme valeur de champ. Cette fonction accepte également des valeurs numériques pour l’une ou l’autre entrée. Placez les valeurs numériques entre guillemets simples ou doubles. |
glidefunction :multiplier(u_num1, u_num2) Renvoie 48 si num1 = 8 et num_2 = 6. Types de retour possibles : Décimal, Nombre à virgule flottante, Grand nombre entier, Nombre entier |
| position() | Utilise deux champs de texte ou deux champs de texte et un nombre entier comme entrée. L’un des champs de texte ou les deux peuvent également être des chaînes.
Renvoie 0 si le premier champ de texte n’est pas présent dans le second (après la position du nombre entier si spécifié). |
Type de retour : nombre entier |
| sous-chaîne() | Utilise un champ de texte et deux nombres entiers comme entrée. Renvoie la première instance d’une chaîne qui commence à la position du premier nombre entier et est de la longueur du second. | glidefunction :substring(short_description, '7', '2') Si la valeur du champ short_description est « Nous allons au magasin », renvoie « Aller ». Type de retour : texte |
| soustraire() | Utilise deux champs de nombre comme entrée, soustrait le second du premier et renvoie le résultat comme valeur de champ. Cette fonction accepte également des valeurs numériques pour l’une ou l’autre entrée. Placez les valeurs numériques entre guillemets simples ou doubles. |
glidefunction :soustraire(u_num1, u_num2) Renvoie 2 si num1 = 8 et num_2 = 6. Types de retour possibles : Décimal, Nombre à virgule flottante, Grand nombre entier, Nombre entier |
Créer un champ de fonction pour exécuter des fonctions de base de données
Créez un champ qui affiche les résultats d’une fonction de base de données, telle qu’une opération mathématique, un calcul de longueur de champ ou un calcul du jour de la semaine. Testez dans une instance de sous-production avant le déploiement sur une instance de production.
Avant de commencer
Procédure
Résultats
Si la définition de la fonction n’est pas valide, au lieu de la valeur attendue, vous recevez le message Fonction non valide si le champ de fonction est un champ de type chaîne ou une valeur vide pour d’autres types de champ.