Champ de la fonction

  • Rversion finale: Yokohama
  • Mis à jour 30 janv. 2025
  • 12 minutes de lecture
  • Créez des champs de fonction et des scripts dans la 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.

    Avertissement :
    Un champ de fonction qui fait référence à un autre champ de fonction dans la fonction entraînera une erreur. Les champs de fonction ne contiennent pas de données et n’évaluent pas pendant l’exécution.

    Cas d'utilisation

    Vous souhaitez identifier tous les incidents ayant une description brève probablement inutile de moins de 10 caractères.

    Au lieu d’interroger tous les enregistrements pour déterminer quel enregistrement 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 le serveur de base de données effectue la transformation plutôt que le nœud d’application.

    Comparaison des champs de fonction et des 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.

    Comparaison des champs de fonction et des règles métier

    Utilisez des champs de fonction ou des scripts lorsque la logique métier repose sur une transformation simple d’un ou plusieurs champs existants. Les champs de fonction et les scripts vous permettent d’implémenter la logique métier sans stocker ni gérer le résultat d’une transformation.

    Champs de fonction par rapport aux filtres, chaînes de requête et Rhino

    Plutôt que d’appeler Rhino pour effectuer des transformations de chaîne, 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 maintenues.

    Limites du champ de fonction

    Comme les calculs de champ de fonction ne sont pas stockés dans la base de données, certaines opérations ne sont pas pertinentes.
    • 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. Ou 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 et 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, voir 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 pour l’utilisateur.
    • Les noms des fonctions de champ doivent être uniques.

    Définition des fonctions de la plateforme

    Les fonctions de la plateforme peuvent être définies de deux manières :
    1. 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 Construire la fonction pour effectuer une opération SQL.
      GlideRecord : addFunction(Fonction objet) Appliquer la fonction à un GlideRecord.
      GlideDBFunctionCaseBuilder - Global Élaborer des instructions de cas.
    2. Créez un champ contenant la définition de la fonction, comme indiqué dans l’exemple suivant.

      Définition du champ de fonction

      Cochez la case du champ Fonction sur le formulaire Entrée du dictionnaire [sys_dictionary]. Cette action spécifie que le champ exécute une fonction plutôt que de stocker une valeur.

    Opérations GlideFunction

    Les champs de fonction peuvent effectuer les opérations suivantes à l’aide de la syntaxe glidefunction :<operation> . Lorsque vous fournissez un champ comme argument, vous pouvez remonter pas à pas vers les champs associés. Par exemple, cmdb_ci.nom.
    Remarque :
    Le type de champ de fonction doit être compatible avec le type de retour de la fonction glide. Par exemple, nombre entier, longint, chaîne, etc. Si le type renvoyé ne peut pas être converti en type de dictionnaire, vous obtenez des exceptions.
    Tableau 2. Opérations de champ de fonction
    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 prend également des valeurs numériques pour l’une ou l’autre entrée. Placez les valeurs numériques entre guillemets simples ou doubles.

    glidefunction :ajouter(child_incidents, parent_incident)

    Renvoie 6 si l’incident a cinq incidents enfants et un incident parent.

    Types de retour possibles : Décimal, Nombre à virgule flottante, Nombre entier élevé, 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. glidefonction :fusion(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 que l’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 depuis la date de création jusqu’à la date de fermeture. Exemple de résultat : 10 jours, 8 heures 23 minutes 11 secondes

    Type de retour : Durée

    dayofweek() Prend deux arguments : un champ de date et une constante de « 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 l’entier est 1 et renvoie 3 si l’entier est 2.

    Type de retour : nombre entier

    distance_sphere() Prend deux emplacements et renvoie la distance entre eux en mètres.
    • glidefunction :distance_sphere('-0.189937', '51.473584', '80.206458', '25.767242')

      Renvoie la distance entre les deux ensembles de paires de longitude et de latitude.

    • Fonction de glissement :distance_sphere(u_location, « 80.206458 », « 25.767242 »)

      Renvoie la distance entre le champ de point géographique u_location et les coordonnées de longitude et de latitude.

    • Glidefonction :distance_sphere(location1, location2)

      Renvoie la distance entre les champs de points géographiques location1 et location2.

    • glidefunction :divide(distance_sphere(location1, '-0.189937', '51.473584'), '1000')

      Renvoie la distance entre le champ de point géographique location1 et Londres en kilomè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 prend également des valeurs numériques pour l’une ou l’autre entrée. Placez les valeurs numériques entre guillemets simples ou doubles.

    Glidefonction :diviser(u_num2,u_num1)

    Renvoie 5 si num2 = 10 et num1 = 2.

    Types de retour possibles : Décimal, Nombre à virgule flottante, Nombre entier élevé, Nombre entier

    get_latitude() Utilise n’importe quelle colonne de point géographique, champ numérique ou constante numérique et le convertit en une valeur de latitude valide comprise dans la plage [-90,90].
    • fonction de glissement :get_latitude(u_geo_point_field) Renvoie la valeur de latitude dans le u_geo_point_field.
    • Glidefonction :get_latitude(u_numerical_column)Renvoie la valeur de latitude dans la u_numerical_column comprise entre [-90,90].
    • glidefonction :get_latitude('305.767242') Renvoie une valeur de latitude de -54,232758.

    Type de retour : nombre à virgule flottante

    get_longitude() Utilise n’importe quelle colonne de point géographique, champ numérique ou constante numérique et le convertit en une valeur de longitude valide comprise dans la plage [-179,180].
    • fonction de glissement :get_longitude(u_geo_point_field) Renvoie la valeur de longitude dans le u_geo_point_field.
    • glidefonction :get_ longitude(u_numerical_column)Renvoie la valeur de longitude dans la u_numerical_column comprise entre [-179 180].
    • glidefonction :get_longitude('380.206458') Renvoie une valeur de longitude de 20,206458.

    Type de retour : nombre à virgule flottante

    greatest() Utilise deux valeurs ou plus comme entrée et renvoie la plus grande valeur de la liste d’arguments. Glidefonction :le plus grand(10,100,1000)

    Renvoie 1 000

    Types de retour numérique possibles : Décimal, Nombre à virgule flottante, Nombre entier élevé, Nombre entier

    Cette fonction fonctionne également avec les champs de date et de chaîne.

    moins() 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, Nombre entier élevé, 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. glidefonction :longueur(short_description)

    Renvoie 37 si 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 prend également des valeurs numériques pour l’une ou l’autre entrée. Placez les valeurs numériques entre guillemets simples ou doubles.

    glidefonction :multiplier(u_num1, u_num2)

    Renvoie 48 si num1 = 8 et num_2 = 6.

    Types de retour possibles : Décimal, Nombre à virgule flottante, Nombre entier élevé, Nombre entier

    position() Utilise deux champs de texte ou deux champs de texte et un nombre entier comme entrée. L’un ou les deux champs de texte peuvent également être des chaînes.
    1. Renvoie la position de la première occurrence de la chaîne du premier champ de texte dans le second.
    2. Si un nombre entier est spécifié, cette fonction renvoie la position du deuxième champ de texte après la position du nombre entier.

    Renvoie la valeur 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é).

    • glidefunction :position('e',short_description)

      Si la valeur du champ short_description est « Cet ordinateur effectue une mise à niveau », renvoie 12.

    • glidefunction :position('e',short_description,'14')

      Si la valeur du champ short_description est « Cet ordinateur effectue une mise à niveau », renvoie 19.

    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 de la seconde. glidefunction :sous-chaîne(short_description, '7', '2')

    Si la valeur du champ short_description est « Nous allons au magasin », renvoie « Go ».

    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 prend é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, Nombre entier élevé, Nombre entier

    to_geopoint() Utilise des colonnes de latitude et de longitude ou des valeurs numériques et les convertit en colonne de points géographiques.
    • Glidefonction :to_geopoint(u_long_column, u_lat_column)

      Convertit les colonnes de latitude et de longitude en une seule colonne geo_point.

    • glidefunction :to_geopoint('80.206458','25.767242')

      Renvoie un champ geo_point avec les coordonnées « (80.206458, 25.767242) ».

    Type de retour : point géographique

    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 de jour de la semaine. Testez dans une instance de sous-production avant de déployer sur une instance de production.

    Avant de commencer

    Rôle requis : personalize_dictionary ou administrateur.

    Procédure

    1. Accédez à la Tout > Définition du système > Dictionnaire.
    2. Cliquez sur Nouveau.
    3. Sélectionnez le champ Fonction.
    4. Renseignez ces champs du formulaire.
      Tableau 3. Champs pour les champs de fonction
      Champ Description
      Table Table à laquelle le champ de fonction est ajouté.
      Type Espèce le type de champ : chaîne, numéro, date, etc.
      Étiquette de colonne Définit l’étiquette de la colonne.
      Nom de colonne Définit le nom de la colonne. Créé automatiquement en fonction de l’étiquette de colonne.
      Longueur max. Définit la longueur maximale de la valeur de retour.
      Champ de la fonction Si cette option est sélectionnée, un champ est créé 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 de jour de la semaine.

      Une fois le nouvel enregistrement de fonction enregistré, vous ne pouvez pas décocher la case pour faire du champ un champ normal.

      Définition de la fonction Définit la fonction que le champ remplit.

      Commence par glidefunction :, suivi de l’opération à effectuer (par exemple, concat), suivi des paramètres de fonction. Les constantes doivent être placées entre guillemets simples.

      Par exemple, la définition de fonction suivante crée un champ qui affiche la brève description, suivie d’un espace, puis du nom de l’appelant :

      glidefunction :concat(short_description, ' ', caller_id.nom)

      Remarque :
      Les paramètres de fonction prennent en charge la remontée pas à pas. Consultez Dot-walking to data in related tables.
    5. Cliquez sur Envoyer.
      Vous revenez à la table Entrée du dictionnaire [sys_dictionary].
    6. Accédez à la table à laquelle vous avez ajouté le champ de fonction.
    7. Ajoutez le champ de fonction à la liste.

    Résultats

    Utilisez le champ de fonction comme n’importe quel autre champ. Par exemple, ajoutez-le à un formulaire, utilisez-le dans un filtre ou utilisez-le dans le générateur de conditions.

    Si la définition de la fonction n’est pas valide, vous recevez le message au lieu de la valeur attendue Fonction non valide si le champ de fonction est un champ de type chaîne ou une valeur vide pour d’autres types de champs.