//-------------------------------------------------------------------
 public void ApplyModifs()
 {
     if (LockEdition)
     {
         return;
     }
     foreach (ListViewItem item in m_listView.Items)
     {
         CObjetDonneeAIdNumeriqueAuto objet = (CObjetDonneeAIdNumeriqueAuto)item.Tag;
         bool bCreate = item.Checked;
         if (ExclusionParException)
         {
             bCreate = !bCreate;
         }
         if (bCreate)
         {
             CObjetDonnee relation = (CObjetDonnee)m_hashtableObjets[objet];
             if (relation == null)
             {
                 relation = (CObjetDonnee)Activator.CreateInstance(m_listeRelationsSelectionnees.TypeObjets, new object[] { m_contexte });
                 relation.CreateNewInCurrentContexte(null);
                 CInterpreteurTextePropriete.SetValue(relation, m_strPropObjetConcerne, m_objetConcerne);
                 CInterpreteurTextePropriete.SetValue(relation, m_strProprieteRetournantObjetSecondaire, objet);
                 m_hashtableObjets[objet] = relation;
             }
             if (OnValideRelation != null)
             {
                 object data = GetDataAssocie(objet);
                 if (OnSelectionChanged != null)
                 {
                     OnSelectionChanged(objet, data);
                 }
                 data = GetDataAssocie(objet);
                 OnValideRelation(objet, relation, ref data);
                 SetDataAssocie(objet, data);
             }
         }
         else
         {
             if (m_hashtableObjets[objet] != null)
             {
                 ((CObjetDonnee)m_hashtableObjets[objet]).Delete();
                 m_hashtableObjets[objet] = null;
             }
         }
     }
 }
Exemplo n.º 2
0
        //------------------------------------
        private CResultAErreur ImporteRow(DataRow row, CFiltreData filtreCle, CContexteDonnee contexteDestination)
        {
            CResultAErreur result = CResultAErreur.True;

            Dictionary <CDefinitionProprieteDynamique, object> dicValeurs = new Dictionary <CDefinitionProprieteDynamique, object>();
            List <object> lstValeurs = new List <object>();

            if (filtreCle != null)
            {
                filtreCle.Parametres.Clear();
            }
            foreach (CMappageChampImport mappage in Mappages)
            {
                object valeur = mappage.Origine.GetValeur(row);
                if (mappage.IsCle && filtreCle != null)
                {
                    if (valeur == null)
                    {
                        result.EmpileErreur("Can not import field @1 as key, because imported value is null|20045", mappage.ProprieteDestination.Nom);
                        return(result);
                    }
                    filtreCle.Parametres.Add(valeur);
                }
                dicValeurs[mappage.ProprieteDestination] = valeur;
            }
            CObjetDonnee objet   = Activator.CreateInstance(m_typeCible, new object[] { contexteDestination }) as CObjetDonnee;
            bool         bCreate = true;

            //Cherche si l'objet exite
            if (filtreCle != null)
            {
                bCreate = !objet.ReadIfExists(filtreCle, !m_bChargerTouteLaCible);
            }
            if (bCreate && (OptionImport & EOptionImport.Create) != EOptionImport.Create)
            {
                return(result);
            }
            if (!bCreate && (OptionImport & EOptionImport.Update) != EOptionImport.Update)
            {
                return(result);
            }
            if (bCreate)
            {
                objet.CreateNewInCurrentContexte(null);
            }
            bool bUpdate = false;

            foreach (KeyValuePair <CDefinitionProprieteDynamique, object> kv in dicValeurs)
            {
                object val = kv.Value;
                if (kv.Value is int && typeof(CObjetDonneeAIdNumerique).IsAssignableFrom(kv.Key.TypeDonnee.TypeDotNetNatif))
                {
                    CObjetDonneeAIdNumerique obj = Activator.CreateInstance(kv.Key.TypeDonnee.TypeDotNetNatif, new object[] { contexteDestination }) as CObjetDonneeAIdNumerique;
                    if (!obj.ReadIfExists((int)kv.Value, !m_bChargerTouteLaCible))
                    {
                        obj = null;
                    }
                    val = obj;
                }

                result = CInterpreteurProprieteDynamique.GetValue(objet, kv.Key);
                if (result)
                {
                    object valeurOrigine = result.Data;
                    if ((val == null && valeurOrigine != null) ||
                        (valeurOrigine == null && val != null) ||
                        (val != null && valeurOrigine != null && !val.Equals(valeurOrigine)))
                    {
                        result = CInterpreteurProprieteDynamique.SetValue(objet, kv.Key, val);
                        if (!result)
                        {
                            return(result);
                        }
                        bUpdate = true;
                    }
                }
            }
            if (bCreate)
            {
                m_nNbCreated++;
            }
            else if (bUpdate)
            {
                m_nNbUpdated++;
            }

            return(result);
        }
        //------------------------------------------------
        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);
        }