Items de list non initialisés sur displayList en mode Edit

Request description

Bonjour,

J’ai sur un formulaire une action qui ouvre une liste en édition

Sur l’objet affiché, j’ai une liste de valeurs qui à l’ouverture via ce bouton n’est pas correctement initialisée.

Si je fais Close puis Edit list, j’ai cette fois les bonnes valeurs.

Dans le code du bundle UI, je vois que le problème se situe au niveau de la méthode mergeRowMeta

this.mergeRowMeta = function(obj, p) {
        let fs = obj.item.meta.fields;
        obj.item.meta.fields = obj.getFields().map(f=>{
            let x = fs.find(x=>x.name == f.name);
            return x ? $.extend({}, f, x) : $.extend({}, f);
        }
        );
        obj.item.meta = $.extend({}, obj.metadata, obj.item.meta);
        if (obj.item._index !== undefined)
            p.index = obj.item._index;
    }

J’ai bien les bonnes valeurs au niveau de obj.Field.listOfValues mais dans obj.item.metadata je n’en ai qu’une (celle qui a été enregistrée pour l’instance).

Est-ce un problème au niveau de mon URL d’action ?

Merci d’avance pour votre aide
Emmanuelle

Technical information

Instance /health
[Platform]
Status=OK
Version=5.3.31
BuiltOn=2024-03-15 13:56

Le back envoie les metatata de l’objet et uniquement le delta par ligne.
Donc cette méthode étend/complete les métadata de chaque record reçue du back pour limiter la volumétrie HTTP.

aucun des 2 objets n’existe.

La liste de valeur est-elle dynamique ? un modèle d’états ou sous contraintes ?

La liste de valeurs est peut être bonne/complète au niveau des metadata de l’objet (dans obj.metadata pour faire une recherche par exemple), mais elle peut être différente pour chaque ligne (obj.list[i].meta) pour respecter un state modèle du record en question.

Bref il faut peut être appeler le service metadata dans le CONTEXT_LIST avant de faire le displayList en mode édition pour remettre l’objet dans le bon état en back.

Ou utiliser un instance dédiée si l’instance main est déjà chargée dans un autre contexte.
(si inst n’est pas spécifié dans les paramètres du displayList, par défaut ce sera the_ajax_xxx)

Bonjour,

J’ai mélangé les deux, voici les objets en question

obj.item.meta.fields

obj.metadata.fields

La liste est basique, sans contrainte, liste liée ou modèle d’état.

Je vais tenter avec une instance différente.

Dans une liste éditable, il faut regarder chaque record dans la liste obj.list[i].meta.fields après le mergeRowMeta.

obj.item est le record courant, en général celui du formulaire.

Si la liste n’a aucun code front ou back, je ne vois pas du tout pourquoi sa définition pourrait changer. Là on dirait un state-model où seule la valeur initiale / par défaut est proposée en création.

On pourra essayer de reproduire de notre côté car l’action semble élémentaire, si tu ne trouves pas de solution.

D’accord alors obj.list[i].meta.fields contient toujours la liste avec une seule valeur, c’est dans getBusinessObject() qu’il est initialisé avec this._businessObjectsCache[objName + ":" + objInstName] qui n’a que la valeur en base dans listOfValues.

J’ai fini par trouver en comparant les url de mon action et du bouton Edit list au moment du call. Mon action envoie un contexte LIST alors que le bouton envoie UPDATE.

Avec cette URL j’ai bien ma liste de valeurs complète
javascript:$ui.displayList(null, "RciDomFctApp",{nav:'add', fixedFilters: {"rciDomfctappAppId": rowId}, edit: "rows", inst: "panel_ajax_RciDomFctApp_rciDomfctappDomId", context: "5"}, null)

1 Like

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

Bravo, pour plus de lisibilité au lieu de “5”, il faut plutôt utiliser la constante :

en V6 $app.CONTEXT_UPDATE
en V5 $ui.app.CONTEXT_UPDATE

Effectivement, dans le CONTEXT_LIST simple, chaque liste de valeurs sur chaque ligne ne contient que la valeur affichée pour optimiser la bande passante.

1 Like