You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

929 lines
37 KiB
Plaintext

using System;
using System.Drawing;
using System.Net;
using System.Net.Mail;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Web;
using System.IO;
using System.IO.Compression;
using System.Text;
using BP.En;
using BP.Difference;
using BP.DA;
using BP.Sys;
using BP.Web;
using System.Text.RegularExpressions;
using BP.Port;
using System.Collections.Generic;
namespace BP.Pub
{
/// <summary>
/// PageBase 的摘要说明。
/// </summary>
public class PubClass
{
/// <summary>
/// 处理字段
/// </summary>
/// <param name="fd"></param>
/// <returns></returns>
public static string DealToFieldOrTableNames(string fd)
{
string ptable = fd;
string keys = "~!@#$%^&*()+{}|:<>?`=[];,./~!@#¥%……&×()——+{}|:“《》?`-=[];',./";
char[] cc = keys.ToCharArray();
foreach (char c in cc)
fd = fd.Replace(c.ToString(), "");
if (fd.Length <= 0)
throw new Exception("存储表PTable为" + ptable + ",不合法");
char c1c = fd.ToCharArray()[0];
if (char.IsLetter(c1c) == false)
fd = "F" + fd;
return fd;
}
public static string KeyFields
{
get
{
return ",release,declare,key,select,from,delete,update,insert,into,go,to,goto,where,order,by,use,user,function,produce,talbe,colmen,rows,";
}
}
/// <summary>
/// 产生临时文件名称
/// </summary>
/// <param name="hz"></param>
/// <returns></returns>
public static string GenerTempFileName(string hz)
{
return Web.WebUser.No + DateTime.Now.ToString("MMddhhmmss") + "." + hz;
}
/// <summary>
/// 获取datatable.
/// </summary>
/// <param name="uiBindKey"></param>
/// <returns></returns>
public static DataTable GetDataTableByUIBineKey(string uiBindKey, Hashtable ht = null)
{
DataTable dt = new DataTable();
if (uiBindKey.Contains("."))
{
Entities ens = BP.En.ClassFactory.GetEns(uiBindKey);
if (ens == null)
ens = BP.En.ClassFactory.GetEns(uiBindKey);
if (ens == null)
ens = BP.En.ClassFactory.GetEns(uiBindKey);
if (ens == null)
throw new Exception("类名错误:" + uiBindKey + ",不能转化成ens.");
ens.RetrieveAll();
dt = ens.ToDataTableField(uiBindKey);
return dt;
}
SFTable sf = new SFTable();
sf.No = uiBindKey;
if (sf.RetrieveFromDBSources() != 0)
{
if (sf.SrcType == SrcType.Handler || sf.SrcType == SrcType.JQuery)
return null;
dt = sf.GenerHisDataTable(ht);
}
if (dt == null)
dt = new DataTable();
#region 把列名做成标准的.
foreach (DataColumn col in dt.Columns)
{
string colName = col.ColumnName.ToLower();
switch (colName)
{
case "no":
col.ColumnName = "No";
break;
case "name":
col.ColumnName = "Name";
break;
case "parentno":
col.ColumnName = "ParentNo";
break;
default:
break;
}
}
#endregion 把列名做成标准的.
dt.TableName = uiBindKey;
return dt;
}
#region 系统调度
public static string DBRpt(DBCheckLevel level)
{
// 取出全部的实体
ArrayList als = ClassFactory.GetObjects("BP.En.Entities");
string msg = "";
foreach (object obj in als)
{
Entities ens = (Entities)obj;
try
{
msg += DBRpt1(level, ens);
}
catch (Exception ex)
{
msg += "<hr>" + ens.ToString() + "体检失败:" + ex.Message;
}
}
MapDatas mds = new MapDatas();
mds.RetrieveAllFromDBSource();
foreach (MapData md in mds)
{
try
{
md.HisGEEn.CheckPhysicsTable();
PubClass.AddComment(md.HisGEEn);
}
catch (Exception ex)
{
msg += "<hr>" + md.No + "体检失败:" + ex.Message;
}
}
MapDtls dtls = new MapDtls();
dtls.RetrieveAllFromDBSource();
foreach (MapDtl dtl in dtls)
{
try
{
dtl.HisGEDtl.CheckPhysicsTable();
PubClass.AddComment(dtl.HisGEDtl);
}
catch (Exception ex)
{
msg += "<hr>" + dtl.No + "体检失败:" + ex.Message;
}
}
#region 检查处理必要的基础数据 Pub_Day .
string sql = "";
string sqls = "";
sql = "SELECT count(*) Num FROM Pub_Day";
try
{
if (DBAccess.RunSQLReturnValInt(sql) == 0)
{
for (int i = 1; i <= 31; i++)
{
string d = i.ToString().PadLeft(2, '0');
sqls += "@INSERT INTO Pub_Day(No,Name)VALUES('" + d.ToString() + "','" + d.ToString() + "')";
}
}
}
catch
{
}
sql = "SELECT count(*) Num FROM Pub_YF";
try
{
if (DBAccess.RunSQLReturnValInt(sql) == 0)
{
for (int i = 1; i <= 12; i++)
{
string d = i.ToString().PadLeft(2, '0');
sqls += "@INSERT INTO Pub_YF(No,Name)VALUES('" + d.ToString() + "','" + d.ToString() + "')";
}
}
}
catch
{
}
sql = "SELECT count(*) Num FROM Pub_ND";
try
{
if (DBAccess.RunSQLReturnValInt(sql) == 0)
{
for (int i = 2010; i < 2015; i++)
{
string d = i.ToString();
sqls += "@INSERT INTO Pub_ND(No,Name)VALUES('" + d.ToString() + "','" + d.ToString() + "')";
}
}
}
catch
{
}
sql = "SELECT count(*) Num FROM Pub_NY";
try
{
if (DBAccess.RunSQLReturnValInt(sql) == 0)
{
for (int i = 2010; i < 2015; i++)
{
for (int yf = 1; yf <= 12; yf++)
{
string d = i.ToString() + "-" + yf.ToString().PadLeft(2, '0');
sqls += "@INSERT INTO Pub_NY(No,Name)VALUES('" + d + "','" + d + "')";
}
}
}
}
catch
{
}
DBAccess.RunSQLs(sqls);
#endregion 检查处理必要的基础数据。
return msg;
}
/// <summary>
/// 为表增加注释
/// </summary>
/// <returns></returns>
public static string AddComment()
{
// 取出全部的实体
ArrayList als = ClassFactory.GetObjects("BP.En.Entities");
string msg = "";
Entity en = null;
Entities ens = null;
foreach (object obj in als)
{
try
{
ens = (Entities)obj;
string className = ens.ToString();
if (className == null)
continue;
switch (className.ToUpper())
{
case "BP.WF.STARTWORKS":
case "BP.WF.WORKS":
case "BP.WF.GESTARTWORKS":
case "BP.EN.GENONAMES":
case "BP.EN.GETREES":
case "BP.WF.GERptS":
case "BP.WF.GEENTITYS":
case "BP.WF.GEWORKS":
case "BP.SYS.TSENTITYNONAMES":
continue;
default:
break;
}
en = ens.GetNewEntity;
if (en.EnMap.EnType == EnType.View || en.EnMap.EnType == EnType.ThirdPartApp)
continue;
}
catch
{
continue;
}
msg += AddComment(en);
}
return msg;
}
public static string AddComment(Entity en)
{
if (en == null)
return "实体错误 en=null ";
if (en.EnMap == null)
return "实体错误 en.getEnMap=null ";
if (en.EnMap.PhysicsTable == null)
return "实体错误 en.getEnMap.getPhysicsTable=null ";
if (DBAccess.IsExitsObject(en.EnMap.PhysicsTable) == false)
return "实体表不存在.";
try
{
switch (en.EnMap.EnDBUrl.DBType)
{
case DBType.Oracle:
AddCommentForTable_Ora(en);
break;
case DBType.MySQL:
AddCommentForTable_MySql(en);
break;
default:
AddCommentForTable_MS(en);
break;
}
return "";
}
catch (Exception ex)
{
return "<hr>" + en.ToString() + "体检失败:" + ex.Message;
}
}
private static void AddCommentForTable_Ora(Entity en)
{
en.RunSQL("comment on table " + en.EnMap.PhysicsTable + " IS '" + en.EnDesc + "'");
SysEnums ses = new SysEnums();
foreach (Attr attr in en.EnMap.Attrs)
{
if (attr.MyFieldType == FieldType.RefText)
continue;
if (DBAccess.IsExitsTableCol(en.EnMap.PhysicsTable, attr.Field) == false)
continue;
switch (attr.MyFieldType)
{
case FieldType.PK:
en.RunSQL("comment on column " + en.EnMap.PhysicsTable + "." + attr.Field + " IS '" + attr.Desc + "-主键'");
break;
case FieldType.Normal:
en.RunSQL("comment on column " + en.EnMap.PhysicsTable + "." + attr.Field + " IS '" + attr.Desc + "'");
break;
case FieldType.Enum:
ses = new SysEnums(attr.Key, attr.UITag);
en.RunSQL("comment on column " + en.EnMap.PhysicsTable + "." + attr.Field + " IS '" + attr.Desc + ",枚举类型:" + ses.ToDesc() + "'");
break;
case FieldType.PKEnum:
ses = new SysEnums(attr.Key, attr.UITag);
en.RunSQL("comment on column " + en.EnMap.PhysicsTable + "." + attr.Field + " IS '" + attr.Desc + ", 主键:枚举类型:" + ses.ToDesc() + "'");
break;
case FieldType.FK:
Entity myen = attr.HisFKEn; // ClassFactory.GetEns(attr.UIBindKey).GetNewEntity;
en.RunSQL("comment on column " + en.EnMap.PhysicsTable + "." + attr.Field + " IS '" + attr.Desc + ", 外键:对应物理表:" + myen.EnMap.PhysicsTable + ",表描述:" + myen.EnDesc + "'");
break;
case FieldType.PKFK:
Entity myen1 = attr.HisFKEn; // ClassFactory.GetEns(attr.UIBindKey).GetNewEntity;
en.RunSQL("comment on column " + en.EnMap.PhysicsTable + "." + attr.Field + " IS '" + attr.Desc + ", 主外键:对应物理表:" + myen1.EnMap.PhysicsTable + ",表描述:" + myen1.EnDesc + "'");
break;
default:
break;
}
}
}
private static void AddCommentForTable_MySql(Entity en)
{
MySql.Data.MySqlClient.MySqlConnection conn =
new MySql.Data.MySqlClient.MySqlConnection(BP.Difference.SystemConfig.AppCenterDSN);
en.RunSQL("alter table " + conn.Database + "." + en.EnMap.PhysicsTable + " comment = '" + en.EnDesc + "'");
//获取当前实体对应表的所有字段结构信息
DataTable cols =
DBAccess.RunSQLReturnTable(
"select column_name,column_default,is_nullable,character_set_name,column_type from information_schema.columns where table_schema = '" +
conn.Database + "' and table_name='" + en.EnMap.PhysicsTable + "'");
SysEnums ses = new SysEnums();
string sql = string.Empty;
DataRow row = null;
foreach (Attr attr in en.EnMap.Attrs)
{
if (attr.MyFieldType == FieldType.RefText)
continue;
row = cols.Select(string.Format("column_name='{0}'", attr.Field))[0];
sql = string.Format("ALTER TABLE {0}.{1} CHANGE COLUMN {2} {2} {3}{4}{5}{6} COMMENT ",
conn.Database,
en.EnMap.PhysicsTable,
attr.Field,
row["column_type"].ToString().ToUpper(),
Equals(row["character_set_name"], "utf8") ? " CHARACTER SET 'utf8'" : "",
Equals(row["is_nullable"], "YES") ? " NULL" : " NOT NULL",
Equals(row["column_default"], "NULL")
? " DEFAULT NULL"
: (Equals(row[""], "") ? "" : " DEFAULT " + row[""]));
switch (attr.MyFieldType)
{
case FieldType.PK:
en.RunSQL(sql + string.Format("'{0} - 主键'", attr.Desc));
break;
case FieldType.Normal:
en.RunSQL(sql + string.Format("'{0}'", attr.Desc));
break;
case FieldType.Enum:
ses = new SysEnums(attr.Key, attr.UITag);
en.RunSQL(sql + string.Format("'{0},枚举类型:{1}'", attr.Desc, ses.ToDesc()));
break;
case FieldType.PKEnum:
ses = new SysEnums(attr.Key, attr.UITag);
en.RunSQL(sql + string.Format("'{0},主键:枚举类型:{1}'", attr.Desc, ses.ToDesc()));
break;
case FieldType.FK:
Entity myen = attr.HisFKEn; // ClassFactory.GetEns(attr.UIBindKey).GetNewEntity;
en.RunSQL(sql +
string.Format("'{0},外键:对应物理表:{1},表描述:{2}'", attr.Desc, myen.EnMap.PhysicsTable,
myen.EnDesc));
break;
case FieldType.PKFK:
Entity myen1 = attr.HisFKEn; // ClassFactory.GetEns(attr.UIBindKey).GetNewEntity;
en.RunSQL(sql +
string.Format("'{0},主外键:对应物理表:{1},表描述:{2}'", attr.Desc, myen1.EnMap.PhysicsTable,
myen1.EnDesc));
break;
default:
break;
}
}
}
private static void AddColNote(Entity en, string table, string col, string note)
{
try
{
string sql = "execute sp_addextendedproperty 'MS_Description', '" + note + "', 'user', dbo, 'table', '" + table + "', 'column', '" + col + "'";
en.RunSQL(sql);
}
catch (Exception ex)
{
string sql = "execute sp_updateextendedproperty 'MS_Description', '" + note + "', 'user', dbo, 'table', '" + table + "', 'column', '" + col + "'";
en.RunSQL(sql);
}
}
/// <summary>
/// 为表增加解释
/// </summary>
/// <param name="en"></param>
public static void AddCommentForTable_MS(Entity en)
{
if (en.EnMap.EnType == EnType.View || en.EnMap.EnType == EnType.ThirdPartApp)
return;
try
{
string sql = "execute sp_addextendedproperty 'MS_Description', '" + en.EnDesc + "', 'user', dbo, 'table', '" + en.EnMap.PhysicsTable + "'";
en.RunSQL(sql);
}
catch (Exception ex)
{
string sql = "execute sp_updateextendedproperty 'MS_Description', '" + en.EnDesc + "', 'user', dbo, 'table', '" + en.EnMap.PhysicsTable + "'";
en.RunSQL(sql);
}
SysEnums ses = new SysEnums();
foreach (Attr attr in en.EnMap.Attrs)
{
if (attr.MyFieldType == FieldType.RefText)
continue;
if (attr.Key == attr.Desc)
continue;
if (attr.Field == attr.Desc)
continue;
switch (attr.MyFieldType)
{
case FieldType.PK:
AddColNote(en, en.EnMap.PhysicsTable, attr.Field, attr.Desc + "(主键)");
//en.RunSQL("comment on table "+ en.EnMap.PhysicsTable+"."+attr.Field +" IS '"+en.EnDesc+"'");
break;
case FieldType.Normal:
AddColNote(en, en.EnMap.PhysicsTable, attr.Field, attr.Desc);
//en.RunSQL("comment on table "+ en.EnMap.PhysicsTable+"."+attr.Field +" IS '"+en.EnDesc+"'");
break;
case FieldType.Enum:
ses = new SysEnums(attr.Key, attr.UITag);
// en.RunSQL("comment on table "+ en.EnMap.PhysicsTable+"."+attr.Field +" IS '"++"'" );
AddColNote(en, en.EnMap.PhysicsTable, attr.Field, attr.Desc + ",枚举类型:" + ses.ToDesc());
break;
case FieldType.PKEnum:
ses = new SysEnums(attr.Key, attr.UITag);
AddColNote(en, en.EnMap.PhysicsTable, attr.Field, attr.Desc + ",主键:枚举类型:" + ses.ToDesc());
//en.RunSQL("comment on table "+ en.EnMap.PhysicsTable+"."+attr.Field +" IS '"+en.EnDesc+", 主键:枚举类型:"+ses.ToDesc()+"'" );
break;
case FieldType.FK:
Entity myen = attr.HisFKEn; // ClassFactory.GetEns(attr.UIBindKey).GetNewEntity;
AddColNote(en, en.EnMap.PhysicsTable, attr.Field, attr.Desc + ", 外键:对应物理表:" + myen.EnMap.PhysicsTable + ",表描述:" + myen.EnDesc);
//en.RunSQL("comment on table "+ en.EnMap.PhysicsTable+"."+attr.Field +" IS "+ );
break;
case FieldType.PKFK:
Entity myen1 = attr.HisFKEn; // ClassFactory.GetEns(attr.UIBindKey).GetNewEntity;
AddColNote(en, en.EnMap.PhysicsTable, attr.Field, attr.Desc + ", 主外键:对应物理表:" + myen1.EnMap.PhysicsTable + ",表描述:" + myen1.EnDesc);
//en.RunSQL("comment on table "+ en.EnMap.PhysicsTable+"."+attr.Field +" IS '"+ );
break;
default:
break;
}
}
}
/// <summary>
/// 产程系统报表,如果出现问题,就写入日志里面。
/// </summary>
/// <returns></returns>
public static string DBRpt1(DBCheckLevel level, Entities ens)
{
Entity en = ens.GetNewEntity;
if (en.EnMap.EnDBUrl.DBUrlType != DBUrlType.AppCenterDSN)
return null;
if (en.EnMap.EnType == EnType.ThirdPartApp)
return null;
if (en.EnMap.EnType == EnType.View)
return null;
if (en.EnMap.EnType == EnType.Ext)
return null;
// 检测物理表的字段。
en.CheckPhysicsTable();
PubClass.AddComment(en);
return "";
string msg = "";
string table = en.EnMap.PhysicsTable;
Attrs fkAttrs = en.EnMap.HisFKAttrs;
if (fkAttrs.Count == 0)
return msg;
int num = 0;
string sql;
//string msg="";
foreach (Attr attr in fkAttrs)
{
if (attr.MyFieldType == FieldType.RefText)
continue;
string enMsg = "";
try
{
#region 更新他们,去掉左右空格,因为外键不能包含左右空格。
if (level == DBCheckLevel.Middle || level == DBCheckLevel.High)
{
/*如果是高中级别,就去掉左右空格*/
if (attr.MyDataType == DataType.AppString)
{
DBAccess.RunSQL("UPDATE " + en.EnMap.PhysicsTable + " SET " + attr.Field + " = rtrim( ltrim(" + attr.Field + ") )");
}
}
#endregion
#region 处理关联表的情况.
Entities refEns = attr.HisFKEns; // ClassFactory.GetEns(attr.UIBindKey);
Entity refEn = refEns.GetNewEntity;
//取出关联的表。
string reftable = refEn.EnMap.PhysicsTable;
//sql="SELECT COUNT(*) FROM "+en.EnMap.PhysicsTable+" WHERE "+attr.Key+" is null or len("+attr.Key+") < 1 ";
// 判断外键表是否存在。
sql = "SELECT COUNT(*) FROM sysobjects WHERE name = '" + reftable + "'";
//num=DA.DBAccess.RunSQLReturnValInt(sql,0);
if (DBAccess.IsExitsObject(new DBUrl(DBUrlType.AppCenterDSN), reftable) == false)
{
//报告错误信息
enMsg += "<br>@检查实体:" + en.EnDesc + ",字段 " + attr.Key + " , 字段描述:" + attr.Desc + " , 外键物理表:" + reftable + "不存在:" + sql;
}
else
{
Attr attrRefKey = refEn.EnMap.GetAttrByKey(attr.UIRefKeyValue); // 去掉主键的左右 空格.
if (attrRefKey.MyDataType == DataType.AppString)
{
if (level == DBCheckLevel.Middle || level == DBCheckLevel.High)
{
/*如果是高中级别,就去掉左右空格*/
DBAccess.RunSQL("UPDATE " + reftable + " SET " + attrRefKey.Field + " = rtrim( ltrim(" + attrRefKey.Field + ") )");
}
}
Attr attrRefText = refEn.EnMap.GetAttrByKey(attr.UIRefKeyText); // 去掉主键 Text 的左右 空格.
if (level == DBCheckLevel.Middle || level == DBCheckLevel.High)
{
/*如果是高中级别,就去掉左右空格*/
DBAccess.RunSQL("UPDATE " + reftable + " SET " + attrRefText.Field + " = rtrim( ltrim(" + attrRefText.Field + ") )");
}
}
#endregion
#region 外键的实体是否为空
switch (en.EnMap.EnDBUrl.DBType)
{
case DBType.Oracle:
sql = "SELECT COUNT(*) FROM " + en.EnMap.PhysicsTable + " WHERE " + attr.Field + " is null or length(" + attr.Field + ") < 1 ";
break;
default:
sql = "SELECT COUNT(*) FROM " + en.EnMap.PhysicsTable + " WHERE " + attr.Field + " is null or len(" + attr.Field + ") < 1 ";
break;
}
num = DA.DBAccess.RunSQLReturnValInt(sql, 0);
if (num == 0)
{
}
else
{
enMsg += "<br>@检查实体:" + en.EnDesc + ",物理表:" + en.EnMap.PhysicsTable + "出现" + attr.Key + "," + attr.Desc + "不正确,共有[" + num + "]行记录没有数据。" + sql;
}
#endregion
#region 是否能够对应到外键
//是否能够对应到外键。
sql = "SELECT COUNT(*) FROM " + en.EnMap.PhysicsTable + " WHERE " + attr.Field + " NOT IN ( SELECT " + refEn.EnMap.GetAttrByKey(attr.UIRefKeyValue).Field + " FROM " + reftable + " ) ";
num = DA.DBAccess.RunSQLReturnValInt(sql, 0);
if (num == 0)
{
}
else
{
/*如果是高中级别.*/
string delsql = "DELETE FROM " + en.EnMap.PhysicsTable + " WHERE " + attr.Field + " NOT IN ( SELECT " + refEn.EnMap.GetAttrByKey(attr.UIRefKeyValue).Field + " FROM " + reftable + " ) ";
//int i =DBAccess.RunSQL(delsql);
enMsg += "<br>@" + en.EnDesc + ",物理表:" + en.EnMap.PhysicsTable + "出现" + attr.Key + "," + attr.Desc + "不正确,共有[" + num + "]行记录没有关联到数据,请检查物理表与外键表。" + sql + "如果您想删除这些对应不上的数据请运行如下SQL: " + delsql + " 请慎重执行.";
}
#endregion
}
catch (Exception ex)
{
enMsg += "<br>@" + ex.Message;
}
if (enMsg != "")
{
msg += "<BR><b>-- 检查[" + en.EnDesc + "," + en.EnMap.PhysicsTable + "]出现如下问题,类名称:" + en.ToString() + "</b>";
msg += enMsg;
}
}
return msg;
}
#endregion
/// <summary>
/// 转换
/// </summary>
/// <param name="ht"></param>
/// <returns></returns>
public static DataTable HashtableToDataTable(Hashtable ht)
{
DataTable dt = new DataTable();
dt.TableName = "Hashtable";
foreach (string key in ht.Keys)
{
dt.Columns.Add(key, typeof(string));
}
DataRow dr = dt.NewRow();
foreach (string key in ht.Keys)
{
dr[key] = ht[key] as string;
}
dt.Rows.Add(dr);
return dt;
}
#region 通用方法.
public static Hashtable GetMainTableHT()
{
Hashtable htMain = new Hashtable();
foreach (string key in HttpContextHelper.RequestParamKeys)
{
if (DataType.IsNullOrEmpty(key))
continue;
string mykey = key;
string val = HttpContextHelper.RequestParams(key);
mykey = mykey.Replace("TB_", "");
mykey = mykey.Replace("DDL_", "");
mykey = mykey.Replace("CB_", "");
mykey = mykey.Replace("RB_", "");
val = HttpUtility.UrlDecode(val, Encoding.UTF8);
if (htMain.ContainsKey(mykey) == true)
htMain[mykey] = val;
else
htMain.Add(mykey, val);
}
return htMain;
}
public static BP.En.Entity CopyFromRequest(BP.En.Entity en)
{
//获取传递来的所有的checkbox ids 用于设置该属性为falsse.
string checkBoxIDs = HttpContextHelper.RequestParams("CheckBoxIDs");
if (checkBoxIDs != null)
{
string[] strs = checkBoxIDs.Split(',');
foreach (string str in strs)
{
if (DataType.IsNullOrEmpty(str))
continue;
string key = str.Replace("CB_", "");
if (en.Row.ContainsKey(key) == false)
continue; //判断是否存在?
//设置该属性为false.
en.Row[key] = 0;
}
}
Attrs attrs = en.EnMap.Attrs;
/*说明已经找到了这个字段信息。*/
foreach (string key in HttpContextHelper.RequestParamKeys)
{
if (DataType.IsNullOrEmpty(key))
continue;
//获得实际的值, 具有特殊标记的,系统才赋值.
string attrKey = key.Clone() as string;
if (key.StartsWith("TB_"))
attrKey = attrKey.Replace("TB_", "");
else if (key.StartsWith("CB_"))
attrKey = attrKey.Replace("CB_", "");
else if (key.StartsWith("DDL_"))
attrKey = attrKey.Replace("DDL_", "");
else if (key.StartsWith("RB_"))
attrKey = attrKey.Replace("RB_", "");
else
continue;
if (en.Row.ContainsKey(attrKey) == false)
continue; //判断是否存在?
var val = HttpContextHelper.RequestParams(key);
Attr attr = attrs.GetAttrByKey(attrKey);
if (val == null)
val = attr.DefaultVal.ToString(); //如果此值为空,就让其设置默认值.
//如果是数值类型的值.
if (attr.IsNum && DataType.IsNumStr(val.ToString()) == false)
throw new Exception("err@[" + en.ToString() + "," + en.EnDesc + "]输入错误:" + attr.Key + "," + attr.Desc + ",应该是数值类型,但是输入了[" + val.ToString() + "]");
//设置他的属性.
en.SetValByKey(attrKey, val);
}
return en;
}
public static BP.En.Entity CopyFromRequestByPost(BP.En.Entity en)
{
//获取传递来的所有的checkbox ids 用于设置该属性为falsse.
string checkBoxIDs = HttpContextHelper.RequestParams("CheckBoxIDs");
if (checkBoxIDs != null)
{
string[] strs = checkBoxIDs.Split(',');
foreach (string str in strs)
{
if (DataType.IsNullOrEmpty(str))
continue;
if (str.Contains("CBPara"))
{
/*如果是参数字段.*/
en.Row[str.Replace("CBPara_", "")] = 0;
}
else
{
//设置该属性为false.
en.Row[str.Replace("CB_", "")] = 0;
}
}
}
//如果不使用clone 就会导致 “集合已修改;可能无法执行枚举操作。”的错误。
Hashtable ht = en.Row.Clone() as Hashtable;
/*说明已经找到了这个字段信息。*/
foreach (string key in HttpContextHelper.RequestParamKeys)
{
if (DataType.IsNullOrEmpty(key))
continue;
//获得实际的值, 具有特殊标记的,系统才赋值.
string attrKey = key.Clone() as string;
if (key.StartsWith("TB_"))
attrKey = attrKey.Replace("TB_", "");
else if (key.StartsWith("CB_"))
attrKey = attrKey.Replace("CB_", "");
else if (key.StartsWith("DDL_"))
attrKey = attrKey.Replace("DDL_", "");
else if (key.StartsWith("RB_"))
attrKey = attrKey.Replace("RB_", "");
else
{
//给参数赋值.
if (key.StartsWith("TBPara_"))
attrKey = attrKey.Replace("TBPara_", "");
else if (key.StartsWith("DDLPara_"))
attrKey = attrKey.Replace("DDLPara_", "");
else if (key.StartsWith("RBPara_"))
attrKey = attrKey.Replace("RBPara_", "");
else if (key.StartsWith("CBPara_"))
attrKey = attrKey.Replace("CBPara_", "");
else
continue;
}
string val = HttpContextHelper.RequestParams(key); // Form[key]
if (key.IndexOf("CB_") == 0 || key.IndexOf("CBPara_") == 0)
{
en.Row[attrKey] = 1;
continue;
}
//其他的属性.
en.Row[attrKey] = val;
}
return en;
}
/// <summary>
/// 明细表传参保存
/// </summary>
/// <param name="en"></param>
/// <param name="pk"></param>
/// <param name="map"></param>
/// <returns></returns>
public static Entity CopyDtlFromRequests11(Entity en, string pk, Map map)
{
string allKeys = ";";
if (DataType.IsNullOrEmpty(pk))
pk = "";
else
pk = "_" + pk;
foreach (string myK in HttpContextHelper.RequestParamKeys)
allKeys += myK + ";";
Attrs attrs = map.Attrs;
foreach (Attr attr in attrs)
{
string relKey = null;
switch (attr.UIContralType)
{
case UIContralType.TB:
relKey = "TB_" + attr.Key + pk;
break;
case UIContralType.CheckBok:
relKey = "CB_" + attr.Key + pk;
break;
case UIContralType.DDL:
relKey = "DDL_" + attr.Key + pk;
break;
case UIContralType.RadioBtn:
relKey = "RB_" + attr.Key + pk;
break;
case UIContralType.MapPin:
relKey = "TB_" + attr.Key + pk;
break;
default:
break;
}
if (relKey == null)
continue;
if (allKeys.Contains(relKey + ";"))
{
/*说明已经找到了这个字段信息。*/
foreach (string myK in HttpContextHelper.RequestParamKeys)
{
if (DataType.IsNullOrEmpty(myK))
continue;
if (myK.EndsWith(relKey))
{
if (attr.UIContralType == UIContralType.CheckBok)
{
string val = HttpContextHelper.RequestParams(myK);
if (val == "on" || val == "1" || val.Contains(",on"))
en.SetValByKey(attr.Key, 1);
else
en.SetValByKey(attr.Key, 0);
}
else
{
en.SetValByKey(attr.Key, HttpContextHelper.RequestParams(myK));
}
}
}
continue;
}
}
return en;
}
#endregion
/// <summary>
/// 外部参数.
/// </summary>
public static string RequestParas
{
get
{
return BP.Difference.Glo.RequestParas;
}
}
}
}