Récupérer les Metadata via Ajax

4.0
Tags: #<Tag:0x00007fc9f4480628>
Récupérer les Metadata via Ajax
0

(Sébastien Hardy) #1

Bonjour,

Y-a-t-il eu des changements entre la 3.2 et 4.0 sur les metadatas ?
Il n y a pas les metadatas dans le BusinessObject suite à un Search.

Cordialement


(Sébastien Hardy) #2

Pour précision, code fonctionnant en 3.2 et ko en 4.0 :

var l = Simplicite.Application.getBusinessObject(“MyObject”,“list_MyObject”,true).metadata.fields[8].listOfValues;

fields is undefined


(François Genestin) #3

En 4.0 tout est asynchrone pour ne plus bloquer l’IHM (fluidifier l’UX), les appels Ajax synchrones sont donc proscrits.
Il faut raisonner avec des appels via callbacks.

var obj = app.getBusinessObject("MyObject","tmp_ajax_MyObject")
obj.getMetaData(function() {
    var lov = obj.getField("field").listOfValues;
    ...
});

Par convention il faut utiliser des noms instances avec “ajax” pour garantir les regles de gestion côté serveur.
Exemple “the_ajax_object” garantira que le code serveur avec “isMainInstance” s’appliquera.
Voir la jsdoc pour utiliser les API BusinessObject et ObjectField client.

L’auto-refresh des metadata est intégré dans les appels aux verbes directement via le parametre “metadata”, exemple :

obj.get(function() { ... }, rowId, { metadata: true });

fera un “select” en base + remplacera les meta de l’objet au retour de l’appel (par exemple si le postSelect rend invisible un champ côté serveur…)

Sur la responsive, on peut récupérer l’objet incrémenté des fonctions UI :
cf $ui.getUIObject et getUIField