Changer la position d'un object field

Bonjour,

Ceci est une question bête mais je n’arrive pas à changer la position d’une colonne en liste sur une page d’accueil.

Mon object field est en position 19700 dans le paramétrage.
Par code je passe la position à 1

	this.getField("AppOwnL1").setOrderInObject(1);

Quand j’affiche la position je vois bien qu’elle est à 1

	console.log("2 " + this.getField("AppOwnL1").getOrderInObject());

Mais à l’affichage rien ne change.

Est-ce que je passe à côté de quelque chose ?

Merci !
Emmanuelle

La position d’un champ affiché est donnée par sa position dans sa zone d’affichage (FieldArea) et non dans la définition interne de l’objet.

Il est donc possible de changer de position dans une zone par API :

if (this.isHomeInstance())
   this.getFieldArea(index ou nom de la zone).moveField(indexFrom, indexTo);`
  • index : 0 zone technique (row_id…), 1… correspondant aux AREA:n
  • nom de la zone : nom explicite de la zone si elle en a une
  • indexFrom position dans la liste de la zone
  • indexTo nouvelle position

C’est ce qui est fait par exemple quand on utilise des préférences de liste.

S’il faut aussi changer le champ de zone, il faudra faire un removeField et addField entre les 2 zones.
Sinon, pour changer la définition de l’objet chargé, il faut agir sur la liste des champs donc réordonner les champs de l’objet List = obj.getFields() à la main. Mais ça semble superflu dans votre cas si ce n’est qu’un pb d’affichage.

Merci pour ta réponse, j’ai pu changer mon champ de zone sans problème.
Par contre le changement de position n’est pas effectif à l’affichage.
Dans le code ça a l’air bon

Avant modif

[FIELD: name=CartoCheck, input=CartoCheck, fullInput=CartoCheck, display=“Validation”, type : 7, value : , oldvalue : , default=DRAFT, filter=%, FIELD: name=AppAdminCheck, input=AppAdminCheck, fullInput=AppAdminCheck, display=“Attribut Admin”, type : 3, value : , oldvalue : , default=, filter=%, FIELD: name=AppOwnL1, input=AppOwnL1, fullInput=AppOwnL1, display=“Owning Org - L1”, type : 7, value : , oldvalue : , default=, filter=%]

Je change la position

this.getFieldArea(“Carto-workflow”).moveField(2, 0);

Après

[FIELD: name=AppOwnL1, input=AppOwnL1, fullInput=AppOwnL1, display=“Owning Org - L1”, type : 7, value : , oldvalue : , default=, filter=%, FIELD: name=CartoCheck, input=CartoCheck, fullInput=CartoCheck, display=“Validation”, type : 7, value : , oldvalue : , default=DRAFT, filter=%, FIELD: name=AppAdminCheck, input=AppAdminCheck, fullInput=AppAdminCheck, display=“Attribut Admin”, type : 3, value : , oldvalue : , default=, filter=%]

mais à l’affichage ce n’est toujours pas bon

Existe-t-il des préférences de liste sur l’objet ? (Liste > menu Plus > Préférences > onglet Liste)
Chaque utilisateur peut se définir des préférences qui surchargeront in-fine toute définition des FieldArea.

Sur l’objet User, l’admin peut supprimer toutes les préférences des utilisateurs si besoin de “reset post-mep”.

J’ai tenté un “restore” puis carrément supprimer l’entrée de mon user dans les LIST_PREFS des paramètres sytème, mais j’ai toujours mon champ en deuxième position, pareil quand j’affiche les préférences

Je viens de tester un cas simple qui fonctionne :

User.initList = function(parent) {
      var fa = this.getFieldArea("UserProps");
      fa.restoreFields();
      fa.moveField(5,0);
};

Déplace bien le flag “Actif” d’un utilisateur :

  • de la position 5 (en partant de 0) de la zone des propriétés UserProps
  • vers la première position de cette zone

Il faut le faire à chaque initList, car les préférences (l’ordre courant) se recalculent à chaque affichage :

  • les champs reprennent leurs positions d’origine ou appliquent les préférences (FieldArea.restoreFields ou moveField).
  • puis l’initList est appelé pour pouvoir surcharger ce comportement

On peut aussi modifier les ordres dans le postLoad, dans ce cas il faudra modifier directement la liste initiale (comme un ArrayList java) :
FieldArea.getDefaultFields() : la liste de la définition initiale de la zone (non surchargée par préférence)

En déplaçant le code du postload vers le initlist ça fonctionne effectivement.

Merci pour ton aide !
Emmanuelle