/// <summary> /// 创建Table /// </summary> /// <param name="up"></param> /// <param name="toTable"></param> /// <param name="columns"></param> public virtual void CreateTable(UnitParameter up, string toTable, params TableColumn[] columns) { if (columns == null || columns.Length <= 0) { return; } FrameDLRObject express = FrameDLRObject.CreateInstanceFromat(@"{ $acttype : 'CreateTable', $table : {0} }", FrameDLRFlags.SensitiveCase, toTable); var pk = new List <object>(); foreach (var c in columns) { FrameDLRObject cobj = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase); cobj.SetValue("$datatype", c.DataType); cobj.SetValue("$precision", c.Precision); cobj.SetValue("$scale", c.Scale); cobj.SetValue("$default", c.Default); cobj.SetValue("$isnull", c.IsPK ? false : c.AllowNull); if (c.IsPK) { pk.Add(c.Name); } express.SetValue(c.Name, cobj); } express.SetValue("$pk", pk); Excute(up, express); }
public string ConvertTo(object obj) { if (obj == null) { return(""); } UnitDataCollection udc = null; if (obj is UnitDataCollection) { udc = (UnitDataCollection)obj; } else { throw new Exception("QueryByPage2Json无法转化" + obj.GetType().FullName + "类型数据!"); } FrameDLRObject rtn = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase); if (udc.QueryTable != null) { rtn.SetValue("page", udc.CurrentPage + ""); rtn.SetValue("total", udc.TotalRow + ""); rtn.SetValue("rows", udc.QueryTable.Rows); } return(rtn.ToJSONString()); }
public void DoParse(TagParameter p, TagData d) { tagdata.Value = d; foreach (var item in p.BindObject.Items) { tagdata.Value.Context.AddBindObject(item.Key, item.Value); } Regex re = null; Regex rearg = new Regex(regArgs); Regex recontent = new Regex(regcontent); FrameDLRObject args = FrameDLRObject.CreateInstance(); var tmpcontent = d.ParsedText; if (IsNeedBrace) { re = new Regex(regstrwithbrace); } else { re = new Regex(regstrwithoutbrace); } if (re.IsMatch(tmpcontent)) { foreach (Match s in re.Matches(tmpcontent)) { var content = s.Value; string argstr = rearg.Match(content).Value; string[] argsarray = argstr.Split(','); for (int i = 0; i < argsarray.Length; i++) { if (i < this.ArgNames.Length) { args.SetValue(this.ArgNames[i], argsarray[i]); } else { args.SetValue("arg" + i, argsarray[i]); } } var bracecontent = ""; if (IsNeedBrace) { if (recontent.IsMatch(content)) { bracecontent = recontent.Match(content).Value; } } tmpcontent = tmpcontent.Replace("#" + content, DoProcess(args, bracecontent)); } } d.ParsedText = tmpcontent; }
object map(LogicData arg) { var rtn = FrameDLRObject.CreateInstance(@"{ issuccess:true, msg:'操作成功' }"); var uid = ComFunc.nvl(arg["roleuid"]); var functions = ComFunc.nvl(arg["functions"]); if (uid == "") { rtn.issuccess = false; rtn.msg = "缺少角色参数"; return(rtn); } BeginTrans(); var up = DB.NewDBUnitParameter(); FrameDLRObject express = FrameDLRObject.CreateInstanceFromat(@"{ $acttype : 'Query', $table : 'RoleInfo', $where:{ RoleUID:{0} } }", uid); var re = DB.Excute(up, express); if (re.QueryTable.RowLength <= 0) { rtn.issuccess = false; rtn.msg = "角色资料不存在"; return(rtn); } express = FrameDLRObject.CreateInstanceFromat(@"{ $acttype : 'Delete', $table : 'Map_RoleFunction', $where:{ RoleUID:{0} } }", uid); DB.Excute(up, express); express = FrameDLRObject.CreateInstanceFromat(@"{ $acttype : 'Insert', $table : 'Map_RoleFunction', RoleUID:{0} }", uid); foreach (var s in functions.Split(',')) { express.SetValue("FunctionNo", s); express.SetValue("$acttype", "Insert"); DB.Excute(up, express); } CommitTrans(); return(rtn); }
object saveRoleMap(LogicData arg) { var rtn = FrameDLRObject.CreateInstance(@"{ issuccess:true, msg:'操作成功' }"); var uid = ComFunc.nvl(arg["uid"]); var roles = ComFunc.nvl(arg["roles"]); if (uid == "") { return(FrameDLRObject.CreateInstance(false, "缺少角色参数")); } BeginTrans(); var up = DB.NewDBUnitParameter(); FrameDLRObject express = FrameDLRObject.CreateInstanceFromat(@"{ $acttype : 'Query', $table : 'LoginInfo', $where:{ UID:{0} } }", uid); var re = DB.Excute(up, express); if (re.QueryTable.RowLength <= 0) { return(FrameDLRObject.CreateInstance(false, "用户资料不存在")); } express = FrameDLRObject.CreateInstanceFromat(@"{ $acttype : 'Delete', $table : 'Map_LoginRole', $where:{ LoginUID:{0} } }", uid); DB.Excute(up, express); express = FrameDLRObject.CreateInstanceFromat(@"{ $acttype : 'Insert', $table : 'Map_LoginRole', LoginUID:{0} }", uid); foreach (var s in roles.Split(',')) { express.SetValue("RoleUID", s); express.SetValue("$acttype", "Insert"); DB.Excute(up, express); } CommitTrans(); return(rtn); }
/// <summary> /// 新增一个cookie /// </summary> /// <param name="name">名称</param> /// <param name="value">值</param> /// <param name="domain">cookie对应的域,如果不需要则填写null</param> /// <param name="expiretime">过期时间</param> public void SetCookie(string name, string value, string domain, DateTime expiretime) { if (_logic.CallContext_Parameter.ExtentionObj.cookie.add == null) { _logic.CallContext_Parameter.ExtentionObj.cookie.add = FrameDLRObject.CreateInstance(); } FrameDLRObject item = FrameDLRObject.CreateInstance(); item.SetValue("name", name); item.SetValue("value", value); item.SetValue("domain", domain); item.SetValue("expire", expiretime); ((FrameDLRObject)_logic.CallContext_Parameter.ExtentionObj.cookie.add).SetValue(name, item); }
/// <summary> /// 发送模板消息,相关参数和回传,查看https://developers.weixin.qq.com/miniprogram/dev/api-backend/templateMessage.send.html /// </summary> /// <param name="touser"></param> /// <param name="template_id"></param> /// <param name="form_id"></param> /// <param name="page"></param> /// <param name="emphasis_keyword"></param> /// <param name="data"></param> /// <returns></returns> public FrameDLRObject SendTemplateMsg(string touser, string template_id, string form_id, string page = "", string emphasis_keyword = "", params KeyValuePair <string, string>[] data) { var url = string.Format(SendCustomeServiceMsgUrl, Access_Token); var postdata = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase); postdata.touser = touser; postdata.template_id = template_id; if (!string.IsNullOrEmpty(page)) { postdata.page = page; } postdata.form_id = form_id; if (data != null) { FrameDLRObject d = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase); foreach (var item in data) { d.SetValue(item.Key, new { value = item.Value }); } postdata.data = d; } if (!string.IsNullOrEmpty(emphasis_keyword)) { postdata.emphasis_keyword = emphasis_keyword; } FrameDLRObject obj = CallWeixinServer(url, "post", "application/json", null, postdata); return(obj); }
/// <summary> /// 发送事件请求 /// </summary> /// <param name="method">请求的方法</param> /// <param name="url">请求的url</param> /// <param name="context">请求的参数上下文</param> /// <param name="header">请求的header资料</param> /// <param name="postdata">请求的post资料</param> /// <returns></returns> public string Send(string method, string url, EventsCallContext context = null, FrameDLRObject header = null, FrameDLRObject postdata = null) { if (header != null) { foreach (var key in header.Keys) { if (ComFunc.nvl(header.GetValue(key)).StartsWith("$") && context.ContainsKey(ComFunc.nvl(header.GetValue(key)))) { header.SetValue(key, context[ComFunc.nvl(header.GetValue(key))]); } } } if (postdata != null) { foreach (var key in postdata.Keys) { if (ComFunc.nvl(postdata.GetValue(key)).StartsWith("$") && context.ContainsKey(ComFunc.nvl(postdata.GetValue(key)))) { postdata.SetValue(key, context[ComFunc.nvl(postdata.GetValue(key))]); } } } if (method.ToLower() == "get") { return(Get(url, header)); } else { return(base.Send(url, postdata, header, method)); } }
/// <summary> /// 設置appSetting的值 /// </summary> /// <param name="key">鍵</param> /// <param name="value">值</param> public void SetConfiguration(string key, object value) { FrameDLRObject config = FrameDLRObject.CreateInstance(File.ReadAllText(ConfigFilePath), Constants.FrameDLRFlags.SensitiveCase); config.SetValue(key, value); File.WriteAllText(ConfigFilePath, config.ToJSONString()); _config.Reload(); }
/// <summary> /// 转化成DBExpress表达式 /// </summary> /// <param name="this_data">当前行资料,用于解析表达式中@语句</param> /// <returns></returns> public FrameDLRObject ToDBExpress(FrameDLRObject this_data = null) { if (this_data == null) { this_data = FrameDLRObject.CreateInstance(); } FrameDLRObject express = FrameDLRObject.CreateInstance($@"{{ $acttype : 'Query', $orderby : 'sort_no', $table:'{TableName}' }}", EFFC.Frame.Net.Base.Constants.FrameDLRFlags.SensitiveCase); foreach (var c in ShowColumns) { express.SetValue(c, true); } if (!string.IsNullOrEmpty(KeyColumn)) { express.SetValue(KeyColumn, true); } if (Filter.Count > 0) { FrameDLRObject where = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase); foreach (var witem in Filter) { FrameDLRObject op_express = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase); var op = witem.Value.Op.StartsWith("$") ? witem.Value.Op : $"${witem.Value.Op}"; //如果w_value为@开头,则表示@后面为本表的栏位名称,则从当前行资料中获取对应的参数的值 if (witem.Value.Value.StartsWith("@")) { op_express.SetValue(op, this_data.GetValue(witem.Value.Value.Replace("@", ""))); } else { op_express.SetValue(op, witem.Value.Value); } where.SetValue(witem.Key, op_express); } express.SetValue("$where", where); } return(express); }
/// <summary> /// 快速执行简易Update操作 /// </summary> /// <param name="p"></param> /// <param name="toTable">目标table</param> /// <param name="data">要更新数据对象</param> /// <param name="where">只支持and操作</param> /// <param name="islog"></param> /// <returns></returns> public virtual UnitDataCollection QuickUpdate(UnitParameter p, string toTable, object data, object where, bool islog = false) { FrameDLRObject express = FrameDLRObject.CreateInstanceFromat(@"{ $acttype : 'Update', $table : {0} }", toTable); FrameDLRObject dataexpress = FrameDLRObject.CreateInstance(data); FrameDLRObject whereexpress = FrameDLRObject.CreateInstance(where); foreach (var item in dataexpress.Items) { express.SetValue(item.Key, item.Value); } if (whereexpress != null && whereexpress.Items.Count > 0) { express.SetValue("$where", whereexpress); } return(Excute(p, express)); }
/// <summary> /// 呼叫本地logic /// </summary> /// <param name="logic"></param> /// <param name="action"></param> /// <param name="p"></param> /// <returns></returns> public object CallLocalLogic(string logic, string action, params KeyValuePair <string, object>[] p) { FrameDLRObject dp = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase); foreach (var item in p) { dp.SetValue(item.Key, item.Value); } return(CallLocalLogic(logic, action, dp)); }
/// <summary> /// 删除一个cookie /// </summary> /// <param name="name"></param> public void RemoveCookie(string name) { if (_logic.CallContext_Parameter.ExtentionObj.cookie.remove == null) { _logic.CallContext_Parameter.ExtentionObj.cookie.remove = FrameDLRObject.CreateInstance(); } FrameDLRObject item = FrameDLRObject.CreateInstance(); item.SetValue("name", name); ((FrameDLRObject)_logic.CallContext_Parameter.ExtentionObj.cookie.remove).SetValue(name, item); }
/// <summary> /// EFFC框架中间件基类 /// </summary> /// <param name="next"></param> public EFFCWebMiddleWare(RequestDelegate next, IHostingEnvironment hostingEnv, FrameDLRObject options) { GlobalCommon.Logger.WriteLog(LoggerLevel.INFO, "Web服务启动设定..."); // This is an HTTP Handler, so no need to store next _next = next; _hostenv = hostingEnv; Type middlewaretype = typeof(WebMiddleWareProcessOptions); if (options != null) { dynamic dobj = options; if (dobj.MiddleWareOptionsType != null) { if (dobj.MiddleWareOptionsType is string) { middlewaretype = Type.GetType(ComFunc.nvl(dobj.MiddleWareOptionsType)); } else if (dobj.MiddleWareOptionsType is Type && ((Type)dobj.MiddleWareOptionsType).GetTypeInfo().IsSubclassOf(typeof(WebMiddleWareProcessOptions))) { middlewaretype = (Type)dobj.MiddleWareOptionsType; } else { middlewaretype = typeof(WebMiddleWareProcessOptions); } } } _middleware_options = (WebMiddleWareProcessOptions)Activator.CreateInstance(middlewaretype, true); GlobalCommon.Logger.WriteLog(Base.Constants.LoggerLevel.INFO, $"{this.GetType().Name}:当前启动中间件加载的Options设定为{middlewaretype.Name},如需要修改,请在调用ProxyManager.UseProxy中的options中设定该参数(MiddleWareOptionsType类型为Type类型,必须为WebMiddleWareProcessOptions类型或其子类)"); //将以下启动参数下沉到各个module中 options.SetValue("PagePath4Forbidden", _middleware_options.PagePath4Forbidden); options.SetValue("PagePath4NotFound", _middleware_options.PagePath4NotFound); options.SetValue("PagePath4Error", _middleware_options.PagePath4Error); //各个中间件在此处加载一次代理器 LoadProxys(GlobalCommon.Proxys, options); GlobalCommon.Logger.WriteLog(LoggerLevel.INFO, "Web服务启动设定完成\n"); }
/// <summary> /// 转成json对象 /// </summary> /// <returns></returns> public FrameDLRObject ToJSONObject() { FrameDLRObject dobj = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase); if (!string.IsNullOrEmpty(TableName)) { dobj.SetValue("$ref_table", TableName); dobj.SetValue("$ref_key_column", KeyColumn); dobj.SetValue("$show", ShowColumns.ToArray()); FrameDLRObject where = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase); foreach (var item in Filter) { FrameDLRObject op = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase); op.SetValue(item.Value.Op, item.Value.Value); where.SetValue(item.Key, op); } dobj.SetValue("$where", where); } return(dobj); }
protected override void DoProcess(ConsoleParameter p, ConsoleData d) { FrameDLRObject args = FrameDLRObject.CreateInstance(); foreach (var item in p.Domain(DomainKey.INPUT_PARAMETER)) { args.SetValue(item.Key, item.Value); } foreach (var item in p.Domain(DomainKey.CUSTOMER_PARAMETER)) { args.SetValue(item.Key, item.Value); } var action = string.IsNullOrEmpty(p.CallAction) ? "load" : p.CallAction; var invokelist = this.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).Where(t => t.Name.ToLower() == action.ToLower() && t.GetParameters().Count() == 1).ToList(); if (invokelist.Count() != 1) { throw new NotFoundException($"未找到名为{p.CallAction}的执行方法"); } d.Result = invokelist[0].Invoke(this, new object[] { args }); }
/// <summary> /// 給新增行寫值 /// </summary> /// <param name="value"></param> /// <param name="columnName"></param> public void SetNewRowValue(object value, string columnName) { if (this._new_row == null) { NewRow(); } if (columnName == null) { return; } var dc = this.schema.Where(w => w.ColumnName.ToLower() == columnName.ToLower()); if (dc.Count() <= 0) { return; } if (dc.First().DataType == null) { dc.First().DataType = value.GetType(); } _new_row.SetValue(columnName, value); }
/// <summary> /// 处理Request中的cookie数据 /// </summary> /// <param name="p"></param> /// <param name="d"></param> protected virtual void ProcessRequestCookie(TParameter p, TData d) { var context = p.CurrentHttpContext; if (p.ExtentionObj.cookie == null) { p.ExtentionObj.cookie = FrameDLRObject.CreateInstance(); } if (context.Request.Cookies != null && context.Request.Cookies.Count > 0) { foreach (var key in context.Request.Cookies.Keys) { if (key != "ASP.NET_SessionId") { FrameDLRObject item = FrameDLRObject.CreateInstance(); item.SetValue("name", key); item.SetValue("value", context.Request.Cookies[key]); ((FrameDLRObject)p.ExtentionObj.cookie).SetValue(ComFunc.nvl(item.GetValue("name")), item); } } } }
/// <summary> /// Copy Data /// </summary> /// <param name="up"></param> /// <param name="from_table">来源表</param> /// <param name="to_Table">目标表</param> /// <param name="if_not_exists">为true的时候添加not exists的where条件,否则不过滤,注意:该过滤条件不是根据每笔资料进行比对的,而是根据目标表是否存在数据来作为判定依据,因此会出现只要目标表存在资料,无论与来源数据是否相同都不会执行写入操作</param> /// <param name="columns">要copy的栏位,指定来源表的栏位,值为目标表的栏位,格式必须为{'from_column':'to_column'}</param> /// <param name="where">条件表达式,与Query指令的表达式一样的格式,该表达式用于过滤来源表</param> /// <param name="is_log">是否记录log</param> public virtual void CopyData(UnitParameter up, string from_table, string to_Table, bool if_not_exists = false, object columns = null, object where = null, bool is_log = false) { FrameDLRObject express = FrameDLRObject.CreateInstanceFromat(@"{ $acttype : 'CopyData', $table : {0}, $to_table:{1}, $if_not_exists:{2} }", FrameDLRFlags.SensitiveCase, from_table, to_Table, if_not_exists); if (columns != null) { FrameDLRObject columnexpress = FrameDLRObject.CreateInstance(columns, FrameDLRFlags.SensitiveCase); foreach (var item in columnexpress.Items) { express.SetValue(item.Key, item.Value); } } if (where != null) { express.SetValue("$where", FrameDLRObject.CreateInstance(where, FrameDLRFlags.SensitiveCase)); } Excute(up, express, is_log); }
/// <summary> /// 快速执行简易Insert操作 /// </summary> /// <param name="p"></param> /// <param name="toTable"></param> /// <param name="data"></param> /// <param name="islog"></param> /// <returns></returns> public virtual UnitDataCollection QuickInsert(UnitParameter p, string toTable, object data, bool islog = false) { FrameDLRObject express = FrameDLRObject.CreateInstanceFromat(@"{ $acttype : 'Insert', $table : {0} }", toTable); FrameDLRObject dataexpress = FrameDLRObject.CreateInstance(data); foreach (var item in dataexpress.Items) { express.SetValue(item.Key, item.Value); } return(Excute(p, express, islog)); }
public bool BeginCallModule(P p, D d, Action <P, D> callback) { try { this.ProcessBeforeRequest(p, d); //尝试解决速度慢的问题 System.Net.ServicePointManager.DefaultConnectionLimit = 100; HttpWebRequest hr = GetRequestInstance(); if (_contenttype.ToLower().StartsWith("put/")) { hr.ContentType = _contenttype.Substring(4); } else { hr.ContentType = _contenttype; } hr.Method = _requestmethod; FrameDLRObject requeststate = FrameDLRObject.CreateInstance(); requeststate.SetValue("request", hr); requeststate.SetValue("p", p); requeststate.SetValue("d", d); requeststate.SetValue("callback", callback); var dt1 = DateTime.Now; var async = hr.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), requeststate); var dt2 = DateTime.Now; p.ExtentionObj.asynccallcost = (dt2 - dt1).TotalMilliseconds; p.ExtentionObj.async = async; return(true); } finally { p.Resources.ReleaseAll(); } }
/// <summary> /// 解析queryString /// </summary> /// <param name="qr"></param> /// <returns></returns> public static FrameDLRObject ParseQueryString(string qr) { FrameDLRObject rtn = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase); if (qr != "") { var nvc = HttpUtility.ParseQueryString(qr); foreach (var key in nvc.AllKeys) { rtn.SetValue(key, nvc[key]); } } return(rtn); }
public string ConvertTo(object obj) { DataTableStd dtt = null; if (obj is DataTableStd) { dtt = (DataTableStd)obj; } else { throw new Exception("DataTable2Json无法转化" + obj.GetType().FullName + "类型数据!"); } FrameDLRObject data = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase); data.SetValue("rows", dtt.Rows); return(data.ToJSONString()); }
object list(LogicData arg) { var id = ComFunc.nvl(arg["filter"]); var up = DB.NewDBUnitParameter(); up.SetValue("id", id); FrameDLRObject express = FrameDLRObject.CreateInstanceFromat(@"{ $acttype : 'QueryByPage', $table : 'LoginInfo' }"); if (id != "") { express.SetValue("$where", FrameDLRObject.CreateInstanceFromat(@"{ $or:[ { LoginID:{ $like:{0} } }, { LoginName:{ $like:{0} } } ] }", id)); } UnitDataCollection re = DB.Excute(up, express); var list = re.QueryData <FrameDLRObject>(); var rtn = FrameDLRObject.CreateInstance(true, ""); rtn.data = list; rtn.current_page = re.CurrentPage; rtn.count_per_page = re.Count_Of_OnePage; rtn.to_page = re.CurrentPage; rtn.total_page = re.TotalPage; rtn.total_row = re.TotalRow; return(rtn); }
/// <summary> /// 处理Response的session数据 /// </summary> /// <param name="p"></param> /// <param name="d"></param> protected virtual void ProcessResponseSeesion(TParameter p, TData d) { lock (lockobj) { var sessionid = ComFunc.nvl(CurrentContext.Request.Cookies["ASP.NET_SessionId"]); if (p.IsNeedSessionAbandon) { CurrentContext.Session.Clear(); GlobalCommon.ApplicationCache.Remove("__frame_session__" + sessionid); } else { IEnumerable <string> keys = p.Domain(DomainKey.SESSION).Keys; //Websocket下无session,将session对象写入ApplicationCache中用于同步 if (!string.IsNullOrEmpty(sessionid)) { var removeobj = GlobalCommon.ApplicationCache.Get("__frame_session__" + sessionid); if (removeobj != null) { ((FrameDLRObject)removeobj).Dispose(); } GlobalCommon.ApplicationCache.Remove("__frame_session__" + sessionid); FrameDLRObject sessionobj = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase); foreach (string s in keys) { sessionobj.SetValue(s, ComFunc.CloneObject(p[DomainKey.SESSION, s])); } GlobalCommon.ApplicationCache.Set("__frame_session__" + sessionid, sessionobj, TimeSpan.FromMinutes(20)); } //websocket下没有session if (CurrentContext.Session != null) { foreach (string s in keys) { CurrentContext.Session.SetObject(s, ComFunc.CloneObject(p[DomainKey.SESSION, s])); } } } } }
/// <summary> /// 异步调用微信服务 /// </summary> /// <typeparam name="RType"></typeparam> /// <param name="url"></param> /// <param name="method"></param> /// <param name="contenttype"></param> /// <param name="header"></param> /// <param name="data"></param> /// <param name="isneedcert"></param> /// <param name="callback"></param> /// <param name="recorddata"></param> protected void CallWeixinServerAsync <RType>(string url, string method = "POST", string contenttype = "text/json", FrameDLRObject header = null, FrameDLRObject data = null, bool isneedcert = false, Action <object> callback = null, FrameDLRObject recorddata = null) { var result = GlobalCommon.Proxys["weixinserver"].CallModule <RType>(new { Url = url, ContentEncoding = Encoding.UTF8, ContentType = string.IsNullOrEmpty(contenttype) ? "text/json" : contenttype, Certificate = isneedcert ? new X509Certificate2(Weixin_Mch_Ssl_Path, Weixin_Mch_Ssl_Pass, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet) : null, RequestMethod = string.IsNullOrEmpty(method) ? "POST" : method, PostData = data, Header = header }); if (callback != null) { result.ContinueWith(r => { recorddata = recorddata == null ? FrameDLRObject.CreateInstance() : recorddata; recorddata.SetValue("weixincallbackresult", r.Result); callback.Invoke(recorddata); }); } }
/// <summary> /// 构建报表查询的DBExpress表达式 /// </summary> /// <param name="tables">关联表信息,格式: ///[ /// { /// table_name:'关联表名', /// is_main:'是否为主表', /// ref_columns:['关联栏位描述,格式:{表名}.{栏位名称}'] /// } ///]</param> /// <param name="columns"> /// 报表栏位信息,格式: /// [ /// { /// table_name:'关联表名,不可为空', /// column_name:'栏位名称,不可为空', /// column_display:'表头显示名称,不可为空' /// } /// ] /// </param> /// <returns>返回为null的时候证明无法组合成表达式</returns> FrameDLRObject buildQueryJSON(IEnumerable <object> tables, IEnumerable <object> columns) { FrameDLRObject rtn = FrameDLRObject.CreateInstance(); rtn.SetValue("$acttype", "Query"); //找出主表,从表 var maintable = new List <dynamic>(); var subtable = new List <dynamic>(); var alianmap = new Dictionary <string, string>(); var index = 0; foreach (dynamic t in tables) { if (BoolStd.IsNotBoolThen(t.is_main)) { maintable.Add(t); } else { subtable.Add(t); } alianmap.Add(t.table_name, $"t{index}"); index++; } if (maintable.Count > 1) { return(null); } FrameDLRObject table = FrameDLRObject.CreateInstance(); table.SetValue(maintable.First().table_name, alianmap[maintable.First().table_name]); foreach (dynamic t in subtable) { var alian = alianmap[t.table_name]; if (t.ref_columns != null) { FrameDLRObject texpress = FrameDLRObject.CreateInstance(); texpress.SetValue("$as", alian); var ref_columns = ((IEnumerable <object>)t.ref_columns).Select(d => ComFunc.nvl(d)); FrameDLRObject joinexpress = FrameDLRObject.CreateInstance(); texpress.SetValue("$join", joinexpress); FrameDLRObject onexpress = FrameDLRObject.CreateInstance(); joinexpress.SetValue("$on", onexpress); foreach (var c in ref_columns) { var left_column = c.Split('=')[0].Trim(); var join_table = c.Split('=')[1].Trim().Split('.')[0].Trim(); var by_column = c.Split('=')[1].Trim().Split('.')[1].Trim(); var alian_join_table = alianmap[join_table]; onexpress.SetValue(left_column, $"#sql:{alian_join_table}.{by_column}"); } table.SetValue(t.table_name, texpress); } } rtn.SetValue("$table", table); foreach (dynamic item in columns) { var table_name = item.table_name; var column_name = item.column_name; if (!alianmap.ContainsKey(table_name)) { return(null); } rtn.SetValue(column_name, $"#sql:{alianmap[table_name]}.{column_name}"); } return(rtn); }
public DataCollection DoOperate(ParameterStd p) { UnitDataCollection rtn = new UnitDataCollection(); string flag = p.GetValue <string>("_unit_action_flag_"); UnitParameter up = (UnitParameter)p; if (up.Dao is ADBAccess) { T t = (T)Activator.CreateInstance(typeof(T), true); var sqlobj = t.GetSqlFunc(flag)(up); if (!(sqlobj is FrameDLRObject)) { throw new TypeRequiredException("需要指定的动态数据对象:FrameDLRObject"); } string sql = sqlobj.sql; ADBAccess dba = (ADBAccess)up.Dao; DBOParameterCollection dbc = new DBOParameterCollection(); if (!string.IsNullOrEmpty(sql)) { string regstr = ""; regstr = @"(?<=" + (dba.ParameterFlagChar == "$"?"\\$": dba.ParameterFlagChar) + @")[A-Za-z0-9_]+\d*"; string regexpress = @"(?isx) (') #开始标记“<tag...>” (?> #分组构造,用来限定量词“*”修饰范围 \1 (?<Open>) #命名捕获组,遇到开始标记,入栈,Open计数加1 |\1 (?<-Open>) #狭义平衡组,遇到结束标记,出栈,Open计数减1 |[^']* #右侧不为开始或结束标记的任意字符 ) (?(Open)(?!)) #判断是否还有'OPEN',有则说明不配对,什么都不匹配 \1 #结束标记“</tag>” "; Regex re = new Regex(regstr); string tmpsql = ""; Regex re2 = new Regex(regexpress); tmpsql = sql.Replace("''", "#sp#"); foreach (Match m in re2.Matches(tmpsql)) { tmpsql = tmpsql.Replace(m.Value, "#sp#"); } foreach (System.Text.RegularExpressions.Match m in re.Matches(tmpsql)) { if (up.GetValue(m.ToString()) is byte[]) { dbc.Add(m.ToString(), up.GetValue(m.ToString()), System.Data.DbType.Binary); } else if (up.GetValue(m.ToString()) is DateTime) { dbc.Add(m.ToString(), up.GetValue(m.ToString()), System.Data.DbType.DateTime); } else if (up.GetValue(m.ToString()) is int) { dbc.Add(m.ToString(), up.GetValue(m.ToString()), System.Data.DbType.Int32); } else if (up.GetValue(m.ToString()) is double) { dbc.Add(m.ToString(), up.GetValue(m.ToString()), System.Data.DbType.Double); } else { dbc.Add(m.ToString(), up.GetValue(m.ToString())); } } } try { rtn.QueryDatas = dba.Query(sql, dbc); }catch (Exception ex) { FrameDLRObject dp = FrameDLRObject.CreateInstance(Base.Constants.FrameDLRFlags.SensitiveCase); foreach (var item in dbc) { if (item.Value.ParameterValue is DateTime) { dp.SetValue(item.Key, DateTimeStd.IsDateTimeThen(item.Value.ParameterValue, "yyyy-MM-dd HH:mm:ss")); } else if (item.Value.ParameterValue is DBNull) { dp.SetValue(item.Key, null); } else { dp.SetValue(item.Key, item.Value.ParameterValue); } } GlobalCommon.Logger.WriteLog(Base.Constants.LoggerLevel.ERROR, $"QuerySql={sql};\nParameters={dp.ToJSONString()}"); throw ex; } if (rtn.QueryDatas != null && rtn.QueryDatas.Tables.Count > 0) { rtn.QueryTable = rtn.QueryDatas[0]; } } return(rtn); }
/// <summary> /// 处理Response的session数据 /// </summary> /// <param name="p"></param> /// <param name="d"></param> protected virtual void ProcessResponseSeesion(TParameter p, TData d) { try { if (CurrentContext.Session == null) { return; } } catch (Exception ex) { GlobalCommon.Logger.WriteLog(LoggerLevel.WARN, "当前session无法使用,不做session处理,错误信息:" + ex.Message); return; } lock (lockobj) { var sessionid = ComFunc.nvl(CurrentContext.Request.Cookies["ASP.NET_SessionId"]); if (p.IsNeedSessionAbandon) { CurrentContext.Session.Clear(); GlobalCommon.ApplicationCache.Remove("__frame_session__" + sessionid); } else { IEnumerable <string> keys = p.Domain(DomainKey.SESSION).Keys; //Websocket下无session,将session对象写入ApplicationCache中用于同步 if (!string.IsNullOrEmpty(sessionid)) { var removeobj = GlobalCommon.ApplicationCache.Get("__frame_session__" + sessionid); if (removeobj != null) { ((FrameDLRObject)removeobj).Dispose(); } GlobalCommon.ApplicationCache.Remove("__frame_session__" + sessionid); FrameDLRObject sessionobj = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase); foreach (string s in keys) { sessionobj.SetValue(s, ComFunc.CloneObject(p[DomainKey.SESSION, s])); } GlobalCommon.ApplicationCache.Set("__frame_session__" + sessionid, sessionobj, TimeSpan.FromMinutes(20)); //websocket下没有session if (CurrentContext.Session != null) { foreach (string s in keys) { CurrentContext.Session.SetObject(s, ComFunc.CloneObject(p[DomainKey.SESSION, s])); } } if (!IsWebSocket) { keys = CurrentContext.Session.Keys.Cast <string>().Except(keys).ToArray(); foreach (string s in keys) { CurrentContext.Session.Remove(s); } } } } } }
public DataCollection DoOperate(ParameterStd p) { string flag = p.GetValue <string>("_unit_action_flag_"); //预执行 T t = (T)Activator.CreateInstance(typeof(T), true); UnitParameter up = (UnitParameter)p; UnitDataCollection rtn = new UnitDataCollection(); if (up.Dao is ADBAccess) { var sqlobj = t.GetSqlFunc(flag)(up); ADBAccess dba = (ADBAccess)up.Dao; string regstr = ""; string regexpress = @"(?isx) (') #开始标记“<tag...>” (?> #分组构造,用来限定量词“*”修饰范围 \1 (?<Open>) #命名捕获组,遇到开始标记,入栈,Open计数加1 |\1 (?<-Open>) #狭义平衡组,遇到结束标记,出栈,Open计数减1 |[^']* #右侧不为开始或结束标记的任意字符 ) (?(Open)(?!)) #判断是否还有'OPEN',有则说明不配对,什么都不匹配 \1 #结束标记“</tag>” "; string tmpsql = ""; regstr = @"(?<=" + (dba.ParameterFlagChar == "$" ? "\\$" : dba.ParameterFlagChar) + @")[A-Za-z0-9_]+\d*"; Regex re = new Regex(regstr); Regex re2 = new Regex(regexpress); try { if (!(sqlobj is FrameDLRObject)) { throw new TypeRequiredException("需要指定的动态数据对象:FrameDLRObject"); } string presql = sqlobj.presql; DBAPageP dbc = new DBAPageP(); //dba.BeginTransaction(); if (!string.IsNullOrEmpty(presql)) { tmpsql = presql.Replace("''", "#sp#"); foreach (Match m in re2.Matches(tmpsql)) { tmpsql = tmpsql.Replace(m.Value, "#sp#"); } foreach (System.Text.RegularExpressions.Match m in re.Matches(tmpsql)) { dbc.SQL_Parameters.Add(m.ToString(), up.GetValue(m.ToString())); } try { dba.ExecuteNoQuery(presql, dbc.SQL_Parameters); } catch (Exception ex) { FrameDLRObject dp = FrameDLRObject.CreateInstance(Base.Constants.FrameDLRFlags.SensitiveCase); foreach (var item in dbc.SQL_Parameters) { if (item.Value.ParameterValue is DateTime) { dp.SetValue(item.Key, DateTimeStd.IsDateTimeThen(item.Value.ParameterValue, "yyyy-MM-dd HH:mm:ss")); } else if (item.Value.ParameterValue is DBNull) { dp.SetValue(item.Key, null); } else { dp.SetValue(item.Key, item.Value.ParameterValue); } } GlobalCommon.Logger.WriteLog(Base.Constants.LoggerLevel.ERROR, $"QueryByPage PreSql={presql};\nParameters={dp.ToJSONString()}"); throw ex; } } //执行翻页查询 string sql = sqlobj.sql; string orderby = sqlobj.orderby; if (!string.IsNullOrEmpty(sql)) { tmpsql = sql.Replace("''", "#sp#"); foreach (Match m in re2.Matches(tmpsql)) { tmpsql = tmpsql.Replace(m.Value, "#sp#"); } dbc.SQL_Parameters.Clear(); foreach (System.Text.RegularExpressions.Match m in re.Matches(tmpsql)) { if (up.GetValue(m.ToString()) is byte[]) { dbc.SQL_Parameters.Add(m.ToString(), up.GetValue(m.ToString()), System.Data.DbType.Binary); } else { dbc.SQL_Parameters.Add(m.ToString(), up.GetValue(m.ToString())); } } try { dbc.SQL = sql; dbc.OrderBy = orderby; dbc.Count_of_OnePage = up.Count_Of_OnePage; dbc.CurrentPage = up.CurrentPage; dba.StartPageByCondition(dbc); rtn.QueryTable = dba.GoToPage(up.ToPage); rtn.QueryDatas = new DataSetStd(); rtn.QueryDatas.Tables.Add(rtn.QueryTable); rtn.Count_Of_OnePage = up.Count_Of_OnePage; rtn.CurrentPage = dba.CurrentPage; rtn.TotalPage = dba.TotalPage; rtn.TotalRow = dba.TotalRow; } catch (Exception ex) { FrameDLRObject dp = FrameDLRObject.CreateInstance(Base.Constants.FrameDLRFlags.SensitiveCase); foreach (var item in dbc.SQL_Parameters) { if (item.Value.ParameterValue is DateTime) { dp.SetValue(item.Key, DateTimeStd.IsDateTimeThen(item.Value.ParameterValue, "yyyy-MM-dd HH:mm:ss")); } else if (item.Value.ParameterValue is DBNull) { dp.SetValue(item.Key, null); } else { dp.SetValue(item.Key, item.Value.ParameterValue); } } GlobalCommon.Logger.WriteLog(Base.Constants.LoggerLevel.ERROR, $"QueryByPage sql={sql};\n order by={orderby};\nParameters={dp.ToJSONString()}"); throw ex; } } //收尾处理 string aftersql = sqlobj.aftersql; if (!string.IsNullOrEmpty(aftersql)) { tmpsql = aftersql.Replace("''", "#sp#"); foreach (Match m in re2.Matches(tmpsql)) { tmpsql = tmpsql.Replace(m.Value, "#sp#"); } dbc.SQL_Parameters.Clear(); foreach (System.Text.RegularExpressions.Match m in re.Matches(tmpsql)) { dbc.SQL_Parameters.Add(m.ToString(), up.GetValue(m.ToString())); } try { dba.ExecuteNoQuery(aftersql, dbc.SQL_Parameters); }catch (Exception ex) { FrameDLRObject dp = FrameDLRObject.CreateInstance(Base.Constants.FrameDLRFlags.SensitiveCase); foreach (var item in dbc.SQL_Parameters) { if (item.Value.ParameterValue is DateTime) { dp.SetValue(item.Key, DateTimeStd.IsDateTimeThen(item.Value.ParameterValue, "yyyy-MM-dd HH:mm:ss")); } else if (item.Value.ParameterValue is DBNull) { dp.SetValue(item.Key, null); } else { dp.SetValue(item.Key, item.Value.ParameterValue); } } GlobalCommon.Logger.WriteLog(Base.Constants.LoggerLevel.ERROR, $"QueryByPage AfterSql={aftersql};\nParameters={dp.ToJSONString()}"); throw ex; } } //dba.CommitTransaction(); } catch { //if (dba != null) // dba.RollbackTransaction(); throw; } } return(rtn); }