J’ai fait un test de publication HTML de devis, et je pouvais bien avoir les informations de Devis mais pas les informations de l’objet lié “Lignes de Devis”. Ce dernier servira à remplir le tableau de devis (Image en PJ).
Il y a énormément de façon de faire une publication.
Si vous faites du mustache, le JSON que vous utilisez pour alimenter le template mustache doit contenir toutes les lignes filles (via un search filtré sur le champ parent via setFilter…)), ensuite le template mustache doit contenir une simple boucle de <tr>.
Merci @Francois et @scampano, c’était utile.
Toutefois je rencontre toujours un problème de duplication quand je veux importer des fields de deux objets différents mais qui sont liés.
La partie dupliquée est l’entête de la table de lignes de devis.
Le code java :
public String pubDevis(){
BootstrapWebPage wp = new BootstrapWebPage(
HTMLTool.getRoot(),
"Webpage publication pattern example",
true
);
// Ajout de valeurs de Devis
ObjectDB d = getGrant().getTmpObject("DF_Devis");
d.setFieldFilter("row_id",getRowId());
wp.append(MustacheTool.apply(
this,
"DF_Devis_HTML",
"{'rows':"+toJSON(d.search(), null, false, false)+"}"
));
// Ajout de valeurs de lignes Devis
ObjectDB ld = getGrant().getTmpObject("DF_Ligne_Devis");
ld.resetFilters();
ld.setFieldFilter("DF_Ligne_Devis_DF_Devis_id",getRowId());
List<String[]> rows_l = ld.search(false);
if (rows_l.size() > 0){
wp.append(MustacheTool.apply(
this,
"DF_Devis_HTML",
"{'rows_l':"+ld.toJSON(ld.search(), null, false, false)+"}"
));
}
return wp.toString();
}
Vous appelez 2 fois le parsing mustache sur un même template, donc forcement vous dupliquez le append dans la page.
Il faut le faire une seule fois avec toutes vos données dans un seul JSON, de plus votre code contient pas mal d’incohérences et votre template contient en ] au lieu d’un }.
public String pubDevis(){
BootstrapWebPage wp = new BootstrapWebPage(
HTMLTool.getRoot(),
"Webpage publication pattern example",
true
);
// Ajout de valeurs de Devis
ObjectDB d = getGrant().getTmpObject("DF_Devis");
// pourquoi faire une recherfche sur un row_id qui ne ramenera qu'une seule ligne, puis l'afficher le résultat dans un tableau ?
// là il faut surement faire un select pour ramener les données de la base
d.setFieldFilter("row_id",getRowId());
// trop tot, vous n'avez pas toutes vos données filles, ou alors utilisez 2 templates différents à concatener dans votre page
/*
wp.append(MustacheTool.apply(
this,
"DF_Devis_HTML",
"{'rows':"+toJSON(d.search(), null, false, false)+"}"
));
*/
// Ajout de valeurs de lignes Devis
ObjectDB ld = getGrant().getTmpObject("DF_Ligne_Devis");
ld.resetFilters();
ld.setFieldFilter("DF_Ligne_Devis_DF_Devis_id",getRowId());
List<String[]> rows_l = ld.search(false);
if (rows_l.size() > 0){
wp.append(MustacheTool.apply(
this,
"DF_Devis_HTML",
// A priori il faut 2 listes dans votre template, donc :
"{'rows':"+d.toJSON(d.search(), null, false, false)+
// inutile de refaire un ld.search puisque vous avez déjà le résultat
",'rows_l':"+ld.toJSON(rows_l, null, false, false)+"}"
));
}
return wp.toString();
}.