using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using BP.DA; using BP.Difference; using BP.En; namespace BP.Difference { /// /// 获得IP /// public static class Glo { public static string DealExp(string exp, Hashtable ht) { if (exp == null) exp = string.Empty; exp = exp.Replace("~", "'"); exp = exp.Replace("/#", "+"); //为什么? exp = exp.Replace("/$", "-"); //为什么? if (exp.Contains("@WebUser.No")) exp = exp.Replace("@WebUser.No", BP.Web.WebUser.No); if (exp.Contains("@WebUser.Name")) exp = exp.Replace("@WebUser.Name", BP.Web.WebUser.Name); if (exp.Contains("@WebUser.FK_DeptName")) exp = exp.Replace("@WebUser.FK_DeptName", BP.Web.WebUser.DeptName); if (exp.Contains("@WebUser.FK_Dept")) exp = exp.Replace("@WebUser.FK_Dept", BP.Web.WebUser.DeptNo); if (exp.Contains("@") == true && ht != null) { foreach (string key in ht.Keys) { //值为空或者null不替换 if (ht[key] == null || ht[key].Equals("") == true) continue; if (exp.Contains("@" + key)) exp = exp.Replace("@" + key, ht[key].ToString()); //不包含@则返回SQL语句 if (exp.Contains("@") == false) break; } } if (exp.Contains("@") && BP.Difference.SystemConfig.isBSsystem == true) { /*如果是bs*/ foreach (string key in HttpContextHelper.RequestParamKeys) { if (string.IsNullOrEmpty(key)) continue; exp = exp.Replace("@" + key, HttpContextHelper.RequestParams(key)); } } //if (exp.Contains("@") == true) // throw new Exception("@外键类型SQL错误," + exp + "部分查询条件没有被替换."); return exp; } /// /// 表达式替换 /// /// /// /// public static string DealExp(string exp, Entity en, string errInfo = "") { //替换字符 exp = exp.Replace("~~", "\""); exp = exp.Replace("~", "'"); if (exp.Contains("@") == false) return exp; //首先替换加; 的。 exp = exp.Replace("@WebUser.No;", BP.Web.WebUser.No); exp = exp.Replace("@WebUser.Name;", BP.Web.WebUser.Name); exp = exp.Replace("@WebUser.FK_DeptName;", BP.Web.WebUser.DeptName); exp = exp.Replace("@WebUser.FK_Dept;", BP.Web.WebUser.DeptNo); // 替换没有 ; 的 . exp = exp.Replace("@WebUser.No", BP.Web.WebUser.No); exp = exp.Replace("@WebUser.Name", BP.Web.WebUser.Name); exp = exp.Replace("@WebUser.FK_DeptName", BP.Web.WebUser.DeptName); exp = exp.Replace("@WebUser.FK_Dept", BP.Web.WebUser.DeptNo); exp = exp.Replace("@WebUser.OrgNo", BP.Web.WebUser.OrgNo); exp = exp.Replace("@RDT", DataType.CurrentDateTime); if (exp.Contains("@") == false) return exp; //增加对新规则的支持. @MyField; 格式. if (en != null) { Attrs attrs = en.EnMap.Attrs; BP.En.Row row = en.Row; //特殊判断. if (row.ContainsKey("OID") == true) exp = exp.Replace("@WorkID", row["OID"].ToString()); if (exp.Contains("@") == false) return exp; bool isHaveFenHao = exp.Contains(';'); foreach (string key in row.Keys) { //值为空或者null不替换 if (row[key] == null) continue; if (exp.Contains("@" + key + ";")) { //先替换有单引号的. exp = exp.Replace("'@" + key + ";'", "'" + row[key].ToString() + "'"); //在更新没有单引号的. exp = exp.Replace("@" + key + ";", row[key].ToString()); } if (exp.Contains("@" + key)) { //先替换有单引号的. exp = exp.Replace("'@" + key + "'", "'" + row[key].ToString() + "'"); //在更新没有单引号的. exp = exp.Replace("@" + key, row[key].ToString()); } //不包含@则返回SQL语句 if (exp.Contains("@") == false) return exp; } } if (exp.Contains("@") && BP.Difference.SystemConfig.isBSsystem == true) { /*如果是bs*/ foreach (string key in HttpContextHelper.RequestParamKeys) { if (string.IsNullOrEmpty(key)) continue; exp = exp.Replace("@" + key, HttpContextHelper.RequestParams(key)); } } exp = exp.Replace("~", "'"); return exp; } public static string DealSQLStringEnumFormat(string cfgString) { //把这个string,转化SQL. @tuanyuan=团员@dangyuan=党员 AtPara ap = new AtPara(cfgString); string sql = ""; foreach (string item in ap.HisHT.Keys) { sql += " SELECT '" + item + "' as No, '" + ap.GetValStrByKey(item) + "' as Name FROM Port_Emp WHERE No = 'admin' UNION "; } sql = sql.Substring(0, sql.Length - 6); return sql; } /// /// 获得ID地址 /// public static string GetIP { get { return HttpContextHelper.Request.ServerVariables["REMOTE_ADDR"].ToString(); } } public static string RequestParas { get { string urlExt = ""; string rawUrl = System.Web.HttpContext.Current.Request.RawUrl; rawUrl = "&" + rawUrl.Substring(rawUrl.IndexOf('?') + 1); string[] paras = rawUrl.Split('&'); foreach (string para in paras) { if (para == null || para.Equals("") || para.Contains("=") == false) continue; urlExt += "&" + para; } return urlExt; } } } }