//---------------------------------------------------------------------
        public CResultAErreur AppliqueValeur(int?nIdVersion, IChampPourVersion champ, CObjetDonneeAIdNumerique objet, object valeur)
        {
            CResultAErreur result = CResultAErreur.True;

            if (objet.Row.Table.Columns.Contains(champ.FieldKey))
            {
                try
                {
                    if (valeur is byte[])
                    {
                        CDonneeBinaireInRow data = new CDonneeBinaireInRow(objet.ContexteDonnee.IdSession, objet.Row.Row, champ.FieldKey);
                        data.Donnees = (byte[])valeur;
                        objet.Row[champ.FieldKey] = data;
                    }
                    else if (valeur is IDifferencesBlob)
                    {
                        CContexteDonnee ctx = new CContexteDonnee(objet.ContexteDonnee.IdSession, true, false);

                        result = ctx.SetVersionDeTravail(nIdVersion, false);
                        if (!result)
                        {
                            return(result);
                        }
                        CObjetDonneeAIdNumerique objetDansVersion = (CObjetDonneeAIdNumerique)Activator.CreateInstance(objet.GetType(), new object[] { ctx });
                        if (objetDansVersion.ReadIfExists(objet.Id))
                        {
                            CDonneeBinaireInRow dataInVersion = new CDonneeBinaireInRow(ctx.IdSession, objetDansVersion.Row.Row, champ.FieldKey);

                            CDonneeBinaireInRow data = new CDonneeBinaireInRow(objet.ContexteDonnee.IdSession, objet.Row.Row, champ.FieldKey);
                            data.Donnees = dataInVersion.Donnees;
                            objet.Row[champ.FieldKey] = data;
                        }
                        else
                        {
                            throw new Exception(I.T("Error|199"));
                        }
                    }
                    else
                    {
                        objet.Row[champ.FieldKey] = valeur == null ? DBNull.Value : valeur;
                    }
                }
                catch
                {
                    try
                    {
                        bool bOldEnforce = objet.ContexteDonnee.EnforceConstraints;
                        objet.ContexteDonnee.EnforceConstraints = false;
                        objet.Row[champ.FieldKey] = valeur == null ? DBNull.Value : valeur;
                        objet.ContexteDonnee.AssureParents(objet.Row.Row);
                    }
                    catch (Exception e)
                    {
                        result.EmpileErreur(new CErreurException(e));
                        result.EmpileErreur(I.T("Error while applying value for field @1|189", champ.NomConvivial));
                    }
                }
            }
            return(result);
        }
Beispiel #2
0
        public static object GetValeur(
            DataRow row,
            string strChampString,
            string strChampBlob,
            string strChampType,
            CContexteDonnee ctx)
        {
            Type t = CActivatorSurChaine.GetType((string)row[strChampType]);

            if (t == typeof(IDifferencesBlob))
            {
                CDonneeBinaireInRow    blob       = GetBlob(row, strChampBlob, ctx);
                MemoryStream           stream     = new MemoryStream(blob.Donnees);
                BinaryReader           reader     = new BinaryReader(stream);
                CSerializerReadBinaire serializer = new CSerializerReadBinaire(reader);
                I2iSerializable        objet      = null;
                CResultAErreur         result     = serializer.TraiteObject(ref objet);

                reader.Close();
                stream.Close();

                if (result)
                {
                    return(objet);
                }
                System.Console.WriteLine(I.T("Error while deserializing blob diffs|30000"));
                return(null);
            }
            else if (t == typeof(byte[]))
            {
                CDonneeBinaireInRow blob = GetBlob(row, strChampBlob, ctx);
                if (blob != null)
                {
                    return(blob.Donnees);
                }
                else
                {
                    return(null);
                }
            }
            else if (typeof(CObjetDonneeAIdNumerique).IsAssignableFrom(t))
            {
                int nId = Int32.Parse((string)row[strChampString]);
                CObjetDonneeAIdNumerique obj = (CObjetDonneeAIdNumerique)Activator.CreateInstance(t, new object[] { ctx });
                if (obj.ReadIfExists(nId))
                {
                    return(obj);
                }
                return(null);
            }
            else if (t != null && row[strChampString] != DBNull.Value)
            {
                return(CUtilTexte.FromUniversalString((string)row[strChampString], t));
            }
            return(null);
        }
Beispiel #3
0
        /// //////////////////////////////////////////
        ///<summary>
        ///Charge les données de la table qui vont devoir être mise à jour
        ///à partir des données modifiées dans la table source
        ///</summary>
        public CResultAErreur ChargeDonneesAMettreAJour(DataSet donneesSources)
        {
            CResultAErreur result = CResultAErreur.True;

            ArrayList lstTables = CContexteDonnee.GetTablesOrderInsert(donneesSources);

            foreach (DataTable table in lstTables)
            {
                DataTable tableDest = null;
                //S'assure que la table est bien chargée
                try
                {
                    tableDest = GetTableSafe(table.TableName);
                }
                catch
                {
                    //La table n'existe pas
                }
                if (tableDest != null && m_mappeurTablesToClass.IsSynchronisable(table.TableName) && table.Rows.Count != 0)
                {
                    IObjetServeur serveur         = CContexteDonnee.GetTableLoader(tableDest.TableName, null, IdSession);
                    string        strNomTableInDb = CContexteDonnee.GetNomTableInDbForNomTable(tableDest.TableName);
                    if (serveur.CountRecords(strNomTableInDb, new CFiltreData("1=1")) != 0)                    //Première maj : copie complète
                    {
                        string strColPrim = table.PrimaryKey[0].ColumnName;
                        string strFiltre  = "";
                        foreach (DataRow row in table.Rows)
                        {
                            strFiltre += row[strColPrim].ToString() + ",";
                        }
                        if (strFiltre.Length != 0)
                        {
                            //Supprime la dernière virgule;
                            strFiltre = strFiltre.Substring(0, strFiltre.Length - 1);
                            strFiltre = strColPrim += " in (" + strFiltre + ")";
                            IObjetServeur loader   = GetTableLoader(table.TableName);
                            DataTable     tableNew = loader.Read(new CFiltreData(strFiltre));
                            if (table == null)
                            {
                                result.EmpileErreur(I.T("Error while reading table @1|128", table.TableName));
                                return(result);
                            }
                            IntegreTable(tableNew, false);
                        }
                    }
                }
            }
            //Charge les éléments à supprimer
            CContexteDonnee contexteForListe = new CContexteDonnee(IdSession, true, false);
            DataTable       tableSync        = donneesSources.Tables[CEntreeLogSynchronisation.c_nomTable];
            DataTable       tableCopie       = CUtilDataSet.AddTableCopie(donneesSources.Tables[CEntreeLogSynchronisation.c_nomTable], contexteForListe);

            foreach (DataRow row in tableSync.Rows)
            {
                tableCopie.ImportRow(row);
            }
            CListeObjetsDonnees liste = new CListeObjetsDonnees(contexteForListe, typeof(CEntreeLogSynchronisation));

            liste.InterditLectureInDB = true;
            liste.Filtre = new CFiltreData(CEntreeLogSynchronisation.c_champType + "=@1", (int)CEntreeLogSynchronisation.TypeModifLogSynchro.tDelete);
            foreach (CEntreeLogSynchronisation entree in liste)
            {
                DataTable table = GetTableSafe(entree.TableConcernee);
                CObjetDonneeAIdNumerique objet = (CObjetDonneeAIdNumerique)GetNewObjetForTable(table);
                objet.ReadIfExists(entree.IdElement);
            }
            return(result);
        }