예제 #1
0
        public static void ExtractProperties(MetaData metaData, string qualifier, string pageType, Tags properties)
        {
            if (metaData != null)
            {
                string pageQualifier        = String.Format("Frontend.{0}.{1}.", pageType, qualifier);
                string cardinalityQualifier = String.Format("Frontend.{0}.{1}.", DerivationUtility.GetPageTypeCardinality(pageType), qualifier);
                string elementQualifier     = String.Format("Frontend.{0}.", qualifier);

                                #if USEHASHTABLEFORTAGS
                foreach (Tag tag in AMetaData.Tags)
                {
                                #else
                Tag tag;
                for (int index = 0; index < metaData.Tags.Count; index++)
                {
                    tag = metaData.Tags[index];
                                #endif
                    if (tag.Name.IndexOf(pageQualifier) == 0)
                    {
                        AddProperty(tag, pageQualifier, properties);
                    }
                    else if (tag.Name.IndexOf(cardinalityQualifier) == 0)
                    {
                        AddProperty(tag, cardinalityQualifier, properties);
                    }
                    else if (tag.Name.IndexOf(elementQualifier) == 0)
                    {
                        AddProperty(tag, elementQualifier, properties);
                    }
                }
            }
        }
예제 #2
0
        protected virtual void Prepare()
        {
            Expression expression = _elaboratedExpression.Expression;

            _tableVar = _elaboratedExpression.MainElaboratedTableVar.TableVar;
            Schema.Order order = GetDefaultOrder(_tableVar);
            if (order != null)
            {
                BaseOrderExpression browseExpression;
                if (Convert.ToBoolean(DerivationUtility.GetTag(_tableVar.MetaData, "UseBrowse", _elaboratedExpression.PageType, "True")))
                {
                    browseExpression = new BrowseExpression();
                }
                else
                {
                    browseExpression = new OrderExpression();
                }
                browseExpression.Expression = expression;
                foreach (Schema.OrderColumn column in order.Columns)
                {
                    OrderColumnDefinition definition = column.EmitStatement(EmitMode.ForCopy) as OrderColumnDefinition;
                    definition.ColumnName = Schema.Object.Qualify(column.Column.Name, _elaboratedExpression.MainElaboratedTableVar.ElaboratedName);
                    browseExpression.Columns.Add(definition);
                }
                expression = browseExpression;
            }

            _expression =
                new D4TextEmitter().Emit
                (
                    new CursorDefinition
                    (
                        expression,
                        CursorCapability.Navigable |
                        CursorCapability.BackwardsNavigable |
                        CursorCapability.Bookmarkable |
                        CursorCapability.Searchable |
                        CursorCapability.Updateable,
                        CursorIsolation.Browse,
                        CursorType.Dynamic
                    )
                );

            // Build the derivation info structure for use in structuring, layout and document production.
            _derivationInfo                      = new DerivationInfo();
            _derivationInfo.Program              = _program;
            _derivationInfo.Process              = _process;
            _derivationInfo.PageType             = _seed.PageType;
            _derivationInfo.Query                = _seed.Query;
            _derivationInfo.Elaborate            = _seed.Elaborate;
            _derivationInfo.MasterKeyNames       = _seed.MasterKeyNames;
            _derivationInfo.DetailKeyNames       = _seed.DetailKeyNames;
            _derivationInfo.KeyNames             = GetKeyNames(_tableVar);
            _derivationInfo.Expression           = _expression;
            _derivationInfo.ElaboratedExpression = _elaboratedExpression;
            _derivationInfo.TableVar             = _tableVar;
            _derivationInfo.MainSourceName       = DerivationUtility.MainSourceName;
            _derivationInfo.IsReadOnly           = DerivationUtility.IsReadOnlyPageType(_seed.PageType);
        }
예제 #3
0
        protected Schema.Order GetDefaultOrder(Schema.TableVar tableVar)
        {
            foreach (Schema.Order order in tableVar.Orders)
            {
                if (Convert.ToBoolean(DerivationUtility.GetTag(order.MetaData, "IsDefault", "False")))
                {
                    return(new Schema.Order(order));
                }
            }

            foreach (Schema.Key key in tableVar.Keys)
            {
                if (Convert.ToBoolean(DerivationUtility.GetTag(key.MetaData, "IsDefault", "False")))
                {
                    return(new Schema.Order(key));
                }
            }

            if (tableVar.Keys.Count > 0)
            {
                Schema.Order order = new Schema.Order(_program.FindClusteringKey(tableVar));
                if (IsOrderVisible(order))
                {
                    return(order);
                }

                foreach (Schema.Key key in tableVar.Keys)
                {
                    order = new Schema.Order(key);
                    if (IsOrderVisible(order))
                    {
                        return(order);
                    }
                }
            }

            if (tableVar.Orders.Count > 0)
            {
                foreach (Schema.Order order in tableVar.Orders)
                {
                    if (IsOrderVisible(order))
                    {
                        return(order);
                    }
                }
            }

            return(null);
        }
예제 #4
0
 protected bool IsOrderVisible(Schema.Order order)
 {
     return(DerivationUtility.IsOrderVisible(order, _seed.PageType));
 }