//------------------------------------------------
        public CResultAErreurType <CObjetDonnee> FindObjet(
            DataRow rowSource,
            CContexteImportDonnee contexteImport,
            CValeursImportFixe valeursFixes,
            ref string strFiltre)
        {
            CResultAErreurType <CObjetDonnee> resObjet = new CResultAErreurType <CObjetDonnee>();
            CResultAErreur res = CResultAErreur.True;

            StringBuilder blFiltre = new StringBuilder();

            if (valeursFixes != null)
            {
                foreach (KeyValuePair <string, object> kv in valeursFixes.ValeursFixes)
                {
                    blFiltre.Append(kv.Key);
                    blFiltre.Append("=");
                    blFiltre.Append(kv.Value == null ? "null" : kv.Value.ToString());
                    blFiltre.Append(";");
                }
            }


            //Création du filtre
            CComposantFiltreDynamiqueEt compoPrincipal = new CComposantFiltreDynamiqueEt();

            //Recherche à partir des champs simples
            foreach (CMappageChampSimple mapSimple in MappagesChampsSimples)
            {
                if (mapSimple.UseAsKey)
                {
                    res = mapSimple.GetValue(rowSource, contexteImport);
                    if (!res)
                    {
                        res.EmpileErreur(I.T("Erreur while searching object|20093"));
                        resObjet.EmpileErreur(res.Erreur);
                        return(resObjet);
                    }

                    //Stockage valeur témoin
                    CSourceSmartImportField sourceField = mapSimple.Source as CSourceSmartImportField;
                    if (sourceField != null)
                    {
                        contexteImport.SetValeurTemoin(sourceField.NomChampSource, res.Data);
                    }

                    blFiltre.Append(mapSimple.Propriete.NomPropriete);
                    if (res.Data == null)
                    {
                        CComposantFiltreDynamiqueTestNull testNull = new CComposantFiltreDynamiqueTestNull();
                        testNull.Champ    = mapSimple.Propriete;
                        testNull.TestNull = true;
                        compoPrincipal.AddComposantFils(testNull);
                        blFiltre.Append("=null;");
                    }
                    else
                    {
                        CComposantFiltreDynamiqueValeurChamp testValeur = new CComposantFiltreDynamiqueValeurChamp();
                        testValeur.Champ            = mapSimple.Propriete;
                        testValeur.IdOperateur      = CComposantFiltreOperateur.c_IdOperateurEgal;
                        testValeur.ExpressionValeur = new C2iExpressionConstante(res.Data);
                        compoPrincipal.AddComposantFils(testValeur);
                        blFiltre.Append("=");
                        blFiltre.Append(res.Data.ToString());
                        blFiltre.Append(";");
                    }
                }
            }


            //Recherche à partir des objets parents
            foreach (CMappageEntiteParente mapParent in m_listeMappagesParents)
            {
                if (mapParent.UseAsKey)
                {
                    CResultAErreurType <CObjetDonnee> resParent = mapParent.GetObjetAssocie(rowSource, contexteImport, false);
                    if (!resParent)
                    {
                        resObjet.EmpileErreur(resParent.Erreur);
                        return(resObjet);
                    }
                    CObjetDonneeAIdNumerique      objetId = resParent.DataType as CObjetDonneeAIdNumerique;
                    CDefinitionProprieteDynamique defId   = null;
                    object valeurTest = null;

                    if (typeof(CObjetDonneeAIdNumerique).IsAssignableFrom(mapParent.Propriete.TypeDonnee.TypeDotNetNatif))
                    {
                        defId = new CDefinitionProprieteDynamiqueDotNet(
                            "Id",
                            "Id",
                            new CTypeResultatExpression(typeof(int), false),
                            false,
                            true, "");
                        defId.InsereParent(mapParent.Propriete);
                        valeurTest = objetId != null?objetId.Id:-1;
                    }
                    else if (CObjetDonnee.TypeManageIdUniversel(mapParent.Propriete.TypeDonnee.TypeDotNetNatif))
                    {
                        defId = new CDefinitionProprieteDynamiqueDotNet("Universal id",
                                                                        "IdUniversel",
                                                                        new CTypeResultatExpression(typeof(string), false),
                                                                        false, true, "");
                        defId.InsereParent(mapParent.Propriete);
                        valeurTest = resParent.DataType != null ? resParent.DataType.IdUniversel : null;
                    }
                    else
                    {
                        resObjet.EmpileErreur(I.T("Can not search objet of type @1|20094",
                                                  DynamicClassAttribute.GetNomConvivial(mapParent.Propriete.TypeDonnee.TypeDotNetNatif)));
                        return(resObjet);
                    }
                    blFiltre.Append(defId.NomPropriete);

                    if (resParent.DataType == null)
                    {
                        CComposantFiltreDynamiqueTestNull testNull = new CComposantFiltreDynamiqueTestNull();
                        testNull.Champ    = defId;
                        testNull.TestNull = true;
                        compoPrincipal.AddComposantFils(testNull);
                        blFiltre.Append("=null;");
                    }
                    else
                    {
                        CComposantFiltreDynamiqueValeurChamp testValeur = new CComposantFiltreDynamiqueValeurChamp();
                        testValeur.Champ            = defId;
                        testValeur.IdOperateur      = CComposantFiltreOperateur.c_IdOperateurEgal;
                        testValeur.ExpressionValeur = new C2iExpressionConstante(valeurTest);
                        compoPrincipal.AddComposantFils(testValeur);
                        blFiltre.Append("=");
                        blFiltre.Append(valeurTest.ToString());
                        blFiltre.Append(";");
                    }
                }
            }
            if (blFiltre.Length == 0)//Pas de filtre
            {
                return(resObjet);
            }
            strFiltre = blFiltre.ToString();
            CObjetDonnee objet = contexteImport.GetEntiteForFiltre(TypeEntite, strFiltre);

            if (objet != null)
            {
                resObjet.DataType = objet;
                return(resObjet);
            }

            CFiltreDynamique filtre = new CFiltreDynamique(contexteImport.ContexteDonnee);

            filtre.TypeElements       = TypeEntite;
            filtre.ComposantPrincipal = compoPrincipal;
            res = filtre.GetFiltreData();
            if (res && res.Data is CFiltreDataAvance)
            {
                if (valeursFixes != null)
                {
                    CFiltreDataAvance filtreData = res.Data as CFiltreDataAvance;
                    StringBuilder     blAdd      = new StringBuilder();
                    int nParam = filtreData.Parametres.Count + 1;
                    foreach (KeyValuePair <string, object> kv in valeursFixes.ValeursFixes)
                    {
                        if (kv.Value == null)
                        {
                            blAdd.Append("HasNo(");
                            blAdd.Append(kv.Key);
                            blAdd.Append(") and ");
                        }
                        else
                        {
                            blAdd.Append(kv.Key);
                            blAdd.Append("=@");
                            blAdd.Append((nParam++));
                            blAdd.Append(" and ");
                            filtreData.Parametres.Add(kv.Value);
                        }
                    }
                    blAdd.Remove(blAdd.Length - 5, 5);
                    if (filtreData.Filtre.Length > 0)
                    {
                        blAdd.Insert(0, " and ");
                    }
                    filtreData.Filtre += blAdd;
                }
                objet = Activator.CreateInstance(TypeEntite, new object[] { contexteImport.ContexteDonnee }) as CObjetDonnee;
                if (objet.ReadIfExists(((CFiltreData)res.Data)))
                {
                    contexteImport.SetEntiteForFiltre(strFiltre, objet);
                    resObjet.DataType = objet;
                    return(resObjet);
                }
            }
            else
            {
                res.EmpileErreur(I.T("Erreur while searching object|20093"));
                resObjet.EmpileErreur(res.Erreur);
                return(resObjet);
            }
            return(resObjet);
        }
        //------------------------------------------------
        public CResultAErreur ImportRow(
            DataRow row,
            CContexteImportDonnee contexteImport,
            CValeursImportFixe valeursFixes,
            bool bIsRoot)
        {
            CResultAErreur result = CResultAErreur.True;

            contexteImport.PushIdConfigMappage(IdMappage);
            try
            {
                string strFiltre = "";
                CResultAErreurType <CObjetDonnee> resObjet = FindObjet(row, contexteImport, valeursFixes, ref strFiltre);
                if (!resObjet)
                {
                    contexteImport.AddLog(new CLigneLogImport(
                                              ETypeLigneLogImport.Error,
                                              row,
                                              "",
                                              contexteImport,
                                              resObjet.Erreur.ToString()));
                    result.EmpileErreur(resObjet.Erreur);
                    return(result);
                }
                if (resObjet.DataType == null && this.OptionCreation == EOptionCreationElementImport.None)
                {
                    contexteImport.AddLog(new CLigneLogImport(
                                              ETypeLigneLogImport.Alert,
                                              row,
                                              "",
                                              contexteImport,
                                              I.T("Line not imported because creation is forbidden for this element|20095")));
                    return(result);
                }

                CObjetDonnee objet  = resObjet.DataType;
                bool         bIsNew = false;
                if (objet == null)
                {
                    bIsNew = true;
                    //Création
                    try
                    {
                        objet = Activator.CreateInstance(TypeEntite, new object[] { contexteImport.ContexteDonnee }) as CObjetDonnee;
                    }
                    catch { }
                    if (objet == null)
                    {
                        result.EmpileErreur(I.T("Error while creating object @1|20096", DynamicClassAttribute.GetNomConvivial(TypeEntite)));
                        contexteImport.AddLog(new CLigneLogImport(
                                                  ETypeLigneLogImport.Error,
                                                  row,
                                                  null,
                                                  contexteImport,
                                                  result.Erreur.ToString()));
                        return(result);
                    }
                    if (objet is CObjetDonneeAIdNumeriqueAuto)
                    {
                        ((CObjetDonneeAIdNumeriqueAuto)objet).CreateNewInCurrentContexte();
                    }
                    else
                    {
                        objet.CreateNewInCurrentContexte(null);
                    }
                    contexteImport.AddElementQuiAEteAjoute(objet);
                    contexteImport.SetEntiteForFiltre(strFiltre, objet);
                }

                if (bIsRoot)
                {
                    contexteImport.SetElementPourLigne(contexteImport.CurrentRowIndex, objet);
                }

                contexteImport.SetObjetImporteForIdMappage(IdMappage, objet);

                result = UpdateObjet(row, objet, bIsNew, contexteImport, valeursFixes);
                if (!result)
                {
                    contexteImport.AddLog(new CLigneLogImport(
                                              ETypeLigneLogImport.Error,
                                              row,
                                              "",
                                              contexteImport,
                                              result.Erreur.ToString()));
                    return(result);
                }
            }
            catch (Exception e)
            {
                result.EmpileErreur(new CErreurException(e));
            }
            finally
            {
                contexteImport.PopIdConfigMappage();
            }
            return(result);
        }