parametres fcultatifs d'un messageCallBack

Bonjour,

J’aimerai faire des messageCallbacks avec des paramètres facultatifs mais le sujet sur les messagesCallback n’en parle pas. Existe-t-il un moyen (dans le décorateur ?) de dire à constellation que certains paramètres sont facultatifs ou doit-on comme en java faire plusieurs fonctions (avec des arguments de décorateur ‘Key’ différents) ?

Merci, d’avance.

Hello Ed,

Très bonne remarque !

Alors pour ton info, dans la prochaine version de la lib Constellation il y a des nouveautés à ce sujet justement !

On sera capable d’utiliser les paramètres optionnels C# dans les MC.

On gros on pourra écrire ce genre de chose :

 [MessageCallback()]
 void TestMultiOptionals(string input, string demo = "seb", int a = 42)
 {
     PackageHost.WriteInfo("input = " + input);
     PackageHost.WriteInfo("demo = " + demo);
     PackageHost.WriteInfo("a = " + a);
 }

 [MessageCallback()]
 void TestOptional1param(string demo = "seb")
 {
     PackageHost.WriteInfo("input = " + demo);
 }

 [MessageCallback()]
 void TestOptional1ParamComplex(Papa papa = null)
 {
     PackageHost.WriteInfo("Avce optionnal un param object = " + (papa?.MyProperty.ToString() ?? "vide"));
 }

 [MessageCallback()]
 void TestOptional2Params(Papa papa, int a = 123)
 {
     PackageHost.WriteInfo($"a= {a} Avce optionnal un param object = " + (papa?.MyProperty.ToString() ?? "vide"))
 }

A noter que sur les types complexes, pas besoin de mettre la valeur optionnelle à nulle, elle est par défaut à nulle !

Bon maintenant cette évolution est dispo à partir de la lib 1.8.0.16159 qui est pas encore sortie :slight_smile: Elle sera livrée avec la release 1.8.1 je pense qui comprendra entre autre une grosse évolution de la console (fin Juin, début Juillet au plus tard).

Donc en attendant tu as aussi un autre moyen c’est d’utiliser un seul paramètre qui est une classe contenant des propriétés.

Par exemple, imagines le MC suivant :

[MessageCallback]
public void SendMail(SendMailRequest request)
{
    PackageHost.WriteInfo("SendMail {0} {1} {2} {3}", request.mMailInfo.From, request.Subject, request.HTMLBody);
}

Avec la ou les classes :

public class SendMailRequest
{
    public MailInfo mMailInfo { get; set; }
    public string Subject { get; set; }
    public string HTMLBody { get; set; }
}

public class MailInfo
{
    public string From { get; set; }
    public string FromName { get; set; }
    public string[] To { get; set; }
    public string[] ToName { get; set; }
}

Ainsi dans ton code tu peux facilement savoir si les propriétés sont vides ou non. Il n’y a pas de valeur “par defaut” comme on l’aurait de manière implicite avec les params optionnels de C# mais tu peux facilement savoir si les valeurs sont la ou pas !

A+

D’accord, merci.

Pour info, comme indiqué dans ce post, une nouvelle version de la lib Constellation (1.8.0.16166) est disponible sur le repository Nuget.

Cette nouvelle version embarque entre autre la gestion des paramètres optionnelles dans les MessageCallbacks comme présenté dans mon post ci-dessus.

N’hésitez pas à mettre à jour le package pour pouvoir exploiter cette nouvelle fonctionnalité!