protected virtual ColumnElement CreateColumnElement(ColumnElement element, ElaboratedTableVarColumn elaboratedColumn, Schema.TableVarColumn column, string titleSeed, string pageType, bool isReadOnly) { PrepareElement(element, column.MetaData, null, titleSeed, pageType, isReadOnly); if ( (((Schema.ScalarType)column.DataType).NativeType == DAE.Runtime.Data.NativeAccessors.AsString.NativeType) && (elaboratedColumn.ElaboratedReference == null) && !element.Properties.Contains("NilIfBlank") && (element.ElementType != "Choice") // TODO: Control types: need a better mechanism for determining whether or not a particular property applies to a particular control type... ) { element.Properties.AddOrUpdate("NilIfBlank", "False"); } element.Title = DerivationUtility.GetTag(column.MetaData, "Caption", pageType, DerivationUtility.GetTag(column.MetaData, "Title", pageType, Schema.Object.Unqualify(column.Name))); string width = DerivationUtility.GetTag(column.MetaData, "Width", pageType, String.Empty); if (width != String.Empty) { element.Properties.AddOrUpdate("Width", width); } element.Properties.AddOrUpdate("Source", element.Source); element.Properties.AddOrUpdate("ColumnName", element.ColumnName); if (column.ReadOnly || isReadOnly || Convert.ToBoolean(DerivationUtility.GetTag(column.MetaData, "ReadOnly", pageType, "False"))) { element.Properties.AddOrUpdate("ReadOnly", "True"); } return(element); }
protected virtual Element BuildColumnElement(ElaboratedTableVarColumn column, string pageType, string titleSeed, bool readOnly) { ColumnElement columnElement = new ColumnElement(String.Format("{0}Column{1}", _derivationInfo.MainSourceName, column.ElaboratedName)); columnElement.ElementType = DerivationUtility.GetTag(column.Column.MetaData, "ElementType", pageType, GetDefaultElementType(column.Column.DataType, pageType)); columnElement.Source = _derivationInfo.MainSourceName; columnElement.ColumnName = Schema.Object.Qualify(column.Column.Name, column.ElaboratedTableVar.ElaboratedName); CreateColumnElement(columnElement, column, column.Column, titleSeed, pageType, readOnly); AddElement(columnElement, column.GroupName, titleSeed, pageType, readOnly); return(columnElement); }
protected override Element BuildColumnElement(ElaboratedTableVarColumn column, string pageType, string titleSeed, bool readOnly) { GridColumnElement gridColumnElement = new GridColumnElement(String.Format("{0}GridColumn{1}", _derivationInfo.MainSourceName, column.ElaboratedName)); if (column.ElaboratedReference == null) { gridColumnElement.ColumnName = column.ElaboratedName; } else { gridColumnElement.ColumnName = Schema.Object.Qualify(column.Column.Name, column.ElaboratedTableVar.ElaboratedName); } gridColumnElement.ElementType = DerivationUtility.GetTag(column.Column.MetaData, "Grid.ElementType", pageType, GetDefaultElementType(column.Column.DataType, pageType)); CreateGridColumnElement(gridColumnElement, column.Column, titleSeed, pageType, false); AddElement(gridColumnElement, column.GroupName, titleSeed, pageType, false); return(gridColumnElement); }
protected override void BuildQuickLookup ( ElaboratedTableVarColumn column, ElaboratedReference reference, string[] columnNames, string[] lookupColumnNames, string[] masterKeyNames, string[] detailKeyNames, string pageType, string titleSeed, bool readOnly ) { if (reference.IsEmbedded) { string lookupGroupName = _derivationInfo.ElaboratedExpression.Groups.ResolveGroupName(String.Format("{0}{1}", reference.ElaboratedName, "Group")); EnsureGroups(lookupGroupName, titleSeed, pageType, readOnly); } BuildColumnElement(column, pageType, titleSeed, readOnly); }
protected virtual void BuildColumn(ElaboratedTableVarColumn column) { string titleSeed = column.GetTitleSeed(); string pageType = _derivationInfo.PageType; if ((column.ElaboratedTableVar.ElaboratedReference != null) && (column.ElaboratedTableVar.ElaboratedReference.ReferenceType == ReferenceType.Lookup)) { pageType = DerivationUtility.Preview; } if ( !DerivationUtility.IsReadOnlyPageType(pageType) && (column.ElaboratedReference != null) && (column.ElaboratedReference.ReferenceType == ReferenceType.Lookup) && ( (column.ElaboratedReference.SourceElaboratedTableVar.ElaboratedReference == null) || (column.ElaboratedReference.SourceElaboratedTableVar.ElaboratedReference.ReferenceType == ReferenceType.Extension) ) ) { int visibleCount = 0; List <string> masterColumns = new List <string>(); List <string> columns = new List <string>(); foreach (ElaboratedTableVarColumn referenceColumn in column.ElaboratedReference.Columns) { if (referenceColumn.IsMaster) { masterColumns.Add(referenceColumn.Column.Name); } else { columns.Add(referenceColumn.Column.Name); } if (referenceColumn.Visible) { visibleCount++; } } string[] columnNames = new string[columns.Count]; string[] lookupColumnNames = new string[columns.Count]; string[] masterKeyNames = new string[masterColumns.Count]; string[] detailKeyNames = new string[masterColumns.Count]; int columnIndex = 0; int masterColumnIndex = 0; for (int index = 0; index < column.ElaboratedReference.Reference.SourceKey.Columns.Count; index++) { if (columns.Contains(column.ElaboratedReference.Reference.SourceKey.Columns[index].Name)) { columnNames[columnIndex] = Schema.Object.Qualify(column.ElaboratedReference.Reference.SourceKey.Columns[index].Name, column.ElaboratedTableVar.ElaboratedName); lookupColumnNames[columnIndex] = Schema.Object.Qualify(column.ElaboratedReference.Reference.TargetKey.Columns[index].Name, DerivationUtility.MainElaboratedTableName); columnIndex++; } else { masterKeyNames[masterColumnIndex] = Schema.Object.Qualify(column.ElaboratedReference.Reference.SourceKey.Columns[index].Name, column.ElaboratedTableVar.ElaboratedName); detailKeyNames[masterColumnIndex] = Schema.Object.Qualify(column.ElaboratedReference.Reference.TargetKey.Columns[index].Name, DerivationUtility.MainElaboratedTableName); masterColumnIndex++; } } bool useFullLookup = (visibleCount != 1) || Convert.ToBoolean(DerivationUtility.GetTag(column.ElaboratedReference.Reference.MetaData, "UseFullLookup", _derivationInfo.PageType, column.ElaboratedReference.ReferenceType.ToString(), "False")); if (useFullLookup) { BuildFullLookup(column.ElaboratedReference, columnNames, lookupColumnNames, masterKeyNames, detailKeyNames, pageType, titleSeed, column.ReadOnly); if (column.Visible) { BuildColumnElement(column, pageType, titleSeed, column.ReadOnly); } } else if (column.Visible) { BuildQuickLookup(column, column.ElaboratedReference, columnNames, lookupColumnNames, masterKeyNames, detailKeyNames, pageType, titleSeed, column.ReadOnly); } } else { if (column.Visible) { BuildColumnElement(column, pageType, titleSeed, column.ReadOnly); } } }
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; } }