Fonctions définies par l'utilisateur

Les exemples de cette rubrique montrent comment étendre les expressions possibles dans des opérateurs StreamInsight LINQ à l'aide des appels de méthode de fonctions .NET existantes ou de fonctions définies par l'utilisateur.

En utilisant des fonctions définies par l'utilisateur, les expressions complexes sont possibles. Elles peuvent être utilisées partout où les expressions ordinaires se produisent : prédicats de filtre, projections, prédicats de jointure, etc. Toutefois, sachez que l'appel de méthode est évalué pour chaque événement. Une fonction définie par l'utilisateur doit être compilée dans un assembly qui est accessible par le serveur StreamInsight de la même façon que les adaptateurs sont fournis et utilisés au moment de l'exécution.

Les paramètres et la valeur de retour d'une fonction définie par l'utilisateur doivent être de l'un des types primitifs StreamInsight. En outre, les paramètres connexes à la culture sont acceptés pour les fonctions définies par l'utilisateur.

Cas d'usage

Les cas d'usage suivants illustrent les façons dont les fonctions définies par l'utilisateur peuvent être utilisées pour étendre les fonctionnalités des requêtes StreamInsight.

Filtres définis par l'utilisateur

Vous pouvez créer un opérateur de filtre défini par l'utilisateur qui analyse l'événement entrant et passe l'événement à la sortie ou exclut l'événement par filtrage. Un tel filtre défini par l'utilisateur peut analyser les données définies par l'utilisateur et peut inclure une logique complexe ou spéciale dans le processus de filtrage des événements.

Projets définis par l'utilisateur

De façon similaire aux filtres définis par l'utilisateur, une expression de projet définie par l'utilisateur peut produire une nouvelle valeur de charge utile, dont le calcul dépasse les moyens des fonctionnalités d'expression fournies dans StreamInsight.

Exemples

L'exemple suivant utilise un calcul défini par l'utilisateur dans une expression de filtre en appliquant la fonction MyFunc sur les champs de charge utile.

// Assuming the following input event type: 
public class MyPayload 
{
    public int id;
    public int a; 
    public int b; 
    public double value; 
}

    var filteredStream = from e in stream
                         where e.value > MyFunc(e.a * e.b)
                         select e;

Dans l'exemple suivant, la fonction définie par l'utilisateur MyFunctions.valThreshold est spécifiée dans le prédicat de filtre.

var filteredStream = from e in stream
                     where e.value < MyFunctions.valThreshold(e.id)
                     select e;

Dans l'exemple suivant, la fonction définie par l'utilisateur valThreshold accepte un seul paramètre et retourne une valeur.

    public class MyFunctions
    {
        public static int valThreshold(int id)
        {
            switch (id)
            {
                case 1:
                    return 15;
                case 2:
                    return 11;
                case 3:
                    return 18;
                default:
                    return 0;
            }
        }
    }

Une fonction de projet définie par l'utilisateur peut être utilisée comme toute autre expression dans une projection, comme indiqué dans l'exemple suivant.

var result = from e in stream
             select new { location = MyFunctions.Lookup(e.id) };

En plus d'accepter des types primitifs intégrés comme paramètres, les fonctions définies par l'utilisateur peuvent également accepter les informations connexes à la culture. Les types acceptés sont les suivants :

  • CultureInfo

  • StringComparison

  • CompareOptions

L'exemple suivant indique comment fournir les informations spécifiques à la culture à une fonction définie par l'utilisateur.

// Assuming the following input event type: 
public class MyPayload 
{
    public int id;
    public string name; 
}
var result = from e in stream
             select new { location = MyFunctions.Lookup2(
                 e.name,
                 new CultureInfo("en-US"),
                 CompareOptions.IgnoreCase)
             };

Les informations de culture peuvent également être récupérées d'un champ d'événement dans le flux d'entrée, à l'aide de la fonction d'assistance CepUtility.GetEventFieldCulture, comme indiqué dans l'exemple suivant.

var result = from e in stream
             select new { location = MyFunctions.Lookup2(
                 e.name,
                 CepUtility.GetEventFieldCulture(e.name),
                 CompareOptions.IgnoreCase)
             };

Voir aussi

Concepts

Utilisation de fenêtres d'événement

Agrégats et opérateurs définis par l'utilisateur