Export Excel de la totalité d'un objet comportant deux relations réflexives (upstream_obj->obj->downstream_obj)

Bonjour,

L’export Excel de la totalité d’un objet comportant deux relations réflexives (upstream_obj->obj->downstream_obj) plante car l’Excel généré comporte deux feuilles portant le même nom = celui de la relation N-N upstream_obj / downstream_obj). Cette partie du modèle sert à documenter une liste chaînée de ‘obj’.

En V4, l’export Excel en mode natif Excel plante aussi mais l’export Excel en mode HTML fonctionne. Dans ce cas le nom des relations upstream et downstream sont bien ceux les noms traduits des relations.

En V5, il semble que ce soit le nom de l’objet N-N qui soit repris dans les deux cas upstream et downstream. D’où le plantage de l’export.

Log v5:

2021-11-29 13:19:07,778|SIMPLICITE|ERROR||http://6dff565056cb:8080||ERROR|a068181|com.simplicite.util.tools.ExcelTool|toPOI||Evénement: Error exprting to POI
    java.lang.IllegalArgumentException: The workbook already contains a sheet named 'BCSIdataprocess dataprocess'
     at org.apache.poi.xssf.usermodel.XSSFWorkbook.validateSheetName(XSSFWorkbook.java:914)
     at org.apache.poi.xssf.usermodel.XSSFWorkbook.createSheet(XSSFWorkbook.java:867)

J’ai trouvé un contournement en faisant setDisplay dans le preSearch de la N-N sur les instances liées en m’appuyant sur le getDisplay des fk concernées… a priori ça marche:

@Override
public void preSearch() {
	/*
	** DEBT - https://community.simplicite.io/t/export-excel-de-la-totalite-dun-objet-comportant-deux-relations-reflexives-upstream-obj-obj-downstream-obj/4148
	*/
	if (getParentObject() != null && getParentObjectRefField() != null) {
		if (getParentObject().getInstanceName().equals("export_BCSIDataprocess")) {
			warn("preSearch", "setDisplay('"+getDisplay()+"'->'"+getField(getParentObjectRefField()).getDisplay()+"')", this);
			setDisplay(getField(getParentObjectRefField()).getDisplay());
		}
	}
	/**/
}

Version=5.1.13 BuiltOn=2021-11-21 23:46
NB: Idéalement, il faudrait que j’aille chercher le getDisplay du Link afférent à la fk car c’est lui qui porte le bon libellé… j’ai fait ça à l’arrache et je ne sais pas faire ça rapidement…

Avec le contournement ci-dessus, l’export Excel natif (POI) est complet mais il semble par contre que l’export Excel/HTML ne le soit pas… Un fichier Excel est bien généré mais les données des tables liées ne sont intégrées que jusqu’à cette fameuse relation N-N…

Bonjour,

L’export HTML est historique (V2!) et n’est plus maintenu, il est incapable de créer des onglets, c’est juste Excel qui reconnait un export de <table> de base en HTML et fait au mieux.

Par contre dans l’export via POI, on devrait pouvoir tester la présence d’un onglet déjà créé :

  • et utiliser un autre nom candidat (le nom du Link / objet lié / nom de la FK…)
  • ou ajouter un suffixe numérique lien / lien (2) par exemple si l’onglet existe déjà

Ton contournement est une bonne approche pour changer le libellé qui fait doublon.

1 Like

Merci beaucoup pour ton retour.
Par soucis d’homogénéité, serait-il possible d’envisager systématiquement par priorité:

  1. le nom du Link
  2. le nom de la FK (si Link pas traduit)
  3. le nom de l’objet lié (si FK pas traduite)

Puis d’appliquer un suffixe numérique si la résolution du nom (étapes 1/2/3) produit un doublon ?

Oui c’est bien l’idée par ordre de préférence, le Link a déjà un nom composé intéressant en cas d’ambiguïté (avec le FK), c’est plutôt lui qu’il faut traduire correctement. Pour les autres cas par défaut/suffixés, il faudra passer par du code comme tu l’as fait pour mettre un libellé plus explicite.

Ce sera poussé rapidement.

1 Like

Besoin livré en V5.1