Bonjour David,
Je travaille sur l’instance usecase, je me permets de me joindre au post.
Je pense peut être connaitre la raison du probléme, c’est lors de l’import d’un CSV avec un adapter spécifique, j’ai du implémenté les getGrant() dans le hook processValues() qui s’execute à chaque ligne du CSV, j’ai beau essayé d’implémenter ça dans le preProcess mais ça ne marche pas, voici le code : (je vous laisse le choix de déplacer le post si nécessaire)
Voici le code :
package com.simplicite.adapters.Factur_projetDD;
import java.util.*;
import com.simplicite.util.*;
import com.simplicite.util.integration.*;
import com.simplicite.util.tools.*;
import com.simplicite.util.tools.JSONTool;
import org.json.JSONObject;
/**
* Adapter InvEvtCSVAdapter
*/
public class InvEvtCSVAdapter extends CSVLineBasedAdapter {
private static final long serialVersionUID = 1L;
private ObjectDB contratBo ;
private ObjectDB chefprojetBo ;
private ObjectDB projetBo ;
private ObjectDB factureBo ;
// Good practice : use specific exception class
private static class InvEvtCSVAdapterException extends Exception{
public InvEvtCSVAdapterException(String message){
super(message);
}
}
public String preProcess(){
// set CSV separator
setSeparator(';');
contratBo = getGrant().getTmpObject("Contrat");
chefprojetBo = getGrant().getTmpObject("ChefProjet");
projetBo = getGrant().getTmpObject("Projet");
factureBo = getGrant().getTmpObject("Facture");
// to generate a subsequently imported XML, call super.preProcess()
// doing so will add a starting <simplicite> tag
return null;
}
@Override
public String processValues(long lineNumber, String[] values){
// Good practice: handle errors with exceptions
try{
// add some logs to the .log file (added in the imports supervisor object)
appendLog("=== Processing line #"+lineNumber+" : "+Arrays.toString(values));
if (lineNumber>1) // skip header
processWithExceptions(lineNumber, values);
}
catch(InvEvtCSVAdapterException e){
// add some logs to the .err file (added in the imports supervisor object)
appendError("=== Error with line #"+lineNumber+" : "+Arrays.toString(values));
appendError(e);
// change import status to impact the supervisor object
setStatus(SystemXML.SUPERVISOR_STATUS_IMPORT_ERROR);
}
// returned String gets added to a XML subsequently imported.
// in this case we do not append anything to XML subsequently imported,
// as we directly create the objects instead
return null;
}
public void processWithExceptions(long lineNumber, String[] values) throws InvEvtCSVAdapterException{
synchronized(factureBo){
synchronized(projetBo){
synchronized(chefprojetBo){
synchronized(contratBo){
try {
//Create BO Tool for each BO
BusinessObjectTool contratBot = new BusinessObjectTool(contratBo); // or contratBo.getTool();
BusinessObjectTool chefprojetBot = new BusinessObjectTool(chefprojetBo);
BusinessObjectTool projetBot = new BusinessObjectTool(projetBo);
BusinessObjectTool factureBot = new BusinessObjectTool(factureBo);
//Start Processing
//Processing for "Projet"
List<String[]> rs = projetBot.search(new JSONObject()
.put("numero_projet", values[3]));
if (rs.size() == 1) // 1 found = update
projetBo.setValues(rs.get(0), true);
else if (rs.size() == 0) // 0 found => create
{
projetBo.resetValues(true);
//Processing for "contrat"
rs = contratBot.search(new JSONObject().put("numContrat", values[0]));
if (rs.size() == 1) // 1 found = update
contratBo.setValues(rs.get(0), true);
else if (rs.size() == 0) // 0 found => create
contratBo.resetValues(true); //
else // Should never happen if search is done using all functional keys
throw new Exception(rs.size() + " contact records found");
contratBo.setFieldValue("numContrat", values[0]);
contratBo.setFieldValue("typeContrat", values[7]);
contratBot.validateAndSave();
//Processing for "ChefProjet"
rs = chefprojetBot.search(new JSONObject()
.put("nom", values[6].split(",[ ]*")[0])
.put("prenom",values[6].split(",[ ]*")[1])
);
if (rs.size() == 1) // 1 found = update
chefprojetBo.setValues(rs.get(0), true);
else if (rs.size() == 0) // 0 found => create
chefprojetBo.resetValues(true); //
else // Should never happen if search is done using all functional keys
throw new Exception(rs.size() + " records found");
chefprojetBo.setFieldValue("nom", values[6].split(",[ ]*")[0]);
chefprojetBo.setFieldValue("prenom", values[6].split(",[ ]*")[1]);
chefprojetBot.validateAndSave();
}
else // Should never happen if search is done using all functional keys
throw new Exception(rs.size() + " project chief records found");
//Create/Update "Projet"
projetBo.setFieldValue("numero_projet", values[3]);
projetBo.setFieldValue("orgaProjet", values[2] );
projetBo.setFieldValue("nomProjet", values[4] );
projetBo.setFieldValue("nomTacheSup", values[5]);
projetBo.setFieldValue("Projet_Contrat_id", contratBo.getFieldValue("row_id"));
projetBo.setFieldValue("Projet_ChefProjet_id",chefprojetBo.getFieldValue("row_id") );
projetBo.setFieldValue("numLigneContrat", values[1] );
projetBot.validateAndSave();
//Create/Update "Facture"
List<String[]> rs_fac = factureBot.search(new JSONObject()
.put("numEvt", values[10]));
if (rs_fac.size() == 1) // 1 found = update
factureBo.setValues(rs_fac.get(0), true);
else if (rs_fac.size() == 0) // 0 found => create
factureBo.resetValues(true); //
else // Should never happen if search is done using all functional keys
throw new Exception(rs_fac.size() + " invoice records found");
//Date mapping from DD/MM/YYYY to YYYY/MM/DD
String dbDate = values[9].split("/")[2] +"-"+ values[9].split("/")[1]+ "-"+ values[9].split("/")[0];
factureBo.setFieldValue("dateFinEvenement", dbDate );
factureBo.setFieldValue("description", values[11] );
//replace the comma by dot anb delete space from "montantNonFacture"
String montantNonFacture = values[12].replaceAll(",",".");
factureBo.setFieldValue("montantNonFacture", montantNonFacture.replaceAll("\\s+","") );
factureBo.setFieldValue("Facture_Projet_id", projetBo.getFieldValue("row_id") );
factureBo.setFieldValue("reportFacturation", values[14] );
factureBo.setFieldValue("commentaireFacture", values[15] );
//replace the comma by dot anb delete space from "montantAFacturer"
String montantAFacturer = values[16].replaceAll(",",".");
factureBo.setFieldValue("montantAFacturer", montantAFacturer.replaceAll("\\s+","") );
factureBo.setFieldValue("statutEvtFacture", "REP" );
//Status related to "type contrat" on the first import
if (rs_fac.size() == 0 && (values[7].equals("Date à date") || values[7].equals("Epuisements de jours")) )
factureBo.setFieldValue("statutEvtFacture", "FAC" );
else
factureBo.setFieldValue("statutEvtFacture", "AFAC" );
//Status related to "description" on evry import
if (values[11].equals("pas de base factu") || values[11].equals("reste à facturer"))
factureBo.setFieldValue("statutEvtFacture", "ATT" );
factureBo.setFieldValue("TypeEvent", values[8] );
factureBo.setFieldValue("numEvt", values[10]);
factureBot.validateAndSave();
}catch (Exception e) {
}
}
}
}
}
}
}