using System; using System.Collections; using System.Data; using BP.DA; using BP.En; using BP.Web; using Newtonsoft.Json; namespace BP.Sys { /// /// 实体版本号属性 /// public class EnVerAttr : EntityMyPKAttr { /// /// 实体类 /// public const string FrmID = "FrmID"; /// /// 关联主键 /// public const string RefPK = "RefPK"; /// /// 实体类名称 /// public const string Name = "Name"; /// /// 主键值 /// public const string PKValue = "PKValue"; /// /// 版本号 /// public const string EnVer = "EnVer"; /// /// 说明 /// public const string MyNote = "MyNote"; /// /// 记录人 /// public const string RecNo = "RecNo"; /// /// 记录人名字 /// public const string RecName = "RecName"; /// /// 记录日期 /// public const string RDT = "RDT"; public const string EnPKValue = "EnPKValue"; /// /// DBJSON /// public const string DBJSON = "DBJSON"; } /// /// 实体版本号 /// public class EnVer : EntityMyPK { #region 方法. /// /// 创建新版本 /// /// public static string NewVer(Entity myen) { string frmID = myen.ToString(); string frmName = myen.EnDesc; string pkval = myen.PKVal.ToString(); // 获得最大的版本号. int maxVer = DBAccess.RunSQLReturnValInt("SELECT MAX(EnVer) as Num FROM Sys_EnVer WHERE FrmID='" + frmID + "' AND EnPKValue='" + pkval + "'", 0); //最大版本号>1,存在历史版本,获取上一个版本的数据 string oldStr = ""; EnVer oldVer = null; if (maxVer >0) { string mypk = frmID + "_" + pkval + "_" + (maxVer); oldVer = new EnVer(); oldVer.MyPK = mypk; if (oldVer.RetrieveFromDBSources() != 0) { oldStr = DBAccess.GetBigTextFromDB("Sys_EnVer", "MyPK", mypk, EnVerAttr.DBJSON); } if (oldStr.Equals(myen.ToJson())) return ""; } //创建实体. EnVer ev = new EnVer(); ev.RecNo = WebUser.No; ev.RecName = WebUser.Name; ev.RDT = DataType.CurrentDateTime; ev.FrmID = frmID; ev.EnPKValue = pkval; ev.MyNote = ""; ev.Name = frmName; ev.Ver = maxVer + 1; //设置版本号. ev.MyPK= ev.FrmID + "_"+ ev.EnPKValue + "_"+ ev.Ver; ev.Insert(); //执行插入. //存储数据JSON DBAccess.SaveBigTextToDB(myen.ToJson(), "Sys_EnVer", "MyPK", ev.MyPK, EnVerAttr.DBJSON); ////历史数据JSON字符串转HashTable //Hashtable ht = new Hashtable(); //if(DataType.IsNullOrEmpty(oldStr)==false) // ht = JsonConvert.DeserializeObject(oldStr); //EnVerDtl dtl = new EnVerDtl(); ////不需要存储的字段. //string sysFiels = ",AtPara,OID,WorkID,WFState,BillNo,Title,RDT,CDT,OrgNo,Starter,StarterName,BillState,FK_Dept,"; //Attrs attrs = myen.EnMap.Attrs; //foreach (Attr attr in attrs) //{ // //如果是非数据控件. // if ((int)attr.UIContralType >= 4) // continue; // if (sysFiels.Contains("," + attr.Key + ",") == true) // continue; // dtl.setMyPK(DBAccess.GenerGUID()); // dtl.RefPK = ev.MyPK; //设置关联主键. // dtl.FrmID = ev.FrmID; // dtl.EnPKValue = pkval; //设置为主键. // dtl.AttrKey = attr.Key; // dtl.AttrName = attr.Desc; // //逻辑类型. // dtl.LGType = (int)attr.MyFieldType; // (int)attr.LGType; // //设置值. // dtl.EnPKValue = myen.PKVal.ToString(); // dtl.FrmID = myen.ClassID; // //设置外键. // dtl.BindKey = attr.UIBindKey; // string val = myen.GetValByKey(attr.Key).ToString(); // if (ht[attr.Key] != null && ht[attr.Key].ToString().Equals(val) == true) // continue; // if (attr.UIContralType == UIContralType.TB || attr.UIContralType == UIContralType.CheckBok) // { // //设置值. // dtl.MyVal = val; // dtl.Insert(); // continue; // } // //枚举值 // if (attr.IsEnum) // { // AtPara apcfg = new AtPara(attr.UITag); // dtl.MyVal = "[" + val + "][" + apcfg.GetValStrByKey(val) + "]"; // dtl.Insert(); // } // //设置值. // if (attr.IsFK) // { // Entity en = attr.HisFKEns.GetEntityByKey(val); // dtl.MyVal = "[" + val + "][" + en.GetValByKey("Name") + "]"; // dtl.Insert(); // } //} return "版本创建成功."; } #endregion 方法. #region 属性 public string DBJSON { get { return this.GetValStrByKey(EnVerAttr.DBJSON); } set { this.SetValByKey(EnVerAttr.DBJSON, value); } } /// /// 实体类名称 /// public string Name { get { return this.GetValStrByKey(EnVerAttr.Name); } set { this.SetValByKey(EnVerAttr.Name, value); } } public string EnPKValue { get { return this.GetValStrByKey(EnVerAttr.EnPKValue); } set { this.SetValByKey(EnVerAttr.EnPKValue, value); } } /// /// 版本号 /// public int Ver { get { return this.GetValIntByKey(EnVerAttr.EnVer); } set { this.SetValByKey(EnVerAttr.EnVer, value); } } /// /// 修改人 /// public string RecNo { get { return this.GetValStrByKey(EnVerAttr.RecNo); } set { this.SetValByKey(EnVerAttr.RecNo, value); } } public string RecName { get { return this.GetValStrByKey(EnVerAttr.RecName); } set { this.SetValByKey(EnVerAttr.RecName, value); } } public string MyNote { get { return this.GetValStrByKey(EnVerAttr.MyNote); } set { this.SetValByKey(EnVerAttr.MyNote, value); } } public string FrmID { get { return this.GetValStrByKey(EnVerAttr.FrmID); } set { this.SetValByKey(EnVerAttr.FrmID, value); } } /// /// 修改日期 /// public string RDT { get { return this.GetValStrByKey(EnVerAttr.RDT); } set { this.SetValByKey(EnVerAttr.RDT, value); } } /// /// 主键值 /// public string PKValue { get { return this.GetValStrByKey(EnVerAttr.PKValue); } set { this.SetValByKey(EnVerAttr.PKValue, value); } } #endregion #region 构造函数 /// /// 实体版本号 /// public EnVer() { } public EnVer(string mypk) { this.setMyPK(mypk); this.Retrieve(); } #endregion #region 重写方法 public override UAC HisUAC { get { UAC uac = new UAC(); uac.OpenForSysAdmin(); uac.IsDelete = false; uac.IsInsert = false; uac.IsUpdate = false; return uac; } } /// /// Map /// public override Map EnMap { get { if (this._enMap != null) return this._enMap; Map map = new Map("Sys_EnVer", "实体版本号"); map.EnDBUrl = new DBUrl(DBUrlType.AppCenterDSN); //连接到的那个数据库上. (默认的是: AppCenterDSN ) map.AddMyPK(); map.AddTBString(EnVerAttr.FrmID, null, "实体类", true, true, 1, 50, 20, true); map.AddTBString(EnVerAttr.Name, null, "实体名", true, true, 0, 100, 30, true); map.AddTBString(EnVerAttr.EnPKValue, null, "主键值", true, true, 0, 40, 100); map.AddTBInt(EnVerAttr.EnVer, 0, "版本号", true, true); map.AddTBString(EnVerAttr.RecNo, null, "修改人账号", true, true, 0, 100, 30); map.AddTBString(EnVerAttr.RecName, null, "修改人名称", true, true, 0, 100, 30); //需要存储二进制文件. //map.AddTBString(EnVerAttr.DBJSON, null, "数据JSON", true, true, 0, 4000, 30); map.AddTBString(EnVerAttr.MyNote, null, "备注", true, true, 0, 100, 30); map.AddTBDateTime(EnVerAttr.RDT, null, "创建日期", true, true); RefMethod rm = new RefMethod(); rm.Title = "快照"; rm.ClassMethodName = this.ToString() + ".ShowVer"; rm.RefMethodType = RefMethodType.RightFrameOpen; map.AddRefMethod(rm); //数据. map.AddDtl(new EnVerDtls(), EnVerAttr.RefPK, null, DtlEditerModel.DtlSearch, null); map.DTSearchKey = "RDT"; map.DTSearchWay = DTSearchWay.ByDateTime; map.DTSearchLabel = "日期"; this._enMap = map; return this._enMap; } } #endregion public string ShowVer() { return "/WF/CCBill/OptComponents/DataVer.htm?FrmID=" + this.FrmID + "&WorkID=" + this.EnPKValue; } protected override bool beforeInsert() { return base.beforeInsert(); } protected override void afterDelete() { //删除数据. EnVerDtls dtls = new EnVerDtls(); dtls.Delete(EnVerDtlAttr.RefPK, this.MyPK); base.afterDelete(); } } /// ///实体版本号s /// public class EnVers : EntitiesMyPK { /// /// 得到一个新实体 /// public override Entity GetNewEntity { get { return new EnVer(); } } /// /// 实体版本号集合 /// public EnVers() { } #region 为了适应自动翻译成java的需要,把实体转换成List. /// /// 转化成 java list,C#不能调用. /// /// List public System.Collections.Generic.IList ToJavaList() { return (System.Collections.Generic.IList)this; } /// /// 转化成list /// /// List public System.Collections.Generic.List Tolist() { System.Collections.Generic.List list = new System.Collections.Generic.List(); for (int i = 0; i < this.Count; i++) { list.Add((EnVer)this[i]); } return list; } #endregion 为了适应自动翻译成java的需要,把实体转换成List. } }