/// ///////////////////////////////////// //////////////////////////////////
        public CContexteDonnee CreateStructureFromTypes(params Type[] lesTypes)
        {
            ArrayList lstStructures = new ArrayList();

            foreach (Type tp in lesTypes)
            {
                CStructureTable structure = CStructureTable.GetStructure(tp);
                lstStructures.Add(structure);
            }

            //Création des tables
            foreach (CStructureTable structure in lstStructures)
            {
                DataTable table = new DataTable(structure.NomTable);
                foreach (CInfoChampTable champ in structure.Champs)
                {
                    DataColumn col = new DataColumn(champ.NomChamp);
                    col.DataType = champ.TypeDonnee;
                    if (champ.Longueur > 0)
                    {
                        col.MaxLength = champ.Longueur;
                    }
                    table.Columns.Add(col);
                }
                DataColumn[] cols = new DataColumn[structure.ChampsId.Length];
                for (int nChamp = 0; nChamp < structure.ChampsId.Length; nChamp++)
                {
                    cols[nChamp] = table.Columns[structure.ChampsId[nChamp].NomChamp];
                }
                table.PrimaryKey = cols;
                m_contexte.Tables.Add(table);
            }
            //Les relations se créent toutes seules par le contexte de données
            return(m_contexte);
        }
        //Journalise les données d'un élement
        public CVersionDonneesObjet JournaliseDonnees(System.Data.DataRow row, CVersionDonnees version)
        {
            CVersionDonneesObjet versionObjet = null;

            if (row.RowState != DataRowState.Added &&
                row.RowState != DataRowState.Modified &&
                row.RowState != DataRowState.Deleted)
            {
                return(null);
            }
            Type typeElement = CContexteDonnee.GetTypeForTable(row.Table.TableName);

            versionObjet = version.GetVersionObjetAvecCreation(row);
            if (versionObjet == null)
            {
                return(null);
            }
            if (row.HasVersion(DataRowVersion.Original))
            {
                CStructureTable structure = CStructureTable.GetStructure(typeElement);

                foreach (CInfoChampTable info in structure.Champs)
                {
                    if (info.m_bIsInDB)
                    {
                        new CJournaliseurChampDb().JournaliseDonneeInContexte(versionObjet, info.NomChamp, row);
                    }
                }
            }
            return(versionObjet);
        }
Пример #3
0
        //----------------------------------------------------
        public static string GetIdUniverselFromId(Type typeElement, int nId)
        {
            string            strNomTable = CContexteDonnee.GetNomTableForType(typeElement);
            CStructureTable   structure   = CStructureTable.GetStructure(typeElement);
            C2iRequeteAvancee rq          = new C2iRequeteAvancee();

            rq.TableInterrogee  = strNomTable;
            rq.FiltreAAppliquer = new CFiltreData(
                structure.ChampsId[0].NomChamp + "=@1", nId);
            rq.ListeChamps.Add(new C2iChampDeRequete(
                                   "UniversalId",
                                   new CSourceDeChampDeRequete(CObjetDonnee.c_champIdUniversel),
                                   typeof(string),
                                   OperationsAgregation.None,
                                   true));
            CResultAErreur result = rq.ExecuteRequete(0);

            if (result && result.Data is DataTable)
            {
                DataTable table = result.Data as DataTable;
                if (table.Rows.Count > 0)
                {
                    return((string)table.Rows[0][0]);
                }
            }
            return("");
        }
Пример #4
0
        public static List <CInfoTypeElementInDb> GetInfosInDatabase(int nIdSession)
        {
            List <CInfoTypeElementInDb> lst = new List <CInfoTypeElementInDb>();

            foreach (Type tp in CContexteDonnee.GetAllTypes())
            {
                CStructureTable   structure = CStructureTable.GetStructure(tp);
                C2iRequeteAvancee requete   = new C2iRequeteAvancee();
                requete.TableInterrogee = CContexteDonnee.GetNomTableForType(tp);
                requete.ListeChamps.Add(new C2iChampDeRequete("NBELEMENTS", new CSourceDeChampDeRequete(structure.Champs[0].NomChamp),
                                                              typeof(int), OperationsAgregation.Number, false));
                CInfoTypeElementInDb info   = new CInfoTypeElementInDb(tp);
                CResultAErreur       result = requete.ExecuteRequete(nIdSession);
                if (result && result.Data is DataTable)
                {
                    info.NbElements = (int)((DataTable)result.Data).Rows[0][0];
                }

                if (!typeof(IObjetSansVersion).IsAssignableFrom(tp))
                {
                    requete.FiltreAAppliquer = new CFiltreData(CSc2iDataConst.c_champIdVersion + " is not null and " +
                                                               CSc2iDataConst.c_champIsDeleted + "=@1", false);
                    requete.FiltreAAppliquer.IgnorerVersionDeContexte = true;
                    result = requete.ExecuteRequete(nIdSession);
                    if (result && result.Data is DataTable)
                    {
                        info.NbElementsPrevisionnels = (int)((DataTable)result.Data).Rows[0][0];
                    }
                    requete.FiltreAAppliquer = new CFiltreData(CSc2iDataConst.c_champIsDeleted + "=@1", true);
                    requete.FiltreAAppliquer.IgnorerVersionDeContexte = true;
                    result = requete.ExecuteRequete(nIdSession);
                    if (result && result.Data is DataTable)
                    {
                        info.NbElementsSupprimes = (int)((DataTable)result.Data).Rows[0][0];
                    }
                }
                lst.Add(info);
            }
            return(lst);
        }
Пример #5
0
        public List <IChampPourVersion> GetChampsJournalisables(CObjetDonneeAIdNumerique objet)
        {
            List <IChampPourVersion> champs = null;

            if (!m_dicTypeToChamps.TryGetValue(objet.GetType(), out champs))
            {
                champs = new List <IChampPourVersion>();

                CStructureTable   structure = CStructureTable.GetStructure(objet.GetType());
                CInfoChampTable[] allchamps = structure.Champs;

                List <string> lstChampsSys = CSc2iDataConst.GetNomsChampsSysteme();
                foreach (CInfoChampTable c in allchamps)
                {
                    if (c.m_bIsInDB && !lstChampsSys.Contains(c.NomChamp))
                    {
                        champs.Add(new CChampPourVersionInDb(c.NomChamp, c.NomConvivial));
                    }
                }
                m_dicTypeToChamps[objet.GetType()] = champs;
            }
            return(champs);
        }
Пример #6
0
        //-----------------------------------------------------------------
        public void AddFiltreSynchroPourTable(string strTable, IFiltreSynchronisation filtre, bool bAvecCompositions)
        {
            List <IFiltreSynchronisation> lstFiltres = null;

            if (!m_dicTableToFiltre.TryGetValue(strTable, out lstFiltres))
            {
                lstFiltres = new List <IFiltreSynchronisation>();
                m_dicTableToFiltre[strTable] = lstFiltres;
            }
            lstFiltres.Add(filtre);
            if (bAvecCompositions)
            {
                //trouve les compositions de la table et les filtre !
                foreach (Type tp in CContexteDonnee.GetAllTypes())
                {
                    CStructureTable structure = CStructureTable.GetStructure(tp);
                    if (structure != null)
                    {
                        foreach (CInfoRelation relParente in structure.RelationsParentes)
                        {
                            Type tpFils = CContexteDonnee.GetTypeForTable(relParente.TableFille);
                            if (tpFils == null || tpFils.GetCustomAttributes(typeof(FullTableSyncAttribute), true).Length == 0)
                            {
                                if (relParente.Composition && relParente.TableParente == strTable && relParente.TableFille != strTable)
                                {
                                    AddFiltreSynchroPourTable(structure.NomTable, new CFiltreSynchronisationFilsCompositions(structure.NomTable, strTable), true);
                                }
                                else if (relParente.TableFille == strTable && relParente.TableParente == strTable)
                                {
                                    AddFiltreSynchroPourTable(structure.NomTable, new CFiltreSynchroFilsAutoreference(relParente.ChampsFille[0]), false);
                                }
                            }
                        }
                    }
                }
            }
        }
        public void ReadArbre(
            CListeObjetsDonnees listeSource,
            CListeObjetsDonnees.CArbreProps arbre,
            List <string> lstPaquetsALire)
        {
            string strCle       = "";
            string strPropriete = "";

            if (!CDefinitionProprieteDynamique.DecomposeNomProprieteUnique(arbre.ProprietePrincipale, ref strCle, ref strPropriete))
            {
                strPropriete = arbre.ProprietePrincipale;//Mode sans DefinitionProprieteDynamique
            }
            Type         typeObjets         = listeSource.TypeObjets;
            Hashtable    sousArbresToRemove = new Hashtable();
            PropertyInfo info = typeObjets.GetProperty(strPropriete);

            if (info != null)
            {
                object[] attribs = info.GetCustomAttributes(typeof(OptimiseReadDependanceAttribute), true);
                if (attribs.Length != 0)
                {
                    string strProp = ((OptimiseReadDependanceAttribute)attribs[0]).ProprieteALire;
                    if (strProp.IndexOf('.') > 0)
                    {
                        string strSuite = strProp.Substring(strProp.IndexOf('.') + 1);
                        strProp = strProp.Substring(0, strProp.IndexOf('.'));
                        arbre.GetArbreSousProp(strSuite, true);
                    }
                    strPropriete = strProp;
                }
            }
            CStructureTable structure = CStructureTable.GetStructure(typeObjets);
            //Cherche la relation liée à la propriete
            bool bRelationTrouvee = false;

            foreach (CInfoRelation relation in structure.RelationsFilles)
            {
                if (relation.Propriete == strPropriete)
                {
                    ReadDependanceFille(
                        strPropriete,
                        listeSource,
                        arbre,
                        relation,
                        lstPaquetsALire);
                    lstPaquetsALire  = null;
                    bRelationTrouvee = true; break;
                }
            }
            if (!bRelationTrouvee)
            {
                foreach (CInfoRelation relation in structure.RelationsParentes)
                {
                    if (relation.Propriete == strPropriete)
                    {
                        ReadDependanceParente(strPropriete, listeSource, arbre, relation);
                        bRelationTrouvee = true;
                    }
                }
            }
            if (!bRelationTrouvee)
            {
                sousArbresToRemove[arbre] = true;
            }
            foreach (CListeObjetsDonnees.CArbreProps arbreTmp in sousArbresToRemove.Keys)
            {
                arbre.SousArbres.Remove(arbreTmp);
            }
        }