Import XML : postProcess

Bonjour,

J’ai créé un Adaptateur de type LineBasedAdapter pour importer des données en base et je voudrais effectuer des opérations APRES que les données aient été physiquement écrites en BDD.

Je pensais ajouter mon code dans la méthode postProcess() mais je me suis rendu compte que celle-ci était appelée avant l’écriture en BDD…

Est-il possible de forcer l’import du fichier XML généré par l’adaptateur avant d’appeler la méthode postProcess ?

Merci.

Bonjour,

Le postProcess est appelé avant l’écriture en bdd effectivement.
Pourquoi ne pas utiliser le postSave des objets importés ?

Bonjour,

Merci de votre réponse.
Je ne suis pas la personne ayant initié le développement de cet adaptateur mais voici en gros (car j’ai supprimé tous les traitements de l’extrait de code) comment cette dernière a procédé :

public class MyAdapter extends LineBasedAdapter {

	public static String toXmlUpsert(ObjectDB obj,String[] vals,List<String> header,Hashtable<String,String> transcodage,DataXML datas)
	{
		ObjectXML objectXml =  new ObjectXML(obj.getName(), ObjectXML.ACTION_UPSERT);

		...

	    objectXml.addData(datas);
	    return objectXml.toString();
	}


	String traitementLigne(String[] vals)
	{
		return  toXmlUpsert(....);
	}

	@Override
	public String preProcess() {
		...
	}
	
	@Override
	public String processLine(long lineNumber, String line)
	{
		append(traitementLigne(vals));
		return "";
	}
	
	@Override
	public void postProcess() {
		...
	}
}

Au lieu de passer par le xml, on peut également modifier directement les objets dans le traitement de la ligne (dans la méthode processLine)

ObjectDB obj = getGrant().getBatchObject("ObjectName");
obj.setFieldValue("field1", vals[0]);
obj.setFieldValue("field2", vals[1]);
...
obj.create();

Appelez-vous cet adapteur depuis un bouton d’action ?
Quel traitement voulez-vous faire après l’import des données ?

En effet, j’ai développé d’autres adaptateurs en écrivant directement les objets en BDD mais dans ce cas de figure, je ne voulais pas réécrire intégralement l’adaptateur et m’appuyer sur le travail fait par mon collègue.

Dans mon cas, j’importe les données en cliquant sur l’Import XML, en sélectionnant un fichier et l’adaptateur correspondant.

Aujourd’hui, je veux MAJ une table d’utilisateurs à partir d’un fichier, et nettoyer cette même table une fois l’import effectué.
Le nettoyage consiste à supprimer tous les utilisateurs encore en BDD qui n’étaient pas présent dans le fichier.
Pour se faire, j’ai un champ dans la table qui sert de flag que je positionne à 0 lorsque j’importe chaque ligne, puis je supprime tous les utilisateurs qui ont ce flag à autre chose que 0… Sauf qu’au moment du postProcess, tous les utilisateurs ont un flag différent de 0. Donc l’import me recrée tous les utilisateurs au lieu de faire des update… ce qui pose problème puisque les row_id ne sont plus les mêmes…

Bref, ma question était de savoir s’il y avait possibilité de forcer l’écriture en base du fichier XML avant l’appel de postProcess.
J’ai trouvé la méthode directProcess dans l’adapter mais je ne sais pas à quoi elle sert…

Je ferais une méthode qui supprime les utilisateurs dont le flag est différent de 0.
La méthode serait appelée depuis une action de l’utilisateur ou une tâche planifiée.

Oui j’y ai pensé… mais le soucis, c’est qu’entre le moment de l’import et le moment du passage de la tâche planifiée, il restera des utilisateurs qui ne devraient plus être là…

Donc pour résumer, si je veux que la suppression des utilisateurs se fasse au moment de l’import, il va bien falloir que réécrive l’adaptateur ?

Si vous importez les données manuellement, vous pouvez lancer manuellement la tâche planifiée tout de suite après.

En effet, mais je crains que mon client n’oublie de le faire… ce n’est pas forcément très intuitif.
Merci quand même.

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