Problème MessageCallback optional parameter System.Nullable


#1

Bonjour,
je suis entrain de développer un package pour récupérer les données envoyé sur thingspeak par mon ESP (capteur Température et Humidité).
Thingspeak me permet notamment de garder mon historique de relevé.

L’API REST fournit beaucoup de paramètres optionnelles pour configurer les données que l’on veut récupérer.

je déclare donc une fonction “MessageCallback” pour appeler l’API avec un certain nombre de paramètres optionnelles :

/// <summary>
/// To get a Channel Feed data
/// </summary>
/// <param name="id">The id.</param>
/// <param name="format">The format (Default JSON).</param>
/// <param name="api_key">Read API key for this specific channel.</param>
/// <param name="results">Number of entries to retrieve, 8000 max.</param>
/// <param name="days"> Number of 24-hour periods before now to include in feed, default 1./param>
/// <param name="start"> Start date in format YYYY-MM-DD%20HH:NN:SS.</param>
/// <param name="end"> End date in format YYYY-MM-DD%20HH:NN:SS.</param>
[...]
[MessageCallback]
public object ViewChannelFeed(int id, string format = "json", string api_key = null, int? results = null, int? days = null, DateTime? start = null, DateTime? end = null, [...])
{
   ...
}

Quand je me connecte à ma plateforme constellation pour tester, je vais dans Message Callbacks Explorer et cherche ma méthode, j’ai des champs “input” pour écrire les paramètres optionnelle de type string (api_key optional parameter (System.String)), mais pas pour les int (optional parameter (System.Nullable<System.Int32>)) ou les datetime (optional parameter (System.Nullable<System.DateTime>)), etc.

Je constate le même problème avec le package PushBullet et la méthode GetPushes.

J’ai l’impression que constellation de propose pas de champ “input” si un paramètre est du type System.Nullable.

PS :
Désolé, je n’ai plus les options de mise en forme de post (mise en forme du code, insérer une image, etc.), normal ?


#2

Hello,

Je viens de tester tout çà dans mon environnement de test !

Il s’agit d’une limitation de la Console Constellation qui n’interprète pas les paramètres de type Nullable pour lors de la génération de l’UI de test. Cependant le MC est correctement enregistré et exposé dans Constellation, juste que l’UI de test ne propose pas la saisie pour ce type de paramètre ! Je note çà dans la roadmap pour prendre en compte ce point dans les prochaines mises à jour.

Autre solution, qui d’ailleurs est plus “jolie” lorsque l’on a des méthodes avec pas mal de paramètre en entrée, optionnels ou non, c’est de créer une classe de “Request” qui contiendra les différents paramètres.

Par exemple :

[MessageCallback]
public object ViewChannelFeed(Request request)
{
    //  ...
}

public class Request
{
    public int Id { get; set; }
    public string Format { get; set; }
    public string APIKey { get; set; }
    public int? Result { get; set; }
    public int? Days { get; set; }
}

Dans ce cas l’UI de test dans le MC Explorer est générée et propose ce champs !

Bien à toi


#3

OK merci du retour et merci pour le conseil de la classe Request je vais aller tester !