Masquer les états vides d’un diagramme d’états

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 :
Liste reduite v4

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.

Bonjour,

Ce hook n’existe pas, vous devez avoir créé cette méthode spécifiquement.
fld_enumlist (nom de la liste de valeurs) était un champ originel de la V1, passé deprecated depuis la V3 car remplacé par une vraie jointure vers la liste de valeurs de l’ENUM.

Vous devez donc revoir votre code pour faire la jointure entre fld.fld_list_id et la table m_list qui contient le nom de la liste lov_name.

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