Export Excel via une action avec attributs

bonjour,

je dois générer un fichier excel en intégrant des données saisies au moment de l’export.
J’ai donc créé une action de liste avec des attributs et une publication qui génère le fichier excel

Dans le script de l’objet métier, je récupère les attributs de l’action et la méthode d’action retourne un statement de redirect :
public String ExportLogement(Action action) {

try{
return this.javascript(“$ui.displayPrint(null, ‘foiEtabLogeXls’, '” + this.getName() + “', '” + this.getRowId() + “')”);
}catch(Exception e){
AppLog.error(getClass(), e.getStackTrace()[0].getMethodName() , “Exception lors l’invocation de la méthode ExportLogement()”, e, getGrant());
return e.getMessage();
}

jusque là, tout va bien.
Mon problème est que l’export ne prend pas en compte les lignes sélectionnées dans la liste.
dans le méthode exécutée lors de la publication, getSelectedIds() = null alors que j’ai sélectionné des lignes.

	/** Publication: Microsoft Excel(R) sheet Logements*/
public Object ETABLogeExport(PrintTemplate pt) {
	try {
		// Build rows from selected IDs or from current filters
		List<String[]>rows = new ArrayList<>();
		List<String> ids = getSelectedIds();
            ...........
   }

Quand j’exécute l’export en utilisant la publication sans passer par l’action, getSelectedIds(); me ramène bien les id des lignes sélectionnées

Pour info, ce code fonctionnait très bien en V4.

image

Bonjour Rosanne,

Je ne reproduis pas le problème sur une version à jour.
image

getSelectedIds() renvoie null lorsque toutes les lignes sont sélectionnées sinon les row_id des lignes sélectionnées.

Pouvez-vous mettre à jour l’instance et m’indiquer si le problème persiste.

Merci

Bonjour Nathalie,

ma version est à jour et le pb persiste

J’ai essayé de reproduire sur la main instance.
Est ce que la sélection se fait sur cette instance ?

non, la liste est affichée uniquement dans une vue et c’est à partir de là que je fais la sélection.

Pour tester, j’ai ajouté cette liste dans le menu. Et l’export sur la sélection fonctionne à partir de la liste dans le menu et aussi à partir de la liste dans la vue …
Très étrange

C’est parce que vous êtes dans une vue (une home instance de l’objet).
L’action se déclenche sur la vue et le this.getSelectedIds() recherche sur la main instance.

Il faut donc passer l’instance de l’objet au displayPrint
ou faire le getSelectedIds sur l’instance home

Est ce que vous utilisez cette action sur les 2 instances , par la liste du menu ou uniquement par la vue ?

uniquement par la vue

Bonjour Rosanne,

Avez-vous besoin de plus de précisions ?

comment tu fais pour passer l’instance de l’objet au displayPrint ?

  1. passer l’instance de l’objet au DisplayPrint dans la méthode de l’action. Cela fonctionnera sur n’importe quelle instance.
    return this.javascript("var o=$ui.getAjax().getBusinessObject('" + this.getName() + "', '" + this.getInstanceName()+"');$ui.displayPrint(null, 'foiEtabLogeXls', o,'"+ this.getRowId() + "')");

  2. Faire le getSelectedIds sur l’instance de son choix dans la méthode du printtemplate. Cela fonctionne sur une instance spécifique.
    getGrant().getObject(<Nom de l'instance>,<Nom de l'objet>).getSelectedIds();

1 Like

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