> For the complete documentation index, see [llms.txt](https://documentation.efalia.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://documentation.efalia.com/documentations/efalia-process/vue-ensemble-api/reference-wkyjs.md).

# Référence WKYJS

**WKYJS** est la bibliothèque JavaScript côté client d'Efalia Process. Elle permet de contrôler dynamiquement le comportement des formulaires (champs, sections, boutons, validations) depuis les scripts JS du composant **Script JS** dans le Designer HTML.

{% hint style="info" %}
**Voir aussi**

Pour une introduction et des exemples d'utilisation, consultez [Langages Process — WKYJS](/documentations/efalia-process/administration/administration-fonctionnelle/langages-process.md). Cette page est la **référence complète** de toutes les méthodes disponibles.
{% endhint %}

***

## Contexte d'Utilisation

WKYJS s'utilise exclusivement dans le composant **Script JS** du Designer HTML. Le script est exécuté dans le navigateur de l'utilisateur lors des interactions avec le formulaire.

```javascript
// Structure type d'un script WKYJS
wky.onLoad(function() {
    // Initialisation
    wky.hideField("champ_interne");
    wky.setFieldValue("champ_info", "Valeur par défaut");
});

wky.onChange("champ_montant", function(value) {
    if (parseFloat(value) > 10000) {
        wky.showField("champ_justificatif");
    }
});
```

***

## Méthodes d'Action Globales

| Méthode              | Description                                        |
| -------------------- | -------------------------------------------------- |
| `wky.submitDoc()`    | Soumet le document (équivalent clic sur "Valider") |
| `wky.saveDoc()`      | Sauvegarde le document sans le soumettre           |
| `wky.refreshDoc()`   | Rafraîchit le document depuis le serveur           |
| `wky.takeInCharge()` | Prend en charge le document (attribution)          |

***

## Événements

| Événement               | Déclencheur                                       |
| ----------------------- | ------------------------------------------------- |
| `wky.onLoad(fn)`        | Au chargement du formulaire                       |
| `wky.onSubmit(fn)`      | Avant soumission (retourner `false` pour annuler) |
| `wky.onSave(fn)`        | Avant sauvegarde                                  |
| `wky.onRefresh(fn)`     | Après rafraîchissement                            |
| `wky.onChangeState(fn)` | Au changement d'état du document                  |

**Exemple — validation avant soumission :**

```javascript
wky.onSubmit(function() {
    var montant = parseFloat(wky.getFieldValue("Montant"));
    if (isNaN(montant) || montant <= 0) {
        wky.errorBox("Le montant doit être supérieur à 0");
        return false; // Annule la soumission
    }
    return true;
});
```

***

## Méthodes de Contexte

| Méthode                        | Description                                   | Retour |
| ------------------------------ | --------------------------------------------- | ------ |
| `wky.getWorkeyDocumentState()` | État actuel du document                       | String |
| `wky.getWorkeyRole()`          | Rôle de l'utilisateur courant sur ce document | String |
| `wky.getWorkeyDocumentId()`    | ID unique du document                         | String |
| `wky.getWorkeyProcessName()`   | Nom du processus                              | String |
| `wky.getWorkeyDocumentType()`  | Type du document                              | String |
| `wky.getWorkeyUserId()`        | ID de l'utilisateur connecté                  | String |

***

## Méthodes de Barre de Boutons

| Méthode                                 | Description                                          |
| --------------------------------------- | ---------------------------------------------------- |
| `wky.addButtonBar(config)`              | Ajoute une barre de boutons personnalisée            |
| `wky.addSubmitButton(label, operation)` | Ajoute un bouton de soumission                       |
| `wky.showButtonInButtonBar(id)`         | Affiche un bouton de la barre                        |
| `wky.hideButtonInButtonBar(id)`         | Masque un bouton de la barre                         |
| `wky.showStates(states)`                | Affiche uniquement les états spécifiés dans la barre |
| `wky.hideStates(states)`                | Masque les états spécifiés de la barre               |

**Exemple — barre de boutons personnalisée :**

```javascript
wky.onLoad(function() {
    wky.addButtonBar({
        buttons: [
            {
                id: "btn_approuver",
                label: "Approuver",
                operation: "Approuver",
                style: "primary"
            },
            {
                id: "btn_refuser",
                label: "Refuser",
                operation: "Refuser",
                style: "danger"
            }
        ]
    });

    // Masquer le bouton Refuser si faible montant
    var montant = parseFloat(wky.getFieldValue("Montant"));
    if (montant < 100) {
        wky.hideButtonInButtonBar("btn_refuser");
    }
});
```

***

## Méthodes de Section

| Méthode                   | Description                                     |
| ------------------------- | ----------------------------------------------- |
| `wky.showSection(id)`     | Affiche une section                             |
| `wky.hideSection(id)`     | Masque une section                              |
| `wky.collapseSection(id)` | Réduit une section (accordéon)                  |
| `wky.expandSection(id)`   | Développe une section (accordéon)               |
| `wky.enableSection(id)`   | Active une section (champs éditables)           |
| `wky.disableSection(id)`  | Désactive une section (champs en lecture seule) |

***

## Méthodes de Champ

### Lecture / Écriture

| Méthode                          | Description                 |
| -------------------------------- | --------------------------- |
| `wky.getFieldValue(name)`        | Retourne la valeur du champ |
| `wky.setFieldValue(name, value)` | Définit la valeur du champ  |

Pour les champs multivalués, `getFieldValue` retourne un tableau et `setFieldValue` accepte un tableau ou une chaîne avec séparateur `;`.

### Visibilité

| Méthode                                       | Description                       |
| --------------------------------------------- | --------------------------------- |
| `wky.showField(name)`                         | Affiche un champ                  |
| `wky.hideField(name)`                         | Masque un champ                   |
| `wky.showOrHideElements(selector, condition)` | Affiche ou masque selon condition |
| `wky.hideOrShowElements(selector, condition)` | Masque ou affiche selon condition |

### Événements sur Champ

| Méthode                     | Description                                   |
| --------------------------- | --------------------------------------------- |
| `wky.onChange(name, fn)`    | Déclenché à chaque modification du champ      |
| `wky.refreshOnChange(name)` | Rafraîchit le document au changement du champ |

**Exemple — affichage conditionnel :**

```javascript
wky.onChange("Type_Demande", function(value) {
    if (value === "Investissement") {
        wky.showSection("section_investissement");
        wky.hideSection("section_fonctionnement");
    } else {
        wky.hideSection("section_investissement");
        wky.showSection("section_fonctionnement");
    }
});
```

### Autres Méthodes Champ

| Méthode                          | Description                               |
| -------------------------------- | ----------------------------------------- |
| `wky.error(name, message)`       | Affiche un message d'erreur sous le champ |
| `wky.setPlaceholder(name, text)` | Définit le placeholder d'un champ texte   |

***

## Requêtes SQL

```javascript
wky.sqlRequest({
    query: "SELECT id, libelle FROM ma_table WHERE actif = 1 ORDER BY libelle",
    datasource: "ma-datasource",
    success: function(results) {
        // results est un tableau d'objets
        results.forEach(function(row) {
            console.log(row.id, row.libelle);
        });
    },
    error: function(err) {
        console.error("Erreur SQL:", err);
    }
});
```

{% hint style="warning" %}
Les requêtes SQL via WKYJS sont en **lecture seule** (SELECT uniquement). Utilisez un connecteur Java pour les opérations d'écriture.
{% endhint %}

***

## Méthodes de Validation

| Méthode                         | Description                                          |
| ------------------------------- | ---------------------------------------------------- |
| `wky.isEmailValid(value)`       | Retourne `true` si l'email est valide                |
| `wky.isPhoneNumberValid(value)` | Retourne `true` si le numéro de téléphone est valide |

**Exemple :**

```javascript
wky.onSubmit(function() {
    var email = wky.getFieldValue("Email");
    if (email && !wky.isEmailValid(email)) {
        wky.error("Email", "L'adresse email n'est pas valide");
        return false;
    }
    return true;
});
```

***

## Messages et Notifications

| Méthode                           | Description               |
| --------------------------------- | ------------------------- |
| `wky.msg(text)`                   | Affiche un message simple |
| `wky.informationBox(title, text)` | Boîte d'information (OK)  |
| `wky.errorBox(text)`              | Boîte d'erreur bloquante  |

***

## Section Fil de Discussion

| Méthode                | Description                  |
| ---------------------- | ---------------------------- |
| `wky.hideDiscussion()` | Masque le fil de discussion  |
| `wky.showDiscussion()` | Affiche le fil de discussion |

***

Pour aller plus loin :

* [Langages Process (introduction)](/documentations/efalia-process/administration/administration-fonctionnelle/langages-process.md)
* [JavaScript dans Process](/documentations/efalia-process/vue-ensemble-api/javascript-process.md)
* [Référence STalk](/documentations/efalia-process/vue-ensemble-api/reference-stalk.md)


---

# 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://documentation.efalia.com/documentations/efalia-process/vue-ensemble-api/reference-wkyjs.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.
