//-------------------------------------------------------------- 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); }
//-------------------------------------------------- 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); }
//-------------------------------------------------- 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); }