Import CSV (Adapter) Spécifique

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,