Résultat à obtenir



Modifier table test pour ajouter sous test table

Découvrir la mise en relation des tables et l'adaptation des listes en quatre étapes et quatre tests

1 Utiliser sous_table_test comme composant pour la saisie dans table_test

je modifie la liste TableTestLISTE et j'ajoute le champ c_stab

public Object adapteField(Vue vue){
	t_table="table_test"; //Nom de la table 
	t_nbLigne=28; //Nombre de ligne à afficher
	t_filtre=null;
	v_filtre=null;
	t_index=new String[]{"c_code"}; //Order de la table
	switch (vue){
		case F3:
		default:{
			addSqlField("c_code",  2, Fma.NUMGRAS, "Code"); //1ère Colonne et 1er titre de colonne
			addSqlField("c_libe", 30, Fma.FIELD, "Libelle"); //2ème Colonne et 2ème titre de colonne
			addSqlField("c_stab",  2, Fma.FIELD, "sous table"); //3ème Colonne et 3ème titre de colonne
			break;}
	}
	return this;
}

Je modifie le mappage TableTestFICHE et j'ajoute un champ c_stab

public Object adapteField(Vue vue){
	t_table="table_test"; //Nom de la table 
	t_nbLigne=1;
	t_filtre=null;
	v_filtre=null;
	t_index=new String[]{"c_code"}; //Order de la table
	switch (vue){
		default:{
			addSqlField("c_code",  2, Fma.F2, "Code", "", Edit.F2, ""); //1er Edit et 1er Libellé
			addSqlField("c_libe", 30, Fma.FIELD, "Libelle", "", Edit.TEXT, ""); //2ème Edit et 2ème Libellé
			addSqlField("c_stab",  2, Fma.F2, "sous table", "", Edit.F2, ""); //3ème Edit et 3ème Libellé
			break;}
	}
	return this;
}

je modifie la saisie TableTestSAISIE et j'ajoute le composant JTextF2 avec comme vue SousTableTestVUE

public class TableTestSAISIE extends AbstractDbFiche {
	private static final long serialVersionUID = 1L;
	JTextDb lcode,llibe,lstab; // Les Labels de la fiche
	JTextDbF2 code=null; //1er Edit
	JTextDb libe=null; //2ème Edit
	JTextDbF2 stab=null; //3ème Edit
	public TableTestSAISIE(Sql sql) {
		super(sql);
		initStart();
	}
	public void initCreateLE() {
		lcode=new JTextDb();
		llibe=new JTextDb();
		lstab=new JTextDb();
		code =new JTextDbF2(new TableTestVUE(sql, "", Vue.F2)); 
		libe =new JTextDb();
		stab =new JTextDbF2(new SousTableTestVUE(sql, "", Vue.F2)); //la Combobox de choix Pour la saisie du code sous_table_test
	}
	public void initMapLE() {
		ccs.mapL(this, lcode, 0);
		ccs.mapL(this, llibe, 1);
		ccs.mapL(this, lstab, 2);
		ccs.mapE(this, code, 0);
		ccs.mapE(this, libe, 1);
		ccs.mapE(this, stab, 2);
	}
	public void initFocus() {
		setDefFocus(code);
	}
	public void setEditableColumns(FicheIEditableColumns fe, ListeIEditableColumn fl) {
		libe.setEditableColumns(fe, fl); // Le libellé est éditable dans la liste
	}
	public void fireEditableColumnUpdate(String nameField, Object value) {
		libe.fireEditableColumnUpdate(nameField, value); // Le libellé est éditable dans la liste
	}
	public void setBaseListener() {
		// La clé dindex
		ccs.addF2Listener(code, Ccs.NEWCODEF2);
		ccs.addF2Listener(code, Ccs.CONSULTF2);
		// La fiche
		ccs.addF2Listener(stab, Ccs.CODEINF2);
	}
	public void fireBaseListener(JComponent jc){
		// La clé dindex
		if (jc==code){
			if (sql.isModeMovable()){
				ccs.fireT(jc, Ccs.CONSULTF2);
			} 
			if (sql.isModeAppendUpdated()||sql.isModeAppend()){
				ccs.fireT(jc, Ccs.NEWCODEF2);
			}
		}
		// La fiche
		if (jc==stab){
			ccs.fireT(jc, Ccs.CODEINF2);
		}
	}

Je compile et je teste : la modification live de table_test et je complète les fiches avec le code sous_table_test

2 Aller plus loin et faire apparaître le libellé de sous_table_test sur la liste table_test

je modifie la vue TableTestVUE et j'ajoute la jointure joinStab avec sous_table_test

public void adapteJoin(Sql sql) {
	FieldsJoin joinStab=new FieldsJoin(
			new String[]{"c_stab"},
			sql.getGp(), 
			"sous_table_test", 
			"", 
			new String[]{"c_code"}, 
			new String[]{"c_libe"} 
	); 
	sql.addJoin(joinStab);
}

je modifie la liste TableTestLISTE et j'ajoute le champ sous_table_test.c_libe

public Object adapteField(Vue vue){
	t_table="table_test"; //Nom de la table 
	t_nbLigne=28; //Nombre de ligne à afficher
	t_filtre=null;
	v_filtre=null;
	t_index=new String[]{"c_code"}; //Order de la table
	switch (vue){
		case F3:
		default:{
			addSqlField("c_code" , 2 ,Fma.NUMGRAS, "Code"); //1ère Colonne et 1er titre de colonne
			addSqlField("c_libe" ,30 ,Fma.FIELD, "Libelle"); //2ème Colonne et 2ème titre de colonne
			addSqlField("c_stab" , 2 ,Fma.FIELD, "sous table"); //3ème Colonne et 3ème titre de colonne
			addSqlField("sous_table_test.c_libe" , 30, Fma.FIELD, "Libellé sous table"); //4ème Colonne et 4ème titre de colonne
			break;}
	}
	return this;
}

Je compile et je teste : la liste de table_test affiche 4 colonnes

3 j'ai mon libellé mais le code sous_table_test ne sert à rien dans cette liste

je modifie la liste TableTestLISTE et je change l'affichage du champ c_stab T_INVISIBLE

public Object adapteField(Vue vue){
	t_table="table_test"; //Nom de la table 
	t_nbLigne=28; //Nombre de ligne à afficher
	t_filtre=null;
	v_filtre=null;
	t_index=new String[]{"c_code"}; //Order de la table
	switch (vue){
		case F3:
		default:{
			addSqlField("c_code" ,  2, Fma.NUMGRAS, "Code"); //1ère Colonne et 1er titre de colonne
			addSqlField("c_libe" , 30, Fma.FIELD, "Libelle"); //2ème Colonne et 2ème titre de colonne
			addSqlField("c_stab" ,  2, Fma.INVISIBLE, "sous table"); //3ème Colonne et 3ème titre de colonne
			addSqlField("sous_table_test.c_libe" , 30, Fma.FIELD, "Libellé sous table"); //4ème Colonne et 4ème titre de colonne
			break;}
	}
	return this;
}

Je compile et je teste : la liste table_test n'affiche que 3 colonnes

4 cela n'est pas pratique je dois ajouter mes fiches sous_table_test avant de pouvoir les utiliser dans ma table_test

je modifie la liste TableTestSAISIE et je change l'appel de SousTableVUE en F2F3. Le F2F3 permet de basculer la liste Popup F2 en liste popup FicheF2F3, ceci autorise la création à la volée d'enregistrement

public void initCreateLE() {
	lcode=new JTextDb();
	llibe=new JTextDb();
	lstab=new JTextDb();
	code =new JTextDbF2(new TableTestVUE(sql, "", Vue.F2)); 
	libe =new JTextDb();
	stab =new JTextDbF2(new SousTableTestVUE(sql, "", Vue.F2F3)); //la Combobox de choix Pour la saisie du code sous_table_test
}

j'adapte une liste plus petite pour le F2F3 en modifiant SousTableTestListe

public Object adapteField(Vue vue){
	t_table="sous_table_test"; 
	t_nbLigne=28; 
	t_filtre=null;
	v_filtre=null;
	t_index=new String[]{"c_code"}; 
	switch (vue){
		case F2F3:
			t_nbLigne=8; //Nombre de ligne à afficher
			addSqlField("c_code" ,  2, Fma.NUMGRAS, "Code"); //1ère Colonne et 1er titre de colonne
			addSqlField("c_libe" , 30, Fma.FIELD, "Libelle"); //2ème Colonne et 2ème titre de colonne
			break; 
		case F3:
		default:{
			addSqlField("c_code" ,  2, Fma.NUMGRAS, "Code"); //1ère Colonne et 1er titre de colonne
			addSqlField("c_libe" , 30, Fma.FIELD, "Libelle"); //2ème Colonne et 2ème titre de colonne
			break;}
	}
	return this;
}

Je compile et je teste : je fais F2 sur l'édit Sous table d'une fiche, le pop up ne contient que 8 lignes. Je fais F3, je peux ajouter des fiches sous_table_test, je fais F3 pour revenir sur l'affichage liste du pop up

Conclusion, la table sous_test_table est maintenant un composant graphique utilisable dans tout le logiciel sous de multiples présentations


Consulter la documentation générale, Section Tables standards pour regarder des exemples de mise en forme

Rendre la saisie optionnelle ...