コード例 #1
0
        /// /////////////////////////////////////////////////////////
        public DataSet GetAddAndUpdateInTableMain(
            string strNomTable,
            int nSessionSyncDebut,
            int nSessionSyncFin,
            string strCodeGroupeSynchronisation)
        {
            Type    tp     = CContexteDonnee.GetTypeForTable(strNomTable);
            DataSet dsDest = null;

            if (tp == null)
            {
                return(null);
            }

            //Récupère les filtres
            CFiltresSynchronisation filtres = GetFiltres(strCodeGroupeSynchronisation);

            using (CContexteDonnee contexte = new CContexteDonnee(IdSession, true, false))
            {
                CFiltreData filtreSynchro = null;
                if (filtres != null)
                {
                    filtreSynchro = filtres.GetFiltreForTable(m_nIdSession, strNomTable);
                }

                if (filtreSynchro == null)
                {
                    filtreSynchro = new CFiltreData();
                }
                int    nNumParametreIdSync = filtreSynchro.Parametres.Count + 1;
                string strFiltre           = filtreSynchro.Filtre;
                filtreSynchro.Filtre = "(" + CSc2iDataConst.c_champIdSynchro + ">=@" + nNumParametreIdSync.ToString() + " and " +
                                       CSc2iDataConst.c_champIdSynchro + "<=@" + (nNumParametreIdSync + 1).ToString();
                if (nSessionSyncDebut == -1)
                //C'est la première synchro, intègre les éléments modifiés avant prise en charge
                //des synchros
                {
                    if (filtreSynchro is CFiltreDataAvance)
                    {
                        filtreSynchro.Filtre += " or hasno(" + CSc2iDataConst.c_champIdSynchro + ")";
                    }
                    else
                    {
                        filtreSynchro.Filtre += " or " + CSc2iDataConst.c_champIdSynchro + " is null";
                    }
                }
                filtreSynchro.Filtre += ")";
                if (strFiltre != "")
                {
                    filtreSynchro.Filtre += " and (" + strFiltre + ")";
                }
                filtreSynchro.Parametres.Add(nSessionSyncDebut);
                filtreSynchro.Parametres.Add(nSessionSyncFin);
                CListeObjetsDonnees liste = new CListeObjetsDonnees(contexte, tp, false);
                liste.Filtre = filtreSynchro;
                liste.AssureLectureFaite();

                //Charge les données de synchronisation
                CFiltreData filtreDataSync = new CFiltreData(CEntreeLogSynchronisation.c_champTable + "=@1 and " +
                                                             CSc2iDataConst.c_champIdSynchro + ">=@2 and " +
                                                             CSc2iDataConst.c_champIdSynchro + "<=@3",
                                                             strNomTable, nSessionSyncDebut, nSessionSyncFin);
                liste        = new CListeObjetsDonnees(contexte, typeof(CEntreeLogSynchronisation), false);
                liste.Filtre = filtreDataSync;
                liste.AssureLectureFaite();

                //Transforme le contexte en dataset (pour sérialisation web !! )
                dsDest = new DataSet();
                foreach (DataTable table in contexte.Tables)
                {
                    DataTable tableDest = CUtilDataSet.AddTableCopie(table, dsDest);
                    foreach (DataRow row in table.Rows)
                    {
                        tableDest.ImportRow(row);
                    }
                    //Supprime les colonnes blob
                    for (int nCol = tableDest.Columns.Count - 1; nCol >= 0; nCol--)
                    {
                        if (tableDest.Columns[nCol].DataType == typeof(CDonneeBinaireInRow))
                        {
                            tableDest.Columns.RemoveAt(nCol);
                        }
                    }
                }
            }
            return(dsDest);
        }
コード例 #2
0
        //--------------------------------------------------------
        public CFiltreData GetFiltreData(int nIdSession, CFiltresSynchronisation filtresSynchro)
        {
            if (m_filtreDejaCalcule != null)
            {
                return(m_filtreDejaCalcule);
            }
            Type tp = CContexteDonnee.GetTypeForTable(m_strNomTableFille);

            if (tp == null)
            {
                return(null);
            }
            CStructureTable structure = CStructureTable.GetStructure(tp);

            if (structure == null)
            {
                return(null);
            }
            CFiltreData filtre = null;

            foreach (CInfoRelation relationParente in structure.RelationsParentes)
            {
                if (relationParente.Composition &&
                    (relationParente.TableParente == m_strNomTableParenteDeComposition ||
                     m_strNomTableParenteDeComposition.Length == 0))
                {
                    Type            tpParent      = CContexteDonnee.GetTypeForTable(relationParente.TableParente);
                    CStructureTable structParente = CStructureTable.GetStructure(tpParent);
                    if (structParente != null && structParente.NomTable != m_strNomTableFille)
                    {
                        HashSet <int>     lstIdsALire = new HashSet <int>();
                        C2iRequeteAvancee requete     = new C2iRequeteAvancee();
                        requete.TableInterrogee  = relationParente.TableParente;
                        requete.FiltreAAppliquer = filtresSynchro.GetFiltreForTable(nIdSession, relationParente.TableParente);
                        requete.ListeChamps.Add(
                            new C2iChampDeRequete(structParente.ChampsId[0].NomChamp,
                                                  new CSourceDeChampDeRequete(structParente.ChampsId[0].NomChamp),
                                                  typeof(int),
                                                  OperationsAgregation.None,
                                                  true));
                        CResultAErreur result = requete.ExecuteRequete(nIdSession);
                        if (result)
                        {
                            DataTable table = result.Data as DataTable;
                            if (table != null)
                            {
                                foreach (DataRow row in table.Rows)
                                {
                                    int?nVal = row[0] as int?;
                                    if (nVal != null)
                                    {
                                        lstIdsALire.Add(nVal.Value);
                                    }
                                }
                            }
                        }
                        if (lstIdsALire.Count > 0)
                        {
                            StringBuilder bl = new StringBuilder();
                            foreach (int nId in lstIdsALire)
                            {
                                bl.Append(nId.ToString());
                                bl.Append(',');
                            }
                            bl.Remove(bl.Length - 1, 1);
                            filtre = CFiltreData.GetOrFiltre(filtre,
                                                             new CFiltreData(relationParente.ChampsFille[0] + " in (" + bl.ToString() + ")"));
                        }
                    }
                }
            }
            if (filtre == null)
            {
                filtre = new CFiltreDataImpossible();
            }
            m_filtreDejaCalcule = filtre;
            return(m_filtreDejaCalcule);
        }
コード例 #3
0
        //-----------------------------------------------------------------
        public CFiltreData GetFiltreData(int nIdSession, CFiltresSynchronisation filtresSynchro)
        {
            if (m_filtreDejaCalcule != null)
            {
                return(m_filtreDejaCalcule);
            }
            Type tp = CContexteDonnee.GetTypeForTable(m_strNomTable);

            if (tp == null)
            {
                return(null);
            }
            CStructureTable structure = CStructureTable.GetStructure(tp);

            if (structure == null)
            {
                return(null);
            }
            HashSet <int>        lstIdsALire     = new HashSet <int>();
            List <CInfoRelation> relationsFilles = new List <CInfoRelation>();

            foreach (Type tpTest in CContexteDonnee.GetAllTypes())
            {
                CStructureTable s = CStructureTable.GetStructure(tpTest);
                if (s != null)
                {
                    foreach (CInfoRelation relation in s.RelationsParentes)
                    {
                        if (relation.TableParente == m_strNomTable)
                        {
                            relationsFilles.Add(relation);
                        }
                    }
                }
            }

            //va chercher les dépendances filles qui auront besoin d'éléments de ce type
            foreach (CInfoRelation relation in relationsFilles)
            {
                Type tpFils = CContexteDonnee.GetTypeForTable(relation.TableFille);
                //Vérifie qu'il n'y a pas de filtre FilsDe ou FilsComposition sur la table
                bool bPrendreCetteTable = true;
                foreach (IFiltreSynchronisation filtre in filtresSynchro.GetFiltresSynchroPourTable(relation.TableFille))
                {
                    if (relation.Composition && filtre is CFiltreSynchronisationFilsCompositions)
                    {
                        bPrendreCetteTable = false;
                        break;
                    }
                    CFiltreSynchronisationFilsDe filsDe = filtre as CFiltreSynchronisationFilsDe;
                    if (filsDe != null)
                    {
                        if (filsDe.TablesParentes.Contains(m_strNomTable))
                        {
                            bPrendreCetteTable = false;
                            break;
                        }
                    }
                }
                if (bPrendreCetteTable)
                {
                    C2iRequeteAvancee requete = new C2iRequeteAvancee();
                    requete.TableInterrogee = relation.TableFille;
                    if (relation.TableFille != m_strNomTable)
                    {
                        requete.FiltreAAppliquer = filtresSynchro.GetFiltreForTable(nIdSession, relation.TableFille);
                    }
                    requete.ListeChamps.Add(
                        new C2iChampDeRequete(relation.ChampsFille[0],
                                              new CSourceDeChampDeRequete(relation.ChampsFille[0]),
                                              typeof(int),
                                              OperationsAgregation.None,
                                              true));
                    CResultAErreur result = requete.ExecuteRequete(nIdSession);
                    if (result)
                    {
                        DataTable table = result.Data as DataTable;
                        if (table != null)
                        {
                            foreach (DataRow row in table.Rows)
                            {
                                int?nVal = row[0] as int?;
                                if (nVal != null)
                                {
                                    lstIdsALire.Add(nVal.Value);
                                }
                            }
                        }
                    }
                }
            }
            if (lstIdsALire.Count == 0)
            {
                m_filtreDejaCalcule = new CFiltreDataImpossible();
                return(m_filtreDejaCalcule);
            }
            StringBuilder bl = new StringBuilder();

            foreach (int nId in lstIdsALire)
            {
                bl.Append(nId);
                bl.Append(',');
            }
            bl.Remove(bl.Length - 1, 1);
            m_filtreDejaCalcule = new CFiltreData(structure.ChampsId[0].NomChamp + " in (" + bl.ToString() + ")");
            return(m_filtreDejaCalcule);
        }