Bonjour,
Afin d’alléger un diagramme d’état, j’utilise en V4 le GrantHooks.filtrerDiagramEtats pour masquer les états pour lesquels on n’a pas de records. Le contrôle est le suivant :
// On cherche s'il y a un diagram d'états pour cet objet afin de réduire les statuts qui n'ont pas de lignes correspondantes dans l'objets :
var sql = " select fld.FLD_NAME "+
" from m_field fld "+
" , m_object obj "+
" , m_objfield obf "+
" where obj.row_module_id = (select row_id from m_module where mdl_name = 'Immo') "+
" and fld.fld_enumlist in ( select distinct sta_lovname "+
" from bpm_state "+
" where row_module_id = (select row_id from m_module where mdl_name = 'Immo'))"+
" and obf.OBF_OBJECT_ID = obj.ROW_ID "+
" and obf.OBF_FIELD_ID = fld.ROW_ID "+
" and obf_REF_OBJECT_ID is null "+
" and obj.obj_name = '" + obj.getObjectName()+"'" +
" limit 1; " ;
var attributDiagram = grant.simpleQuery(sql);
if (attributDiagram !='') {
var lov = obj.getAccessibleStates();
var len = lov.size();
var o = grant.getTmpObject(obj.getObjectName());
var x =0;
for (var l = 0; l < len; l++) {
var itemLov = lov.get(x);
o.resetFilters();
o.getField(attributDiagram).setFilter(itemLov.getCode());
var rows = o.search();
if(rows!=null && rows.size()>0) { // Il existe des lignes avec ce statut, on le garde
x=x+1;
} else lov.remove(itemLov); // On retire ce staut (pas de ligne associé)
}
}
Et voici un exemple du résultat :
En V5, PlatformHooks.filtrerDiagramEtats passe en erreur car le champ fld.fld_enumlist n’existe plus dans la base.
org.postgresql.util.PSQLException: ERROR: column ld.fld_enumlist does not exist
Et le diagramme s’affiche avec toutes les valeurs :
Comment puis-je contourner ce pb svp ? Est-ce qu’il y a une méthode plus simple pour répondre à ce besoin ?
Merci d’avance,
Abed.