//---------------------------------------------------------------
        public object GetValeur(CVersionDonneesObjetOperation version)
        {
            IChampPourVersion champ = GetChamp(version);

            if (champ is CChampCustomPourVersion)
            {
                CChampCustom champCustom = ((CChampCustomPourVersion)champ).ChampCustom;
                object       valeur      = version.GetValeurStd();
                if (champCustom.TypeDonneeChamp.TypeDonnee == TypeDonnee.tObjetDonneeAIdNumeriqueAuto)
                {
                    Type tp = champCustom.TypeObjetDonnee;
                    if (tp != null && valeur is int)
                    {
                        CObjetDonneeAIdNumerique objet = (CObjetDonneeAIdNumerique)Activator.CreateInstance(tp, new object[] { version.ContexteDonnee });
                        if (objet != null && objet.ReadIfExists((int)valeur))
                        {
                            return(objet);
                        }
                    }
                    return(null);
                }
                return(valeur);
            }
            return(null);
        }
Beispiel #2
0
        //-------------------------------------------------------------------------------
        public override CResultAErreur SaveAll(CContexteSauvegardeObjetsDonnees contexteSauvegarde, DataRowState etatsAPrendreEnCompte)
        {
            CResultAErreur result = CResultAErreur.True;
            DataTable      table  = contexteSauvegarde.ContexteDonnee.Tables[GetNomTable()];

            if (table != null)
            {
                ArrayList lstRows = new ArrayList(table.Rows);
                foreach (DataRow row in lstRows)
                {
                    if (row.RowState == DataRowState.Modified)
                    {
                        CVersionDonneesObjet version = new CVersionDonneesObjet(row);
                        version.CancelCreate();
                    }
                    if (row.RowState == DataRowState.Added || row.RowState == DataRowState.Modified)
                    {
                        CVersionDonneesObjet versionObjet = new CVersionDonneesObjet(row);
                        if (versionObjet.CodeTypeOperation == (int)CTypeOperationSurObjet.TypeOperation.Ajout ||
                            versionObjet.CodeTypeOperation == (int)CTypeOperationSurObjet.TypeOperation.Suppression)
                        {
                            CListeObjetsDonnees datas = versionObjet.ToutesLesOperations;

                            /*CListeObjetsDonnees datas = new CListeObjetsDonnees(versionObjet.ContexteDonnee, typeof(CVersionDonneesObjetOperation));
                             * datas.Filtre = new CFiltreData(CVersionDonneesObjet.c_champId + "=@1 and " +
                             *      CVersionDonneesObjetOperation.c_champOperation += "@2",
                             *      versionObjet.Id,
                             *      (int)versionObjet.CodeTypeOperation);
                             * datas.InterditLectureInDB = true;*/
                            datas.Filtre = new CFiltreData(CVersionDonneesObjetOperation.c_champOperation + "=@1",
                                                           versionObjet.CodeTypeOperation);
                            if (datas.Count == 0)
                            {
                                //Création du data. pour les ajouts et les suppressions,
                                //il doit y avoir un data indiquant l'opération
                                CVersionDonneesObjetOperation data = new CVersionDonneesObjetOperation(contexteSauvegarde.ContexteDonnee);
                                data.CreateNewInCurrentContexte();
                                data.VersionObjet      = versionObjet;
                                data.CodeTypeOperation = versionObjet.CodeTypeOperation;
                                data.Champ             = null;
                            }
                        }
                    }
                }
            }
            return(base.SaveAll(contexteSauvegarde, etatsAPrendreEnCompte));
        }
Beispiel #3
0
        //-------------------------------------------------------------------------------
        public override CResultAErreur TraitementAvantSauvegarde(CContexteDonnee contexte)
        {
            CResultAErreur result = base.TraitementAvantSauvegarde(contexte);

            if (!result)
            {
                return(result);
            }
            DataTable table = contexte.Tables[GetNomTable()];

            if (table != null)
            {
                ArrayList lstRows = new ArrayList(table.Rows);
                foreach (DataRow row in lstRows)
                {
                    if (row.RowState == DataRowState.Added || row.RowState == DataRowState.Modified)
                    {
                        CVersionDonneesObjet versionObjet = new CVersionDonneesObjet(row);
                        if (versionObjet.CodeTypeOperation == (int)CTypeOperationSurObjet.TypeOperation.Ajout ||
                            versionObjet.CodeTypeOperation == (int)CTypeOperationSurObjet.TypeOperation.Suppression)
                        {
                            CListeObjetsDonnees datas = versionObjet.Modifications;
                            datas.Filtre = new CFiltreData(CVersionDonneesObjetOperation.c_champOperation + "=@1",
                                                           versionObjet.CodeTypeOperation);
                            if (datas.Count == 0)
                            {
                                //Création du data. pour les ajouts et les suppressions,
                                //il doit y avoir un data indiquant l'opération
                                CVersionDonneesObjetOperation data = new CVersionDonneesObjetOperation(contexte);
                                data.CreateNewInCurrentContexte();
                                data.VersionObjet      = versionObjet;
                                data.CodeTypeOperation = versionObjet.CodeTypeOperation;
                                data.Champ             = null;
                            }
                        }
                    }
                }
            }
            return(result);
        }
        //---------------------------------------------------------------
        public CVersionDonneesObjetOperation JournaliseDonneeInContexte(CVersionDonneesObjet version, CChampCustom champ, DataRow row)
        {
            if (row.RowState != DataRowState.Modified && row.RowState != DataRowState.Added && row.RowState != DataRowState.Deleted)
            {
                return(null);
            }
            Type tp = CContexteDonnee.GetTypeForTable(row.Table.TableName);

            if (!typeof(CRelationElementAChamp_ChampCustom).IsAssignableFrom(tp))
            {
                return(null);
            }
            CRelationElementAChamp_ChampCustom rel = (CRelationElementAChamp_ChampCustom)Activator.CreateInstance(tp, new object[] { row });
            object valeurAvant = DBNull.Value;
            object valeurApres = DBNull.Value;

            if (champ.TypeDonneeChamp.TypeDonnee == TypeDonnee.tObjetDonneeAIdNumeriqueAuto)
            {
                if (row.HasVersion(DataRowVersion.Original))
                {
                    rel.VersionToReturn = DataRowVersion.Original;
                    valeurAvant         = rel.ValeurInt;
                    rel.VersionToReturn = DataRowVersion.Current;
                }
                if (row.HasVersion(DataRowVersion.Current))
                {
                    valeurApres = rel.ValeurInt;
                }
            }
            else
            {
                valeurAvant = DBNull.Value;
                if (row.HasVersion(DataRowVersion.Original))
                {
                    rel.VersionToReturn = DataRowVersion.Original;
                    valeurAvant         = rel.Valeur;
                    rel.VersionToReturn = DataRowVersion.Current;
                }
                if (row.HasVersion(DataRowVersion.Current))
                {
                    valeurApres = rel.Valeur;
                }
            }

            CVersionDonneesObjetOperation verData = null;
            ///Stef optim 13082008 : ne passe plus par une liste pour trouver l'objet
            //Ancien code

            /*
             * CListeObjetsDonnees datas = version.Modifications;
             * datas.Filtre = new CFiltreData(CVersionDonneesObjetOperation.c_champTypeChamp + "=@1 and " +
             *      CVersionDonneesObjetOperation.c_champChamp + "=@2",
             *      CChampCustomPourVersion.c_typeChamp,
             *      champ.Id.ToString());
             * datas.InterditLectureInDB = true;
             *
             * if (datas.Count != 0)
             *      verData = (CVersionDonneesObjetOperation)datas[0];
             * */
            //Nouveau code
            object dummy = null;

            if (!version.IsDependanceChargee(CVersionDonneesObjetOperation.c_nomTable, CVersionDonneesObjet.c_champId))
            {
                dummy = version.Modifications;
            }
            DataTable     table = version.ContexteDonnee.GetTableSafe(CVersionDonneesObjetOperation.c_nomTable);
            StringBuilder bl    = new StringBuilder();

            bl.Append(CVersionDonneesObjet.c_champId);
            bl.Append("=");
            bl.Append(version.Id);
            bl.Append(" and ");
            bl.Append(CVersionDonneesObjetOperation.c_champTypeChamp);
            bl.Append("='");
            bl.Append(CChampCustomPourVersion.c_typeChamp);
            bl.Append("' and ");
            bl.Append(CVersionDonneesObjetOperation.c_champChamp);
            bl.Append("='");
            bl.Append(champ.Id);
            bl.Append("'");
            DataRow[] rows = table.Select(bl.ToString());
            if (rows.Length > 0)
            {
                verData = new CVersionDonneesObjetOperation(rows[0]);
            }
            //fin du nouveau code
            else
            {
                verData = new CVersionDonneesObjetOperation(version.ContexteDonnee);
                verData.CreateNewInCurrentContexte();
                verData.VersionObjet      = version;
                verData.CodeTypeOperation = (int)CTypeOperationSurObjet.TypeOperation.Modification;
            }
            verData.FieldKey = champ.Id.ToString();

            //Pour les prévisionnelles, stocke la nouvelle valeur
            if (version.VersionDonnees.TypeVersion.Code == CTypeVersion.TypeVersion.Previsionnelle)
            {
                verData.SetValeurStd(valeurApres);
            }
            else
            {
                //Pour les archives, stocke l'ancienne valeur
                verData.SetValeurStd(valeurAvant);
            }
            verData.TypeChamp = CChampCustomPourVersion.c_typeChamp;
            if (version != null && version.TypeOperation == CTypeOperationSurObjet.TypeOperation.Aucune)
            {
                version.CodeTypeOperation = (int)CTypeOperationSurObjet.TypeOperation.Modification;
            }
            return(verData);
        }