Publication CSV depuis une action

Bonjour,

Je cherche à faire un export CSV :

  • J’ai créé une publication avec le type TEXT
  • J’ai créé une méthode qui construit le contenu du fichier texte

J’ai placé un bouton ACTION dans le template et lorsque l’utilisateur clique dessus, la méthode de construction du CSV est appeléé

Comment est-ce que je passe le contenu à la publication ?

la publication

¨

La méthode

	public void boutonTransAttr()
	{
		ObjectDB eleve = this.getGrant().getTmpObject("HertaEleve");
		eleve.resetFilters();
	//	eleve.getField("HertaEleveNom").setFilter(" ='Dutoit'");//setFilter("='direct' or ='indirect' or ='nonFin'");
		eleve.resetOrders();

		List<String[]> rows = eleve.search();

		String csv = "nom;prenom\n" ;
		
		//boucle sur les élèves
		for (String[] row: eleve.search() ){
			eleve.setValues(row);
			String nom = eleve.getField("HertaEleveNom").getValue();
			String prenom = eleve.getField("HertaElevePrenom").getValue();
			csv += nom +";"+ prenom ;
			csv += "\n";
		}

			AppLog.info("message fichier CSV pour MICROGIS :::" + "\n" + csv, getGrant());

		AppLog.info(getClass(), "Bouton TransAttr", null ,  getGrant());
	 	if (this.getField("HertaProcessStatut").getValue().equals("2"))
		{
			this.setFieldValue("HertaProcessStatut", "3");
		}
		try{new BusinessObjectTool(this).validateAndSave();}
		catch(Exception e){AppLog.error(getClass(), e.getStackTrace()[0].getMethodName(), "Bouton TransAttr", e, null);}
	}

La version :

Simplicité version5.1.36
Built on2022-03-25 23:37

Merci d’avance

Fabrice Mouttet

Bonjour Fabrice,

Pourquoi utilisez-vous une action? Pour un export, typiquement, une publication suffit.

Cordialement,

j’ai choisi via une action parce que l’export est déclenché via un bouton dans le template

S’il était possible de placer le bouton de publication dans le template, cela correspondrait-il à votre besoin?

oui… je suis passé par l’action parce que je n’ai pas trouvé de possibilité de mettre la publication dans le template

j’ai réussi à faire l’export en mettant le contenu du csv en setParameter et ce retour dans l’action

return this.javascript("$ui.displayPrint(null, 'HertaPctMicrogis', '" + this.getName() + "', '" + this.getRowId() + "')");

et dans la méthode de la publication je récupère le csv

	public byte[] creationFichierCsv()
	{
		AppLog.info(getClass(), "Appel de creationFichierCsv", null ,  getGrant());

		String csv = this.getParameter("CSV");

		return csv.getBytes();
	}

Dans la méthode l’action, je mets également un champ à jour

		if (this.getField("HertaProcessStatut").getValue().equals("2"))
		{
			this.setFieldValue("HertaProcessStatut", "3");
		}
		try{
			new BusinessObjectTool(this).validateAndSave();
		}
		catch(Exception e){
			AppLog.error(getClass(), e.getStackTrace()[0].getMethodName(), "Bouton TransAttr", e, null);
			
		}

Le champ se met bien à jour, mais je suis obligé de recharger le formulaire manuellement. Comment puis-je faire un reload par code?

Un Print génère une action qui commence par “print_” ou “printlist_…” en fonction de son type.
Donc à priori on peut le déplacer dans le template avec son nom, du style :

<div class="action" data-action="print_HertaPctMicrogis"></div>

Sinon le bouton pourrait être juste un javascript qui click sur l’item de menu export ?

$("[data-action='print_HertaPctMicrogis']").click()

(à adapter en fonction du nom du print dans le dom)

Après vérification sur une v5 à jour (v5.1.36), l’ajout de l’action de type “publication” est bien disponible dans le template editor via “Ajouter > Action”, est-ce que cela ne répond pas à votre problématique de façon plus directe?

publication

j’avais essayé ça, mais la publication n’était pas visible dans la liste. J’ai changé “export” pour “partout” dans la publication et cette fois elle était dans la liste.
Du coup je l’ai ajoutée dons mon template et si elle apparaît bien dans la prévisualisation, elle n’apparaît pas dans le formulaire réel :

Template :
image

Formulaire
image

Screenshot? Je ne vois pas de quoi vous parlez.


Je vais essayer de reproduire, avez-vous bien essayé de vider le cache Simplicité et celui de votre navigateur?

Oui, j’ai vidé le cache et même changé de navigateur.

Bonjour,

Je confirme qu’en v5.1.36, de mon côté, je n’ai non seulement pas de mal à ajouter l’action de publication au template (ça résulte comme vous en un <div class="action" data-action="print_PublicationCode"></div> dans le template de zone d’attributs) mais aussi qu’elle s’affiche sur le formulaire et fonctionne correctement.

Comment est configurée votre publication? Fonctionne-t-elle correctement si elle n’est pas dans le formulaire? Avez-vous moyen de reproduire comme moi votre cas avec le module Demo?

Je vous remercie pour ces pistes, en l’occurrence je reste sur le démarrage via mon action.

Le fichier produit a l’extension txt, est-ce que c’est possible de le mettre en csv?

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