示例#1
0
        internal Tk5DbEasySearch(BaseEasySearchConfig config)
            : base(MetaDataUtil.ConvertToTableScheme(config.CreateScheme()), config.IdField, config.NameField)
        {
            ContextName = config.Context;
            OrderBy     = config.OrderBy;
            if (config.TopCount > 0)
            {
                TopCount = config.TopCount;
            }
            if (!string.IsNullOrEmpty(config.PyField))
            {
                PinyinField = this[config.PyField];
            }
            if (!string.IsNullOrEmpty(config.NameExpression))
            {
                NameExpression = config.NameExpression;
            }
            if (!string.IsNullOrEmpty(config.DisplayNameExpression))
            {
                DisplayNameExpression = config.DisplayNameExpression;
            }

            FilterSql = config.FilterSql;
            if (config.DataRight != null)
            {
                DataRight = config.DataRight.CreateObject(this);
            }

            SetActiveData(SourceScheme.Convert <Tk5DataXml>());
            SearchMethod = SearchPlugInFactory.CreateSearch(config.SearchMethod, false);
        }
示例#2
0
        public bool Equals(SubFunctionKey other)
        {
            if (other == null)
                return false;

            return MetaDataUtil.Equals(Style, other.Style) && Source == other.Source;
        }
示例#3
0
        public bool UseCondition(IInputData input)
        {
            TkDebug.AssertArgumentNull(input, "input", this);

            if (Contains(ConditionUseType.True))
            {
                return(true);
            }
            bool result = true;

            if (Contains(ConditionUseType.Post))
            {
                result &= input.IsPost == IsPost;
            }
            if (Contains(ConditionUseType.Style))
            {
                result &= Styles != null && Styles.Contains(PageStyleClass.FromStyle(input.Style));
            }
            if (Contains(ConditionUseType.StyleStartsWith))
            {
                result &= MetaDataUtil.StartsWith(input.Style, StartsWith);
            }

            if (Contains(ConditionUseType.QueryString) && QueryStrings != null)
            {
                foreach (var item in QueryStrings)
                {
                    result &= input.QueryString[item.Name] == item.Value;
                }
            }

            return(result);
        }
示例#4
0
        public static IDbDataParameter[] CreateParameters(this DbParameterList paramList, TkDbContext context)
        {
            if (paramList == null || paramList.Count == 0)
            {
                return(new IDbDataParameter[0]);
            }

            TkDebug.AssertArgumentNull(context, "context", paramList);

            IDbDataParameter[] result = new IDbDataParameter[paramList.Count];
            int i = 0;

            foreach (var item in paramList)
            {
                IDbDataParameter param = context.CreateParameter(item.DataType);
                param.ParameterName = context.GetParamName(item.FieldName);
                param.SourceColumn  = item.FieldName;
                object fieldValue;
                if (item.FieldValue != null)
                {
                    fieldValue = item.FieldValue.Value(MetaDataUtil.ConvertDataTypeToType(item.DataType));
                }
                else
                {
                    fieldValue = null;
                }
                param.Value = fieldValue;
                result[i++] = param;
            }
            return(result);
        }
        private static IDisplay GetDisplay(Tk5FieldInfoEx field, IPageData pageData)
        {
            switch (pageData.Style.Style)
            {
            case PageStyle.Insert:
            case PageStyle.Update:
                return(field.Edit.Display.CreateObject());

            case PageStyle.Detail:
                return(field.ListDetail.DetailDisplay.CreateObject());

            case PageStyle.List:
                return(field.ListDetail.ListDisplay.CreateObject());

            default:
                if (MetaDataUtil.StartsWith(pageData.Style, "DetailList"))
                {
                    return(field.ListDetail.ListDisplay.CreateObject());
                }

                TkDebug.ThrowToolkitException(
                    string.Format(ObjectUtil.SysCulture, "当前页面类型是{0},没有可用的Display,请不要使用这种PageMaker",
                                  PageStyleClass.FromStyle(pageData.Style)), field);
                return(null);
            }
        }
示例#6
0
        public static OutputData CreateOutputData(IMetaData metaData, ISource source,
                                                  IPageStyle style, IPageData inputData)
        {
            MetaDataUtil.SetMetaData(source, style, metaData);
            OutputData outputData = source.DoAction(inputData);

            return(outputData);
        }
示例#7
0
        public static Task WritePage(IMetaData metaData, ISource source, IPageMaker pageMaker,
                                     IWebHandler handler, OutputData outputData)
        {
            MetaDataUtil.SetMetaData(pageMaker, handler.Style, metaData);
            IContent content = pageMaker.WritePage(source, handler, outputData);

            return(WriteContent(handler.Request, handler.Response, content));
        }
示例#8
0
        public static bool IsShowExcel(bool showSource, IPageData pageData)
        {
            TkDebug.ThrowIfNoAppSetting();

            WebAppSetting setting = WebAppSetting.WebCurrent;

            return((pageData.Style.Style == PageStyle.List || MetaDataUtil.StartsWith(pageData.Style, "DetailList")) &&
                   showSource && setting.IsShowExcel(pageData.QueryString));
        }
 private ModuleOverridePageTemplateConfigItem FindOverrideItem(IPageData pageData)
 {
     if (fOverridePageTemplates == null)
     {
         return(null);
     }
     return((from item in fOverridePageTemplates
             where MetaDataUtil.Equals(item.Style, pageData.Style)
             select item).FirstOrDefault());
 }
示例#10
0
        private static DataTable CreateDataTable(string tableName, List <Tk5FieldInfoEx> list)
        {
            DataTable table = new DataTable(tableName);

            foreach (IFieldInfo info in list)
            {
                table.Columns.Add(new DataColumn(info.DisplayName, MetaDataUtil.ConvertDataTypeToType(info.DataType)));
            }
            return(table);
        }
示例#11
0
        public static void RedirectPage(IMetaData metaData, ISource source, IWebHandler handler,
                                        OutputData outputData, IRedirector redirector)
        {
            MetaDataUtil.SetMetaData(redirector, handler.Style, metaData);
            string url = redirector.Redirect(source, handler, outputData);

            TkDebug.AssertNotNullOrEmpty(url,
                                         "Redirector.Redirect函数返回的Url为空,不能重定向该地址", redirector);
            url = AppUtil.ResolveUrl(url);

            handler.Response.Redirect(url, false);
        }
示例#12
0
        public TableResolver CreateObject(params object[] args)
        {
            IDbDataSource source  = ObjectUtil.ConfirmQueryObject <IDbDataSource>(this, args);
            TkDbContext   context = string.IsNullOrEmpty(Context) ? DbContextUtil.CreateDefault()
                : DbContextUtil.CreateDbContext(Context);

            using (context)
            {
                var scheme   = DbUtil.CreateSqlTableScheme(Sql, TableName, KeyFields, context);
                var schemeEx = MetaDataUtil.ConvertToTableSchemeEx(scheme);
                return(new SqlTableResolver(Sql, schemeEx, source));
            }
        }
示例#13
0
        public void OnReadObject()
        {
            if (string.IsNullOrEmpty(Value))
            {
                return;
            }
            Type type = MetaDataUtil.ConvertDataTypeToType(DataType);

            if (type != typeof(byte[]))
            {
                FieldValue = ObjectUtil.GetValue(this, type, Value, null, ObjectUtil.ReadSettings);
            }
        }
 public InternalFieldConfigItem(DataColumn column, string[] sortedKeyFields)
 {
     FieldName = DisplayName = column.ColumnName;
     NickName  = StringUtil.GetNickName(FieldName);
     DataType  = MetaDataUtil.ConvertTypeToDataType(column.DataType);
     IsAutoInc = column.AutoIncrement;
     if (sortedKeyFields.Length == 1)
     {
         IsKey = string.Compare(FieldName, sortedKeyFields[0], true, ObjectUtil.SysCulture) == 0;
     }
     else
     {
         IsKey = Array.BinarySearch(sortedKeyFields, FieldName, COMPARER) >= 0;
     }
 }
示例#15
0
        public override OutputData DoAction(IInputData input)
        {
            if (MetaDataUtil.StartsWith(input.Style, "DetailList"))
            {
                InputDataProxy proxy = new InputDataProxy(input, (PageStyleClass)PageStyle.List);
                DoListAction(proxy);
                input.CallerInfo.AddInfo(DataSet);

                return(OutputData.Create(DataSet));
            }
            TkDebug.ThrowToolkitException(string.Format(ObjectUtil.SysCulture,
                                                        "当前支持页面类型为CDetailList,当前类型是{0}", input.Style), this);

            return(null);
        }
示例#16
0
        /// <summary>
        /// 创建数据表
        /// </summary>
        /// <param name="tableName">表名</param>
        /// <param name="fieldNames">字段序列</param>
        /// <returns>数据表</returns>
        public static DataTable CreateDataTable(string tableName, IEnumerable <IFieldInfo> fieldNames)
        {
            TkDebug.AssertArgumentNullOrEmpty(tableName, "tableName", null);
            TkDebug.AssertEnumerableArgumentNull(fieldNames, "fieldNames", null);

            DataTable table = new DataTable(tableName)
            {
                Locale = ObjectUtil.SysCulture
            };

            foreach (IFieldInfo fieldName in fieldNames)
            {
                table.Columns.Add(new DataColumn(fieldName.NickName,
                                                 MetaDataUtil.ConvertDataTypeToType(fieldName.DataType)));
            }
            return(table);
        }
示例#17
0
        private BaseWebPageConfigItem GetFitableConfig(IPageData pageData)
        {
            if (WebPage != null)
            {
                return(WebPage);
            }

            if (WebPages != null)
            {
                var result = (from item in WebPages
                              where MetaDataUtil.Equals(item.Style, pageData.Style)
                              select item).FirstOrDefault();
                return(result);
            }

            return(null);
        }
示例#18
0
 public override IPageMaker CreatePageMaker(IPageData pageData)
 {
     if (MetaDataUtil.Equals(pageData.Style, (PageStyleClass)"Code"))
     {
         return(FACTORYMAKER.CreateFromXmlFactory <IPageMaker>(
                    PageMakerConfigFactory.REG_NAME, pageData));
     }
     else if (MetaDataUtil.Equals(pageData.Style, (PageStyleClass)"Xml"))
     {
         return(CONFIGMAKER.CreateFromXmlFactory <IPageMaker>(
                    PageMakerConfigFactory.REG_NAME, pageData));
     }
     else
     {
         return(PAGEMAKER.CreateFromXmlFactory <IPageMaker>(
                    PageMakerConfigFactory.REG_NAME, pageData));
     }
 }
示例#19
0
        protected override ISource CreateGetSource(PageStyle style, IInputData input)
        {
            switch (style)
            {
            case PageStyle.Insert:
                return(new MultipleDbInsertSource(this));

            case PageStyle.Update:
                return(new MultipleDbDetailSource(this)
                {
                    FillDetailData = true
                });

            case PageStyle.Delete:
                return(new MultipleDbDeleteSource(this));

            case PageStyle.Detail:
                return(new MultipleDbDetailSource(this)
                {
                    FillDetailData = FillDetailData
                });

            case PageStyle.List:
                return(new DbListSource(this));

            case PageStyle.Custom:
                if (input.Style.Operation == DbListSource.TAB_STYLE_OPERATION)
                {
                    return(new DbListSource(this));
                }
                if (MetaDataUtil.StartsWith(input.Style, "DetailList"))
                {
                    int index = input.QueryString["Index"].Value <int>(0);
                    if (index < ChildTables.Count)
                    {
                        var child = ChildTables[index];
                        return(new DbDetailListSource(this, Resolver, child));
                    }
                }
                break;
            }
            return(null);
        }
示例#20
0
        protected void CheckFunctionRight()
        {
            ISupportFunction functionSource = Source as ISupportFunction;

            if (functionSource != null)
            {
                IFunctionRight functionRight = SessionGbl.AppRight.FunctionRight;
                switch (functionSource.FunctionType)
                {
                case FunctionRightType.Admin:
                    if (!functionRight.IsAdmin())
                    {
                        throw new NoFunctionRightException();
                    }
                    break;

                case FunctionRightType.Function:
                    if (!functionRight.IsFunction(functionSource.FunctionKey))
                    {
                        throw new NoFunctionRightException();
                    }
                    break;

                case FunctionRightType.SubFunction:
                    if (Style.Style == PageStyle.List || Style.Style == PageStyle.Detail ||
                        MetaDataUtil.Equals(Style, DbListSource.TabStyle))
                    {
                        // List和Detail不禁止子功能权限,子功能权限主要控制Insert,Update这些操作。如果想禁止查看数据,考虑使用DataRight过滤
                        break;
                    }
                    var subKey = GetSubFunctionKey();
                    if (!functionRight.IsSubFunction(subKey, functionSource.FunctionKey))
                    {
                        throw new NoFunctionRightException();
                    }
                    break;

                case FunctionRightType.None:
                    break;
                }
            }
        }
示例#21
0
        public override OutputData DoAction(IInputData input)
        {
            if (input.Style.Style == PageStyle.List)
            {
                DoListAction(input);
                input.CallerInfo.AddInfo(DataSet);
            }
            else if (MetaDataUtil.Equals(input.Style, TabStyle))
            {
                var result = DoTabCountAction(input);
                return(OutputData.CreateToolkitObject(result));
            }
            else
            {
                TkDebug.ThrowToolkitException(string.Format(ObjectUtil.SysCulture,
                                                            "当前支持页面类型为List,当前类型是{0}", input.Style), this);
            }

            return(OutputData.Create(DataSet));
        }
示例#22
0
        public OutputData DoAction(IInputData input)
        {
            TkDebug.ThrowIfNoGlobalVariable();

            if (MetaDataUtil.Equals(input.Style, (PageStyleClass)"Code"))
            {
                string factoryName = input.QueryString["Name"];
                var    factory     = BaseGlobalVariable.Current.FactoryManager.GetCodeFactory(factoryName);
                return(OutputData.CreateToolkitObject(new PlugInFactoryData(factory)));
            }
            else if (MetaDataUtil.Equals(input.Style, (PageStyleClass)"Xml"))
            {
                string factoryName = input.QueryString["Name"];
                var    factory     = BaseGlobalVariable.Current.FactoryManager.GetConfigFactory(factoryName);
                return(OutputData.CreateToolkitObject(new ConfigFactoryData(factory)));
            }
            else
            {
                return(OutputData.CreateToolkitObject(new PlugInManagerData()));
            }
        }
        protected override void PrepareWritePage(IPageMaker pageMaker, ISource source,
                                                 IPageData pageData, OutputData outputData)
        {
            base.PrepareWritePage(pageMaker, source, pageData, outputData);

            fModuleTemplate.SetPageMaker(source, pageData, outputData, pageMaker);
            RazorPageTemplatePageMaker templateMaker = pageMaker as RazorPageTemplatePageMaker;

            if (templateMaker != null)
            {
                var overrideItem = FindOverrideItem(pageData);
                templateMaker.SetConfig(overrideItem);
                return;
            }

            PostPageMaker postMaker = pageMaker as PostPageMaker;

            if (postMaker != null)
            {
                if (fOverridePostPageMakers == null)
                {
                    return;
                }
                var overrideItem = (from item in fOverridePostPageMakers
                                    where MetaDataUtil.Equals(item.Style, pageData.Style)
                                    select item).FirstOrDefault();
                if (overrideItem != null)
                {
                    postMaker.SetProperties(overrideItem.DataType,
                                            overrideItem.DestUrl, overrideItem.CustomUrl);
                    postMaker.UseRetUrlFirst = overrideItem.UseRetUrlFirst;
                    if (overrideItem.AlertMessage != null)
                    {
                        postMaker.AlertMessage = overrideItem.AlertMessage.ToString();
                    }
                }
            }
        }
示例#24
0
 /// <summary>
 /// 建构函数,设置附着的Xml文件。
 /// </summary>
 /// <param name="context">数据库连接上下文</param>
 /// <param name="source">附着的数据源</param>
 public UserResolver(IDbDataSource source)
     : base(MetaDataUtil.CreateTableScheme("WeUser.xml"), source)
 {
 }
 public SingleDetailListModuleTemplate()
     : base("Edit", "MultiDetail", "List")
 {
     AddPageTemplate(new PageTemplateInfo((source, input, output) =>
                                          MetaDataUtil.StartsWith(input.Style, "DetailList"), "DetailList"));
 }
示例#26
0
 /// <summary>
 /// 建构函数,设置附着的Xml文件。
 /// </summary>
 /// <param name="context">数据库连接上下文</param>
 /// <param name="source">附着的数据源</param>
 public UserLocationResolver(IDbDataSource source)
     : base(MetaDataUtil.CreateTableScheme("UserLocation.xml"), source)
 {
 }
示例#27
0
 public bool CanUseMetaData(IPageStyle style)
 {
     return(MetaDataUtil.Equals(style, (PageStyleClass)PageStyle.Insert));
 }
示例#28
0
 public CorpAppLogResolver(IDbDataSource source)
     : base(MetaDataUtil.CreateTableScheme("CorpAppLog.xml"), source)
 {
     AutoUpdateKey = true;
 }
 public override bool CanUseMetaData(IPageStyle style)
 {
     return(MetaDataUtil.Equals(style, (PageStyleClass)ImportConst.TEMPLATE));
 }
示例#30
0
 public CacheDataResolver(IDbDataSource source)
     : base(MetaDataUtil.CreateTableScheme("CacheData.xml"), source)
 {
 }