//--------------------------------------------------------------
        private void m_btnAddFieldId_Click(object sender, EventArgs e)
        {
            IODEQTableFromFramework source = m_tableFromFramework.ElementsSource[0] as IODEQTableFromFramework;

            if (source != null)
            {
                CStructureTable structure            = CStructureTable.GetStructure(source.TypeElements);
                CColumnDeEasyQueryChampDeRequete col = new CColumnDeEasyQueryChampDeRequete("ID",
                                                                                            new CSourceDeChampDeRequete(structure.ChampsId[0].NomChamp),
                                                                                            typeof(int),
                                                                                            OperationsAgregation.None,
                                                                                            true);
                source.AddColonneDeRequete(col);
                CResultAErreur result = m_tableFromFramework.GetErreurIncompatibilitéTableParente();
                if (!result)
                {
                    m_panelSourceIncompatible.Visible = true;
                    m_lblImpossible.Text = result.Erreur.ToString();
                }
                else
                {
                    m_panelSourceIncompatible.Visible = false;
                }
            }
        }
        //--------------------------------------------------------
        public void Init(CODEQTableFilleFromFramework obj)
        {
            m_tableFromFramework = obj;
            if (m_tableFromFramework.ElementsSource.Length > 0)
            {
                m_lblSource.Text = m_tableFromFramework.ElementsSource[0].NomFinal;
                IODEQTableFromFramework t = m_tableFromFramework.ElementsSource[0] as IODEQTableFromFramework;
                if (t != null)
                {
                    m_typeSource = t.TypeElements;
                }
                else
                {
                    m_typeSource = typeof(DBNull);
                }
            }
            else
            {
                m_lblSource.Text = "?";
            }
            m_txtNomTable.Text    = m_tableFromFramework.NomFinal;
            m_chkUseCache.Checked = m_tableFromFramework.UseCache;

            CResultAErreur result = m_tableFromFramework.GetErreurIncompatibilitéTableParente();

            if (!result)
            {
                m_panelSourceIncompatible.Visible = true;
                m_lblImpossible.Text = result.Erreur.ToString();
            }
            else
            {
                m_panelSourceIncompatible.Visible = false;
            }

            FillListeColonnes();
            FillListeFormulesNommees();

            m_champ           = m_tableFromFramework.ChampSource;
            m_labelChamp.Text = m_champ == null?I.T("[UNDEFINED]|30013") : m_champ.Nom;


            m_panelFiltre.InitSansVariables(m_tableFromFramework.FiltreDynamique);

            m_panelPostFilter.Init(obj);
        }
示例#3
0
        //--------------------------------------------------
        public CResultAErreurType <CColumnDeEasyQueryChampDeRequete> GetColonneIdSource()
        {
            CResultAErreurType <CColumnDeEasyQueryChampDeRequete> result = new CResultAErreurType <CColumnDeEasyQueryChampDeRequete>();
            IODEQTableFromFramework tableSource = ElementsSource[0] as IODEQTableFromFramework;

            if (tableSource == null)
            {
                result.EmpileErreur(I.T("Incompatible source table|20074"));
                return(result);
            }
            Type tp = tableSource.TypeElements;

            if (!typeof(IObjetDonneeAIdNumerique).IsAssignableFrom(tp))
            {
                result.EmpileErreur(I.T("Incompatible source table|20074"));
                return(result);
            }
            CStructureTable  structure = CStructureTable.GetStructure(tp);
            HashSet <string> setIds    = new HashSet <string>();

            setIds.Add("#PP|" + structure.ChampsId[0].Propriete);
            if (structure.ChampsId.Length == 1)
            {
                setIds.Add(structure.ChampsId[0].NomChamp);
            }

            foreach (CColumnDeEasyQueryChampDeRequete col in tableSource.ChampsDeRequete)
            {
                if (col.Sources.Length == 1)
                {
                    if (setIds.Contains(col.Sources[0].Source) &&
                        col.OperationAgregation == OperationsAgregation.None)
                    {
                        result.Data = col;
                        return(result);
                    }
                }
            }
            result.EmpileErreur(I.T("Source table must reference 'Id' field with 'None' operation|20075"));
            return(result);
        }
示例#4
0
        //--------------------------------------------------
        protected override CResultAErreur GetDatasHorsCalculees(CListeQuerySource sources)
        {
            CResultAErreur result = CResultAErreur.True;
            CResultAErreurType <CColumnDeEasyQueryChampDeRequete> resCol = GetColonneIdSource();

            m_dicRowsParentes = null;
            if (!resCol)
            {
                result.EmpileErreur(resCol.Erreur);
                return(result);
            }
            IODEQTableFromFramework tableSource = this.ElementsSource[0] as IODEQTableFromFramework;

            if (tableSource != null)
            {
                result = tableSource.GetDatas(sources);
                if (!result)
                {
                    return(result);
                }

                DataTable tableParente = result.Data as DataTable;

                C2iRequeteAvancee requete = new C2iRequeteAvancee();
                requete.TableInterrogee = CContexteDonnee.GetNomTableForType(TypeElements);
                foreach (IColumnDeEasyQuery col in m_listeColonnes)
                {
                    CColumnDeEasyQueryChampDeRequete colR = col as CColumnDeEasyQueryChampDeRequete;
                    requete.ListeChamps.Add(colR);
                }
                if (requete.ListeChamps.Count == 0)
                {
                    result.Data = new DataTable();
                    return(result);
                }

                bool bRelTrouve = false;
                CComposantFiltreOperateur cpOperateur = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurIn);
                CComposantFiltre          cpFinal     = cpOperateur;

                result = FiltreDynamique.GetFiltreData();
                if (!result)
                {
                    return(result);
                }
                CFiltreDataAvance filtre = result.Data as CFiltreDataAvance;
                if (filtre == null)
                {
                    filtre = new CFiltreDataAvance(requete.TableInterrogee, "");
                }

                CDefinitionProprieteDynamiqueRelation rel = m_definitionSource as CDefinitionProprieteDynamiqueRelation;

                string strNomChampParent = null;

                //// Relation standard
                if (rel != null)
                {
                    //m_definitionSource.GetDefinitionInverse(TypeElements);
                    if (rel.Relation.TableParente == requete.TableInterrogee)
                    {
                        cpOperateur.Parametres.Add(new CComposantFiltreChamp(rel.Relation.ChampsParent[0], requete.TableInterrogee));
                        strNomChampParent = rel.Relation.ChampsParent[0];
                    }
                    else
                    {
                        cpOperateur.Parametres.Add(new CComposantFiltreChamp(rel.Relation.ChampsFille[0], requete.TableInterrogee));
                        strNomChampParent = rel.Relation.ChampsFille[0];
                    }

                    bRelTrouve = true;
                }
                else
                {
                    ///Relation Type id
                    CDefinitionProprieteDynamiqueRelationTypeId relTypeId = m_definitionSource as CDefinitionProprieteDynamiqueRelationTypeId;
                    if (relTypeId != null)
                    {
                        cpOperateur.Parametres.Add(new CComposantFiltreChamp(relTypeId.Relation.ChampId, requete.TableInterrogee));
                        strNomChampParent = relTypeId.Relation.ChampId;
                        cpFinal           = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurEt);
                        cpFinal.Parametres.Add(cpOperateur);
                        CComposantFiltre cpType = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurEgal);
                        cpType.Parametres.Add(new CComposantFiltreChamp(relTypeId.Relation.ChampType, requete.TableInterrogee));
                        cpType.Parametres.Add(new CComposantFiltreVariable("@" + (filtre.Parametres.Count + 1).ToString("0")));

                        filtre.Parametres.Add(tableSource.TypeElements.ToString());
                        cpFinal.Parametres.Add(cpType);
                        bRelTrouve = true;
                    }
                }

                if (strNomChampParent != null)
                {
                    requete.ListeChamps.Add(new C2iChampDeRequete(c_nomChampParentId, new CSourceDeChampDeRequete(strNomChampParent), typeof(int), OperationsAgregation.None, false));
                }



                if (!bRelTrouve)
                {
                    result.EmpileErreur(I.T("Can not find link for table @1|20076", NomFinal));
                    return(result);
                }



                int nParametre = filtre.Parametres.Count;
                cpOperateur.Parametres.Add(new CComposantFiltreVariable("@" + (filtre.Parametres.Count + 1).ToString("0")));
                filtre.Parametres.Add(new int[0]);

                if (filtre.ComposantPrincipal == null)
                {
                    filtre.ComposantPrincipal = cpFinal;
                }
                else
                {
                    CComposantFiltreOperateur opEt = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurEt);
                    opEt.Parametres.Add(cpFinal);
                    opEt.Parametres.Add(filtre.ComposantPrincipal);
                    filtre.ComposantPrincipal = opEt;
                }

                m_dicRowsParentes = new Dictionary <object, DataRow>();
                DataTable maTable        = null;
                int       nLectureParLot = 500;
                for (int nRow = 0; nRow < tableParente.Rows.Count; nRow += nLectureParLot)
                {
                    int        nMax   = Math.Min(nRow + nLectureParLot, tableParente.Rows.Count);
                    List <int> lstIds = new List <int>();
                    for (int n = nRow; n < nMax; n++)
                    {
                        DataRow row  = tableParente.Rows[n];
                        int     nVal = (int)row[resCol.DataType.ColumnName];
                        lstIds.Add(nVal);
                        m_dicRowsParentes[nVal] = row;
                    }
                    filtre.Parametres[nParametre] = lstIds.ToArray();
                    DataTable tableTmp = null;
                    requete.FiltreAAppliquer = filtre;
                    result = requete.ExecuteRequete(CContexteDonneeSysteme.GetInstance().IdSession);
                    if (!result || !(result.Data is DataTable))
                    {
                        result.EmpileErreur(I.T("Error on table @1|20070", NomFinal));
                        return(result);
                    }
                    tableTmp = result.Data as DataTable;
                    if (maTable == null)
                    {
                        maTable = tableTmp;
                    }
                    else
                    {
                        maTable.Merge(tableTmp);
                    }
                }
                if (maTable == null)
                {
                    maTable = new DataTable(NomFinal);
                    foreach (IColumnDeEasyQuery colEQ in ColonnesOrCalculees)
                    {
                        DataColumn col = new DataColumn(colEQ.ColumnName, colEQ.DataType);
                        try
                        {
                            maTable.Columns.Add(col);
                        }
                        catch { }
                    }
                    DataColumn colParent = new DataColumn(c_nomChampParentId, typeof(int));
                    try
                    {
                        maTable.Columns.Add(colParent);
                    }
                    catch { }
                }
                else
                {
                    //Ajoute les colonnes from parent
                    Dictionary <CColumnEQFromSource, string> dicColFromSourceToNom = new Dictionary <CColumnEQFromSource, string>();
                    foreach (CColumnEQFromSource colFromSource in m_listeColonnesFromParent)
                    {
                        if (!maTable.Columns.Contains(colFromSource.ColumnName))
                        {
                            maTable.Columns.Add(colFromSource.ColumnName, colFromSource.DataType);
                        }
                        IColumnDeEasyQuery colSource = tableSource.Columns.FirstOrDefault(c => c.Id == colFromSource.IdColumnSource);
                        if (colSource != null && tableParente.Columns.Contains(colSource.ColumnName))
                        {
                            dicColFromSourceToNom[colFromSource] = colSource.ColumnName;
                        }
                    }
                    if (maTable.Columns.Contains(c_nomChampParentId))
                    {
                        foreach (DataRow row in maTable.Rows)
                        {
                            if (row[c_nomChampParentId] is int)
                            {
                                DataRow rowParente = null;
                                if (m_dicRowsParentes.TryGetValue((int)row[c_nomChampParentId], out rowParente))
                                {
                                    if (rowParente != null)
                                    {
                                        foreach (KeyValuePair <CColumnEQFromSource, string> kv in dicColFromSourceToNom)
                                        {
                                            row[kv.Key.ColumnName] = rowParente[kv.Value];
                                        }
                                    }
                                }
                            }
                        }
                        maTable.Columns.Remove(c_nomChampParentId);
                    }
                }
                result.Data = maTable;
            }
            return(result);
        }