protected void EnsureGroup(string groupName, string titleSeed, string pageType, bool isReadOnly) { if (groupName != String.Empty) { GroupElement groupElement = _rootElement.FindElement(groupName) as GroupElement; if (groupElement == null) { ElaboratedGroup group = _derivationInfo.ElaboratedExpression.Groups[groupName]; groupElement = new GroupElement(groupName); MetaData groupMetaData = new MetaData(group.Properties); groupElement.ElementType = DerivationUtility.GetTag(groupMetaData, "ElementType", pageType, "Group"); groupElement.EliminateGroup = Boolean.Parse(DerivationUtility.GetTag(groupMetaData, "EliminateGroup", pageType, "True")); CreateContainerElement(groupElement, _derivationInfo.ElaboratedExpression.Groups[groupName], titleSeed, pageType, isReadOnly); AddElement(groupElement, GetParentGroupName(groupName), titleSeed, pageType, isReadOnly); } } }
protected virtual void BuildQuickLookup ( ElaboratedTableVarColumn column, ElaboratedReference reference, string[] columnNames, string[] lookupColumnNames, string[] masterKeyNames, string[] detailKeyNames, string pageType, string titleSeed, bool readOnly ) { // Prepare the quick lookup group if (reference.IsEmbedded) { string lookupGroupName = _derivationInfo.ElaboratedExpression.Groups.ResolveGroupName(String.Format("{0}{1}", reference.ElaboratedName, "Group")); EnsureGroups(lookupGroupName, titleSeed, pageType, readOnly); GroupElement groupElement = _rootElement.FindElement(lookupGroupName) as GroupElement; MetaData groupMetaData = DerivationUtility.ExtractTags(reference.Reference.MetaData, groupElement.ElementType, pageType, reference.ReferenceType.ToString()); PrepareElement(groupElement, groupMetaData, reference.Reference.MetaData, titleSeed, pageType, reference.ReferenceType.ToString(), readOnly); } LookupColumnElement lookupGroup = new LookupColumnElement(String.Format("{0}Column{1}_Lookup", _derivationInfo.MainSourceName, column.ElaboratedName)); lookupGroup.ElementType = DerivationUtility.GetTag(reference.Reference.MetaData, "ElementType", pageType, reference.ReferenceType.ToString(), "QuickLookup"); DerivationUtility.ExtractProperties(reference.Reference.MetaData, lookupGroup.ElementType, pageType, lookupGroup.Properties); lookupGroup.Properties.SafeAdd(new Tag("Source", _derivationInfo.MainSourceName)); lookupGroup.Source = lookupGroup.Properties.GetTag("Source").Value; lookupGroup.Properties.SafeAdd(new Tag("ColumnName", Schema.Object.Qualify(column.Column.Name, column.ElaboratedTableVar.ElaboratedName))); lookupGroup.ColumnName = lookupGroup.Properties.GetTag("ColumnName").Value; lookupGroup.Properties.SafeAdd(new Tag("LookupColumnName", Schema.Object.Qualify(reference.Reference.TargetKey.Columns[reference.Reference.SourceKey.Columns.IndexOf(column.Column.Name)].Name, DerivationUtility.MainElaboratedTableName))); lookupGroup.LookupColumnName = lookupGroup.Properties.GetTag("LookupColumnName").Value; lookupGroup.Properties.SafeAdd(new Tag("Document", GetLookupDocument(reference, masterKeyNames, detailKeyNames))); lookupGroup.LookupDocument = lookupGroup.Properties.GetTag("Document").Value; if (masterKeyNames.Length > 0) { lookupGroup.Properties.SafeAdd(new Tag("MasterKeyNames", StringArrayToNames(masterKeyNames))); lookupGroup.MasterKeyNames = lookupGroup.Properties.GetTag("MasterKeyNames").Value; lookupGroup.Properties.SafeAdd(new Tag("DetailKeyNames", StringArrayToNames(detailKeyNames))); lookupGroup.DetailKeyNames = lookupGroup.Properties.GetTag("DetailKeyNames").Value; } if (column.ReadOnly || readOnly || Convert.ToBoolean(DerivationUtility.GetTag(column.Column.MetaData, "ReadOnly", pageType, "False"))) { lookupGroup.Properties.AddOrUpdate("ReadOnly", "True"); } MetaData metaData = DerivationUtility.ExtractTags(reference.Reference.MetaData, lookupGroup.ElementType, pageType, reference.ReferenceType.ToString()); PrepareElement(lookupGroup, metaData, reference.Reference.MetaData, titleSeed, pageType, reference.ReferenceType.ToString(), readOnly); if (!Boolean.Parse(DerivationUtility.GetTag(metaData, "Visible", pageType, "True"))) { lookupGroup.Properties.AddOrUpdate("Visible", "False"); } AddElement(lookupGroup, column.GroupName, titleSeed, pageType, readOnly); // Build the element column.GroupName = lookupGroup.Name; Element controlElement = BuildColumnElement(column, pageType, titleSeed, readOnly); if (!controlElement.Properties.Contains("TitleAlignment")) { switch (controlElement.ElementType) { case "TextBox": case "DateTimeBox": case "NumericTextBox": controlElement.Properties.Add(new Tag("TitleAlignment", "None")); break; } } // Use the column's title for the group (only in the case of a quick lookup) lookupGroup.Title = controlElement.Title; // If the control has a flow break specified, push it onto the lookup group (only in the case of a quick lookup) if (controlElement.FlowBreak) { lookupGroup.FlowBreak = true; } }