/// <summary> /// Le data du result contient un CArbreTable /// </summary> /// <returns></returns> public CResultAErreur CalculeArbre(CArbreTable arbre) { CResultAErreur result = CResultAErreur.True; //Identifie les relations à mettre en jeu ArrayList lstChamps = new ArrayList(); if (m_strTableInterrogee == "") { result.EmpileErreur(I.T("Request table is not defined|106")); return(result); } if (arbre == null) { arbre = new CArbreTableParente(m_strTableInterrogee); } foreach (C2iChampDeRequete champ in ListeChamps) { try { foreach (CSourceDeChampDeRequete source in champ.Sources) { CComposantFiltreChamp composant = new CComposantFiltreChamp(source.Source, m_strTableInterrogee); CArbreTable arbreEnCours = arbre; foreach (CInfoRelationComposantFiltre relation in composant.Relations) { //Stef 08/08/2013 : toutes les relations sont integrées //en leftouter : en effet, on doit prendre toutes les valeurs //de la table source, même si elles n'ont pas de valeur liées dans la //table fille arbreEnCours = arbreEnCours.IntegreRelation(relation, true, composant.IdChampCustom); if (arbreEnCours == null) { result.EmpileErreur(I.T("Itegration error of the relation @1|107", relation.RelationKey)); return(result); } } source.ChampDeTable = composant.NomChamp; source.Alias = arbreEnCours.Alias; } } catch (Exception e) { result.EmpileErreur(new CErreurException(e)); result.EmpileErreur(I.T("Error in field @1|108", champ.NomChamp)); return(result); } } result.Data = arbre; return(result); }
/// //////////////////////////////////////////////////////////////// private CResultAErreur IntegreRelationsChamps(CArbreTable arbre, CComposantFiltreChamp champ, bool bIsLeftOuter) { CResultAErreur result = CResultAErreur.True; CArbreTable arbreEnCours = arbre; foreach (CInfoRelationComposantFiltre relation in champ.Relations) { arbreEnCours = arbreEnCours.IntegreRelation(relation, bIsLeftOuter, champ.IdChampCustom); if (arbreEnCours == null) { result.EmpileErreur(I.T("Error while integrating relation @1|107", relation.RelationKey)); return(result); } } return(result); }
//// //////////////////////////////////////////////////////////////// private CResultAErreur GetRelations(CComposantFiltre composant, CArbreTable arbre, bool bFillesLeftOuter) { CResultAErreur result = CResultAErreur.True; bool bIsComposantLocalLeftOuter = false; //Le ou entraine des left outers if (composant is CComposantFiltreOperateur) { CComposantFiltreOperateur op = (CComposantFiltreOperateur)composant; if (op.Operateur.Id == CComposantFiltreOperateur.c_IdOperateurOu) { bIsComposantLocalLeftOuter = true; } } if (composant is CComposantFiltreHasNo) { bIsComposantLocalLeftOuter = true; } if (composant is CComposantFiltreChamp) { CComposantFiltreChamp champ = (CComposantFiltreChamp)composant; result = IntegreRelationsChamps(arbre, champ, bIsComposantLocalLeftOuter || bFillesLeftOuter); if (!result) { return(result); } } foreach (CComposantFiltre composantFils in composant.Parametres) { result = GetRelations(composantFils, arbre, bIsComposantLocalLeftOuter || bFillesLeftOuter); if (!result) { return(result); } } return(result); }
/// /////////////////////////////////////////////////////// public CArbreTableFille(CArbreTable parent, CInfoRelationComposantFiltre relation, string strAlias) { m_infoRelation = relation; Alias = strAlias; m_parent = parent; }