Aller au contenu
Devenir partenaire
Documentation

La Logique : la référence des commandes.

La Logique est le langage des Data Apps. Un script est une suite de commandes, exécutées de haut en bas. Voici la syntaxe, les événements et chaque commande, avec ses paramètres et un exemple.

Les bases

Une commande s'écrit Nom(arguments) et rend toujours une valeur. Un argument peut être une valeur, un champ, une variable, une opération ou une autre commande. Les noms sont en anglais ; les textes entre guillemets restent dans votre langue.

Les éléments du langage

Texte"Devis urgent"
Nombre12.5
Booléentrue
Champ de la ligne courante$amount
Champ d'une ficheform.next
Variable de l'application@vat_rate
Liste["Draft", "Sent"]
CommandeRound($amount, 2)
Commentaire# Relance à 15 jours

Les opérateurs

Calcul$price * 1.2 + 5
Assembler du texte"Devis " & $number
Comparer$amount >= 1000
Combiner$amount > 0 and not IsEmpty($customer)
DatesToday() + 15

Quelques scripts

Valider un devis

Un bouton sur la fiche, visible quand le devis est en brouillon.

SetField("status", "Validated")SetField("validated_on", Today())SetField("validated_by", CurrentUser())Notify("Quote validated.")

Refuser un enregistrement

L'événement record.before_save : Fail annule l'enregistrement et affiche le message.

If(IsEmpty($customer), Fail("Choose a customer."))If($amount < 0, Fail("The amount cannot be negative."))

Calculer en direct

L'événement field.change sur la quantité.

SetField("total", Round($quantity * $unit_price * (1 + @vat_rate / 100), 2))

Garder le kanban dans l'ordre

L'événement card.before_move : la carte revient à sa place si la règle n'est pas respectée.

Switch(event.to,    "Signed", If(event.from <> "Sent", Fail("A quote must be sent before being signed.")),    "Lost", If(not HasRole("manager"), Fail("Only a manager can mark a quote as lost.")),)

Comment un script s'exécute

  • Les écritures sont appliquées à la fin, en une fois : si le script échoue, rien n'est écrit.
  • Un script ne donne aucun droit en plus : il agit avec ceux de la personne.
  • Le poste ODESA agit avec ses propres droits, même application fermée.
  • Un filtre décide si un bouton s'affiche ou si un événement se déclenche.

Les limites d'une exécution

  • 10 000 commandes exécutées
  • 2 000 millisecondes
  • 10 000 millisecondes sur le poste ODESA
  • 200 lignes écrites
  • 500 lignes rendues par une recherche

Les commandes

Contrôle

CancelTermine, montre le message et n'écrit rien.
DoExécute les commandes dans l'ordre et rend la valeur de la dernière. Set("nom", Do(…)) suivi de @nom ailleurs…
FailComme Cancel ; refuse en plus l'opération d'un événement « avant ». Dans une action : le formulaire se rouvre…
ForEachExécute la commande pour chaque élément de la liste, nommé comme indiqué ; rend le nombre de tours.
IfExécute seulement la branche choisie et rend sa valeur.
StopTermine l'exécution normalement.
SwitchExécute le résultat du premier cas égal à la valeur ; un dernier argument seul est le défaut.
TrySi la commande échoue, exécute la seconde ; « error » y contient {code, message, line}.

Variables

GetLa valeur d'une variable, ou le défaut si elle n'existe pas.
SetDonne une valeur à une variable d'exécution et rend cette valeur. Set("nom", Do(…)) suivi de @nom ailleurs…

Valeurs

AbsValeur absolue.
AddDaysAjoute n jours.
AddMonthsAjoute n mois (fin de mois respectée).
AppendLa liste avec un élément de plus à la fin (une liste vide si la première est vide).
AverageLa moyenne (rien si la liste est vide).
ContainsVrai si le texte contient la partie (sans casse ni accents), ou si la liste contient l'élément.
CountLe nombre d'éléments.
DayLe jour du mois.
EndOfMonthLe dernier jour du mois.
FirstLe premier élément, ou rien.
FormatDateLa date mise en forme (yyyy, MM, dd, HH, mm).
FormatNumberLe nombre mis en forme selon la langue.
InVrai si la valeur est dans la liste.
IsEmptyVrai si la valeur est vide (rien, texte vide, liste vide).
IsFormatVrai si la valeur a le bon format, clé de contrôle comprise quand il y en a une : email, url, phone, iban,…
IsNumberVrai si la valeur est un nombre ou un texte qui en est un.
LastLe dernier élément, ou rien.
LengthLongueur d'un texte, ou nombre d'éléments d'une liste.
LowerEn minuscules.
MatchesVrai si le texte correspond à l'expression régulière (ajoutez ^ et $ pour le texte entier).
MaxLe plus grand des nombres (ou d'une liste).
MinLe plus petit des nombres (ou d'une liste).
MonthLe mois (1 à 12).
NotEmptyVrai si la valeur n'est pas vide.
NowLa date et l'heure.
RenderLe modèle avec ses repères {…} remplacés par leur valeur.
ReplaceRemplace toutes les occurrences (texte littéral).
RoundArrondi (0 décimale par défaut).
SortLa liste triée, sur un champ pour une liste de lignes ("asc" par défaut ou "desc", vides en dernier). Sert à…
SplitDécoupe le texte : la liste des morceaux, ou le n-ième (à partir de 1).
StartOfMonthLe premier jour du mois.
StartsWithVrai si le texte commence ainsi (sans casse ni accents).
SumLa somme des nombres, ou d'un champ des lignes.
ToDateUne date depuis un texte (AAAA-MM-JJ ou JJ/MM/AAAA), ou depuis année, mois, jour.
ToNumberConvertit en nombre (« 12,5 » et « 12.5 » sont acceptés).
ToTextConvertit en texte.
TodayLa date du jour.
TrimSans espaces au début ni à la fin.
UpperEn majuscules.
WeekdayLe jour de la semaine (lundi = 1).
YearL'année.

Lecture des données

FindLes lignes d'une table qui remplissent toutes les conditions (champ, opérateur, valeur), 500 au plus.
FindOneLa première ligne qui remplit les conditions, ou rien.
FindSortedLes lignes qui remplissent les conditions, triées sur un champ ("asc" ou "desc", vides en dernier), puis les…
GetRowLa ligne de cet id (lig-…), ou rien.

Écriture

CreateRowCrée une ligne (couples champ, valeur) ; rend son id provisoire.
DeleteRowSupprime une ligne, après confirmation de la personne ; rend son id.
SetFieldModifie un champ de la ligne courante ; rend {field, before, after}.
UpdateRowModifie une ligne (couples champ, valeur) ; rend {id, changes}.

Personne

CurrentUserLa personne qui exécute (m-…).
HasRoleVrai si la personne a ce rôle dans la société (manager, admin, member).
InGroupVrai si la personne est dans ce groupe de travail.
UserNameLe nom affiché d'un membre.

Écran et saisie

AskOuvre un formulaire de l'application ; rend les réponses, ou rien si la personne annule.
ConfirmPose une question oui/non à la personne.
NotifyAffiche un message (toast) à la fin de l'exécution, si elle réussit.
OpenOuvre un noeud de l'application (et une ligne) à la fin de l'exécution.
RefreshRafraîchit l'affichage à la fin de l'exécution.

Fichiers

AttachFileVue Poste : copie le fichier du poste dans la GED du champ de la ligne (la ligne peut venir d'être créée).…
FileCountLe nombre de pièces du champ fichier.
FileExtensionL'extension d'une pièce ou d'un nom, en minuscules.
FileLinkLe lien qui ouvre la pièce dans l'application.
FileNameLe nom de la première pièce du champ fichier, ou rien.
GenerateDocumentGénère un document depuis un modèle de Mes modèles (nom ou id, texte écrit tel quel) pour la ligne, et le…
LinkFileRelie sans copie au champ de la ligne une pièce déjà rangée (pce-…, ou la valeur d'un champ fichier) ou un…
MoveFileVue Poste : déplace le fichier dans un sous-dossier de son dossier, à la fin, après les écritures. Rend le…
RowLinkLe lien qui ouvre la ligne courante dans l'application.
StraightenFileRedresse une photo de document déjà rangée (pce-…, ou la valeur d'un champ fichier) : remise à l'endroit,…

Externe

AgentL'étape agent (IA), traitée par le serveur d'IA relié à ODESA. Agent("reflexion", consigne) ;…
CallAppelle une fonction publiée par le serveur ODESA de l'application et cochée dans sa définition (onglet…
FunctionsLa liste des fonctions que l'application peut appeler (nom, description, paramètres, nature lecture ou…
SendMailEnvoie un courriel en texte simple par le service d'envoi d'ODESA, à la fin, avec les écritures (tout ou…

Courrier

AddMailNoteAjoute « quand, qui : texte » aux notes du message (champ Notes de la vue ProMail) et l'inscrit dans son…
AddMailTabPose un onglet sur le message (transposition de add_interface de AI Agent). viewer : text, markdown, html…
CreateMailboxCrée une boîte (un dossier) sur le serveur de messagerie, dans la boîte parent si elle est donnée, après les…
DeleteMailMet le message à la corbeille de sa boîte, après les écritures. Sans fiche : le message de l'événement…
DeleteMailboxSupprime une boîte du serveur de messagerie, après les écritures : ses messages vont d'abord dans la…
ForwardMailTransfère le message, avec ses pièces jointes, aux destinataires (10 au plus), avec un texte d'introduction…
MarkMailMarque le message reçu comme lu (par défaut) ou non lu. Sans fiche : le message de l'événement poste.mail ;…
MoveMailDéplace le message reçu dans un dossier de la boîte (IMAP, Gmail, Microsoft ; pas en POP). Sans fiche : le…
ReadMailLit le message en direct dans sa boîte : de, a, cc, objet, date, texte, pieces [{nom, taille, type}]. En…
RemoveMailTabRetire l'onglet de ce nom du message.
RenameMailboxRenomme une boîte du serveur de messagerie, après les écritures ; le nœud suit. Les boîtes à rôle (Réception,…
ReplyMailRépond à l'expéditeur du message reçu, dans le même fil, avec la citation. Envoyé par ODESA après les…
SaveMailAttachmentsEnregistre les pièces jointes du message reçu (événement poste.mail) dans le champ fichier de la ligne. Motif…
SyncMailRelève maintenant la boîte de la vue ProMail ouverte (un bouton) : les messages récents qui ne sont pas…