public override void FillArbreProprietesAccedees(CArbreDefinitionsDynamiques arbre) { base.FillArbreProprietesAccedees(arbre); if (m_property != null) { CArbreDefinitionsDynamiques sa = arbre.GetArbre(m_property); if (sa == null) { sa = new CArbreDefinitionsDynamiques(m_property); arbre.AddSousArbre(sa); } } }
/// //////////////////////////////////////// ///Si l'arbre est basé sur un champ calculé, détaille les ///champs utilisés dans la formule public static void DetailleSousArbres( CArbreDefinitionsDynamiques arbre, CContexteDonnee contexteDonnee, Dictionary <CDefinitionProprieteDynamique, int> dicCountProfondeurParChamp) { //TESTDBKEYOK if (dicCountProfondeurParChamp == null) { dicCountProfondeurParChamp = new Dictionary <CDefinitionProprieteDynamique, int>(); } ArrayList lstSousArbres = new ArrayList(arbre.SousArbres); foreach (CArbreDefinitionsDynamiques sousArbre in lstSousArbres) { if (sousArbre.DefinitionPropriete is CDefinitionProprieteDynamiqueChampCalcule) { int nProfondeur = 0; dicCountProfondeurParChamp.TryGetValue(sousArbre.DefinitionPropriete, out nProfondeur); if (nProfondeur < 10)//En cas d'appel récursif, limite à 10 appels { CChampCalcule champCalc = new CChampCalcule(contexteDonnee); if (champCalc.ReadIfExists(((CDefinitionProprieteDynamiqueChampCalcule)sousArbre.DefinitionPropriete).DbKeyChamp)) { C2iExpression formule = champCalc.Formule; if (formule != null) { CArbreDefinitionsDynamiques arbreDeFormule = new CArbreDefinitionsDynamiques(null); formule.GetArbreProprietesAccedees(arbreDeFormule); nProfondeur++; dicCountProfondeurParChamp[sousArbre.DefinitionPropriete] = nProfondeur; DetailleSousArbres(arbreDeFormule, contexteDonnee, dicCountProfondeurParChamp); nProfondeur--; dicCountProfondeurParChamp[sousArbre.DefinitionPropriete]--; arbre.RemoveSousArbre(sousArbre); foreach (CArbreDefinitionsDynamiques arbreTmp in arbreDeFormule.SousArbres) { arbre.AddSousArbre(arbreTmp); } } } } } else { DetailleSousArbres(sousArbre, contexteDonnee, dicCountProfondeurParChamp); } } }