示例#1
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("");
        }
        public CResultAErreur MAJ_Champs()
        {
            CResultAErreur result = CResultAErreur.True;

            if (m_preferenceEditee != null && m_gestionnaireModeEdition.ModeEdition)
            {
                if (m_txtFiltre.Text == "")
                {
                    m_preferenceEditee.FiltrePrefere = null;
                }
                else
                {
                    string strNomTable = CContexteDonnee.GetNomTableForType(m_preferenceEditee.TypeObjets);
                    result = CAnalyseurSyntaxiqueFiltre.AnalyseFormule(m_txtFiltre.Text, strNomTable);
                    if (!result)
                    {
                        return(result);
                    }

                    CFiltreDataAvance filtre = new CFiltreDataAvance(strNomTable, "");
                    filtre.ComposantPrincipal = result.Data as CComposantFiltre;
                    m_panelParametres.AffecteToFiltre(filtre);
                    m_preferenceEditee.FiltrePrefere = filtre;
                }
            }
            return(result);
        }
示例#3
0
        /// ///////////////////////////////////////////////////////////
        private void FillNode(TreeNode nodeParent)
        {
            CGroupeStructurant groupe = null;
            IList liste = null;

            if (nodeParent != null)
            {
                groupe = (CGroupeStructurant)nodeParent.Tag;
                liste  = new ArrayList();
                foreach (IRelationGroupeGroupeNecessaire relation in groupe.RelationsGroupesNecessitants)
                {
                    liste.Add(relation.GroupeNecessitant);
                }
            }
            else
            {
                liste = new CListeObjetsDonnees(sc2i.win32.data.CSc2iWin32DataClient.ContexteCourant, m_typeGroupes);
                string strNomTable = CContexteDonnee.GetNomTableForType(m_typeGroupes);
                ((CListeObjetsDonnees)liste).Filtre = new CFiltreDataAvance(strNomTable, "HasNo(RelationsGroupesNecessitants.Id)");
            }
            foreach (CGroupeStructurant grp in liste)
            {
                TreeNode node = new TreeNode(grp.Libelle);
                node.Tag = grp;
                if (nodeParent == null)
                {
                    m_arbre.Nodes.Add(node);
                }
                else
                {
                    nodeParent.Nodes.Add(node);
                }
                FillNode(node);
            }
        }
示例#4
0
        public static CResultAErreur VerifieUnicite(
            CContexteDonnee contexte,
            Type typeObjets,
            DataRowState states)
        {
            CResultAErreur           result     = CResultAErreur.True;
            DataTable                table      = contexte.Tables[CContexteDonnee.GetNomTableForType(typeObjets)];
            List <CInfoFiltreUnique> lstFiltres = GetFiltres(typeObjets);

            if (lstFiltres.Count == 0)
            {
                return(result);
            }
            if (table != null)
            {
                ArrayList lstCopie = new ArrayList(table.Rows);
                foreach (DataRow row in table.Rows)
                {
                    if ((row.RowState & states) != 0)
                    {
                        result = VerifieUnicite(row, lstFiltres, typeObjets);
                        if (!result)
                        {
                            return(result);
                        }
                    }
                }
            }
            return(result);
        }
示例#5
0
        //--------------------------------------------------------------------------
        public CResultAErreur ReadRefsForType(Type tp)
        {
            CResultAErreur result = CResultAErreur.True;

            if (tp == null)
            {
                return(result);
            }
            List <string> lst = new List <string>();

            m_dicTypeToKeys[tp] = lst;
            if (m_configuration.IsIgnore(tp))
            {
                return(result);
            }
            NoIdUniverselAttribute att = tp.GetCustomAttribute <NoIdUniverselAttribute>(true);

            if (att != null)
            {
                return(result);
            }
            m_indicateurProgression.SetInfo(DynamicClassAttribute.GetNomConvivial(tp));
            string strNomTable = CContexteDonnee.GetNomTableForType(tp);

            //Compte les éléments dans la table
            using (CContexteDonnee ctx = new CContexteDonnee(m_nIdSession, true, false))
            {
                CListeObjetsDonnees lstCount = new CListeObjetsDonnees(ctx, tp);
                int nNb = lstCount.CountNoLoad;
                if (nNb > m_configuration.LimiteNbPourRechercheReference)
                {
                    m_setTypesIgnoresAutomatiquement.Add(tp);
                    return(result);
                }
            }
            C2iRequeteAvancee r = new C2iRequeteAvancee(null);

            r.TableInterrogee = strNomTable;
            r.ListeChamps.Add(new C2iChampDeRequete(CObjetDonnee.c_champIdUniversel,
                                                    new CSourceDeChampDeRequete(CObjetDonnee.c_champIdUniversel),
                                                    typeof(string),
                                                    OperationsAgregation.None,
                                                    true));
            result = r.ExecuteRequete(m_nIdSession);
            if (result)
            {
                DataTable table = result.Data as DataTable;
                if (table != null)
                {
                    foreach (DataRow row in table.Rows)
                    {
                        lst.Add((string)row[0]);
                        m_dicKeyToTypes[(string)row[0]] = tp;
                    }
                }
            }

            return(result);
        }
示例#6
0
        //----------------------------------------------------------------------------------
        public CResultAErreur CreateTableSimpleInDataset(C2iTableExport tableExport, CContexteDonnee contexteDest, Type typeParent)
        {
            CResultAErreur result   = CResultAErreur.True;
            PropertyInfo   property = typeParent.GetProperty(tableExport.ChampOrigine.NomProprieteSansCleTypeChamp);

            if (property == null)
            {
                result.EmpileErreur(I.T("The property @1 was not found in the @2 type|105", tableExport.ChampOrigine.NomPropriete, typeParent.ToString()));
                return(result);
            }
            Object[]  attribs          = property.GetCustomAttributes(typeof(RelationAttribute), true);
            Type      typeObjet        = null;
            DataTable tableDestination = null;

            if (attribs.Length != 0)
            {
                RelationAttribute relParente = (RelationAttribute)attribs[0];
                tableDestination = contexteDest.GetTableSafe(relParente.TableMere);
                typeObjet        = CContexteDonnee.GetTypeForTable(relParente.TableMere);
            }
            else
            {
                attribs = property.GetCustomAttributes(typeof(RelationFilleAttribute), true);
                if (attribs.Length != 0)
                {
                    RelationFilleAttribute relFille = (RelationFilleAttribute)attribs[0];
                    tableDestination = contexteDest.GetTableSafe(CContexteDonnee.GetNomTableForType(relFille.TypeFille));
                    typeObjet        = relFille.TypeFille;
                }
                else
                {
                    result.EmpileErreur(I.T("The property @1 cannot be integrated into a simple export|106", tableExport.ChampOrigine.NomPropriete));
                    return(result);
                }
            }



            foreach (C2iChampExport champ in tableExport.Champs)
            //Crée les colonnes calculées
            {
                result = CreateChampInTable(champ, tableDestination);
                if (!result)
                {
                    result.EmpileErreur(I.T("Error during field @1 creation|104", champ.NomChamp));
                    return(result);
                }
            }
            foreach (C2iTableExport tableFille in tableExport.TablesFilles)
            {
                result &= CreateTableSimpleInDataset(tableFille, contexteDest, typeObjet);
                if (!result)
                {
                    return(result);
                }
            }
            return(result);
        }
示例#7
0
        //----------------------------------------------------------
        public CResultAErreur AnnuleModificationPrevisionnelle(CVersionDonneesObjet versionObjet)
        {
            CContexteDonnee contexte    = versionObjet.ContexteDonnee;
            CResultAErreur  result      = CResultAErreur.True;
            int             nIdObjet    = versionObjet.IdElement;
            Type            typeObjet   = versionObjet.TypeElement;
            CVersionDonnees versionPrev = versionObjet.VersionDonnees;
            int             nIdVersion  = versionPrev.Id;

            //Vérifie que l'utilisateur peut travailler avec cette version
            result = versionPrev.EnregistreEvenement(CVersionDonnees.c_eventBeforeUtiliser, true);
            if (!result)
            {
                return(result);
            }
            contexte.SetVersionDeTravail(-1, false);



            //Suppression de l'objet associé
            string strPrimKey            = contexte.GetTableSafe(CContexteDonnee.GetNomTableForType(typeObjet)).PrimaryKey[0].ColumnName;
            CListeObjetsDonnees listeTmp = new CListeObjetsDonnees(contexte, typeObjet);

            listeTmp.Filtre = new CFiltreData(
                CSc2iDataConst.c_champIdVersion + "=@1 and " +
                "(" + CSc2iDataConst.c_champOriginalId + "=@2 or " +
                strPrimKey + "=@2)",
                nIdVersion,
                nIdObjet);
            listeTmp.Filtre.IgnorerVersionDeContexte = true;
            result = CObjetDonneeAIdNumerique.Delete(listeTmp);
            if (!result)
            {
                return(result);
            }

            //Suppression de la version objet
            result = versionObjet.Delete();
            if (!result)
            {
                return(result);
            }

            //Force la modification de l'objet pour mettre à jour les versions suivantes
            CObjetDonneeAIdNumerique objet = (CObjetDonneeAIdNumerique)Activator.CreateInstance(typeObjet, new object[] { contexte });

            if (objet.ReadIfExists(nIdObjet))
            {
                //Passe dans la version de l'objet
                result = contexte.SetVersionDeTravail(objet.IdVersionDatabase, false);
                if (!result)
                {
                    return(result);
                }
                objet.Row.Row.SetModified();
            }
            return(result);
        }
示例#8
0
        //////////////////////////////////////////////////////////////////
        /// <summary>
        /// fonctionnement interne, voir ShouldCreateObjetSpv
        /// </summary>
        /// <param name="objetTimos"></param>
        /// <returns></returns>
        private static bool StaticShouldCreateObjetSpv(TypeTimos objetTimos)
        {
            string strNomTable = CContexteDonnee.GetNomTableForType(typeof(TypeSpv));
            CMappableTimosServeur <TypeTimos, TypeSpv> instanceDeThis = CContexteDonnee.GetTableLoader(strNomTable, null, objetTimos.ContexteDonnee.IdSession) as CMappableTimosServeur <TypeTimos, TypeSpv>;

            if (instanceDeThis != null)
            {
                return(instanceDeThis.ShouldAutoCreateObjetSpv(objetTimos));
            }
            return(false);
        }
示例#9
0
        public CObjetDonneeAIdNumerique GetObjetWithSpecifiedID(int nId, CContexteDonnee ctxUsed)
        {
            string              strChampID = ContexteDonnee.GetTableSafe(CContexteDonnee.GetNomTableForType(TypeElement)).PrimaryKey[0].ColumnName;
            CFiltreData         filtre     = new CFiltreData(strChampID + " =@1", nId);
            CListeObjetsDonnees lstEle     = new CListeObjetsDonnees(ctxUsed, TypeElement, filtre);

            if (lstEle.Count == 1)
            {
                return((CObjetDonneeAIdNumerique)lstEle[0]);
            }
            return(null);
        }
        private void m_lnkDemarrer_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            CResultAErreur result = CResultAErreur.True;

            try
            {
                C2iStructureImport structure = m_panelStructure.GetStructureFinale();
                if (structure.Mappages.Select(m => m.IsCle).Count() == 0)
                {
                    if (MessageBox.Show(I.T("Warning, You didn't select any identification field. Continue ?|20052"),
                                        "",
                                        MessageBoxButtons.YesNo) == DialogResult.No)
                    {
                        return;
                    }
                }
                string strFichier = m_panelStructure.NomFichier;

                using (CContexteDonnee ctx = new CContexteDonnee(CSc2iWin32DataClient.ContexteCourant.IdSession, true, false))
                {
                    ctx.SetVersionDeTravail(CSc2iWin32DataClient.ContexteCourant.IdVersionDeTravail, false);
                    using (CWaitCursor waiter = new CWaitCursor())
                    {
                        result = structure.Importer(strFichier, ctx);
                    }
                    if (result)
                    {
                        DataTable table     = ctx.GetTableSafe(CContexteDonnee.GetNomTableForType(structure.TypeCible));
                        int       nNbUpdate = structure.NbUpdated;
                        int       nNbCreate = structure.NbCreated;
                        if (CFormAlerte.Afficher(I.T("This opération will create @1 and update @2 elements. Do you confirm this operation ?|20050",
                                                     nNbCreate.ToString(),
                                                     nNbUpdate.ToString()), EFormAlerteType.Question) == DialogResult.Yes)
                        {
                            result = ctx.SaveAll(true);
                            if (result)
                            {
                                CFormAlerte.Afficher(I.T("Import ended with success|20051"), EFormAlerteType.Info);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                result.EmpileErreur(new CErreurException(ex));
            }
            if (!result)
            {
                CFormAfficheErreur.Show(result.Erreur);
            }
        }
示例#11
0
        //-------------------------------------------------------
        protected override CResultAErreur GetDatasHorsCalculees(CListeQuerySource sources)
        {
            CEasyQuery     query  = Query;
            CResultAErreur result = CResultAErreur.True;

            if (result && TypeSource == null)
            {
                result.EmpileErreur(I.T("###Table object must be specified |"));
            }
            if (query == null || sources == null)
            {
                result.EmpileErreur(I.T("###Query needs a source to provide datas|"));
            }

            C2iRequeteAvancee requete = new C2iRequeteAvancee();

            requete.TableInterrogee = CContexteDonnee.GetNomTableForType(TypeSource);

            result = FiltreDynamique.GetFiltreData();
            if (!result)
            {
                return(result);
            }
            if (result.Data is CFiltreData)
            {
                requete.FiltreAAppliquer = result.Data as CFiltreData;
            }
            foreach (IColumnDeEasyQuery col in Columns)
            {
                CColumnDeEasyQueryChampDeRequete colR = col as CColumnDeEasyQueryChampDeRequete;
                requete.ListeChamps.Add(colR);
            }
            DataTable table = null;

            if (requete.ListeChamps.Count > 0)
            {
                result = requete.ExecuteRequete(CContexteDonneeSysteme.GetInstance().IdSession);
                if (!result)
                {
                    result.EmpileErreur(I.T("###Error on table @1|"));
                    return(result);
                }
                table = result.Data as DataTable;
            }
            else
            {
                table = new DataTable();
            }
            table.TableName = NomFinal;
            return(result);
        }
示例#12
0
        //////////////////////////////////////////////////////////////////
        private static void PropageObjetTimos(
            CContexteDonnee contexte,
            Hashtable tableData,
            ref CResultAErreur result)
        {
            if (!result)
            {
                return;
            }
            DataTable dt   = contexte.Tables[CContexteDonnee.GetNomTableForType(typeof(TypeTimos))];
            ArrayList rows = new ArrayList(dt.Rows);

            foreach (DataRow row in rows)
            {
                if (row.RowState != DataRowState.Unchanged)
                {
                    switch (row.RowState)
                    {
                    case DataRowState.Added:
                    case DataRowState.Modified:
                        TypeTimos objetTimos = Activator.CreateInstance(typeof(TypeTimos), new object[] { row }) as TypeTimos;
                        try
                        {
                            TypeSpv objetSpv = CMappableAvecTimos <TypeTimos, TypeSpv> .GetObjetSpvFromObjetTimos(objetTimos);

                            if (objetSpv == null && StaticShouldCreateObjetSpv(objetTimos))
                            {
                                objetSpv = CMappableAvecTimos <TypeTimos, TypeSpv> .GetObjetSpvFromObjetTimosAvecCreation(objetTimos);
                            }
                            else if (objetSpv != null)
                            {
                                objetSpv.CopyFromObjetTimos(objetTimos);
                            }
                        }
                        catch (Exception e)
                        {
                            result.EmpileErreur(new CErreurException(e));
                            result.EmpileErreur(I.T("Error while applying supervision datas from @1|20006", objetTimos.DescriptionElement));
                            return;
                        }

                        break;

                    default:
                        break;
                    }
                }
            }//foreach (DataRow row in rows)
        }
示例#13
0
        //--------------------------------------------------------
        public CResultAErreur GetDonneesSource(CFiltreData filtre, params string[] strIdsColonnesSource)
        {
            CResultAErreur    result  = CResultAErreur.True;
            C2iRequeteAvancee requete = new C2iRequeteAvancee();

            requete.TableInterrogee  = CContexteDonnee.GetNomTableForType(m_typeSource);
            requete.FiltreAAppliquer = filtre;
            List <string>    lstIdsCols = new List <string>();
            HashSet <string> setToAdd   = null;

            if (strIdsColonnesSource != null && strIdsColonnesSource.Length > 0)
            {
                setToAdd = new HashSet <string>();
                foreach (string strIdCol in strIdsColonnesSource)
                {
                    setToAdd.Add(strIdCol);
                }
            }

            string strChampId = "";

            //Lecture de la table de base
            foreach (IColumnDefinition col in Columns)
            {
                CColumnDefinitionChampDeTable colChamp = col as CColumnDefinitionChampDeTable;
                if (colChamp != null)
                {
                    if (setToAdd == null || setToAdd.Contains(colChamp.ColumnName))
                    {
                        C2iChampDeRequete champ = new C2iChampDeRequete(
                            col.ColumnName,
                            new CSourceDeChampDeRequete(col.ColumnName),
                            colChamp.DataType,
                            OperationsAgregation.None,
                            false);
                        requete.ListeChamps.Add(champ);
                    }
                }
            }

            result = requete.ExecuteRequete(CContexteDonneeSysteme.GetInstance().IdSession);
            if (!result || !(result.Data is DataTable))
            {
                return(result);
            }
            return(result);
        }
示例#14
0
        public static void RegisterHook(Type tp, TraitementSauvegardeExterne traitement)
        {
            List <TraitementSauvegardeExterne> lst = null;
            string strNomTable = CContexteDonnee.GetNomTableForType(tp);

            if (strNomTable != null && strNomTable != "")
            {
                if (!m_listeHooksParType.TryGetValue(strNomTable, out lst))
                {
                    lst = new List <TraitementSauvegardeExterne>();
                    m_listeHooksParType[strNomTable] = lst;
                }
                if (!lst.Contains(traitement))
                {
                    lst.Add(traitement);
                }
            }
        }
示例#15
0
        //-------------------------------------------------------------------
        public void AppliquerFiltre()
        {
            string            strFiltre  = "";
            CFiltreDataAvance tempFiltre = new CFiltreDataAvance(CActeur.c_nomTable, strFiltre);
            int nNumParam = 1;

            AddToFiltre(ref strFiltre, m_txtNom, CActeur.c_champNom);
            AddToFiltre(ref strFiltre, m_txtCodePostal, CActeur.c_champCodePostal);
            AddToFiltre(ref strFiltre, m_txtVille, CActeur.c_champVille);


            if (m_cmbGroupes.SelectedValue != null)
            {
                if (strFiltre != "")
                {
                    strFiltre += " AND ";
                }
                strFiltre += "RelationsGroupes.GroupeActeur." + CGroupeActeur.c_champId + " = @" + nNumParam;
                tempFiltre.Parametres.Add(((CGroupeActeur)m_cmbGroupes.SelectedValue).Id);
                nNumParam++;
            }

            if (m_cmbRoles.SelectedValue != null)
            {
                CRoleActeur role        = (CRoleActeur)m_cmbRoles.SelectedValue;
                string      strNomtable = CContexteDonnee.GetNomTableForType(role.TypeDonneeActeur);

                if (strFiltre != "")
                {
                    strFiltre += " AND ";
                }
                strFiltre += strNomtable + "." + CActeur.c_champId + " >= 0";
                nNumParam++;
            }

            if (strFiltre == "")
            {
                strFiltre = "1 = 1";
            }
            tempFiltre.Filtre = strFiltre;
            Filtre            = tempFiltre;;

            OnAppliqueFiltre(new object(), null);
        }
        /// ////////////////////////////////////////////////////////////////
        public static void FindRelation(string strTable, Type type, ref CInfoRelationComposantFiltre relationTrouvee)
        {
            //TESTDBKEYTODO
            if (relationTrouvee != null)
            {
                return;
            }
            string strKeyChamp = "";

            if (DecomposeNomPropriete(strTable, ref strKeyChamp))
            {
                string strTableEntite = CContexteDonnee.GetNomTableForType(type);
                //Si strKeyChamp est un int, il s'agit d'un id de champ custom
                //ce cas peut se présenter lors de la relecture d'un filtre sous forme de
                //test par exemple dans une fonction ObjectList
                relationTrouvee = new CInfoRelationEValeurChampCustomToDisplay(CDbKey.CreateFromStringValue(strKeyChamp), strTableEntite);
            }
            //relationTrouvee = new CInfoRelationEValeurChampCustomToDisplay(relToChamp.DbKeyChamp, relToChamp.TableFille);
        }
            //-----------------------------------------------------------
            private C2iRequeteAvancee GetRequeteChampDotNet(CParametreInspirationProprieteDeType parametre)
            {
                CStructureTable structure  = CStructureTable.GetStructure(parametre.Type);
                string          strNomProp = parametre.Champ.NomProprieteSansCleTypeChamp;

                foreach (CInfoChampTable info in structure.Champs)
                {
                    if (info.Propriete == strNomProp)
                    {
                        C2iRequeteAvancee requete = new C2iRequeteAvancee();
                        requete.TableInterrogee = CContexteDonnee.GetNomTableForType(parametre.Type);
                        requete.ListeChamps.Add(new C2iChampDeRequete("LABEL",
                                                                      new CSourceDeChampDeRequete(info.NomChamp),
                                                                      typeof(string),
                                                                      OperationsAgregation.None,
                                                                      true));
                        return(requete);
                    }
                }
                return(null);
            }
        /// ////////////////////////////////////////////////////////////////////////////
        private bool FiltreChamp(CDefinitionProprieteDynamique def)
        {
            if (def is CDefinitionProprieteDynamiqueRelation)
            {
                CDefinitionProprieteDynamiqueRelation rel = def as CDefinitionProprieteDynamiqueRelation;
                string strTableSource = CContexteDonnee.GetNomTableForType(m_typeSource);
                if (rel.Relation.TableParente == strTableSource)
                {
                    return(true);
                }
            }

            /*if (def is CDefinitionProprieteDynamiqueChampCustomFils)
             *  return true;*/
            if (def is CDefinitionProprieteDynamiqueRelationTypeId)
            {
                return(true);
            }

            return(false);
        }
示例#19
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);
        }
示例#20
0
        public CFiltreData GetFiltreForType(Type tp)
        {
            CFiltreData filtre = null;

            if (
                m_ArbreModules.SelectedNode != null &&
                m_chkAppliquerFiltre.Checked &&
                m_contexte != null &&
                typeof(IObjetDonneeAIdNumerique).IsAssignableFrom(tp))
            {
                CModuleParametrage module = m_ArbreModules.SelectedNode.Tag as CModuleParametrage;
                if (module != null)
                {
                    CListeObjetsDonnees lst = new CListeObjetsDonnees(m_contexte, typeof(CRelationElement_ModuleParametrage));
                    lst.Filtre = new CFiltreDataAvance(
                        CRelationElement_ModuleParametrage.c_nomTable,
                        CRelationElement_ModuleParametrage.c_champTypeElement + "=@1 and " +
                        CModuleParametrage.c_nomTable + "." + CModuleParametrage.c_champCodeSystemeComplet + " like @2",
                        tp.ToString(),
                        module.CodeSystemeComplet + "%");
                    if (lst.Count != 0)
                    {
                        StringBuilder bl = new StringBuilder();
                        foreach (CRelationElement_ModuleParametrage rel in lst)
                        {
                            bl.Append(rel.IdElement);
                            bl.Append(';');
                        }
                        bl.Remove(bl.Length - 1, 1);
                        DataTable table = m_contexte.GetTableSafe(CContexteDonnee.GetNomTableForType(tp));
                        filtre = new CFiltreDataAvance(
                            CContexteDonnee.GetNomTableForType(tp),
                            table.PrimaryKey[0].ColumnName + " in {" +
                            bl.ToString() + "}");
                    }
                }
            }
            return(filtre);
        }
        /// <summary>
        /// Traite les ajouts d'éléments avec des valeurs de champs customs
        /// associés aux nouveaux éléments
        /// </summary>
        /// <param name="table"></param>
        /// <param name="tableParametres"></param>
        /// <param name="result"></param>
        public static void AfterSaveExterneChampCustom(DataTable table, Hashtable tableParametres, ref CResultAErreur result)
        {
            if (!result)
            {
                return;
            }
            CContexteDonnee           contexte            = (CContexteDonnee)table.DataSet;
            Dictionary <DataRow, int> dicElementsNouveaux = tableParametres[typeof(CRelationElementAChamp_ChampCustomServeur).ToString()] as Dictionary <DataRow, int>;

            if (dicElementsNouveaux == null || dicElementsNouveaux.Count == 0)
            {
                return;
            }
            Type   tp         = CContexteDonnee.GetTypeForTable(table.TableName);
            string strPrimKey = table.PrimaryKey[0].ColumnName;

            //Trouve tous les types qui implémentent CRelationElementAChamp_ChampCustom
            CInfoClasseDynamique[] types = DynamicClassAttribute.GetAllDynamicClassHeritant(typeof(CRelationElementAChamp_ChampCustom));
            foreach (CInfoClasseDynamique infoClasse in types)
            {
                string    strNomTable  = CContexteDonnee.GetNomTableForType(infoClasse.Classe);
                DataTable tableValeurs = contexte.Tables[strNomTable];
                if (tableValeurs != null)
                {
                    foreach (KeyValuePair <DataRow, int> rowToId in dicElementsNouveaux)
                    {
                        DataRow[] rowsValeurs = tableValeurs.Select(CRelationElementAChamp_ChampCustom.c_champValeurString + "='" +
                                                                    tp.ToString() + "' and " +
                                                                    CRelationElementAChamp_ChampCustom.c_champValeurInt + "=" +
                                                                    rowToId.Value);
                        foreach (DataRow rowValeur in rowsValeurs)
                        {
                            rowValeur[CRelationElementAChamp_ChampCustom.c_champValeurInt] = rowToId.Key[strPrimKey];
                        }
                    }
                }
            }
        }
示例#22
0
 private void RenommeNomTablesSimples()
 {
     if (!m_bIsStructureComplexe && Table != null)
     {
         string strNom = CContexteDonnee.GetNomTableForType(m_typeSource);
         if (strNom != null && strNom != "")
         {
             Table.NomTable = strNom;
         }
         ArrayList lstTables = new ArrayList();
         lstTables.AddRange(Table.GetToutesLesTablesFilles());
         foreach (ITableExport table in lstTables)
         {
             if (table is C2iTableExport && table.ChampOrigine != null)
             {
                 strNom = CContexteDonnee.GetNomTableForType(table.ChampOrigine.TypeDonnee.TypeDotNetNatif);
                 if (strNom != null && strNom != "")
                 {
                     table.NomTable = strNom;
                 }
             }
         }
     }
 }
示例#23
0
        /// ////////////////////////////////////////////////////////
        private CResultAErreur CleanType(
            CContexteExecutionAction contexteExecution,
            Type tpToClean,
            RelationTypeIdAttribute rel)
        {
            if (tpToClean == typeof(CVersionDonneesObjet))
            {
                return(CResultAErreur.True);
            }
            if (contexteExecution.IndicateurProgression != null)
            {
                contexteExecution.IndicateurProgression.SetInfo("Cleaning " +
                                                                DynamicClassAttribute.GetNomConvivial(tpToClean));
            }
            CResultAErreur result = CResultAErreur.True;
            //Identifie tous les types liés
            C2iRequeteAvancee requete = new C2iRequeteAvancee(null);

            requete.TableInterrogee = rel.TableFille;
            requete.ListeChamps.Add(new C2iChampDeRequete(
                                        "TYPE_ELEMENT",
                                        new CSourceDeChampDeRequete(rel.ChampType),
                                        typeof(string),
                                        OperationsAgregation.None,
                                        true));
            result = requete.ExecuteRequete(contexteExecution.IdSession);
            if (!result)
            {
                return(result);
            }
            if (!typeof(CObjetDonneeAIdNumerique).IsAssignableFrom(tpToClean))
            {
                return(result);
            }
            DataTable table = result.Data as DataTable;

            if (table == null || table.Rows.Count == 0)
            {
                return(result);
            }
            CStructureTable structRel = CStructureTable.GetStructure(tpToClean);

            foreach (DataRow row in table.Rows)
            {
                if (row[0] is string)
                {
                    Type   tpLie       = CActivatorSurChaine.GetType((string)row[0]);
                    string strNomTable = tpLie != null?CContexteDonnee.GetNomTableForType(tpLie) : null;

                    if (strNomTable != null && typeof(CObjetDonneeAIdNumerique).IsAssignableFrom(tpLie))
                    {
                        System.Console.WriteLine(tpToClean.ToString() + " / " + tpLie.ToString());
                        //trouve tous les ids associés
                        requete = new C2iRequeteAvancee(null);
                        requete.TableInterrogee = rel.TableFille;
                        requete.ListeChamps.Add(new C2iChampDeRequete(
                                                    "ETT_ID",
                                                    new CSourceDeChampDeRequete(rel.ChampId),
                                                    typeof(int),
                                                    OperationsAgregation.None,
                                                    true));
                        requete.FiltreAAppliquer = new CFiltreData(rel.ChampType + "=@1",
                                                                   tpLie.ToString());
                        result = requete.ExecuteRequete(contexteExecution.IdSession);
                        if (!result)
                        {
                            return(result);
                        }
                        DataTable  tableIds        = result.Data as DataTable;
                        List <int> lstIdsCherchees = new List <int>();
                        if (tableIds != null)
                        {
                            StringBuilder bl = new StringBuilder();
                            foreach (DataRow rowId in tableIds.Rows)
                            {
                                if (rowId[0] is int)
                                {
                                    lstIdsCherchees.Add((int)rowId[0]);
                                    bl.Append((int)rowId[0]);
                                    bl.Append(',');
                                }
                            }
                            if (bl.Length > 0)
                            {
                                CStructureTable structure = CStructureTable.GetStructure(tpLie);
                                bl.Remove(bl.Length - 1, 1);
                                requete = new C2iRequeteAvancee(null);
                                requete.TableInterrogee = strNomTable;
                                requete.ListeChamps.Add(new C2iChampDeRequete(
                                                            "ETT_ID",
                                                            new CSourceDeChampDeRequete(structure.ChampsId[0].NomChamp),
                                                            typeof(int),
                                                            OperationsAgregation.None,
                                                            false));
                                requete.FiltreAAppliquer = new CFiltreData(
                                    structure.ChampsId[0].NomChamp + " in (" +
                                    bl.ToString() + ")");
                                result = requete.ExecuteRequete(contexteExecution.IdSession);
                                if (!result)
                                {
                                    return(result);
                                }
                                DataTable     tableIdsTrouvees = result.Data as DataTable;
                                HashSet <int> setTrouves       = new HashSet <int>();
                                if (tableIdsTrouvees != null)
                                {
                                    foreach (DataRow rowId in tableIdsTrouvees.Rows)
                                    {
                                        if (rowId[0] is int)
                                        {
                                            setTrouves.Add((int)rowId[0]);
                                        }
                                    }
                                    bl = new StringBuilder();
                                    foreach (int nId in lstIdsCherchees.ToArray())
                                    {
                                        if (!setTrouves.Contains(nId))
                                        {
                                            bl.Append(nId);
                                            bl.Append(',');
                                        }
                                    }
                                    if (bl.Length > 0)
                                    {
                                        bl.Remove(bl.Length - 1, 1);
                                        //Trouve la liste des relTypesIds à virer
                                        requete = new C2iRequeteAvancee(null);
                                        requete.TableInterrogee = rel.TableFille;
                                        requete.ListeChamps.Add(new C2iChampDeRequete(
                                                                    structRel.ChampsId[0].NomChamp,
                                                                    new CSourceDeChampDeRequete(structRel.ChampsId[0].NomChamp),
                                                                    typeof(int),
                                                                    OperationsAgregation.None,
                                                                    true));
                                        requete.FiltreAAppliquer = new CFiltreData(
                                            rel.ChampId + " in (" + bl.ToString() + ") and " +
                                            rel.ChampType + "=@1", tpLie.ToString());
                                        result = requete.ExecuteRequete(contexteExecution.IdSession);
                                        if (!result)
                                        {
                                            return(result);
                                        }
                                        DataTable tableIdsToDelete = result.Data as DataTable;
                                        if (tableIdsToDelete != null)
                                        {
                                            List <int> lstToDelete = new List <int>();
                                            foreach (DataRow rowDel in tableIdsToDelete.Rows)
                                            {
                                                if (rowDel[0] is int)
                                                {
                                                    lstToDelete.Add((int)rowDel[0]);
                                                }
                                            }
                                            if (contexteExecution.IndicateurProgression != null)
                                            {
                                                contexteExecution.IndicateurProgression.PushLibelle(
                                                    DynamicClassAttribute.GetNomConvivial(tpToClean) + "/" +
                                                    DynamicClassAttribute.GetNomConvivial((tpLie)));
                                            }
                                            for (int nPart = 0; nPart < lstToDelete.Count; nPart += 100)
                                            {
                                                List <int> lstTmp = new List <int>();
                                                int        nMin   = Math.Min(nPart + 100, lstToDelete.Count);
                                                for (int n = nPart; n < nMin; n++)
                                                {
                                                    lstTmp.Add(lstToDelete[n]);
                                                }
                                                if (contexteExecution.IndicateurProgression != null)
                                                {
                                                    contexteExecution.IndicateurProgression.SetInfo(nPart.ToString() + "/" +
                                                                                                    lstToDelete.Count);
                                                }
                                                result = CActionSupprimerEntite.PurgeEntites(contexteExecution.IdSession,
                                                                                             tpToClean, lstTmp.ToArray());
                                                if (contexteExecution.IndicateurProgression != null &&
                                                    contexteExecution.IndicateurProgression.CancelRequest)
                                                {
                                                    result.EmpileErreur("User cancellation");
                                                }
                                                if (!result)
                                                {
                                                    return(result);
                                                }
                                            }
                                            if (contexteExecution.IndicateurProgression != null)
                                            {
                                                contexteExecution.IndicateurProgression.PopLibelle();
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return(result);
        }
示例#24
0
        /// //////////////////////////////////////////////////
        public override CResultAErreur GetComposantFiltreData(CFiltreDynamique filtre, CFiltreData filtreData)
        {
            CResultAErreur result = CResultAErreur.True;
            //Vérifie que l'expression condition est OK
            CContexteEvaluationExpression contexteEvaluation = new CContexteEvaluationExpression(filtre);

            result = ConditionApplication.Eval(contexteEvaluation);
            if (!result)
            {
                result.EmpileErreur(I.T("Error while evaluation of @1|143", ConditionApplication.GetString()));
                return(result);
            }

            if (result.Data == null || !((result.Data is bool && (bool)result.Data) || result.Data.ToString() == "1"))
            {
                result.Data = null;
                return(result);
            }

            CComposantFiltreOperateur opPrincipal = null;
            string strNomChamp = m_champ.NomPropriete;

            if (m_champ is CDefinitionProprieteDynamiqueChampCustom)
            {
                CDbKey keyChamp = ((CDefinitionProprieteDynamiqueChampCustom)m_champ).DbKeyChamp;
                strNomChamp = m_champ.NomPropriete;
                string strAcces = "";
                //Trouve le nom du champ et le chemin d'accès
                int nPos = strNomChamp.LastIndexOf(".");
                if (nPos != -1)
                {
                    strAcces    = strNomChamp.Substring(0, nPos + 1);
                    strNomChamp = strNomChamp.Substring(nPos + 1);
                }
                strAcces += "RelationsChampsCustom.";

                CComposantFiltreOperateur operateurIdChamp = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurEgal);
                // TESTDBKEYOK
                if (keyChamp.IsNumericalId())
                {
                    operateurIdChamp.Parametres.Add(new CComposantFiltreChamp(strAcces + CChampCustom.c_champId, CContexteDonnee.GetNomTableForType(filtre.TypeElements)));
                }
                else
                {
                    operateurIdChamp.Parametres.Add(new CComposantFiltreChamp(strAcces + CObjetDonnee.c_champIdUniversel, CContexteDonnee.GetNomTableForType(filtre.TypeElements)));
                }

                operateurIdChamp.Parametres.Add(new CComposantFiltreConstante(keyChamp.GetValeurInDb()));
                opPrincipal = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurEt);
                opPrincipal.Parametres.Add(operateurIdChamp);
                Type typeChamp = m_champ.TypeDonnee.TypeDotNetNatif;
                if (typeChamp == typeof(double))
                {
                    strNomChamp = CRelationElementAChamp_ChampCustom.c_champValeurDouble;
                }
                else if (typeChamp == typeof(int))
                {
                    strNomChamp = CRelationElementAChamp_ChampCustom.c_champValeurInt;
                }
                else if (typeChamp == typeof(DateTime) || typeChamp == typeof(CDateTimeEx))
                {
                    strNomChamp = CRelationElementAChamp_ChampCustom.c_champValeurDate;
                }
                else if (typeChamp == typeof(bool))
                {
                    strNomChamp = CRelationElementAChamp_ChampCustom.c_champValeurBool;
                }
                else
                {
                    strNomChamp = CRelationElementAChamp_ChampCustom.c_champValeurString;
                }
                strNomChamp = strAcces + strNomChamp;
            }
            CComposantFiltreChamp composantChamp = new CComposantFiltreChamp(strNomChamp, CContexteDonnee.GetNomTableForType(filtre.TypeElements));

            CComposantFiltre composantRecherche = new CComposantFiltreRechercheAvancee();

            CComposantFiltre composantValeur = null;

            result = ExpressionValeur.Eval(contexteEvaluation);
            if (!result)
            {
                result.EmpileErreur(I.T("Error while evaluation of @1|143", ExpressionValeur.GetString()));
                result.Data = null;
                return(result);
            }
            composantValeur = new CComposantFiltreConstante(result.Data.ToString());
            composantRecherche.Parametres.Add(composantChamp);
            composantRecherche.Parametres.Add(composantValeur);

            if (opPrincipal != null)
            {
                opPrincipal.Parametres.Add(composantRecherche);
                composantRecherche = opPrincipal;
            }


            result.Data = composantRecherche;
            return(result);
        }
        //--------------------------------------------------------------------------------------------------------------------
        public override CResultAErreur ExecuterOperation(IDatabaseConnexion connection, IIndicateurProgression indicateur)
        {
            CResultAErreur   result   = CResultAErreur.True;
            IDataBaseCreator createur = connection.GetDataBaseCreator();
            string           strNomTableInContexte = CContexteDonnee.GetNomTableForType(m_type);
            string           strNomTableInDb       = CContexteDonnee.GetNomTableInDbForNomTable(strNomTableInContexte);

            createur.CreationOuUpdateTableFromType(m_type);
            string strChampIdObjet = m_strChampIdObjet;

            if (m_strChampIdObjet.StartsWith("#SQL#"))
            {
                strChampIdObjet = m_strChampIdObjet.Substring("#SQL#".Length);
            }
            CObjetServeur.ClearCacheSchemas();
            if (createur.ChampExists(strNomTableInDb, strChampIdObjet) &&
                createur.ChampExists(strNomTableInDb, m_strChampDbKey))
            {
                using (CContexteDonnee ctx = new CContexteDonnee(connection.IdSession, true, false))
                {
                    C2iRequeteAvancee requete = new C2iRequeteAvancee();
                    requete.TableInterrogee = strNomTableInDb;
                    CStructureTable structure = CStructureTable.GetStructure(m_type);

                    /*
                     * requete.ListeChamps.Add ( new C2iChampDeRequete (
                     *  "ID",
                     *  new CSourceDeChampDeRequete(structure.ChampsId[0].NomChamp),
                     *  typeof(int),
                     *  OperationsAgregation.None,
                     *  true ));*/
                    requete.ListeChamps.Add(new C2iChampDeRequete(
                                                "IDOBJET",
                                                new CSourceDeChampDeRequete(m_strChampIdObjet),
                                                typeof(int),
                                                OperationsAgregation.None,
                                                true));
                    if (m_typeObjetFixe == null)
                    {
                        requete.ListeChamps.Add(new C2iChampDeRequete(
                                                    "TYPEOBJET",
                                                    new CSourceDeChampDeRequete(m_strChampTypeObjet),
                                                    typeof(string),
                                                    OperationsAgregation.None,
                                                    true));
                    }
                    result = requete.ExecuteRequete(connection.IdSession);
                    if (!result)
                    {
                        return(result);
                    }
                    DataTable table = result.Data as DataTable;
                    Dictionary <int, int?> dicIdToIdObjet = new Dictionary <int, int?>();
                    string strFieldIdObjetInTable         = m_strChampIdObjet.Replace("#SQL#", "");
                    foreach (DataRow row in table.Rows)
                    {
                        object val    = row["IDOBJET"];
                        int?   nValId = val == DBNull.Value?null:(int?)val;
                        if (nValId != null && nValId >= 0)
                        {
                            CDbKey key = null;
                            Type   tp  = m_typeObjetFixe;
                            if (tp == null)//Type non fixe
                            {
                                string strType = (string)row["TYPEOBJET"];
                                tp = CActivatorSurChaine.GetType(strType);
                            }
                            if (tp != null)
                            {
                                CObjetDonneeAIdNumerique objPointe = (CObjetDonneeAIdNumerique)Activator.CreateInstance(tp, ctx);
                                if (objPointe.ReadIfExists(nValId.Value))
                                {
                                    key = objPointe.DbKey;
                                }
                            }
                            if (key != null)
                            {
                                string strRequete = "Update " + strNomTableInDb + " set " +
                                                    m_strChampDbKey + "=" + connection.GetStringForRequete(key.StringValue) + " where " +
                                                    strFieldIdObjetInTable + "=" + nValId.Value;
                                if (m_typeObjetFixe == null)
                                {
                                    strRequete += " and " + m_strChampTypeObjet + "='" +
                                                  row["TYPEOBJET"].ToString() + "'";
                                }
                                connection.RunStatement(strRequete);
                            }
                        }
                    }
                }
                //Supprime le champ
                createur.DeleteChamp(strNomTableInDb, strChampIdObjet);
            }
            return(result);
        }
        //--------------------------------------------------------------------------------------------------------------------
        public override CResultAErreur ExecuterOperation(IDatabaseConnexion connection, IIndicateurProgression indicateur)
        {
            CResultAErreur result = CResultAErreur.True;

            if (!typeof(IObjetDonneeAIdNumerique).IsAssignableFrom(m_type) || !CObjetDonnee.TypeManageIdUniversel(m_type))
            {
                result.EmpileErreur(m_type.ToString() + " can not have Universal Id");
            }

            string strNomTable = CContexteDonnee.GetNomTableForType(m_type);

            CStructureTable structure  = CStructureTable.GetStructure(m_type);
            string          strChampId = structure.ChampsId[0].NomChamp;

            C2iRequeteAvancee requete = new C2iRequeteAvancee();

            requete.FiltreAAppliquer = new CFiltreData(CObjetDonnee.c_champIdUniversel + "=@1", "");
            requete.TableInterrogee  = CContexteDonnee.GetNomTableForType(m_type);
            requete.ListeChamps.Add(new C2iChampDeRequete(strChampId, new CSourceDeChampDeRequete(strChampId),
                                                          typeof(int),
                                                          OperationsAgregation.None, true));
            Console.WriteLine("Update Universal id on " + strNomTable);
            result = requete.ExecuteRequete(connection.IdSession);
            if (!result)
            {
                return(result);
            }
            string    strNomTableInDb = CContexteDonnee.GetNomTableInDbForNomTable(strNomTable);
            DataTable table           = result.Data as DataTable;
            int       nNb             = 0;
            bool      bWasInTrans     = connection.IsInTrans();

            if (bWasInTrans)
            {
                connection.CommitTrans();
            }
            DateTime dt = DateTime.Now;

            if (table.Rows.Count > 0)
            {
                if (table.Rows.Count > 10000 && connection is COracleDatabaseConnexion)
                {
                    string strQuery = "Update " + strNomTableInDb + " set " + CObjetDonnee.c_champIdUniversel +
                                      "=CONCAT('" + strNomTableInDb + "'," + strChampId + ")";
                    result = connection.RunStatement(strQuery);
                }
                else
                {
                    foreach (DataRow row in table.Rows)
                    {
                        string strQuery = "Update " + strNomTableInDb + " set " +
                                          CObjetDonnee.c_champIdUniversel + "='" + CUniqueIdentifier.GetNew() + "' where " +
                                          strChampId + "=" + row[0].ToString();
                        result = connection.ExecuteScalar(strQuery);
                        if (!result)
                        {
                            break;
                        }
                        nNb++;
                        if (nNb % 100 == 0)
                        {
                            TimeSpan sp   = DateTime.Now - dt;
                            double   fVal = (double)sp.TotalSeconds / (double)nNb * (double)(table.Rows.Count - nNb);
                            Console.WriteLine(strNomTableInDb + " " + nNb + "/" + table.Rows.Count + " reste " + fVal.ToString("0s"));
                        }
                    }
                }
            }
            if (bWasInTrans)
            {
                connection.BeginTrans();
            }
            return(result);

            /*
             *
             * //Trouve tous les éléments du type qui n'ont pas d'id universel
             * using (CContexteDonnee ctx = new CContexteDonnee(connection.IdSession, true, false))
             * {
             *  CListeObjetsDonnees lst = new CListeObjetsDonnees(ctx, m_type, false);
             *  lst.Filtre = new CFiltreData(CObjetDonnee.c_champIdUniversel + "=@1", "");
             *  lst.Filtre.IgnorerVersionDeContexte = true;
             *  lst.AppliquerFiltreAffichage = false;
             *
             *  foreach (IObjetDonnee objet in lst.ToArrayList())
             *  {
             *      objet.Row[CObjetDonnee.c_champIdUniversel] = CUniqueIdentifier.GetNew();
             *  }
             *  string strNomTable = CContexteDonnee.GetNomTableForType(m_type);
             *  CObjetServeur objetServeur = CContexteDonnee.GetTableLoader(strNomTable, null, connection.IdSession) as CObjetServeur;
             *  int nCount = ctx.Tables[strNomTable].Rows.Count;
             *  DataTable tableSource = ctx.Tables[strNomTable];
             *
             *   List<string> lstChampsExclus = new List<string>();
             *  HashSet<string> lstIDs = new HashSet<string>();
             *  CStructureTable structure = CStructureTable.GetStructure(m_type);
             *  foreach (CInfoChampTable info in structure.ChampsId)
             *      lstIDs.Add(info.NomChamp);
             *
             *  foreach (CInfoChampTable champ in structure.Champs)
             *      if (champ.NomChamp != CObjetDonnee.c_champIdUniversel && !lstIDs.Contains(champ.NomChamp))
             *          lstChampsExclus.Add(champ.NomChamp);
             *
             *  IDataAdapter adapter = objetServeur.GetDataAdapter(DataRowState.Modified, lstChampsExclus.ToArray());
             *
             *  for (int nRow = 0; nRow < nCount; nRow += 5000)
             *  {
             *
             *      using (DataSet dsCopie = new DataSet())
             *      {
             *          dsCopie.EnforceConstraints = false;
             *          DataTable tableCopie = ctx.Tables[strNomTable].Clone();
             *          tableCopie.BeginLoadData();
             *          dsCopie.Tables.Add(tableCopie);
             *          int nMax = Math.Min(nRow + 5000, nCount);
             *          DateTime dt = DateTime.Now;
             *          for (int n = nRow; n < nMax; n++)
             *          {
             *              tableCopie.ImportRow(tableSource.Rows[n]);
             *          }
             *          TimeSpan sp = DateTime.Now - dt;
             *          Console.WriteLine("Write 1" + strNomTable + " " + nRow + "/" + nCount+"  "+sp.TotalSeconds.ToString());
             *          adapter.Update(dsCopie);
             *          sp = DateTime.Now - dt;
             *          Console.WriteLine("Write 2" + strNomTable + " " + nRow + "/" + nCount + "  " + sp.TotalSeconds.ToString());
             *      }
             *  }
             * }
             * return result;*/
        }
        /// //////////////////////////////////////////////////
        public override CResultAErreur GetComposantFiltreData(CFiltreDynamique filtre, CFiltreData filtreData)
        {
            CResultAErreur result = CResultAErreur.True;
            //Vérifie que l'expression condition est OK
            CContexteEvaluationExpression contexteEvaluation = new CContexteEvaluationExpression(filtre);

            result = ConditionApplication.Eval(contexteEvaluation);
            if (!result)
            {
                result.EmpileErreur(I.T("Error while evaluation of @1|143", ConditionApplication.GetString()));
                return(result);
            }

            if (result.Data == null || !((result.Data is bool && (bool)result.Data) || result.Data.ToString() == "1"))
            {
                result.Data = null;
                return(result);
            }


            string strNomChamp      = m_champ.NomPropriete;
            CDbKey dbKeyChampCustom = null;

            if (m_champ is CDefinitionProprieteDynamiqueChampCustom)
            {
                CComposantFiltreOperateur opPrincipal = null;
                dbKeyChampCustom = ((CDefinitionProprieteDynamiqueChampCustom)m_champ).DbKeyChamp;
                strNomChamp      = m_champ.NomPropriete;
                string strAcces = "";
                //Trouve le nom du champ et le chemin d'accès
                int nPos = strNomChamp.LastIndexOf(".");
                if (nPos != -1)
                {
                    strAcces    = strNomChamp.Substring(0, nPos + 1);
                    strNomChamp = strNomChamp.Substring(nPos + 1);
                }
                strAcces += "RelationsChampsCustom.";

                int nIdChamp = CChampCustom.GetIdFromDbKey(dbKeyChampCustom);

                CComposantFiltreOperateur operateurIdChamp = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurEgal);
                CComposantFiltreChamp     compo1           = new CComposantFiltreChamp(strAcces + CChampCustom.c_champId, CContexteDonnee.GetNomTableForType(filtre.TypeElements));
                compo1.IdChampCustom = nIdChamp;
                operateurIdChamp.Parametres.Add(compo1);
                operateurIdChamp.Parametres.Add(new CComposantFiltreConstante(nIdChamp));
                opPrincipal = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurEt);
                opPrincipal.Parametres.Add(operateurIdChamp);
                //Stef, 28072008 : pour tester si un champ est null, on vérifie CRelationElementAChamp_ChampCustom.c_champValeurNull
                //et non pas les valeurs suivant le type

                /*if ( typeChamp == typeof(double))
                 *      strNomChamp = CRelationElementAChamp_ChampCustom.c_champValeurDouble;
                 * else if ( typeChamp == typeof(int))
                 *      strNomChamp = CRelationElementAChamp_ChampCustom.c_champValeurInt;
                 * else if ( typeChamp == typeof(DateTime) || typeChamp == typeof(CDateTimeEx) )
                 *      strNomChamp = CRelationElementAChamp_ChampCustom.c_champValeurDate;
                 * else if ( typeChamp == typeof(bool))
                 *      strNomChamp = CRelationElementAChamp_ChampCustom.c_champValeurBool;
                 * else
                 *      strNomChamp = CRelationElementAChamp_ChampCustom.c_champValeurString;
                 */
                strNomChamp = CRelationElementAChamp_ChampCustom.c_champValeurNull;

                strNomChamp = strAcces + strNomChamp;

                CComposantFiltreChamp composantChamp = new CComposantFiltreChamp(strNomChamp, CContexteDonnee.GetNomTableForType(filtre.TypeElements));
                composantChamp.IdChampCustom = nIdChamp;
                CComposantFiltre composantOperateur = new CComposantFiltreOperateur(
                    m_bTestNull ? CComposantFiltreOperateur.c_IdOperateurDifferent : CComposantFiltreOperateur.c_IdOperateurEgal);
                composantOperateur.Parametres.Add(composantChamp);
                composantOperateur.Parametres.Add(new CComposantFiltreConstante(0));

                opPrincipal.Parametres.Add(composantOperateur);
                composantOperateur = opPrincipal;
                result.Data        = composantOperateur;
                //Stef 28072008, fin modif
            }
            else
            {
                CComposantFiltreChamp composantChamp = new CComposantFiltreChamp(strNomChamp, CContexteDonnee.GetNomTableForType(filtre.TypeElements));
                composantChamp.IdChampCustom = CChampCustom.GetIdFromDbKey(dbKeyChampCustom);
                CComposantFiltre composantOperateur;

                if (!m_bTestNull)
                {
                    composantOperateur = new CComposantFiltreHas();
                }
                else
                {
                    composantOperateur = new CComposantFiltreHasNo();
                }

                composantOperateur.Parametres.Add(composantChamp);
                result.Data = composantOperateur;
            }
            return(result);
        }
示例#28
0
        /// /////////////////////////////////////////////////////////
        public CResultAErreur InsertDataInDataSet(
            IEnumerable list,
            DataSet ds,
            ITableExport tableParente,
            int[] nValeursCle,
            RelationAttribute relationToObjetParent,
            IElementAVariablesDynamiquesAvecContexteDonnee elementAVariablePourFiltres,
            CCacheValeursProprietes cacheValeurs,
            ITableExport tableFilleANeParCharger,
            bool bAvecOptimisation,
            CConteneurIndicateurProgression indicateur)
        {
            CResultAErreur result = CResultAErreur.True;

            if (NePasCalculer)
            {
                return(result);
            }
            int nValeurIndicateur = 0;

            indicateur.SetBornesSegment(0, m_tableauCroise == null?2:3);

            if (list == null)
            {
                return(result);
            }
            if (!(list is CListeObjetsDonnees))
            {
                result.EmpileErreur(I.T("Attempt of cumulated table on something other that a data list|125"));
                return(result);
            }

            CListeObjetsDonnees listeDonnees = (CListeObjetsDonnees)list;

            if (relationToObjetParent == null)
            {
                //Principe de la lecture en une fois :
                //Si la liste des une liste objets contenus, c'est que chaque élément
                //est un composant d'un parent. On stock donc tous les parents
                //Pour lesquels on veut les données,
                //et elles seront lues dans le EndInsertTable.
                //Par contre si la liste contenu a un filtre, on ne peut plus
                //stocker juste ça, il faudrait en plus stocker le filtre et ça
                //devient compliqué.
                if (listeDonnees is CListeObjetsDonneesContenus &&
                    (listeDonnees.Filtre == null ||
                     !listeDonnees.Filtre.HasFiltre))
                {
                    CListeObjetsDonneesContenus listeContenu = (CListeObjetsDonneesContenus)listeDonnees;
                    if (listeContenu.ObjetConteneur != null &&
                        typeof(CObjetDonneeAIdNumerique).IsAssignableFrom(listeContenu.ObjetConteneur.GetType()))
                    {
                        if (m_mapIdBaseParentToReadToIdTable == null)
                        {
                            m_mapIdBaseParentToReadToIdTable = new Hashtable();
                        }
                        m_mapIdBaseParentToReadToIdTable[((CObjetDonneeAIdNumerique)listeContenu.ObjetConteneur).Id] = nValeursCle[0];
                        m_strChampIdParent = listeContenu.ChampsFille[0];
                        m_tableParente     = tableParente;
                        listeContenu.GetFiltreForRead();
                        m_nIdSession = listeContenu.ContexteDonnee.IdSession;
                        m_elementAVariablePourFiltres = elementAVariablePourFiltres;
                        return(result);
                    }
                }
            }


            DataTable table = ds.Tables[NomTable];

            if (table == null)
            {
                result.EmpileErreur(I.T("Table @1 doesn't exist|116", NomTable));
                return(result);
            }
            DataColumn colFille = null;

            if (tableParente != null)
            {
                foreach (Constraint constraint in table.Constraints)
                {
                    if (constraint is ForeignKeyConstraint)
                    {
                        ForeignKeyConstraint fkConst = (ForeignKeyConstraint)constraint;
                        colFille = fkConst.Columns[0];
                    }
                }
            }

            CFiltreData filtreDeBase = listeDonnees.GetFiltreForRead();

            result = GetFiltreDataAAppliquer(elementAVariablePourFiltres);
            if (!result)
            {
                result.EmpileErreur(I.T("Error in cumulated table @1 filter|126", NomTable));
                return(result);
            }

            CFiltreData leFiltreComplet = CFiltreData.GetAndFiltre(
                filtreDeBase, (CFiltreData)result.Data);

            C2iRequeteAvancee requete       = m_requete;
            CTableauCroise    tableauCroise = m_tableauCroise;

            string strChampParent = "";

            if (relationToObjetParent != null)
            {
                requete        = (C2iRequeteAvancee)CCloner2iSerializable.Clone(m_requete);
                strChampParent = relationToObjetParent.ChampsParent[0] + "_CLE_DB";

                Type          typeChampParent = typeof(string);
                IChampDeTable champParent     = tableParente.Champs.FirstOrDefault(c => c.NomChamp == strChampParent);
                if (champParent != null)
                {
                    typeChampParent = champParent.TypeDonnee;
                }


                C2iChampDeRequete champ = new C2iChampDeRequete(
                    strChampParent,
                    new CSourceDeChampDeRequete(relationToObjetParent.ChampsFils[0]),
                    typeof(int),
                    OperationsAgregation.None,
                    true);
                requete.ListeChamps.Add(champ);
                string strListe = "";

                foreach (int nId in nValeursCle)
                {
                    strListe += nId.ToString() + ";";
                }
                strListe        = strListe.Substring(0, strListe.Length - 1);
                leFiltreComplet = CFiltreData.GetAndFiltre(leFiltreComplet, new CFiltreDataAvance(
                                                               requete.TableInterrogee,
                                                               relationToObjetParent.ChampsFils[0] + " in {" + strListe + "}"));
                if (tableauCroise != null)
                {
                    tableauCroise = (CTableauCroise)CCloner2iSerializable.Clone(m_tableauCroise);
                    tableauCroise.AddChampCle(new CCleTableauCroise(strChampParent, typeChampParent));
                }
            }
            requete.FiltreAAppliquer = leFiltreComplet;

            indicateur.SetInfo(I.T("Table @1 (request)|127", NomTable));

            if (ChampOrigine == null)
            {
                requete.TableInterrogee = CContexteDonnee.GetNomTableForType(listeDonnees.TypeObjets);
            }

            result = requete.ExecuteRequete(listeDonnees.ContexteDonnee.IdSession);
            indicateur.SetValue(nValeurIndicateur++);
            if (indicateur.CancelRequest)
            {
                result.EmpileErreur(I.T("Execution cancelled by the user|118"));
                return(result);
            }

            if (!result)
            {
                return(result);
            }
            if (result.Data == null)
            {
                return(null);
            }
            DataTable tableDonnees = (DataTable)result.Data;

            if (tableauCroise != null)
            {
                indicateur.SetInfo(I.T("Table @1 (cross table)|128", NomTable));
                result = tableauCroise.CreateTableCroisee(tableDonnees);
                indicateur.SetValue(nValeurIndicateur++);
                if (!result)
                {
                    result.EmpileErreur(I.T("Error in data crossing|130"));
                    return(result);
                }
                if (indicateur.CancelRequest)
                {
                    result.EmpileErreur(I.T("Execution cancelled by the user|118"));
                    return(result);
                }
                tableDonnees = (DataTable)result.Data;
                foreach (DataColumn col in tableDonnees.Columns)
                {
                    DataColumn laColonne = table.Columns[col.ColumnName];
                    if (laColonne == null)
                    {
                        table.Columns.Add(col.ColumnName, col.DataType);
                    }
                    //Stef le 5/5/2005 : Si la colonne n'est pas du bon type,
                    //son type est ajusté !
                    else if (laColonne.DataType != col.DataType)
                    {
                        laColonne.DataType = col.DataType;
                    }
                }
            }
            else
            {
                //Ajuste le type des colonnes
                foreach (DataColumn col in tableDonnees.Columns)
                {
                    DataColumn laColonne = table.Columns[col.ColumnName];
                    if (laColonne != null && laColonne.DataType != col.DataType)
                    {
                        laColonne.DataType = col.DataType;
                    }
                }
            }

            indicateur.SetInfo(I.T("Storage|129"));
            indicateur.PushSegment(nValeurIndicateur, nValeurIndicateur + 1);
            indicateur.SetBornesSegment(0, tableDonnees.Rows.Count);

            int nFrequence = Math.Min(tableDonnees.Rows.Count / 20, 500) + 1;

            //Intègre les données dans la table
            ArrayList lstNewRows = new ArrayList();
            int       nCompteur  = 0;

            foreach (DataRow row in tableDonnees.Rows)
            {
                nCompteur++;
                if (nCompteur % nFrequence == 0)
                {
                    indicateur.SetValue(nCompteur);
                    if (indicateur.CancelRequest)
                    {
                        result.EmpileErreur(I.T("Execution cancelled by the user|118"));
                        return(result);
                    }
                }
                DataRow newRow = table.NewRow();
                foreach (DataColumn col in row.Table.Columns)
                {
                    if (newRow.Table.Columns[col.ColumnName] != null)
                    {
                        newRow[col.ColumnName] = row[col];
                    }
                }
                if (colFille != null)
                {
                    if (relationToObjetParent == null)
                    {
                        newRow[colFille] = nValeursCle[0];
                    }
                    else
                    {
                        newRow[colFille] = row[strChampParent];
                    }
                }
                table.Rows.Add(newRow);
            }
            indicateur.PopSegment();
            return(result);
        }
示例#29
0
        /// ////////////////////////////////
        public CResultAErreur ExecuteRequete(C2iRequete requete, IElementAVariablesDynamiquesAvecContexteDonnee elementAVariables, bool bStructureOnly)
        {
            CResultAErreur result        = CResultAErreur.True;
            Type           typeReference = requete.TypeReferencePourConnexion;

            if (typeReference != null)
            {
                ///TODO
                ///Problème VersionObjet
                object objServeur = CContexteDonnee.GetTableLoader(CContexteDonnee.GetNomTableForType(typeReference), null, IdSession);
                if (objServeur != null)
                {
                    typeReference = objServeur.GetType();
                }
                else
                {
                    typeReference = null;
                }
            }

            IDatabaseConnexion con;

            if (typeReference == null)
            {
                con = CSc2iDataServer.GetInstance().GetDatabaseConnexion(IdSession, "");
            }
            else
            {
                con = CSc2iDataServer.GetInstance().GetDatabaseConnexion(IdSession, typeReference);
            }


            object[] lstParams   = null;
            string   strRequete  = GetTexteRequeteFinaleSql(requete, elementAVariables, ref lstParams, con);
            int      nOldTimeOut = con.CommandTimeOut;

            con.CommandTimeOut = 60 * 10;

            IDataAdapter adapter = con.GetAdapterForRequete(strRequete, lstParams);
            DataSet      ds      = new DataSet();

            try
            {
                lock (con)
                {
                    if (bStructureOnly)
                    {
                        adapter.FillSchema(ds, SchemaType.Source);
                    }
                    else
                    {
                        adapter.Fill(ds);
                    }
                }
                if (ds.Tables.Count > 0)
                {
                    DataTable table = ds.Tables[0];
                    if (requete.TableauCroise != null)
                    {
                        result = requete.TableauCroise.CreateTableCroisee(table);
                        if (result)
                        {
                            table = (DataTable)result.Data;
                        }
                    }

                    table.TableName = "DONNEES_REQUETE";
                    result.Data     = table;
                }
            }
            catch (Exception e)
            {
                result.EmpileErreur(new CErreurException(e));
                result.EmpileErreur(I.T("Error in the request '@1'|102", strRequete));
            }
            finally
            {
                con.CommandTimeOut = nOldTimeOut;
                CUtilDataAdapter.DisposeAdapter(adapter);
            }
            return(result);
        }
示例#30
0
        /// /////////////////////////////////////////////
        ///Le data du result contient le filtre
        public CResultAErreur GetFiltreData(  )
        {
            CResultAErreur result = CResultAErreur.True;

            if (ComposantPrincipal == null)
            {
                result.Data = null;
                return(result);
            }
            if (m_typeElementsFiltres == null)
            {
                result.EmpileErreur(I.T("The type of filter elements isn't valid|174"));
                return(result);
            }
            string strTable = CContexteDonnee.GetNomTableForType(m_typeElementsFiltres);

            if (strTable == "")
            {
                result.EmpileErreur(I.T("No table is associated with @1|175", DynamicClassAttribute.GetNomConvivial(m_typeElementsFiltres)));
                return(result);
            }

            CContexteEvaluationExpression ctxEval = new CContexteEvaluationExpression(this);
            CFiltreDataAvance             filtre  = new CFiltreDataAvance(strTable, "");

            if (FormuleIntegrerParentsHierarchiques != null)
            {
                result = FormuleIntegrerParentsHierarchiques.Eval(ctxEval);
                if (result && result.Data is bool && (bool)result.Data)
                {
                    filtre.IntergerParentsHierarchiques = true;
                }
                else
                {
                    filtre.IntergerParentsHierarchiques = false;
                }
            }
            if (FormuleIntegrerFilsHierarchiques != null)
            {
                result = FormuleIntegrerFilsHierarchiques.Eval(ctxEval);
                if (result && result.Data is bool && (bool)result.Data)
                {
                    filtre.IntegrerFilsHierarchiques = true;
                }
                else
                {
                    filtre.IntegrerFilsHierarchiques = false;
                }
            }
            if (FormuleNeConserverQueLesRacines != null)
            {
                result = FormuleNeConserverQueLesRacines.Eval(ctxEval);
                if (result && result.Data is bool && (bool)result.Data)
                {
                    filtre.NeConserverQueLesRacines = true;
                }
                else
                {
                    filtre.NeConserverQueLesRacines = false;
                }
            }
            result = CResultAErreur.True;

            result = m_composantFiltre.GetComposantFiltreData(this, filtre);
            if (!result)
            {
                result.Data = null;
                result.EmpileErreur(I.T("Error in filter|176"));
                return(result);
            }
            CComposantFiltre composant = (CComposantFiltre)result.Data;

            if (composant == null)
            {
                filtre.Filtre = "1=1";
            }
            else
            {
                filtre.ComposantPrincipal = composant;
            }
            result.Data = filtre;
            return(result);
        }