Problème de compilation

Bonjour,

Suite à nos derniers échanges, je travaille actuellement à la mise en place d’un code qui, à terme, devra permettre l’envoi d’un mail. Pour l’instant, je me concentre simplement sur la récupération des données issues de certains champs, afin de les stocker dans des variables qui serviront à construire le contenu du message.

Cependant, lors de la compilation, je rencontre plusieurs messages d’erreur que je ne parviens pas à résoudre. Je vous joins ci-dessous :

  • le code que j’ai rédigé,

  • ainsi qu’une capture d’écran des messages d’erreur rencontrés à la compilation.

Je suis conscient que ma question peut paraître basique, et je vous remercie par avance pour votre indulgence ainsi que pour le temps que vous prendrez à me répondre. Cela m’aidera à progresser.

Merci encore pour votre aide précieuse.

Bien cordialement,

Instance /health
package com.simplicite.objects.Nova_memoria;

import java.util.*;
import com.simplicite.util.*;
import com.simplicite.util.exceptions.*;
import com.simplicite.util.tools.*;
import com.simplicite.util.annotations.BusinessObjectAction; // Import pour l'annotation

/**
 * Business object Nova_Projet
 */
public class Nova_Projet extends ObjectDB {
    private static final long serialVersionUID = 1L;

    @Override
    public void preLoad() {
        AppLog.info(getClass(), "preLoad", "Classe Nova_Projet chargée - Vérification pour débogage", getGrant());
    }

    @BusinessObjectAction
    public String action_btn_inv_sct(Action a) {
        try {
            String societeId = getFieldValue("novamPjtSctId"); // row_id société
            AppLog.info(getClass(), "action_btn_inv_sct", "ID société (row_id) : " + societeId, getGrant());
            if (Tool.isEmpty(societeId)) {
                return Message.formatSimpleError("Aucune société liée.");
            }

            // Récupérer ID métier société (champ inline)
            String IDsociete = getFieldValue("novamSctIdSociete");
            AppLog.info(getClass(), "action_btn_inv_sct", "ID métier société : " + (IDsociete != null ? IDsociete : "vide"), getGrant());

            // Charger société par clé métier pour obtenir row_id
            ObjectDB societe = getGrant().getTmpObject("Nova_Societe");
            synchronized (societe) {
                societe.resetFilters();
                societe.setFieldFilter("novamSctIdSociete", IDsociete);
                societe.search();
                if (societe.getCount() == 0) {
                    return Message.formatSimpleError("Société non trouvée par clé métier.");
                }
                societe.setValues(societe.getRow(0)); // Charger valeurs (getRow retourne String[])
                String societeRowId = String.valueOf(societe.getRowId()); // Convertir long en String
                AppLog.info(getClass(), "action_btn_inv_sct", "Société chargée - Row ID : " + societeRowId, getGrant());
            }

            // Filtrer contacts sur row_id société
            ObjectDB contact = getGrant().getTmpObject("Nova_Contact_Societe");
            synchronized (contact) {
                contact.resetFilters();
                contact.setFieldFilter("novamCtcsocSctId", String.valueOf(societe.getRowId())); // Utiliser row_id converti
                contact.search();
                if (contact.getCount() == 0) {
                    return Message.formatSimpleError("Aucun contact trouvé.");
                }
                contact.setValues(contact.getRow(0)); // Charger premier contact
                String MailAC = contact.getFieldValue("novamCtcsocMailContactSociete");
                AppLog.info(getClass(), "action_btn_inv_sct", "Email contact (MailAC) : " + (MailAC != null ? MailAC : "vide"), getGrant());
            }

            return Message.formatSimpleInfo("Variables récupérées avec succès.");
        } catch (Exception e) {
            AppLog.error(getClass(), "action_btn_inv_sct", "Erreur variables", e, getGrant());
            return Message.formatSimpleError(e.getMessage());
        }
    }
}
Simplicité logs
---paste the content of the **relevant** server-side logs---
Browser logs
---paste content of the **relevant** browser-side logs---
Other relevant information

----E.g. type of deployment, browser vendor and version, etc.----

Que voulez vous faire lorsque vous faites un appel getRow(0) ?

Mon objectif est le suivant : une fois l’objet filtré, je souhaite récupérer la valeur du champ novamCtcsocMailContactSociete correspondant à une société identifiée par IDsociete.

Si je ne me trompe pas (mais c’est tout à fait possible), le code actuel récupère uniquement la première valeur trouvée dans la liste.
L’idée, à terme, est de récupérer l’ensemble des adresses contenues dans ce champ, pour pouvoir ensuite les utiliser dans l’envoi d’un mail, à condition qu’elles soient distinctes.

J’imagine que mon approche n’est pas la bonne, sinon je n’aurais pas d’erreurs à la compilation.

Merci à vous pour le temps que vous m’accordez.

cdt

Je vous conseille de regarder les exemples de la documentation et/ou ceux du code des modules de la démo. Ce forum est dédié au support et ne peut pas remplacer une formation en bonne et due forme.

Pour la recherche dans un objet métier le pattern de base c’est:

ObjectDB obj = getGrant().getTmpObject("MyObject");
for (String[] row :  obj.getTool().search(new JSONObject().put("myField", myFiedlFilterValue)) {
    obj.setValues(row);
    // do something with obj (e.g. String val = obj.getFieldValue("myOtherField))
}

Merci beaucoup pour votre réponse, et encore une fois pour le temps que vous m’accordez.

Je comprends bien vos explications. Je vous avoue que, même si la documentation est assez fournie, elle me semble parfois peu intuitive — surtout lorsqu’on cherche quelque chose de précis. Mais cela vient certainement aussi de mon niveau encore très débutant.

Encore merci pour votre aide précieuse.

Bien cordialement,

This topic was automatically closed 60 minutes after the last reply. New replies are no longer allowed.

A nouveau n’hésitez pas à vous inspirer des nombreux exemples des modules de démo, ils sont fait pour être didactiques, surtout lorsqu’on débute.

Pour ce qui est de la rédaction de code Java n’hésitez pas non plus à cloner vos modules et à travailler dans un IDE Java afin de bénéficier d’un environnement de développement plus user-friendly que le simple éditeur de code de la UI Simplicité.

Pour ce qui est des envois de mail, je ne sais pas dans quel contexte vous souhaitez faire ça mais pour mémoire il existe des mécanismes natifs d’envoi de notifications y compris par mail sur des évènements du cycle de vie des objets métier (ex: sur une transition d’état d’un diagramme d’état).

Plus généralement, Simplicité est une plateforme low code = quand on est tenté d’écrire du code, ce qui est toujours possible, il convient toujours de se demander s’il n’existe pas une approche standard configurable répondant au besoin de manière plus efficace/éprouvée (et dans le doute sollicitez nous). Autrement dit le but du jeu avec Simplicité, comme avec toute plateforme low code, est toujours d’écrire le moins de code possible.