Comment mettre en évidence les champs de texte vides avec une infobulle spécifique à l’aide d’une macro ONLYOFFICE

24 avril 2025Par Moncif MEFTAH

Les formulaires ONLYOFFICE facilitent la collecte de données structurées, mais les champs non obligatoires vides sont souvent laissés, non vérifiés. Dans cet article de blog, nous montrons comment créer une macro qui met en évidence soit tous les champs non obligatoires vides dans un formulaire, soit uniquement ceux contenant une infobulle spécifique.

How to highlight empty text fields with a specific tip text using an ONLYOFFICE macro

Création de la macro

1. Récupérez les données du formulaire et les objets de formulaire actifs

La macro commence par accéder au document actif à l’aide d’ Api.GetDocument(). Nous récupérons ensuite deux ensembles d’informations :

  • Données des formulaires : en utilisant doc.GetFormsData(), nous obtenons une représentation JSON de tous les champs du formulaire. Ce JSON inclut des propriétés telles que la clé (key), le type, la valeur, l’infobulle (tip), et si le champ est obligatoire (required)
  • Objets de formulaire actifs : nous utilisons doc.GetAllForms() pour récupérer les objets actifs correspondant à ces champs de formulaire.
    var doc = Api.GetDocument();
    var forms = doc.GetAllForms();
    var formsData = JSON.parse(JSON.stringify(doc.GetFormsData()));

2. Validation facultative basée sur l’infobulle

Parfois, vous pourriez vouloir vérifier seulement les champs vides qui ont une infobulle spécifique. Dans notre macro, vous pouvez activer ou désactiver cette fonctionnalité en basculant la variable checkSpecificTip. Par exemple, vous pourriez avoir besoin de valider uniquement les champs dont l’infobulle indique “Veuillez entrer votre deuxième adresse.”

   // Optional: set to true to check only fields with a specific tip text.
    var checkSpecificTip = false;
    var requiredTipText = "Please enter your second address"; // Change this as needed.

3. Parcourez chaque champ de formulaire

La macro parcourt ensuite chaque champ de formulaire dans les données JSON. Nous nous concentrons uniquement sur les champs de formulaire de type texte (où le type est “text”). Pour chaque champ de texte qui n’est pas marqué comme obligatoire, nous vérifions si sa valeur est vide.

 forms.forEach(function(form) {
        if (form.GetFormType() === "textForm") {
            var key = form.GetFormKey();
            var required = form.IsRequired()
            // Find corresponding form data by key.
            var formData = formsData.find(function(fd) {
                return fd.key === key;
            });
            if (formData) {
                // A field is considered empty if its value is missing or only whitespace.
                var isEmpty = !formData.value || formData.value.trim() === "";
                // Use the live form's GetTip() to get the tip (if available).
                var tip = form.GetTipText() ? form.GetTipText() : "";
                
                var shouldCheck = !checkSpecificTip || (checkSpecificTip && tip.trim() === requiredTipText.trim());


                if (shouldCheck && isEmpty && !required) {
                    form.SetBorderColor(0,255,127); // spring green border.
                    form.SetBackgroundColor(171, 242, 255); // Light blue background.
                    invalidCount++;
                }
            }
        }
    });
  • Vérification de la valeur du champ :
    Un champ est considéré comme vide si sa propriété JSON “value” est manquante ou ne contient que des espaces.
  • Filtrage par infobulle :
    Si checkSpecificTip est activé, nous vérifions uniquement les champs dont l’infobulle correspond à requiredTipText.
  • Mise en évidence :
    Pour les champs qui répondent aux critères, nous trouvons l’objet de formulaire actif correspondant (en faisant correspondre la clé) et définissons une bordure vert printemps et un arrière-plan bleu clair.

4. Enregistrez les résultats

Enfin, la macro enregistre le nombre total de champs de texte non obligatoires vides qui ont été mis en évidence.

console.log("Form Field Validator complete. " + invalidCount + " empty unrequired text field(s) highlighted.");

Code complet de la macro

(function () {
    // Optional: set to true to check only fields with a specific tip text.
    var checkSpecificTip = false;
    var requiredTipText = "Please enter your second address"; // Change this as needed.


    var doc = Api.GetDocument();
    var forms = doc.GetAllForms();
    var formsData = JSON.parse(JSON.stringify(doc.GetFormsData()));
    var invalidCount = 0;



    forms.forEach(function(form) {
        if (form.GetFormType() === "textForm") {
            var key = form.GetFormKey();
            var required = form.IsRequired()
            // Find corresponding form data by key.
            var formData = formsData.find(function(fd) {
                return fd.key === key;
            });
            if (formData) {
                // A field is considered empty if its value is missing or only whitespace.
                var isEmpty = !formData.value || formData.value.trim() === "";
                // Use the live form's GetTip() to get the tip (if available).
                var tip = form.GetTipText() ? form.GetTipText() : "";
                
                var shouldCheck = !checkSpecificTip || (checkSpecificTip && tip.trim() === requiredTipText.trim());


                if (shouldCheck && isEmpty && !required) {
                    form.SetBorderColor(0,255,127); // spring green border.
                    form.SetBackgroundColor(171, 242, 255); // Light blue background.
                    invalidCount++;
                }
            }
        }
    });
    console.log("Form Field Validator complete. " + invalidCount + " empty unrequired text field(s) highlighted.");
})();

Maintenant, exécutons notre macro et voyons comment elle fonctionne !

Cette macro détecte et met automatiquement en évidence les champs de texte vides contenant un texte d’infobulle prédéfini, ce qui permet de gagner du temps et de réduire le travail répétitif. Nous espérons qu’elle s’avérera utile pour optimiser vos formulaires ONLYOFFICE et améliorer l’efficacité globale de votre flux de travail. N’hésitez pas à explorer d’autres méthodes puissantes de l’API ONLYOFFICE pour automatiser et améliorer votre routine documentaire. Si vous avez des idées, des questions ou des suggestions pour de futures macros, n’hésitez pas à nous contacter. Nous serions ravis d’avoir de vos nouvelles. Bon codage !

À propos de l’auteur

How to highlight empty text fields with a specific tip text using an ONLYOFFICE macro

Créez votre compte ONLYOFFICE gratuit

Affichez, modifiez et coéditez des documents texte, feuilles de calcul, diapositives, formulaires et fichiers PDF en ligne.