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 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 ?
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() + "')");
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();