Petit retour d’expérience. Pour imager le résultat, disons que l’objectif est d’importer un CSV qui va remplir un objet métier “Personne” avec le nom et prénom de chaque personne.
J’ai créé un premier objet métier “Personne” avec les deux attributs qu’il faut.
Ensuite j’ai créé un second objet métier “ImportCsvPersonne” avec les attributs fichier, dateCreationImport, dateDebutImport, dureeImport, nombreAjout.
Sur mon objet ImportCsvPersonne, j’ai créé une action qui lance une méthode dans mon objet métier afin de démarrer un new Thread et de lancer mon import en arrière plan. A la fin, je met à jour la date de fin de l’import et la progression arbitrairement à 100.
J’ai créé un Adapter qui extend de CSVLineBasedAdapter qui consiste simplement à sauter la première ligne (le header) et pour les autres, de créer un objet métier personne et d’y ajouter les valeurs => ObjectDB personne = getGrant().getTmpObject(“Personne”) puis je fais des setFieldValue
De manière générale, j’ai réussi à faire ce qu’il fallait. Mais pour aller plus loin…voici mes questions :
Une fois que j’ai executé mon adapteur a partir de mon fichier via New Integration() comme le montre votre exemple, je ne comprend pas comment récupérer les résultats de l’adapter en lui-même (nombre de ligne ajouté, durée, etc.) : de pouvoir profiter de la puissance de l’adapter enfaite.
Dans l’écran de visualisation des imports dans Monitoring, tous mes imports restent à “A importer” et ne sont pas sur terminé
Je n’arrive pas a gérer la progression de l’import pour pouvoir l’afficher à l’utilisateur
Dans mon adapteur, je n’arrive pas a comprendre comment gerer le header (vérifier qu’il y a bien les colonnes que je veux lire, plutôt que de faire des valeurs, mais récupérer l’index des colonnes par rapport à leur nom.
Merci pour votre aide!
@Override
public String processValues(long numeroLigne, String[] valeurs) throws PlatformException, InterruptedException {
if (numeroLigne == 1)
return "";
ObjectDB personne = getGrant().getTmpObject("Personne");
personne.setFieldValue("prenom", valeurs[0]);
personne.setFieldValue("nom", valeurs[1]);
personne.create();
return "";
}
public String import(){
setFieldValue("dateImport", Tool.getCurrentDateTime());
save();
String id = getGrant().simpleQuery("select max(row_id) from import;" );
new Thread(() -> {
try {
processImport(id);
} catch (Exception e) {
AppLog.log("ERROR", getClass(), "import", e.getLocalizedMessage(), getGrant());
AppLog.error(getClass(), "import", e.getLocalizedMessage(), e, getGrant());
}
}).start();
return null;
}
public void processImport(String importId) throws IOException{
LocalDateTime dateDebut = LocalDateTime.now();
invokeMethod_Personne_deleteAllEntries();
File fichierCsv = getField("fichier").getDocument(getGrant()).getFile();
if (fichierCsv != null) {
enregistreEtat("En cours...", importId);
} else {
enregistreEtat("Erreur", importId);
return;
}
Message res = new Integration().importADP(getGrant(), "CSVAdapterImport", new FileInputStream(fichierCsv), "Import v2", null);
enregistreEtat("Terminé", importfId);
setFieldValue("dureeImport", calculDuree(dateDebut ));
setFieldValue("progression", 100);
update();
}