> For the complete documentation index, see [llms.txt](https://ksaar.gitbook.io/ksaar-documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ksaar.gitbook.io/ksaar-documentation/tutoriels/verifier-si-un-enregistrement-est-deja-existant.md).

# Vérifier si un enregistrement est déjà existant

Il est possible de vérifier si un enregistrement est déjà existant ou non dans une table Ksaar à partir d'un champ texte qui sert d'identifiant, ce qui peut permettre de rechercher un enregistrement et/ou d'éviter de créer des doublons.

## 🚧 Exemple depuis un workflow

Nous allons voir ça à travers l'exemple d'un workflow qui permets d'ajouter des contacts dans une application. Si l'utilisateur saisit une adresse mail qui est déjà dans les contacts, on va rediriger vers la fiche de ce contact au lieu de continuer le workflow de création, ce qui va éviter d'avoir le contact en double.

Voici les étapes à suivre pour faire cela :

1️⃣ On commence par créer une page qui contient le champ texte sur lequel on veut vérifier qu'un enregistrement existe déjà ou non. Dans notre cas, on va placer le mail du contact.

{% hint style="info" %}
Cette astuce permettant d'identifier si deux enregistrements sont identiques se fait uniquement à partir d'un champ texte, ou d'une formule de type texte, qui aurait la même valeur pour les deux.

Donc dans le cas où cela devrait se faire par rapport à des champs qui ne sont pas du texte ou par rapport à plusieurs champs, on peut simplement utiliser une formule de type texte qui va les convertir et tous les regrouper&#x20;

par exemple : `{Nom} & "/" & {Prénom} & "/" & FORMAT_DATE({Date de naissance}, "DD/MM/YYYY")`
{% endhint %}

On supprime aussi l'action qui permet de sauvegarder l'enregistrement pour l'instant, car on ne veut pas créer de nouvel enregistrement dans le cas où il existerait déjà.\
On ajoutera cette action plus tard, quand on sera sûr que l'enregistrement est nouveau et donc qu'il faut bien le sauvegarder.

<figure><img src="/files/PNTy4ZbWQ5PA3GIjplLH" alt=""><figcaption><p>Champ texte qui sert à identifier si un enregistrement existe</p></figcaption></figure>

2️⃣ Ensuite, on créé une liaison simple qui est liée à cette même table et qui a le champ texte ou formule de type texte à identifier dans le paramètre "Champ à afficher", l'email du contact dans notre cas.&#x20;

Puis, on place une action de mise à jour de champ à la suite de notre première page qui met à jour cette liaison avec l'origine qui est "Une option qui est égale à un champ de la table" en précisant bien le champ qu'on souhaite identifier.

De cette manière, la liaison se remplit automatiquement s'il y a déjà un enregistrement avec le même email, et elle restera vide si ce n'est pas le cas.

<div><figure><img src="/files/tlaQzVQqy2UY3jMa890J" alt=""><figcaption><p>Paramétrage de la liaison simple</p></figcaption></figure> <figure><img src="/files/iQ3tWUfYmfpd2ho3DzvV" alt=""><figcaption><p>Mettre à jour la liaison</p></figcaption></figure></div>

3️⃣ À partir de là, il suffit de faire un scénario conditionnel pour séparer le cas où la liaison simple est non nulle, et donc qu'un enregistrement existe déjà, et le cas où la liaison est vide, et donc que c'est un nouvel enregistrement.

<figure><img src="/files/036j6eBbrxcJzWxRnv8l" alt=""><figcaption><p>Condition si un enregistrement existe déjà</p></figcaption></figure>

4️⃣ Dans le cas où un enregistrement serait existant, on place une action de redirection vers la fiche de l'enregistrement qui est dans la liaison, ce qui permet donc de rediriger vers les informations du contact déjà existant qu'on a trouvé.

<figure><img src="/files/pmDFTXypIKMr4xgqJEer" alt="" width="375"><figcaption><p>Rediriger vers l'enregistrement existant</p></figcaption></figure>

5️⃣ Enfin, dans l'autre cas, notre enregistrement n'existe pas encore, donc on ajoute une page permettant de remplir les informations du contact dont on a besoin.&#x20;

Puis, on ajoute l'action de sauvegarde d'enregistrement que l'on avait supprimé pour bien faire en sorte que notre contact soit créé.

<figure><img src="/files/1HFtyDMiQqX3hJ4z7yWu" alt=""><figcaption><p>Créer un nouveau contact</p></figcaption></figure>

## 🚧 Exemple depuis une automation

Si l'enregistrement n'est pas créé depuis un workflow, mais qu'il est par exemple importé depuis un outil comme Make, on peut obtenir un résultat similaire grâce à une automation qui se déclenche à la création d'un enregistrement.

La logique est légèrement différente car quand on est dans notre automation, l'enregistrement est déjà présent dans notre table, et il faudra donc le supprimer si on trouve un doublon. Aussi, si on veut faire la même technique de la liaison simple vers un enregistrement qui a le même email, il va se lier à lui-même, car il est déjà dans la table, et on ne pourra donc pas en déduire qu'il y a un doublon. On utilise cette fois-ci une boucle pour arriver au même résultat.

Pour faire la même chose sur une automation, on suit les étapes suivantes en repartant de la table Contacts :

1️⃣ On commence par mettre à jour le champ Liaison simple avec l'enregistrement en cours, on changera ensuite cette liaison si on trouve un autre enregistrement avec le même mail

<figure><img src="/files/QRUDTDIX3K7Yw7kkpTyG" alt=""><figcaption><p>Mettre à jour la liaison avec l'enregistrement qui vient d'être créé</p></figcaption></figure>

2️⃣ On fait une boucle sur la table Contacts avec deux conditions :

La première étant que les enregistrements sur lesquels on va boucler soient différents de l'enregistrement qui est actuellement dans la liaison simple. On ne va donc pas boucler sur l'enregistrement qui vient d'être créé.

La deuxième condition est de boucler sur les enregistrements qui ont le même mail que l'enregistrement en cours.

<figure><img src="/files/XxqtUMfKDMoRiocgFQkG" alt=""><figcaption><p>Conditions sur la boucle pour trouver les doublons</p></figcaption></figure>

3️⃣ En combinant ces deux conditions, on va boucler sur les enregistrements qui ont le même mails, mais qui sont différents de cet enregistrement, donc si on passe une fois dans la boucle, cela signifie qu'il y a un doublon.

On met alors une action de mise à jour de champs dans la boucle dans laquelle on change l'enregistrement dans la liaison simple pour l'enregistrement de la boucle qu'on a trouvé.

<figure><img src="/files/oYFFTkrYwkh5C0k3GgBm" alt=""><figcaption><p>Mettre à jour la liaison simple avec l'enregistrement qui a le même Email</p></figcaption></figure>

4️⃣ Dans notre scénario conditionnel, il suffit maintenant de mettre la condition que la liaison simple est différente de l'enregistrement en cours.

<figure><img src="/files/uk89lrmKzTzGpzebWzMk" alt=""><figcaption><p>Condition si un enregistrement existe déjà</p></figcaption></figure>

Dans ce cas, un doublon existe, donc on peut rajouter une action de suppression d'enregistrement pour supprimer celui qui vient d'être créé.

<figure><img src="/files/95BE8dDx9clmJKrcJ8pc" alt=""><figcaption><p>Supprimer l'enregistrement qui vient d'être créé si un enregistrement similaire a été trouvé</p></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://ksaar.gitbook.io/ksaar-documentation/tutoriels/verifier-si-un-enregistrement-est-deja-existant.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
