示例#1
0
        IParamBuilder ISearch.Search(EasySearch easySearch, SearchField searchType,
                                     TkDbContext context, IFieldInfo fieldName, string fieldValue)
        {
            TkDebug.AssertArgumentNull(easySearch, "easySearch", this);
            TkDebug.AssertArgumentNull(context, "context", this);
            TkDebug.AssertArgumentNull(fieldName, "fieldName", this);

            switch (searchType)
            {
            case SearchField.Value:
            case SearchField.DefaultValue:
                return(LikeSearch.Instance.Search(easySearch, searchType, context,
                                                  easySearch.ValueField, fieldValue));

            case SearchField.Name:
                return(SimpleSearch.Instance.Search(easySearch, searchType, context,
                                                    easySearch.NameField, fieldValue));

            case SearchField.Pinyin:
                return(LikeSearch.Instance.Search(easySearch, searchType, context,
                                                  easySearch.PinyinField, fieldValue.ToUpper(ObjectUtil.SysCulture)));
            }
            TkDebug.ThrowImpossibleCode(this);
            return(null);
        }
示例#2
0
        public OutputData DoAction(IInputData input)
        {
            if (input.IsPost)
            {
                EasySearchInput esIn       = input.PostObject.Convert <EasySearchInput>();
                EasySearch      easySearch = PlugInFactoryManager.CreateInstance <EasySearch>(
                    EasySearchPlugInFactory.REG_NAME, esIn.RegName);
                using (easySearch as IDisposable)
                {
                    IEnumerable <IDecoderItem> result = easySearch.Search(esIn.Text, esIn.RefFields);

                    //EasySearchOutput output = new EasySearchOutput(result);
                    IDecoderItem[] resultArr;
                    if (result != null)
                    {
                        resultArr = result.ToArray();
                    }
                    else
                    {
                        resultArr = new CodeItem[0];
                    }
                    return(OutputData.CreateToolkitObject(resultArr));
                }
            }

            TkDebug.ThrowImpossibleCode(this);
            return(null);
        }
示例#3
0
        public override OutputData DoAction(IInputData input)
        {
            if (input.IsPost)
            {
                using (PartFuncResolver func = new PartFuncResolver(this)
                {
                    UpdateMode = UpdateMode.DelIns
                })
                    using (PartSubFuncResolver subFunc = new PartSubFuncResolver(this)
                    {
                        UpdateMode = UpdateMode.DelIns
                    })
                    {
                        string  partId      = input.QueryString["Id"];
                        DataSet postDataSet = input.PostObject.Convert <DataSet>();

                        func.SelectWithParam("PartId", partId);
                        subFunc.SelectWithParam("PartId", partId);

                        func.Update(postDataSet, input);
                        subFunc.Update(postDataSet, input);

                        UpdateUtil.UpdateTableResolvers(Context, (Action <Transaction>)null, func, subFunc);

                        return(OutputData.CreateToolkitObject(KeyData.Empty));
                    }
            }

            TkDebug.ThrowImpossibleCode(this);
            return(null);
        }
示例#4
0
        public IParamBuilder Search(EasySearch easySearch, SearchField searchType,
                                    TkDbContext context, IFieldInfo fieldName, string fieldValue)
        {
            TkDebug.AssertArgumentNull(easySearch, "easySearch", this);
            TkDebug.AssertArgumentNull(context, "context", this);
            TkDebug.AssertArgumentNull(fieldName, "fieldName", this);
            TkDebug.AssertArgumentNull(fieldValue, "fieldValue", this);

            switch (searchType)
            {
            case SearchField.Value:
            case SearchField.DefaultValue:
                return(GetQueryParamBuilder(context, easySearch.ValueField, fieldValue));

            case SearchField.Name:
                return(SimpleSearch.Instance.Search(easySearch, searchType,
                                                    context, easySearch.NameField, fieldValue));

            case SearchField.Pinyin:
                if (easySearch.PinyinField == null)
                {
                    return(ClassicPYSearch.Instance.Search(easySearch, searchType,
                                                           context, easySearch.NameField, fieldValue));
                }
                else
                {
                    return(LikeSearch.Instance.Search(easySearch, searchType,
                                                      context, easySearch.PinyinField, fieldValue));
                }
            }
            TkDebug.ThrowImpossibleCode(this);
            return(null);
        }
示例#5
0
        protected internal IContent WritePage(IPageData pageData, OutputData outputData)
        {
            PageMakerUtil.AssertType(this, outputData, SourceOutputType.XmlReader, SourceOutputType.String,
                                     SourceOutputType.DataSet, SourceOutputType.ToolkitObject);

            string xsltFile = GetRealXsltFile(pageData); // Path.Combine(AppSetting.Current.XmlPath, XsltFile);

            TkDebug.AssertNotNullOrEmpty(xsltFile, "没有设置XsltFile属性,该值为空", this);
            TkDebug.Assert(File.Exists(xsltFile), string.Format(ObjectUtil.SysCulture,
                                                                "系统中并不存在文件名为{0}的文件,请检查路径!", xsltFile), this);

            XsltArgumentList args = null;

            if (UseXsltArgs)
            {
                args = new XsltArgumentList();
                AddXsltParam(args, pageData);
            }
            string    content = string.Empty;
            XmlReader reader  = null;

            switch (outputData.OutputType)
            {
            case SourceOutputType.XmlReader:
                reader = outputData.Data.Convert <XmlReader>();
                break;

            case SourceOutputType.String:
                reader = XmlTransformUtil.GetXmlReader(outputData.Data.Convert <string>());
                break;

            case SourceOutputType.ToolkitObject:
                XDocument doc = outputData.Data.CreateXDocument(null, ObjectUtil.WriteSettings, QName.ToolkitNoNS);
                reader = doc.CreateReader();
                break;

            case SourceOutputType.DataSet:
                reader = new XmlDataSetReader(outputData.Data.Convert <DataSet>());
                break;

            default:
                TkDebug.ThrowImpossibleCode(this);
                break;
            }
            content = XmlTransformUtil.Transform(reader, xsltFile, args, TransformSetting.All);
            Encoding encoding = Encoding ?? (pageData.IsPost ? Encoding.UTF8 : null);

            return(CreateContent(pageData, content, encoding));
        }
示例#6
0
        public IContent WritePage(ISource source, IPageData pageData, OutputData outputData)
        {
            IPageMaker pageMaker = null;

            switch (DataType)
            {
            case ContentDataType.Json:
                pageMaker = new JsonObjectPageMaker();
                break;

            case ContentDataType.Xml:
                pageMaker = new XmlObjectPageMaker(null, null);
                break;

            default:
                TkDebug.ThrowImpossibleCode(this);
                break;
            }
            WebErrorResult error = outputData.Data as WebErrorResult;

            if (error != null)
            {
                return(pageMaker.WritePage(source, pageData, outputData));
            }
            else
            {
                string url = null;
                if (UseRetUrlFirst)
                {
                    url = pageData.QueryString["RetURL"];
                }
                if (string.IsNullOrEmpty(url))
                {
                    url = GetDefaultUrl(source, pageData, outputData);
                }
                WebSuccessResult success = new WebSuccessResult(url)
                {
                    AlertMessage = AlertMessage
                };
                OutputData newData = OutputData.CreateToolkitObject(success);
                return(pageMaker.WritePage(source, pageData, newData));
            }
        }
        protected virtual OutputData DoPost(IInputData input)
        {
            MainResolver.PrepareDataSet(input.PostObject.Convert <DataSet>());

            switch (input.Style.Style)
            {
            case PageStyle.Update:
                DefaultUpdateAction(input);
                break;

            default:
                TkDebug.ThrowImpossibleCode(this);
                break;
            }

            PostData(input);
            Commit(input);

            return(OutputData.CreateToolkitObject(KeyData.Empty));
        }
示例#8
0
        public string DisplayValue(object value, Tk5FieldInfoEx field, IFieldValueProvider rowValue)
        {
            string displayValue = Display.CreateObject().DisplayValue(value, field, rowValue);

            if (string.IsNullOrEmpty(Content))
            {
                return(displayValue);
            }

            string linkUrl = HrefDisplayConfig.ResolveRowValue(rowValue, Content);

            if (string.IsNullOrEmpty(linkUrl))
            {
                return(displayValue);
            }
            linkUrl = StringUtil.EscapeHtmlAttribute(AppUtil.ResolveUrl(linkUrl));

            switch (Mode)
            {
            case DisplayMode.Normal:
                return(string.Format(ObjectUtil.SysCulture,
                                     "<a data-url='{0}' href='#'>{1}</a>", linkUrl, displayValue));

            case DisplayMode.Dialog:
                string title;
                if (!string.IsNullOrEmpty(DialogTitle))
                {
                    title = HrefDisplayConfig.ResolveRowValue(rowValue, DialogTitle);
                }
                else
                {
                    title = displayValue;
                }
                return(string.Format(ObjectUtil.SysCulture,
                                     "<a data-dialog-url='{0}' data-title='{2}' href='#'>{1}</a>", linkUrl, displayValue, title));

            default:
                TkDebug.ThrowImpossibleCode(this);
                return(string.Empty);
            }
        }
示例#9
0
        internal WeixinToolkitSettings(WeixinExtraXml xml, BaseAppSetting appsetting)
        {
            fCurrent = this;

            fEngine = new MessageEngine();
            if (xml.Weixin.Normal != null)
            {
                fNormalDefault = new DefaultEngine(xml.Weixin.Normal.DefaultMessage);

                fAuthConfig = new WeixinAuthConfig();
                string authFileName = Path.Combine(appsetting.XmlPath, @"Weixin\Auth.xml");
                if (File.Exists(authFileName))
                {
                    fAuthConfig.ReadXmlFromFile(authFileName);
                }
            }
            else if (xml.Weixin.CorpApps != null)
            {
                fCorpDefault = new Dictionary <int, DefaultEngine>();
                foreach (var item in xml.Weixin.CorpApps)
                {
                    fCorpDefault.Add(item.AppId, new DefaultEngine(item.DefaultMessage));
                }

                fCorpAuthConfig = new WeixinCorpAuthConfig();
                string authFileName = Path.Combine(appsetting.XmlPath, @"Weixin\CorpAuth.xml");
                if (File.Exists(authFileName))
                {
                    fCorpAuthConfig.ReadXmlFromFile(authFileName);
                }
            }
            else
            {
                TkDebug.ThrowImpossibleCode(this);
            }

            if (xml.Weixin.MessageLog != null)
            {
                fLog = xml.Weixin.MessageLog.CreateObject();
            }
        }
示例#10
0
        protected override string GetDefaultUrl(ISource source, IPageData pageData, OutputData outputData)
        {
            string  url     = string.Empty;
            KeyData keyData = outputData.Data.Convert <KeyData>();

            //string pageSource = pageData.SourceInfo.Source;
            switch (DestUrl)
            {
            case PageStyle.Custom:
                TkDebug.AssertNotNull(CustomUrl,
                                      "配置了DestUrl为Custom,却没有配置CustomUrl", this);
                url = Expression.Execute(CustomUrl, source);
                url = AppUtil.ResolveUrl(url);
                if (CustomUrl.UseKeyData)
                {
                    url = UriUtil.AppendQueryString(url, keyData.ToString());
                }
                break;

            case PageStyle.Insert:
            case PageStyle.Update:
            case PageStyle.Delete:
                url = WebUtil.GetTemplateUrl(DestUrl, pageData);
                url = UriUtil.AppendQueryString(url, keyData.ToString()).AppVirutalPath();
                break;

            case PageStyle.Detail:
            case PageStyle.List:
                string initValue = keyData.IsSingleValue ? keyData.SingleValue : string.Empty;
                url = WebUtil.GetTemplateUrl((PageStyleClass)string.Empty, pageData);
                url = UriUtil.AppendQueryString(url, "InitValue=" + initValue).AppVirutalPath();
                break;

            default:
                TkDebug.ThrowImpossibleCode(this);
                break;
            }

            return(url);
        }
示例#11
0
        internal static object GetModel(OutputData outputData)
        {
            switch (outputData.OutputType)
            {
            case SourceOutputType.String:
            case SourceOutputType.ToolkitObject:
            case SourceOutputType.DataSet:
            case SourceOutputType.Object:
                return(outputData.Data);

            case SourceOutputType.XmlReader:
                return(XDocument.Load(outputData.Data.Convert <XmlReader>()));

            case SourceOutputType.FileContent:
                TkDebug.ThrowToolkitException("不支持FileContent格式", null);
                return(null);

            default:
                TkDebug.ThrowImpossibleCode(null);
                return(null);
            }
        }
示例#12
0
        private OutputData DoPost(IInputData input)
        {
            PreparePostObject(input);

            switch (input.Style.Style)
            {
            case PageStyle.Insert:
                DefaultInsertAction(input);
                break;

            case PageStyle.Update:
                DefaultUpdateAction(input);
                break;

            default:
                TkDebug.ThrowImpossibleCode(this);
                break;
            }

            PostData(input);
            Commit(input);

            return(OutputData.CreateToolkitObject(MainResolver.CreateKeyData()));
        }
示例#13
0
        protected override OutputData DoGet(IInputData input)
        {
            string oper             = input.QueryString["Operation"];
            string dataXml          = null;
            string tagFieldName     = null;
            string dataXmlFieldName = null;
            Func <CorpTagMembers, IEnumerable <string> > getMembers = null;

            switch (oper)
            {
            case "User":
                dataXml          = @"Weixin\CorpTagUser.xml";
                tagFieldName     = "UserList";
                dataXmlFieldName = "UserId";
                getMembers       = GetUserMembers;
                break;

            case "Dept":
                dataXml          = @"Weixin\CorpTagDept.xml";
                tagFieldName     = "DepartmentList";
                dataXmlFieldName = "DeparmentId";
                getMembers       = GetDeptMembers;
                break;

            default:
                TkDebug.ThrowImpossibleCode(this);
                break;
            }
            Tk5TableResolver getResovler = new Tk5TableResolver(dataXml, this);

            using (getResovler)
            {
                DataTable table = getResovler.CreateVirtualTable();
                string    tagId = input.QueryString["TagId"];
                DataRow   row   = fResolver.TrySelectRowWithKeys(tagId);
                if (row != null)
                {
                    QuoteStringList list = row[tagFieldName].Value <QuoteStringList>();
                    if (list != null)
                    {
                        var userList = list.CreateEnumerable();
                        foreach (string item in userList)
                        {
                            DataRow userRow = table.NewRow();
                            userRow[dataXmlFieldName] = item;
                            table.Rows.Add(userRow);
                        }
                    }
                }
                else
                {
                    CorpTag              tag     = new CorpTag(tagId.Value <int>());
                    CorpTagMembers       members = tag.GetMembers();
                    IEnumerable <string> memList = getMembers(members);
                    if (memList != null)
                    {
                        foreach (var item in memList)
                        {
                            DataRow userRow = table.NewRow();
                            userRow[dataXmlFieldName] = item;
                            table.Rows.Add(userRow);
                        }
                    }
                }

                getResovler.Decode(input.Style);
                getResovler.FillCodeTable(input.Style);
                input.CallerInfo.AddInfo(DataSet);
            }
            return(OutputData.Create(DataSet));
        }
示例#14
0
        protected override OutputData DoPost(IInputData input)
        {
            string oper             = input.QueryString["Operation"];
            string dataXml          = null;
            string tagFieldName     = null;
            string dataXmlFieldName = null;

            switch (oper)
            {
            case "User":
                dataXml          = @"Weixin\CorpTagUser.xml";
                tagFieldName     = "UserList";
                dataXmlFieldName = "UserId";
                break;

            case "Dept":
                dataXml          = @"Weixin\CorpTagDept.xml";
                tagFieldName     = "DepartmentList";
                dataXmlFieldName = "DeparmentId";
                break;

            default:
                TkDebug.ThrowImpossibleCode(this);
                break;
            }
            Tk5TableResolver getResovler = new Tk5TableResolver(dataXml, this);

            using (getResovler)
            {
                DataSet postDataSet = input.PostObject.Convert <DataSet>();
                getResovler.PrepareDataSet(postDataSet);

                FieldErrorInfoCollection errors = new FieldErrorInfoCollection();
                getResovler.CheckFirstConstraints(input, errors);
                getResovler.CheckLaterConstraints(input, errors);
                errors.CheckError();

                QuoteStringList postList  = new QuoteStringList();
                DataTable       postTable = postDataSet.Tables[getResovler.TableName];
                if (postTable != null)
                {
                    foreach (DataRow postRow in postTable.Rows)
                    {
                        postList.Add(postRow[dataXmlFieldName].ToString());
                    }
                }
                string tagId = input.QueryString["TagId"];

                CorpTagList tagList;
                CorpTag     tag = CorpTagEditObjectSource.FindTag(tagId, out tagList);

                DataRow row = fResolver.TrySelectRowWithKeys(tagId);
                if (row == null)
                {
                    fResolver.SetCommands(AdapterCommand.Insert);
                    row = fResolver.NewRow();
                    row.BeginEdit();
                    row["TagId"]      = tagId;
                    row["Name"]       = tag.Name;
                    row[tagFieldName] = postList.ToString();
                    row.EndEdit();
                    switch (oper)
                    {
                    case "User":
                        AddUserMembers(tag, postList, null);
                        break;

                    case "Dept":
                        AddDeptMembers(tag, postList, null);
                        break;
                    }

                    fResolver.UpdateDatabase();
                }
                else
                {
                    fResolver.SetCommands(AdapterCommand.Update);
                    QuoteStringList sourceList = row[tagFieldName].Value <QuoteStringList>();
                    row[tagFieldName] = postList.ToString();

                    switch (oper)
                    {
                    case "User":
                        AddUserMembers(tag, postList, sourceList);
                        break;

                    case "Dept":
                        AddDeptMembers(tag, postList, sourceList);
                        break;
                    }

                    fResolver.UpdateDatabase();
                }

                return(OutputData.CreateToolkitObject(fResolver.CreateKeyData()));
            }
        }
示例#15
0
        internal WeixinSettings(WeixinXml xml)
        {
            AppId         = xml.Weixin.AppId;
            LogRawMessage = xml.Weixin.LogRawMessage;
            WeixinPath    = Path.GetDirectoryName(xml.FullPath);
            UseLogOnRight = xml.Weixin.UseLogOnRight;

            WeixinNormalConfig normalConfig = xml.Weixin.Normal;

            if (normalConfig != null)
            {
                Mode              = WeixinMode.Normal;
                OpenId            = normalConfig.OpenId;
                fAppSecret        = normalConfig.Secret;
                fToken            = normalConfig.Token;
                MessageMode       = normalConfig.MessageMode;
                EncodingAESKey    = normalConfig.EncodingAESKey;
                fTemplateMessages = normalConfig.TemplateMessages;
                PaymentConfigItem pay = normalConfig.Pay;
                if (pay != null)
                {
                    fUsePay       = true;
                    fMchId        = pay.MchId;
                    fPayKey       = pay.Key;
                    fDeviceInfo   = pay.DeviceInfo;
                    fDeviceIp     = pay.DeviceIp;
                    fPayNotifyUrl = UriUtil.CombineUri(pay.NotifyBaseUrl, pay.NotifyUrl).ToString();
                }
                WeixinServiceConfigItem service = normalConfig.Service;
                if (service != null)
                {
                    fEnableService = service.Enabled;
                    fWeixinAccount = service.WeixinAccount;
                }
                else
                {
                    fEnableService = false;
                }

                if (MessageMode != MessageMode.Normal)
                {
                    TkDebug.AssertArgumentNullOrEmpty(EncodingAESKey,
                                                      "当消息是混合或者安全模式时,请配置EncodingAESKey的内容", xml);
                }
            }
            else if (xml.Weixin.CorpApps != null)
            {
                Mode      = WeixinMode.Corporation;
                fCorpApps = xml.Weixin.CorpApps;
                TkDebug.Assert(fCorpApps.Count > 0,
                               "至少需要配置一个tk:CorpApp节点", xml);
                CorpSecretConfig corpSecret = xml.Weixin.CorpSecret;
                TkDebug.AssertNotNull(corpSecret, "需要配置tk:CorpSecret节点", xml);
                fCorpUserManagerSecret = corpSecret.UserManager;
                fCorpMenuSecret        = corpSecret.Menu;
                if (string.IsNullOrEmpty(fCorpMenuSecret))
                {
                    fCorpMenuSecret = fCorpUserManagerSecret;
                }
                OpenId = AppId;
            }
            else
            {
                TkDebug.ThrowImpossibleCode(xml);
            }
            fCurrent = this;
        }
示例#16
0
        private double CalSubTotalNum(DataTable mainTableData, String nickName, StatMethod method)
        {
            double res = 0;

            if (method == StatMethod.Count)
            {
                return(mainTableData.Rows.Count);
            }
            foreach (DataRow rowData in mainTableData.Rows)
            {
                var rawValue = rowData[nickName];

                if (rawValue == DBNull.Value)
                {
                    continue;
                }
                double value = rowData[nickName].Value <double>();
                if (res == 0)
                {
                    res = value;
                    continue;
                }

                switch (method)
                {
                case StatMethod.Sum:
                    res += value;
                    break;

                case StatMethod.Avg:
                    res += value;
                    break;

                case StatMethod.Max:
                    if (res < value)
                    {
                        res = value;
                    }
                    break;

                case StatMethod.Min:
                    if (res > value)
                    {
                        res = value;
                    }
                    break;

                case StatMethod.Count:
                    TkDebug.ThrowImpossibleCode(this);
                    break;

                default:
                    break;
                }
            }
            if (res != 0 && method == StatMethod.Avg)
            {
                res = res / mainTableData.Rows.Count;
            }
            return(res);
        }