# Moteurs côté client et Web

Les plug-ins FormIt utilisent deux moteurs JavaScript distincts :

* Groupe de fonctions affichant le code HTML (côté Web)
* Le côté client (FormIt) effectue des appels à FormIt et à son noyau de géométrie.

Ces deux moteurs JavaScript fonctionnent selon des processus distincts.

## **Côté client (FormIt) et côté Web (HTML)**

FormIt exécute plusieurs moteurs JavaScript simultanément :

* L’application FormIt possède son propre moteur JavaScript
* Chaque barre d’outils de plug-in possède son propre moteur JavaScript.
* Chaque groupe de fonctions de plug-in possède son propre moteur JavaScript (Chromium).

Les plug-ins peuvent spécifier l’emplacement de chargement du script JavaScript :

![](/files/U2JtZFRFUyDHfLHNHF4m)

### Côté client (FormIt)

Spécifié à l’aide du fichier[manifest.json](https://github.com/FormIt3D/FormItExamplePlugins/blob/master/HelloBlockAsync/v23_0/manifest.json#L8)

```
    "Scripts": [
        "PLUGINLOCATION/blockFormItSide.js",
        "https://formit3d.github.io/FormItExamplePlugins/SharedPluginFiles/PluginUtils18_0.js"
    ]
```

### Côté Web (HTML)

Spécifié à l’aide du fichier [index.html](https://github.com/FormIt3D/FormItExamplePlugins/blob/master/HelloBlockAsync/v23_0/index.html#L7)

* Les scripts côté Web sont chargés à partir de la page Web.
* Les scripts côté Web peuvent appeler le script JavaScript côté client (FormIt) à l’aide de plusieurs appels asynchrones.

## Trois méthodes pour appeler des commandes côté client (FormIt) à partir d’un plug-in Web :

### Méthode 1 : FormItInterface.CallMethod

`CallMethod` prend un nom de fonction et les arguments qui seront exécutés côté FormIt. La fonction transmise sera appelée avec le résultat de l’appel de la fonction.

```
    var args = {
        "w": 10,
        "l": 10,
        "h": 10
    }
    FormItInterface.CallMethod("CreateBlock", args, function(result)
    {
        // Result of the function call
    });
```

**Avantages :**

➕ Pas besoin de `await`.

**Inconvénients :**

➖ Un rappel est nécessaire pour obtenir le résultat et s’appelle « who know when ».

➖ Les scripts sont définis à deux emplacements différents.

➖ La logique du plug-in doit être divisée en deux fichiers différents.

### **Méthode 2 : FormIt.CallJS**

\***Disponible uniquement dans FormIt 2022.1 et versions ultérieures**

CallJS utilise la fonction JavaScript pour un appel côté FormIt et l’objet arguments.json.

```
var args =
{
    "w": 10,
    "l": 10,
    "h": 10
};
var result = await FormIt.CallJS("CreateBlock", args);
```

**Avantages :**

➕ Le résultat est disponible en cas de besoin

**Inconvénients :**

➖ \*\*\*\* Vous devez ajouter await à tous les appels asynchrones. Si vous oubliez, rien ne fonctionnera comme prévu.

➖ \*\*\*\* Potentiellement plus lent en raison de `await`

### **Méthode 3 (asynchrone/await)**

```
const pt1 = await WSM.Geom.Point3d(0,0,0);
```

Avec un appel asynchrone, le côté Web appelle le côté FormIt. Cet appel commence dans un processus, est envoyé à un autre processus, puis le résultat est transmis au processus de départ. C’est pourquoi await est nécessaire.

Seules les API FormIt intégrées peuvent être appelées par défaut.

**Avantages :**

➕ Le résultat est disponible en cas de besoin.

➕ Permet de combiner tout le code dans un seul fichier JS exécuté côté Web, sans script défini dans manifest.json.

**Inconvénients :**

➖ \*\*\*\* Vous devez ajouter `await` à tous les appels asynchrones. Si vous oubliez, rien ne fonctionnera comme prévu.

➖ \*\*\*\* Potentiellement plus lent en raison de `await.`

### Méthode 4 (RegisterAsyncAPI)

\***Disponible uniquement dans FormIt 2023.0 et versions ultérieures**

Pour appeler une fonction définie par l’utilisateur dans FormIt, la fonction doit être enregistrée. Par exemple :

**Côté client (FormIt)**

```
FormIt.RegisterAsyncAPI("HelloBlockAsync", "CreateBlock", "l, w, h");
// CreateBlock runs from FormIt.
HelloBlockAsync.CreateBlock = function(args)
{
    return { "Result" : "It Worked!!"};
}
```

**Côté Web (HTML)**

```
var result = await HelloBlockAsync.CreateBlock(l, w, h);
```

Reportez-vous à [HelloBlockAsync](https://github.com/FormIt3D/FormItExamplePlugins/tree/master/HelloBlockAsync/v23_0) pour obtenir un exemple.

**Avantages :**

➕ Le résultat est disponible en cas de besoin.

➕ Permet de combiner tout le code dans un seul fichier JS exécuté côté Web, sans script défini dans manifest.json.

**Inconvénients :**

➖ \*\*\*\* Vous devez ajouter await à tous les appels asynchrones. Si vous oubliez, rien ne fonctionnera comme prévu.

➖ \*\*\*\* Potentiellement plus lent en raison de `await.`

##


---

# Agent Instructions: 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:

```
GET https://windows.help.formit.autodesk.com/fr/plugins/how-to-develop-plugins/advanced-development/client-side-vs-web-side-engines.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
