protected void Page_Init(object sender, EventArgs e) { //if (this.form.TemplateContainer.Controls.Count <= 1) return; PXCache cache = this.ds.DataGraph.Caches[typeof(FeaturesSet)]; var features = new List <string>(); var disabled = new List <string>(); var subfeatures = new Dictionary <string, List <string> >(StringComparer.InvariantCultureIgnoreCase); foreach (string field in cache.Fields) { string parentName = null; bool featureFound = false; var featureAttributes = cache.GetAttributes(null, field).OfType <FeatureAttribute>(); foreach (FeatureAttribute feature in featureAttributes) { featureFound = feature.Visible; if (feature.Top != true && feature.Parent != null) { parentName = feature.Parent.Name; } } if (!featureFound) { continue; } if (parentName != null) { if (!subfeatures.ContainsKey(parentName)) { subfeatures.Add(parentName, new List <string>()); } subfeatures[parentName].Add(field); } else { features.Add(field); } if (PXAccess.FeatureReadOnly(field) || (parentName != null && PXAccess.FeatureReadOnly(parentName))) { disabled.Add(field); } } AddControls(0, features, subfeatures, disabled); }