Bonjour @scampano ,
Merci pour votre retour, j’ai beau essayé d’implementer le getGrant() dans le preprocess mais cela ne marche pas, voici mon code qui ne fonctionne pas, à l’import rien ne se passe et aucun log, peux tu faire des suggestions s’il te plait ? (cela marche bien quand je mets les getGrant() dans le processValues)
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) {
}
}
}
}
}
}
}
Merci d’avance,