Dissocier l'affichage en liste de l'affichage formulaire

Tags: #<Tag:0x00007f9e5199fdd0>

Bonjour,
nous souhaiterions que l’affichage des colonnes en liste soit décorrelé dans celui du formulaire d’édition.
Exemple :
j’ai un objet métier “Application” avec 50 champs dont des informations générales (identifiant, nom, description courte, …), des informations sur l’activité (état de l’appli, date de MEP, …). Dans l’édition de l’objet, j’ai divisé mes champs en zone distincte via des Attribut Area.

Au niveau de l’affichage en liste, on ne souhaiterai avoir les colonnes dans l’ordre suivant ;
Identifiant | Nom | Etat de l’appli | Date de MEP | Description courte

Actuellement, le regroupement fait dans le formulaire d’édition empêche d’organiser les colonnes comme désiré.

Serait-il possible de décorréler les deux affichages ?

Merci d’avance

[Platform]
Status=OK
Version=4.0.P24
BuiltOn=2020-02-20 23:46 (revision 33b1f370cc64d7c985e644e4e24860e0e5973a3b)
Encoding=UTF-8
EndpointIP=21.0.9.3
EndpointURL=http://b91fcc835a25:8080
TimeZone=Europe/Paris
SystemDate=2020-03-06 11:34:51

La liste groupe les champs par zone d’attributs, ce n’est pas paramétrable de tout mélanger en liste.
Il faudrait créer un nouveau paramétrage en liste pour ça en plus des attributs d’objet.

C’est surement faisable par code, puisque tout le paramétrage est en mémoire.

hook initList

  • deplacer les champs dans getFieldArea(“name”)

hook initUpdate

  • remettre les champs dans getFieldArea(“name”)

Accesseur :

getFieldAreas() => toutes les zones
getFieldArea(name) => contient la liste des attributs qu’on peut donc ajouter / retirer

Ce sont des listes facilement manipulables en java.

D’accord merci pour votre retour.
Par contre, je n’arrive pas à obtenir le résultat désiré.
J’ai environ 20. Deux dans une zone neutre “Zone 1” et le reste éparpillés dans 4 autres zone 2 à 5.
Je souhaite afficher, en vue liste, un de mes champs de la zone 5 avec mes champs de la zone 1.
Voici le code

BCSIFamCoSurvey.initList = function(parent) {
	console.log(["BCSIFamCoSurvey.initList old area", this.getField("FamCoSurveyDateMEPVCDCC").getFieldArea().getName()]);
	this.getField("FamCoSurveyDateMEPVCDCC").setFieldArea(this.getFieldArea("Zone-1"));
	console.log(["BCSIFamCoSurvey.initList new area", this.getField("FamCoSurveyDateMEPVCDCC").getFieldArea().getName()]);
};

Dans les logs, on obtient :

2020-05-06 13:02:46,622 INFO [com.simplicite.util.ScriptInterpreter] SIMPLICITE|http://905ccbc17725:8080||INFO|p104635|com.simplicite.util.ScriptInterpreter|BCSIFamCoSurvey/home_ajax_BCSIFamCoSurvey_7||Evénement: ["BCSIFamCoSurvey.initList new area","Zone-1"]
2020-05-06 13:02:46,621 INFO [com.simplicite.util.ScriptInterpreter] SIMPLICITE|http://905ccbc17725:8080||INFO|p104635|com.simplicite.util.ScriptInterpreter|BCSIFamCoSurvey/home_ajax_BCSIFamCoSurvey_7||Evénement: ["BCSIFamCoSurvey.initList old area","Zone-5"]

Par contre dans la liste, mon attribut se retrouve toujours en dernier.

Ai-je loupé une étape ?
Merci d’avance

[Platform]
Status=OK
Version=4.0.P24
BuiltOn=2020-04-24 22:35 (revision 3fe76ae912e69f249470c97013574fce47b7e1d2)
Encoding=UTF-8
EndpointIP=21.0.9.3
EndpointURL=http://905ccbc17725:8080
TimeZone=Europe/Paris
SystemDate=2020-05-06 13:06:19

Vous avez changé le pointeur de zone mais pas la zone en elle même.

Il faut ajouter votre champ à la liste des champs de la zone 1, le retirer de la zone 5 :

ObjectField f = getField("FamCoSurveyDateMEPVCDCC");

// Retirer de la zone 5
FieldArea fa5 = getFieldArea("Zone-5");
fa5.removeField(f);

// Ajouter à la zone 1
FieldArea fa1 = getFieldArea("Zone-1");
fa1.addField(f); // insert en fonction de la position (ordre) du champ dans l'objet

// ou alors si vous voulez positionner à une certaine position
// List<ObjectField> list = fa1.getFields();
// list.add(index, f); // insert à une position fixée
// f.setFieldArea(fa1); // et prévenir le champ qu'il a changé de zone

et bien sur faire l’inverse dans le initUpdate pour remettre le champ au bon endroit dans le formulaire.

J’ai essayé de mettre mon champ à une position fixe :

BCSIFamCoSurvey.initUpdate = function() {
	var f = this.getField("FamCoSurveyDateMEPVCDCC");
	// Retirer de la zone 1
	var fa1 = this.getFieldArea("BCSIFamCoSurvey-1");
	fa1.removeField(f);

	var fa5 = this.getFieldArea("BCSIFamCoSurvey-5");
	var list = fa5.getFields();
	list.add(5, f); // insert à une position fixée
	f.setFieldArea(fa5);
}

Dès que je rajoute cette ligne list.add(5, f);, lorsque je tente d’afficher mon objet, j’obteins le message suivant :
image

Je ne comprends pas.

La UI n’arrive pas à afficher le formulaire / erreur / catch / message.
Essayez un simple fa5.addField(f) qui remet le champ à sa position suivant son ordre dans l’objet.

Attention ça n’a de sens que si vous êtes sûr que le champ n’y est pas déjà (exemple un accès direct à l’objet sans passer par la liste, navigation de formulaire en formulaire via bouton < >, etc).

Il faut donc tester qui est en position 5 avant de faire le “add” sinon vous allez insérer l’attribut 1 fois à chaque passage dans le init.

Essayez de faire ceci :

var f = this.getField("FamCoSurveyDateMEPVCDCC");
// Retirer de la zone 1
var fa1 = this.getFieldArea("BCSIFamCoSurvey-1");
fa1.removeField(f);
// Ajouter à la zone 5
var fa5 = this.getFieldArea("BCSIFamCoSurvey-5");
fa5.removeField(f); // le retirer s'il y est déjà
fa5.addField(f); // le remettre

Bonjour,
j’ai du restructurer tout mon objet au niveau des ordres des attributs. Cela fonctionne désormais. Merci pour votre retour.
Je souhaiterai que ce ticket passe en feature request si possible : je trouve dommage de devoir faire manuellement le déplacement. N’est pas possible d’envisager un attribut supplémentaire “ordre dans une liste” sur les object field ?

Cordialement
Amandine TRIDOU

L’ordre dans l’objet reste bien celui dans la liste, mais au sein de sa zone qui reste prioritaire comme “sur-colonne”.

Votre cas d’usage est trop rare pour obliger à configurer une nouvelle propriété sur tous les objets, et le code pour déplacer un champ de zone n’est pas si compliqué.

Ce qui manque par contre, c’est effectivement un flag pour pouvoir ignorer les Area en liste = ne pas afficher les sur-colonnes, pour revenir à l’ordre “naturel” paramétré sur l’objet.

.