Récupérer dynamiquement la valeur d'un champ non sauvegardé

Bonjour,

Je souhaite récupérer dynamiquement une valeur de champ (Delegation d’accueil) sans sauvegarder le formulaire. Cette valeur récupérée servira de variable à une requête SQL déclenchée par un fieldCompletion sur un autre champ (Référent d’accueil). Et Référent d’accueil affichera alors une liste de personnes référentes dont la délégation = $Delégation

La requête fonctionne en base avec une délégation fixe, mais bloque en pratique avec la récupération dynamique depuis le BACK.

Etant donné que le fieldCompletion de Référent d’accueil est exécuté avec le save du champ * Délégation d’accueil, il n’est pas renseignée en base et un getfieldValue ne renvoie pas la valeur de façon dynamique.

J’ai pensé exécuter un code javascript depuis mon objetMétier.java, mais je ne pense pas avoir bien compris comment fonctionne ce procédé, car la valeur retournée par ma ligne est cette même ligne avec “javascript:” devant.

2023-03-13 15:45:43,506|SIMPLICITE|INFO||http://64d0b3d5474f:8080||INFO|demo_admin|com.simplicite.objects.ladnext.LadFormations|fieldCompletion||Evénement: delegation : javascript:document.getElementById("field_ladFormationsDelegation_idladFormations_LadDossierPmfp_id").value
@Override
public List<String> fieldCompletion(String input, String query, String context) {
    List<String> list = new ArrayList<>();
    Grant g = getGrant();
    if (FIELD_FORMATIONSREFERENTDEACCUEIL.equals(input)) {
        String delegation = champDelegation();
        AppLog.info(getClass(),"fieldCompletion","delegation : "+delegation,g);
        String role = "LADOM_GROUP_CIP"; // filtrer par les référents par CIP
        list = LadPmfpUtils.getListeReferent(g, query, delegation,role);
    }

/////////////

public String champDelegation(){
    //String js = "$ui.getUIField(ctn,\"LadFormations\",\"ladFormationsDelegation\", \"ladFormations_LadDossierPmfp_id\").ui.val()";
    String js = "document.getElementById(\"field_ladFormationsDelegation_idladFormations_LadDossierPmfp_id\").value";
    return javascript(js);
}

Des conseils ou une autre méthode pour récupérer dynamiquement la valeur de Delegation d’accueil dès qu’on saisit des caractères dans le champ Référent d’accueil, car je n’arrive pas à trouver de réponses dans les autres topics.

Merci

Technical information

Instance /health

[Platform]
Status=OK
Version=5.2.32
BuiltOn=2023-02-20 14:49
Git=5.2/1b459f7ae61e5505e72dd1066bd993e48224bcf7
Encoding=UTF-8
EndpointIP=172.18.0.5
EndpointURL=http://64d0b3d5474f:8080
TimeZone=UTC
SystemDate=2023-03-13 15:52:31

[Application]
ApplicationVersion=2.1.83
ContextPath=
ContextURL=http://localhost:8080
ActiveSessions=1
TotalUsers=12
EnabledUsers=10
LastLoginDate=2023-03-13 15:45:50

[Server]
ServerInfo=Apache Tomcat/9.0.71
ServerType=WEB
ServerActiveSessions=1
ServerSessionTimeout=30

[OS]
Name=Linux
Architecture=amd64
Version=5.10.16.3-microsoft-standard-WSL2
DockerImageName=centos7
SystemEncoding=UTF-8

[JavaVM]
Version=17.0.6
Vendor=Eclipse Adoptium
VMName=OpenJDK 64-Bit Server VM
VMVersion=17.0.6+10
ScriptEngine=rhino
ScriptEngineVersion=Rhino 1.7.13 2020 09 02
HeapFree=207738
HeapSize=454656
HeapMaxSize=6533120
TotalFreeSize=6286202

[Cache]
ObjectCache=237
ObjectCacheMax=10000
ObjectCacheRatio=2
ProcessCache=10
ProcessCacheMax=10000
ProcessCacheRatio=0
APIGrantCache=0
APIGrantCacheMax=1000
APIGrantRatio=0

[Database]
Vendor=3
ProductName=PostgreSQL
ProductVersion=13.6 (Debian 13.6-1.pgdg110+1)
DriverName=PostgreSQL JDBC Driver
DriverVersion=42.5.4
DBDate=2023-03-13 15:52:31
DBDateOffset=0
DBPatchLevel=5;P02;4a7c6ef246ac3b6b1fda22b913dd915c
UsingBLOBs=true

[Healthcheck]
Date=2023-03-13 15:52:31
ElapsedTime=292

A priori je pense qu’il manque des choses dans votre modèle relationnel pour pourvoir faire ce genre de choses plus nominalement.

Car là vous travaillez avec de la saisie de chaines de caractères (donc pas fiable) + du code spécifique compliqué alors que ce genre de chose pourrait se faire via un simple link mappings moyennant de référencer des données dument modélisée.

Pour moi vous devriez donc avoir modélisé un objet de référence “Délégation d’accueil” et un obejt “Référent d’accueil” (en lien avec le précédent objet), puis au niveau de votre objet ces 2 données seraient modélisées comme de liens vers ces objets de référence (et pas comme des champs de saisie)

Dès lors vous auriez en standard la complétion sur les références + la possibilité de mettre en place un link mapping = contraindre la sélection du référent en fct de dde la délégation saisie.

Soit 0 ligne de code à écrire grâce à l’utilisation des features standards de la plateforme faites pour répondre à ce genre de besoins.

Cf. la démo il y a exactement ce genre de pattern sur l’objet contact où on ne peut sélectionner qu’une des commandes du client sélectionné.

Ok merci pour cette réponse, nous allons nous en occuper rapidement.

OK, Simplicité est une plateforme model driven, il est important de modéliser ce qui doit l’être afin de bénéficier des mécanismes standards et ne pas devoir écrire de code pour mettre en place une UX custom aboutissant à de la dénormalisation (sans parler des risques de bugs ni de la maintenabilité):

Le cas du contact de la démo me semble typiquement le cas que vous décrivez:

  1. je sélectionne un client (à noter la complétion sur sélection):

  2. je sélectionne une commande => seules celles du client sélectionné me sont proposées:



    la sélection ci-dessus aurait pu aussi se faire par complétion, ex en tapant la référence du produit => on n’aurait proposé que les commandes sur ce produit et pour le client sélectionné

C’est possible car le modèle de la démo permet ce link mapping:

Je vous laisse transposer ça à votre cas métier mais, de ce que je comprends de votre besoin, c’est exactement le même pattern.

Exactement, c’est le même cas dans la démo que dans notre cas actuel

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