
# Champs bouton

Un champ `button` affiche un contrôle interactif sur un enregistrement. Il ne stocke rien. Il accepte par ailleurs les [propriétés de base des champs](/fr/docs/tables-overview#proprits-de-base-des-champs).

| Propriété     | Description                                                                                                            |
| ------------- | ---------------------------------------------------------------------------------------------------------------------- |
| `label`       | Texte du bouton.                                                                                                       |
| `action`      | Ce que fait le bouton : `url` ouvre un lien côté client, `automation` exécute une automatisation sur l'enregistrement. |
| `url`         | URL à ouvrir, lorsque `action` vaut `url`.                                                                             |
| `automation`  | Nom de l'automatisation à déclencher, lorsque `action` vaut `automation`.                                              |
| `visibleWhen` | N'affiche le bouton que sur les enregistrements dont le champ nommé satisfait la condition. Omis : partout.            |

```yaml
- {
    id: 4,
    name: approve,
    type: button,
    label: Approve,
    action: automation,
    automation: approve_request,
  }
```

## `action` est un vocabulaire fermé à deux valeurs

`action: url` exige `url` ; `action: automation` exige `automation`. Toute autre valeur — chaîne vide comprise — est refusée au démarrage.

Cette rigueur n'est pas de la coquetterie. `action` est la clé de dispatch sur laquelle s'appuient à la fois le rendu et le point d'entrée d'invocation : une valeur qu'aucun des deux ne reconnaît afficherait un bouton qui ne fait silencieusement rien une fois pressé. Refuser la configuration est le seul dénouement qui prévienne quelqu'un.

L'automatisation qu'un bouton nomme doit porter un [déclencheur `manual`](/fr/docs/trigger-manual-chained) pour être invocable ainsi. Une automatisation déclenchée uniquement par un événement d'enregistrement ne peut pas être lancée par une personne.

## N'afficher un bouton que sur certains enregistrements

`visibleWhen` nomme un champ de l'enregistrement et applique à sa valeur le vocabulaire de conditions partagé — `eq`, `neq`, `in`, `notIn`, `contains`, `gt`, `lt`, `gte`, `lte`. Plusieurs opérateurs se cumulent : tous doivent être vrais.

```yaml
- {
    id: 5,
    name: ship,
    type: button,
    label: Ship,
    action: automation,
    automation: ship_order,
    visibleWhen: { field: status, eq: pending },
  }
```

C'est la grammaire qu'utilisent déjà les actions de ligne d'un [tableau de données](/fr/docs/data-components), pour que « n'afficher ce contrôle que sur certains enregistrements » s'écrive partout de la même façon.

Omettre `visibleWhen` affiche le bouton sur tous les enregistrements.

## La visibilité n'est pas une permission

`visibleWhen` décide de ce qui est dessiné. Elle ne décide pas de ce qui peut s'exécuter : l'automatisation derrière le bouton reste soumise aux mêmes permissions que partout ailleurs, et un appelant qui atteint directement le point d'entrée d'invocation y est contrôlé. Servez-vous de `visibleWhen` pour écarter un contrôle sans objet d'un enregistrement, et du contrôle d'accès de l'automatisation elle-même pour en tenir un appelant non autorisé à l'écart.

## Pages connexes

- [Champs formule](/fr/docs/formula-fields) — l'autre façon de faire produire une valeur au moteur.
- [Déclencheur manuel et chaînage](/fr/docs/trigger-manual-chained) — le déclencheur qu'une automatisation doit porter pour être invocable depuis un bouton.
- [Présentation des types de champs](/fr/docs/field-types-overview) — tous les types par catégorie.
