using System; using System.Data; using System.Collections; using BP.DA; using BP.Sys; using BP.En; using System.Collections.Generic; using System.IO; using BP.Sys.Base; namespace BP.Cloud.Sys { /// /// 映射基础 /// public class MapDataAttr : EntityNoNameAttr { /// /// 表单事件实体类 /// public const string FormEventEntity = "FormEventEntity"; /// /// 存储表 /// public const string PTable = "PTable"; /// /// 表存储格式0=自定义表,1=指定表,可以修改字段2=执行表不可以修改字段. /// public const string PTableModel = "PTableModel"; public const string Dtls = "Dtls"; public const string EnPK = "EnPK"; public const string FrmW = "FrmW"; /// /// 表格列(对傻瓜表单有效) /// public const string TableCol = "TableCol"; /// /// 来源 /// public const string FrmFrom = "FrmFrom"; /// /// 设计者 /// public const string Designer = "Designer"; /// /// 设计者单位 /// public const string DesignerUnit = "DesignerUnit"; /// /// 设计者联系方式 /// public const string DesignerContact = "DesignerContact"; /// /// 设计器 /// public const string DesignerTool11 = "DesignerTool"; /// /// 表单类别 /// public const string FK_FrmSort = "FK_FrmSort"; /// /// 表单树类别 /// public const string FK_FormTree = "FK_FormTree"; /// /// 表单类型 /// public const string FrmType = "FrmType"; /// /// 业务类型 /// public const string EntityType = "EntityType"; /// /// 表单展示方式 /// public const string FrmShowType = "FrmShowType"; /// /// 单据模板 /// public const string FrmModel = "FrmModel"; /// /// Url(对于嵌入式表单有效) /// public const string Url = "Url"; /// /// Tag /// public const string Tag = "Tag"; /// /// 备注 /// public const string Note = "Note"; /// /// Idx /// public const string Idx = "Idx"; /// /// GUID /// public const string GUID = "GUID"; /// /// 版本号 /// public const string Ver = "Ver"; /// /// 数据源 /// public const string DBSrc = "DBSrc"; /// /// 应用类型 /// public const string AppType = "AppType"; /// /// 表单body属性. /// public const string BodyAttr = "BodyAttr"; /// /// 流程控件 /// public const string FlowCtrls = "FlowCtrls"; /// ///组织结构. /// public const string OrgNo = "OrgNo"; /// /// 表单ID /// public const string FrmID = "FrmID"; #region 报表属性(参数的方式存储). /// /// 是否关键字查询 /// public const string IsSearchKey = "IsSearchKey"; /// /// 时间段查询方式 /// public const string DTSearchWay = "DTSearchWay"; /// /// 时间字段 /// public const string DTSearchKey = "DTSearchKey"; /// /// 查询外键枚举字段 /// public const string RptSearchKeys = "RptSearchKeys"; #endregion 报表属性(参数的方式存储). #region 其他计算属性,参数存储. /// /// 最左边的值 /// public const string MaxLeft = "MaxLeft"; /// /// 最右边的值 /// public const string MaxRight = "MaxRight"; /// /// 最头部的值 /// public const string MaxTop = "MaxTop"; /// /// 最底部的值 /// public const string MaxEnd = "MaxEnd"; #endregion 其他计算属性,参数存储. #region weboffice属性。 /// /// 是否启用锁定行 /// public const string IsRowLock = "IsRowLock"; /// /// 是否启用weboffice /// public const string IsWoEnableWF = "IsWoEnableWF"; /// /// 是否启用保存 /// public const string IsWoEnableSave = "IsWoEnableSave"; /// /// 是否只读 /// public const string IsWoEnableReadonly = "IsWoEnableReadonly"; /// /// 是否启用修订 /// public const string IsWoEnableRevise = "IsWoEnableRevise"; /// /// 是否查看用户留痕 /// public const string IsWoEnableViewKeepMark = "IsWoEnableViewKeepMark"; /// /// 是否打印 /// public const string IsWoEnablePrint = "IsWoEnablePrint"; /// /// 是否启用签章 /// public const string IsWoEnableSeal = "IsWoEnableSeal"; /// /// 是否启用套红 /// public const string IsWoEnableOver = "IsWoEnableOver"; /// /// 是否启用公文模板 /// public const string IsWoEnableTemplete = "IsWoEnableTemplete"; /// /// 是否自动写入审核信息 /// public const string IsWoEnableCheck = "IsWoEnableCheck"; /// /// 是否插入流程 /// public const string IsWoEnableInsertFlow = "IsWoEnableInsertFlow"; /// /// 是否插入风险点 /// public const string IsWoEnableInsertFengXian = "IsWoEnableInsertFengXian"; /// /// 是否启用留痕模式 /// public const string IsWoEnableMarks = "IsWoEnableMarks"; /// /// 是否启用下载 /// public const string IsWoEnableDown = "IsWoEnableDown"; #endregion weboffice属性。 #region 参数属性. public const string EnsName = "EnsName"; #endregion 参数属性. } /// /// 映射基础 /// public class MapData : EntityNoName { #region entity 相关属性(参数属性) /// /// 属性ens /// public string EnsName { get { return this.GetValStringByKey(MapDataAttr.EnsName); } set { this.SetPara(MapDataAttr.EnsName, value); } } #endregion entity 相关操作. #region 自动计算属性. public float MaxLeft { get { return this.GetParaFloat(MapDataAttr.MaxLeft); } set { this.SetPara(MapDataAttr.MaxLeft, value); } } public float MaxRight { get { return this.GetParaFloat(MapDataAttr.MaxRight); } set { this.SetPara(MapDataAttr.MaxRight, value); } } public float MaxTop { get { return this.GetParaFloat(MapDataAttr.MaxTop); } set { this.SetPara(MapDataAttr.MaxTop, value); } } public float MaxEnd { get { return this.GetParaFloat(MapDataAttr.MaxEnd); } set { this.SetPara(MapDataAttr.MaxEnd, value); } } #endregion 自动计算属性. #region 报表属性(参数方式存储). /// /// 是否关键字查询 /// public bool IsSearchKey { get { return this.GetParaBoolen(MapDataAttr.IsSearchKey, true); } set { this.SetPara(MapDataAttr.IsSearchKey, value); } } /// /// 时间段查询方式 /// public DTSearchWay DTSearchWay { get { return (DTSearchWay)this.GetParaInt(MapDataAttr.DTSearchWay); } set { this.SetPara(MapDataAttr.DTSearchWay, (int)value); } } /// /// 时间字段 /// public string DTSearchKey { get { return this.GetParaString(MapDataAttr.DTSearchKey); } set { this.SetPara(MapDataAttr.DTSearchKey, value); } } /// /// 查询外键枚举字段 /// public string RptSearchKeys { get { return this.GetParaString(MapDataAttr.RptSearchKeys, "*"); } set { this.SetPara(MapDataAttr.RptSearchKeys, value); } } #endregion 报表属性(参数方式存储). #region 外键属性 /// ///版本号. /// public string Ver { get { return this.GetValStringByKey(MapDataAttr.Ver); } set { this.SetValByKey(MapDataAttr.Ver, value); } } public string OrgNo { get { return this.GetValStringByKey(MapDataAttr.OrgNo); } set { this.SetValByKey(MapDataAttr.OrgNo, value); } } /// /// 顺序号 /// public int Idx { get { return this.GetValIntByKey(MapDataAttr.Idx); } set { this.SetValByKey(MapDataAttr.Idx, value); } } /// /// 框架 /// public MapFrames MapFrames { get { MapFrames obj = this.GetRefObject("MapFrames") as MapFrames; if (obj == null) { obj = new MapFrames(this.No); this.SetRefObject("MapFrames", obj); } return obj; } } /// /// 分组字段 /// public GroupFields GroupFields { get { GroupFields obj = this.GetRefObject("GroupFields") as GroupFields; if (obj == null) { obj = new GroupFields(this.No); this.SetRefObject("GroupFields", obj); } return obj; } } /// /// 逻辑扩展 /// public MapExts MapExts { get { MapExts obj = this.GetRefObject("MapExts") as MapExts; if (obj == null) { obj = new MapExts(this.No); this.SetRefObject("MapExts", obj); } return obj; } } /// /// 事件 /// public FrmEvents FrmEvents { get { FrmEvents obj = this.GetRefObject("FrmEvents") as FrmEvents; if (obj == null) { obj = new FrmEvents(this.No); this.SetRefObject("FrmEvents", obj); } return obj; } } /// /// 从表原始属性的获取 /// public MapDtls OrigMapDtls { get { MapDtls obj = this.GetRefObject("MapDtls") as MapDtls; if (obj == null) { obj = new MapDtls(); obj.Retrieve(MapDtlAttr.FK_MapData, this.No, MapDtlAttr.FK_Node, 0); this.SetRefObject("MapDtls", obj); } return obj; } } /// /// 查询给MapData下的所有从表数据 /// public MapDtls MapDtls { get { MapDtls obj = this.GetRefObject("MapDtls") as MapDtls; if (obj == null) { obj = new MapDtls(this.No); this.SetRefObject("MapDtls", obj); } return obj; } } /// /// 枚举值 /// public SysEnums SysEnums { get { SysEnums obj = this.GetRefObject("SysEnums") as SysEnums; if (obj == null) { obj = new SysEnums(); if (BP.Difference.SystemConfig.AppCenterDBType == DBType.MySQL) { string strs = ""; DataTable dt = DBAccess.RunSQLReturnTable("SELECT UIBindKey FROM Sys_MapAttr WHERE FK_MapData='" + this.No + "' AND LGType=1 "); foreach (DataRow dr in dt.Rows) { strs += "'" + dr[0].ToString() + "',"; } if (dt.Rows.Count >= 1) { strs += "'ssss'"; obj.RetrieveInOrderBy("EnumKey", strs, SysEnumAttr.IntKey); } } else { obj.RetrieveInSQL(SysEnumAttr.EnumKey, "SELECT UIBindKey FROM Sys_MapAttr WHERE FK_MapData='" + this.No + "' AND LGType=1 ", SysEnumAttr.IntKey); } this.SetRefObject("SysEnums", obj); } return obj; } } /// /// 图片 /// public FrmImgs FrmImgs { get { FrmImgs obj = this.GetRefObject("FrmImgs") as FrmImgs; if (obj == null) { obj = new FrmImgs(this.No); this.SetRefObject("FrmImgs", obj); } return obj; } } /// /// 附件 /// public FrmAttachments FrmAttachments { get { FrmAttachments obj = this.GetRefObject("FrmAttachments") as FrmAttachments; if (obj == null) { obj = new FrmAttachments(this.No); this.SetRefObject("FrmAttachments", obj); } return obj; } } /// /// 图片附件 /// public FrmImgAths FrmImgAths { get { FrmImgAths obj = this.GetRefObject("FrmImgAths") as FrmImgAths; if (obj == null) { obj = new FrmImgAths(this.No); this.SetRefObject("FrmImgAths", obj); } return obj; } } // /// 图片附件记录 /// public FrmImgAthDBs FrmImgAthDB { get { FrmImgAthDBs obj = this.GetRefObject("FrmImgAthDBs") as FrmImgAthDBs; if (obj == null) { obj = new FrmImgAthDBs(this.No); this.SetRefObject("FrmImgAthDBs", obj); } return obj; } } /// /// 单选按钮 /// public FrmRBs FrmRBs { get { FrmRBs obj = this.GetRefObject("FrmRBs") as FrmRBs; if (obj == null) { obj = new FrmRBs(this.No); this.SetRefObject("FrmRBs", obj); } return obj; } } /// /// 属性 /// public MapAttrs MapAttrs { get { MapAttrs obj = this.GetRefObject("MapAttrs") as MapAttrs; if (obj == null) { obj = new MapAttrs(this.No); this.SetRefObject("MapAttrs", obj); } return obj; } } #endregion public void CleanObject() { this.Row.SetValByKey("FrmEles", null); this.Row.SetValByKey("MapFrames", null); this.Row.SetValByKey("GroupFields", null); this.Row.SetValByKey("MapExts", null); this.Row.SetValByKey("FrmEvents", null); this.Row.SetValByKey("MapDtls", null); this.Row.SetValByKey("SysEnums", null); this.Row.SetValByKey("FrmRpts", null); this.Row.SetValByKey("FrmLinks", null); this.Row.SetValByKey("FrmBtns", null); this.Row.SetValByKey("FrmEles", null); // this.Row.SetValByKey("FrmLines", null); // this.Row.SetValByKey("FrmLabs", null); this.Row.SetValByKey("FrmAttachments", null); this.Row.SetValByKey("FrmImgAthDBs", null); this.Row.SetValByKey("FrmRBs", null); this.Row.SetValByKey("MapAttrs", null); return; } /// /// 清空缓存 /// public void ClearCash() { BP.DA.CashFrmTemplate.Remove(this.No); BP.DA.Cash.SetMap(this.No, null); CleanObject(); BP.DA.Cash.SQL_Cash.Remove(this.No); } #region 基本属性. /// /// 事件实体 /// public string FormEventEntity { get { return this.GetValStringByKey(MapDataAttr.FormEventEntity); } set { this.SetValByKey(MapDataAttr.FormEventEntity, value); } } public static Boolean IsEditDtlModel { get { string s = BP.Web.WebUser.GetSessionByKey("IsEditDtlModel", "0"); if (s == "0") return false; else return true; } set { BP.Web.WebUser.SetSessionByKey("IsEditDtlModel", "1"); } } #endregion 基本属性. #region 属性 /// /// 物理表 /// public string PTable { get { string s = this.GetValStrByKey(MapDataAttr.PTable); if (DataType.IsNullOrEmpty(s)==true) return this.No; return s; } set { this.SetValByKey(MapDataAttr.PTable, value); } } /// /// URL /// public string Url { get { return this.GetValStrByKey(MapDataAttr.Url); } set { this.SetValByKey(MapDataAttr.Url, value); } } public int HisFrmTypeInt { get { return this.GetValIntByKey(MapDataAttr.FrmType); } set { this.SetValByKey(MapDataAttr.FrmType, value); } } public FrmType HisFrmType { get { return (FrmType)this.GetValIntByKey(MapDataAttr.FrmType); } set { this.SetValByKey(MapDataAttr.FrmType, (int)value); } } public int HisEntityType { get { return this.GetValIntByKey(MapDataAttr.EntityType); } set { this.SetValByKey(MapDataAttr.EntityType, value); } } /// /// 表单类型名称 /// public string HisFrmTypeText { get { return this.HisFrmType.ToString(); // SysEnum se = new SysEnum("FrmType", this.HisFrmTypeInt); // return se.Lab; } } /// /// 备注 /// public string Note { get { return this.GetValStrByKey(MapDataAttr.Note); } set { this.SetValByKey(MapDataAttr.Note, value); } } /// /// 是否有CA. /// public bool IsHaveCA { get { return this.GetParaBoolen("IsHaveCA", false); } set { this.SetPara("IsHaveCA", value); } } /// /// 类别,可以为空. /// public string FK_FrmSort { get { return this.GetValStrByKey(MapDataAttr.FK_FrmSort); } set { this.SetValByKey(MapDataAttr.FK_FrmSort, value); } } /// /// 数据源 /// public string DBSrc { get { return this.GetValStrByKey(MapDataAttr.DBSrc); } set { this.SetValByKey(MapDataAttr.DBSrc, value); } } /// /// 类别,可以为空. /// public string FK_FormTree { get { return this.GetValStrByKey(MapDataAttr.FK_FormTree); } set { this.SetValByKey(MapDataAttr.FK_FormTree, value); } } /// /// 类别名称 /// public string FK_FormTreeText { get { return DBAccess.RunSQLReturnStringIsNull("SELECT Name FROM Sys_FormTree WHERE No='" + this.FK_FormTree + "'", "目录错误"); } } /// /// 从表集合. /// public string Dtls { get { return this.GetValStrByKey(MapDataAttr.Dtls); } set { this.SetValByKey(MapDataAttr.Dtls, value); } } /// /// 主键 /// public string EnPK { get { string s = this.GetValStrByKey(MapDataAttr.EnPK); if (DataType.IsNullOrEmpty(s)) return "OID"; return s; } set { this.SetValByKey(MapDataAttr.EnPK, value); } } private Entities _HisEns = null; public Entities HisEns { get { if (_HisEns == null) { _HisEns = BP.En.ClassFactory.GetEns(this.No); } return _HisEns; } } public Entity HisEn { get { return this.HisEns.GetNewEntity; } } public float FrmW { get { return this.GetValFloatByKey(MapDataAttr.FrmW); } set { this.SetValByKey(MapDataAttr.FrmW, value); } } /// /// 应用类型. 0独立表单.1节点表单 /// public string AppType { get { return this.GetValStrByKey(MapDataAttr.AppType); } set { this.SetValByKey(MapDataAttr.AppType, value); } } /// /// 表单body属性. /// public string BodyAttr { get { string str = this.GetValStrByKey(MapDataAttr.BodyAttr); str = str.Replace("~", "'"); return str; } set { this.SetValByKey(MapDataAttr.BodyAttr, value); } } /// /// 流程控件s. /// public string FlowCtrls { get { return this.GetValStrByKey(MapDataAttr.FlowCtrls); } set { this.SetValByKey(MapDataAttr.FlowCtrls, value); } } public int TableCol { get { return this.GetValIntByKey(MapDataAttr.TableCol); } set { this.SetValByKey(MapDataAttr.TableCol, value); } } #endregion #region 构造方法 public Map GenerHisMap() { MapAttrs mapAttrs = this.MapAttrs; if (mapAttrs.Count == 0) { this.RepairMap(); mapAttrs = this.MapAttrs; } Map map = new Map(this.PTable, this.Name); // map.EnDBUrl = new DBUrl(this.HisDBUrl); Attrs attrs = new Attrs(); foreach (MapAttr mapAttr in mapAttrs) map.AddAttr(mapAttr.HisAttr); // 产生从表。 MapDtls dtls = this.MapDtls; // new MapDtls(this.No); foreach (MapDtl dtl in dtls) { GEDtls dtls1 = new GEDtls(dtl.No); map.AddDtl(dtls1, "RefPK"); } #region 查询条件. map.IsShowSearchKey = this.IsSearchKey; //是否启用关键字查询. // 按日期查询. map.DTSearchWay = this.DTSearchWay; //日期查询方式. map.DTSearchKey = this.DTSearchKey; //日期字段. //加入外键查询字段. string[] keys = this.RptSearchKeys.Split('*'); foreach (string key in keys) { if (DataType.IsNullOrEmpty(key)) continue; if (map.Attrs.Contains(key) == false) continue; map.AddSearchAttr(key); } #endregion 查询条件. return map; } private GEEntity _HisEn = null; public GEEntity HisGEEn { get { if (this._HisEn == null) _HisEn = new GEEntity(this.No); return _HisEn; } } /// /// 生成实体 /// /// /// public GEEntity GenerGEEntityByDataSet(DataSet ds) { // New 它的实例. GEEntity en = this.HisGEEn; // 它的table. DataTable dt = ds.Tables[this.No]; //装载数据. en.Row.LoadDataTable(dt, dt.Rows[0]); // dtls. MapDtls dtls = this.MapDtls; foreach (MapDtl item in dtls) { DataTable dtDtls = ds.Tables[item.No]; GEDtls dtlsEn = new GEDtls(item.No); foreach (DataRow dr in dtDtls.Rows) { // 产生它的Entity data. GEDtl dtl = (GEDtl)dtlsEn.GetNewEntity; dtl.Row.LoadDataTable(dtDtls, dr); //加入这个集合. dtlsEn.AddEntity(dtl); } //加入到他的集合里. en.Dtls.Add(dtDtls); } return en; } /// /// 生成map. /// /// /// public static Map GenerHisMap(string no) { if (BP.Difference.SystemConfig.IsDebug) { MapData md = new MapData(); md.No = no; md.Retrieve(); return md.GenerHisMap(); } else { Map map = BP.DA.Cash.GetMap(no); if (map == null) { MapData md = new MapData(); md.No = no; md.Retrieve(); map = md.GenerHisMap(); BP.DA.Cash.SetMap(no, map); } return map; } } /// /// 映射基础 /// public MapData() { } /// /// 映射基础 /// /// 映射编号 public MapData(string no) : base(no) { } /// /// EnMap /// public override Map EnMap { get { if (this._enMap != null) return this._enMap; Map map = new Map("Sys_MapData", "表单注册表"); #region 基础信息. map.AddTBStringPK(MapDataAttr.No, null, "编号", true, false, 1, 200, 100); map.AddTBString(MapDataAttr.Name, null, "描述", true, false, 0, 500, 20); map.AddTBString(MapDataAttr.FormEventEntity, null, "事件实体", true, true, 0, 100, 20, true); map.AddTBString(MapDataAttr.EnPK, null, "实体主键", true, false, 0, 200, 20); map.AddTBString(MapDataAttr.PTable, null, "物理表", true, false, 0, 500, 20); map.AddTBString(MapDataAttr.FrmID, null, "短名称", true, false, 0, 500, 20); //@周朋 表存储格式0=自定义表,1=指定表,可以修改字段2=执行表不可以修改字段. map.AddTBInt(MapDataAttr.PTableModel, 0, "表存储模式", true, true); map.AddTBString(MapDataAttr.Url, null, "连接(对嵌入式表单有效)", true, false, 0, 500, 20); map.AddTBString(MapDataAttr.Dtls, null, "从表", true, false, 0, 500, 20); //格式为: @1=方案名称1@2=方案名称2@3=方案名称3 //map.AddTBString(MapDataAttr.Slns, null, "表单控制解决方案", true, false, 0, 500, 20); map.AddTBInt(MapDataAttr.FrmW, 900, "FrmW", true, true); map.AddTBInt(MapDataAttr.TableCol, 0, "傻瓜表单显示的列", true, true); //Tag map.AddTBString(MapDataAttr.Tag, null, "Tag", true, false, 0, 500, 20); // 可以为空这个字段。 map.AddTBString(MapDataAttr.FK_FrmSort, null, "表单类别", true, false, 0, 500, 20); map.AddTBString(MapDataAttr.FK_FormTree, null, "表单树类别", true, false, 0, 500, 20); // enumFrmType @自由表单,@傻瓜表单,@嵌入式表单. map.AddDDLSysEnum(MapDataAttr.FrmType, (int)BP.Sys.FrmType.FoolForm, "表单类型", true, false, MapDataAttr.FrmType); map.AddTBInt(MapDataAttr.FrmShowType, 0, "表单展示方式", true, true); map.AddDDLSysEnum(MapDataAttr.EntityType, 0, "业务类型", true, false, MapDataAttr.EntityType, "@0=独立表单@1=单据@2=编号名称实体@3=树结构实体"); map.SetHelperAlert(MapDataAttr.EntityType, "该实体的类型,@0=单据@1=编号名称实体@2=树结构实体."); // 应用类型. 0独立表单.1节点表单 map.AddTBInt(MapDataAttr.AppType, 0, "应用类型", true, false); map.AddTBString(MapDataAttr.DBSrc, "local", "数据源", true, false, 0, 100, 20); map.AddTBString(MapDataAttr.BodyAttr, null, "表单Body属性", true, false, 0, 100, 20); #endregion 基础信息. #region 设计者信息. map.AddTBString(MapDataAttr.Note, null, "备注", true, false, 0, 500, 20); map.AddTBString(MapDataAttr.Designer, null, "设计者", true, false, 0, 500, 20); map.AddTBString(MapDataAttr.DesignerUnit, null, "单位", true, false, 0, 500, 20); map.AddTBString(MapDataAttr.DesignerContact, null, "联系方式", true, false, 0, 500, 20); map.AddTBInt(MapDataAttr.Idx, 100, "顺序号", true, true); map.AddTBString(MapDataAttr.GUID, null, "GUID", true, false, 0, 128, 20); map.AddTBString(MapDataAttr.Ver, null, "版本号", true, false, 0, 30, 20); //流程控件. map.AddTBString(MapDataAttr.FlowCtrls, null, "流程控件", true, true, 0, 200, 20); //增加参数字段. map.AddTBAtParas(4000); #endregion map.AddTBString(MapDataAttr.OrgNo, null, "OrgNo", true, false, 0, 50, 20); this._enMap = map; return this._enMap; } } /// /// 上移 /// public void DoUp() { this.DoOrderUp(MapDataAttr.FK_FormTree, this.FK_FormTree, MapDataAttr.Idx); } /// /// 下移 /// public void DoOrderDown() { this.DoOrderDown(MapDataAttr.FK_FormTree, this.FK_FormTree, MapDataAttr.Idx); } /// /// 获得PTableModel=2模式下的表单,没有被使用的字段集合. /// /// /// public static DataTable GetFieldsOfPTableMode2(string frmID) { string pTable = ""; MapDtl dtl = new MapDtl(); dtl.No = frmID; if (dtl.RetrieveFromDBSources() == 1) { pTable = dtl.PTable; } else { MapData md = new MapData(); md.No = frmID; md.RetrieveFromDBSources(); pTable = md.PTable; } //获得原始数据. DataTable dt = BP.DA.DBAccess.GetTableSchema(pTable, false); //创建样本表结构. DataTable mydt = BP.DA.DBAccess.GetTableSchema(pTable, false); mydt.Rows.Clear(); //获得现有的列.. MapAttrs attrs = new MapAttrs(frmID); string flowFiels = ",GUID,PRI,PrjNo,PrjName,PEmp,AtPara,FlowNote,WFSta,PNodeID,FK_FlowSort,FK_Flow,OID,FID,Title,WFState,CDT,FlowStarter,FlowStartRDT,FK_Dept,FK_NY,FlowDaySpan,FlowEmps,FlowEnder,FlowEnderRDT,FlowEndNode,MyNum,PWorkID,PFlowNo,BillNo,ProjNo,"; //排除已经存在的列. 把所有的列都输出给前台,让前台根据类型分拣. foreach (DataRow dr in dt.Rows) { string key = dr["FName"].ToString(); if (attrs.Contains(MapAttrAttr.KeyOfEn, key) == true) continue; if (flowFiels.Contains("," + key + ",") == true) continue; DataRow mydr = mydt.NewRow(); mydr["FName"] = dr["FName"]; mydr["FType"] = dr["FType"]; mydr["FLen"] = dr["FLen"]; mydr["FDesc"] = dr["FDesc"]; mydt.Rows.Add(mydr); } return mydt; } #endregion #region 常用方法. private FormEventBase _HisFEB = null; public FormEventBase HisFEB { get { if (this.FormEventEntity == "") return null; if (_HisFEB == null) _HisFEB = BP.Sys.Base.Glo.GetFormEventBaseByEnName(this.No); return _HisFEB; } } /// /// 导入数据 /// /// /// /// public static MapData ImpMapData(DataSet ds) { string errMsg = ""; if (ds.Tables.Contains("WF_Flow") == true) errMsg += "@此模板文件为流程模板。"; if (ds.Tables.Contains("Sys_MapAttr") == false) errMsg += "@缺少表:Sys_MapAttr"; if (ds.Tables.Contains("Sys_MapData") == false) errMsg += "@缺少表:Sys_MapData"; if (errMsg != "") throw new Exception(errMsg); DataTable dt = ds.Tables["Sys_MapData"]; string fk_mapData = dt.Rows[0]["No"].ToString(); MapData md = new MapData(); md.No = fk_mapData; if (md.IsExits) throw new Exception("@已经存在(" + fk_mapData + ")的表单ID,所以您不能导入。"); //导入. return ImpMapData(fk_mapData, ds); } /// /// 设置表单为只读属性 /// /// 表单ID public static void SetFrmIsReadonly(string fk_mapdata) { //把主表字段设置为只读. MapAttrs attrs = new MapAttrs(fk_mapdata); foreach (MapAttr attr in attrs) { if (attr.DefValReal.Contains("@")) { attr.setUIIsEnable(false); attr.setDefValReal(""); //清空默认值. attr.SetValByKey("ExtDefVal", ""); //设置默认值. attr.Update(); continue; } if (attr.UIIsEnable == true) { attr.setUIIsEnable(false); attr.Update(); continue; } } //把从表字段设置为只读. MapDtls dtls = new MapDtls(fk_mapdata); foreach (MapDtl dtl in dtls) { dtl.IsInsert = false; dtl.IsUpdate = false; dtl.IsDelete = false; dtl.Update(); attrs = new MapAttrs(dtl.No); foreach (MapAttr attr in attrs) { if (attr.DefValReal.Contains("@")) { attr.setUIIsEnable(false); attr.SetValByKey("ExtDefVal", ""); //设置默认值. attr.Update(); } if (attr.UIIsEnable == true) { attr.setUIIsEnable(false); attr.Update(); continue; } } } //把附件设置为只读. FrmAttachments aths = new FrmAttachments(fk_mapdata); foreach (FrmAttachment item in aths) { item.IsUpload = false; item.HisDeleteWay = AthDeleteWay.DelSelf; //如果是从开始节点表单导入的,就默认为, 按照主键PK的方式显示. if (fk_mapdata.IndexOf("ND") == 0) { item.HisCtrlWay = AthCtrlWay.PK; item.DataRefNoOfObj = "AttachM1"; } item.Update(); } } /// /// 导入表单 /// /// 表单ID /// 表单数据 /// 是否设置只读? /// public static MapData ImpMapData(string fk_mapdata, DataSet ds) { #region 检查导入的数据是否完整. string errMsg = ""; //if (ds.Tables[0].TableName != "Sys_MapData") // errMsg += "@非表单模板。"; if (ds.Tables.Contains("WF_Flow") == true) errMsg += "@此模板文件为流程模板。"; if (ds.Tables.Contains("Sys_MapAttr") == false) errMsg += "@缺少表:Sys_MapAttr"; if (ds.Tables.Contains("Sys_MapData") == false) errMsg += "@缺少表:Sys_MapData"; DataTable dtCheck = ds.Tables["Sys_MapAttr"]; bool isHave = false; foreach (DataRow dr in dtCheck.Rows) { if (dr["KeyOfEn"].ToString() == "OID") { isHave = true; break; } } if (isHave == false) errMsg += "@表单模版缺少列:OID"; if (errMsg != "") throw new Exception("@以下错误不可导入,可能的原因是非表单模板文件:" + errMsg); #endregion // 定义在最后执行的sql. string endDoSQL = ""; //检查是否存在OID字段. MapData mdOld = new MapData(); mdOld.No = fk_mapdata; mdOld.RetrieveFromDBSources(); //现在表单的类型 FrmType frmType = mdOld.HisFrmType; //业务类型 int entityType = mdOld.HisEntityType; mdOld.Delete(); // 求出dataset的map. string oldMapID = ""; DataTable dtMap = ds.Tables["Sys_MapData"]; if (dtMap.Rows.Count == 1) { oldMapID = dtMap.Rows[0]["No"].ToString(); } else { // 求旧的表单ID. foreach (DataRow dr in dtMap.Rows) oldMapID = dr["No"].ToString(); if (DataType.IsNullOrEmpty(oldMapID) == true) oldMapID = dtMap.Rows[0]["No"].ToString(); } string timeKey = DateTime.Now.ToString("MMddHHmmss"); #region 表单元素 foreach (DataTable dt in ds.Tables) { int idx = 0; switch (dt.TableName) { case "Sys_MapDtl": foreach (DataRow dr in dt.Rows) { MapDtl dtl = new MapDtl(); foreach (DataColumn dc in dt.Columns) { object val = dr[dc.ColumnName] as object; if (val == null) continue; dtl.SetValByKey(dc.ColumnName, val.ToString().Replace(oldMapID, fk_mapdata)); } dtl.Insert(); } break; case "Sys_MapData": foreach (DataRow dr in dt.Rows) { MapData md = new MapData(); foreach (DataColumn dc in dt.Columns) { object val = dr[dc.ColumnName] as object; if (val == null) continue; md.SetValByKey(dc.ColumnName, val.ToString().Replace(oldMapID, fk_mapdata)); } //如果物理表为空,则使用编号为物理数据表 if (DataType.IsNullOrEmpty(md.PTable.Trim()) == true) md.PTable = md.No; //表单类别编号不为空,则用原表单类别编号 if (DataType.IsNullOrEmpty(mdOld.FK_FormTree) == false) md.FK_FormTree = mdOld.FK_FormTree; //表单类别编号不为空,则用原表单类别编号 if (DataType.IsNullOrEmpty(mdOld.FK_FrmSort) == false) md.FK_FrmSort = mdOld.FK_FrmSort; if (DataType.IsNullOrEmpty(mdOld.PTable) == false) md.PTable = mdOld.PTable; if (DataType.IsNullOrEmpty(mdOld.Name) == false) md.Name = mdOld.Name; md.HisFrmType = mdOld.HisFrmType; if (frmType == FrmType.Develop) md.HisFrmType = FrmType.Develop; if (entityType != md.HisEntityType) md.HisEntityType = entityType; //表单应用类型保持不变 md.AppType = mdOld.AppType; md.DirectInsert(); Cash2019.UpdateRow(md.ToString(), md.No.ToString(), md.Row); //如果是开发者表单,赋值HtmlTemplateFile数据库的值并保存到DataUser下 if (frmType == FrmType.Develop) { string htmlCode = BP.DA.DBAccess.GetBigTextFromDB("Sys_MapData", "No", oldMapID, "HtmlTemplateFile"); if (DataType.IsNullOrEmpty(htmlCode) == false) { //保存到数据库,存储html文件 //保存到DataUser/CCForm/HtmlTemplateFile/文件夹下 string filePath = BP.Difference.SystemConfig.PathOfDataUser + "CCForm/HtmlTemplateFile/"; if (Directory.Exists(filePath) == false) Directory.CreateDirectory(filePath); filePath = filePath + md.No + ".htm"; //写入到html 中 BP.DA.DataType.WriteFile(filePath, htmlCode); // HtmlTemplateFile 保存到数据库中 BP.DA.DBAccess.SaveBigTextToDB(htmlCode, "Sys_MapData", "No", md.No, "HtmlTemplateFile"); } else { //如果htmlCode是空的需要删除当前节点的html文件 string filePath = BP.Difference.SystemConfig.PathOfDataUser + "CCForm/HtmlTemplateFile/" + md.No + ".htm"; if (File.Exists(filePath) == true) File.Delete(filePath); BP.DA.DBAccess.SaveBigTextToDB("", "Sys_MapData", "No", md.No, "HtmlTemplateFile"); } } } break; case "Sys_FrmBtn": foreach (DataRow dr in dt.Rows) { idx++; FrmBtn en = new FrmBtn(); foreach (DataColumn dc in dt.Columns) { object val = dr[dc.ColumnName] as object; if (val == null) continue; en.SetValByKey(dc.ColumnName, val.ToString().Replace(oldMapID, fk_mapdata)); } //en.setMyPK("Btn_" + idx + "_" + fk_mapdata; en.setMyPK(DBAccess.GenerGUID()); en.Insert(); } break; case "Sys_FrmImg": foreach (DataRow dr in dt.Rows) { idx++; FrmImg en = new FrmImg(); foreach (DataColumn dc in dt.Columns) { object val = dr[dc.ColumnName] as object; if (val == null) continue; en.SetValByKey(dc.ColumnName, val.ToString().Replace(oldMapID, fk_mapdata)); } if (DataType.IsNullOrEmpty(en.KeyOfEn) == true) en.setMyPK(DBAccess.GenerGUID()); en.Insert(); } break; case "Sys_FrmImgAth": foreach (DataRow dr in dt.Rows) { idx++; FrmImgAth en = new FrmImgAth(); foreach (DataColumn dc in dt.Columns) { object val = dr[dc.ColumnName] as object; if (val == null) continue; en.SetValByKey(dc.ColumnName, val.ToString().Replace(oldMapID, fk_mapdata)); } if (DataType.IsNullOrEmpty(en.CtrlID)) en.setCtrlID( "ath" + idx); en.Insert(); } break; case "Sys_FrmRB": foreach (DataRow dr in dt.Rows) { idx++; FrmRB en = new FrmRB(); foreach (DataColumn dc in dt.Columns) { object val = dr[dc.ColumnName] as object; if (val == null) continue; en.SetValByKey(dc.ColumnName, val.ToString().Replace(oldMapID, fk_mapdata)); } try { en.Save(); } catch { } } break; case "Sys_FrmAttachment": foreach (DataRow dr in dt.Rows) { idx++; FrmAttachment en = new FrmAttachment(); foreach (DataColumn dc in dt.Columns) { object val = dr[dc.ColumnName] as object; if (val == null) continue; en.SetValByKey(dc.ColumnName, val.ToString().Replace(oldMapID, fk_mapdata)); } en.setMyPK(fk_mapdata + "_" + en.GetValByKey("NoOfObj")); try { en.Insert(); } catch { } } break; case "Sys_MapFrame": foreach (DataRow dr in dt.Rows) { idx++; MapFrame en = new MapFrame(); foreach (DataColumn dc in dt.Columns) { object val = dr[dc.ColumnName] as object; if (val == null) continue; en.SetValByKey(dc.ColumnName, val.ToString().Replace(oldMapID, fk_mapdata)); } en.DirectInsert(); } break; case "Sys_MapExt": foreach (DataRow dr in dt.Rows) { idx++; MapExt en = new MapExt(); foreach (DataColumn dc in dt.Columns) { object val = dr[dc.ColumnName] as object; if (val == null) continue; if (DataType.IsNullOrEmpty(val.ToString()) == true) continue; en.SetValByKey(dc.ColumnName, val.ToString().Replace(oldMapID, fk_mapdata)); } //执行保存,并统一生成PK的规则. en.InitPK(); en.Save(); } break; case "Sys_MapAttr": foreach (DataRow dr in dt.Rows) { MapAttr en = new MapAttr(); foreach (DataColumn dc in dt.Columns) { object val = dr[dc.ColumnName] as object; if (val == null) continue; en.SetValByKey(dc.ColumnName, val.ToString().Replace(oldMapID, fk_mapdata)); } en.setMyPK(en.FK_MapData + "_" + en.KeyOfEn); //直接插入. try { en.DirectInsert(); //判断该字段是否是大文本 例如注释、说明 if (en.UIContralType == UIContralType.BigText) { //判断原文件是否存在 string file = BP.Difference.SystemConfig.PathOfDataUser + "CCForm/BigNoteHtmlText/" + oldMapID + ".htm"; //若文件存在,则复制 if (System.IO.File.Exists(file) == true) { string newFile = BP.Difference.SystemConfig.PathOfDataUser + "CCForm/BigNoteHtmlText/" + fk_mapdata + ".htm"; if (System.IO.File.Exists(newFile) == true) System.IO.File.Delete(newFile); System.IO.File.Copy(file, newFile); } } } catch { } } break; case "Sys_GroupField": foreach (DataRow dr in dt.Rows) { idx++; GroupField en = new GroupField(); foreach (DataColumn dc in dt.Columns) { object val = dr[dc.ColumnName] as object; if (val == null) continue; try { en.SetValByKey(dc.ColumnName, val.ToString().Replace(oldMapID, fk_mapdata)); } catch { throw new Exception("val:" + val.ToString() + "oldMapID:" + oldMapID + "fk_mapdata:" + fk_mapdata); } } int beforeID = en.OID; en.OID = 0; en.DirectInsert(); endDoSQL += "@UPDATE Sys_MapAttr SET GroupID=" + en.OID + " WHERE FK_MapData='" + fk_mapdata + "' AND GroupID='" + beforeID + "'"; } break; case "Sys_Enum": foreach (DataRow dr in dt.Rows) { SysEnum se = new Sys.SysEnum(); foreach (DataColumn dc in dt.Columns) { string val = dr[dc.ColumnName] as string; se.SetValByKey(dc.ColumnName, val); } se.setMyPK(se.EnumKey + "_" + se.Lang + "_" + se.IntKey); if (se.IsExits) continue; se.Insert(); } break; case "Sys_EnumMain": foreach (DataRow dr in dt.Rows) { SysEnumMain sem = new Sys.SysEnumMain(); foreach (DataColumn dc in dt.Columns) { string val = dr[dc.ColumnName] as string; if (val == null) continue; sem.SetValByKey(dc.ColumnName, val); } if (sem.IsExits) continue; sem.Insert(); } break; case "WF_Node": if (dt.Rows.Count > 0) { endDoSQL += "@UPDATE WF_Node SET FWCSta=2" + ",FWC_X=" + dt.Rows[0]["FWC_X"] + ",FWC_Y=" + dt.Rows[0]["FWC_Y"] + ",FWC_H=" + dt.Rows[0]["FWC_H"] + ",FWC_W=" + dt.Rows[0]["FWC_W"] + ",FWCType=" + dt.Rows[0]["FWCType"] + " WHERE NodeID=" + fk_mapdata.Replace("ND", ""); } break; default: break; } } #endregion //执行最后结束的sql. DBAccess.RunSQLs(endDoSQL); MapData mdNew = new MapData(fk_mapdata); mdNew.RepairMap(); if (mdNew.No.IndexOf("ND") == 0) { mdNew.FK_FrmSort = ""; mdNew.FK_FormTree = ""; } mdNew.Update(); return mdNew; } /// /// 修复map. /// public void RepairMap() { GroupFields gfs = new GroupFields(this.No); if (gfs.Count == 0) { GroupField gf = new GroupField(); gf.FrmID = this.No; gf.Lab = this.Name; gf.Insert(); string sqls = ""; sqls += "@UPDATE Sys_MapDtl SET GroupID=" + gf.OID + " WHERE FK_MapData='" + this.No + "'"; sqls += "@UPDATE Sys_MapAttr SET GroupID=" + gf.OID + " WHERE FK_MapData='" + this.No + "'"; //sqls += "@UPDATE Sys_MapFrame SET GroupID=" + gf.OID + " WHERE FK_MapData='" + this.No + "'"; sqls += "@UPDATE Sys_FrmAttachment SET GroupID=" + gf.OID + " WHERE FK_MapData='" + this.No + "'"; DBAccess.RunSQLs(sqls); } else { if (BP.Difference.SystemConfig.AppCenterDBType != DBType.Oracle) { GroupField gfFirst = gfs[0] as GroupField; string sqls = ""; // sqls += "@UPDATE Sys_MapAttr SET GroupID=" + gfFirst.OID + " WHERE MyPK IN (SELECT X.MyPK FROM (SELECT MyPK FROM Sys_MapAttr WHERE GroupID NOT IN (SELECT OID FROM Sys_GroupField WHERE FrmID='" + this.No + "') or GroupID is null) AS X) AND FK_MapData='" + this.No + "' "; sqls += "@UPDATE Sys_FrmAttachment SET GroupID=" + gfFirst.OID + " WHERE MyPK IN (SELECT X.MyPK FROM (SELECT MyPK FROM Sys_FrmAttachment WHERE GroupID NOT IN (SELECT OID FROM Sys_GroupField WHERE FrmID='" + this.No + "')) AS X) AND FK_MapData='" + this.No + "' "; #warning 这些sql 对于Oracle 有问题,但是不影响使用. try { DBAccess.RunSQLs(sqls); } catch { } } } BP.Sys.MapAttr attr = new BP.Sys.MapAttr(); if (this.EnPK == "OID") { if (attr.IsExit(MapAttrAttr.KeyOfEn, "OID", MapAttrAttr.FK_MapData, this.No) == false) { attr.setFK_MapData(this.No); attr.setKeyOfEn("OID"); attr.setName("OID"); attr.setMyDataType(BP.DA.DataType.AppInt); attr.setUIContralType(UIContralType.TB); attr.setLGType(FieldTypeS.Normal); attr.setUIVisible(false); attr.setUIIsEnable(false); attr.setDefVal("0"); attr.setEditType(EditType.Readonly); attr.Insert(); } } if (this.EnPK == "No" || this.EnPK == "MyPK") { if (attr.IsExit(MapAttrAttr.KeyOfEn, this.EnPK, MapAttrAttr.FK_MapData, this.No) == false) { attr.setFK_MapData(this.No); attr.setKeyOfEn(this.EnPK); attr.setName(this.EnPK); attr.setMyDataType(BP.DA.DataType.AppInt); attr.setUIContralType(UIContralType.TB); attr.setLGType(FieldTypeS.Normal); attr.setUIVisible(false); attr.setUIIsEnable(false); attr.setDefVal("0"); attr.setEditType(EditType.Readonly); attr.Insert(); } } if (attr.IsExit(MapAttrAttr.KeyOfEn, "RDT", MapAttrAttr.FK_MapData, this.No) == false) { attr = new BP.Sys.MapAttr(); attr.setFK_MapData(this.No); attr.setEditType(EditType.UnDel); attr.setKeyOfEn("RDT"); attr.setName("更新时间"); attr.setGroupID(0); attr.setMyDataType(DataType.AppDateTime); attr.setUIContralType(UIContralType.TB); attr.setLGType(FieldTypeS.Normal); attr.setUIVisible(false); attr.setUIIsEnable(false); attr.DefVal = "@RDT"; attr.Tag = "1"; attr.Insert(); } //检查特殊UIBindkey丢失的问题. MapAttrs attrs = new MapAttrs(); attrs.Retrieve(MapAttrAttr.FK_MapData, this.No); foreach (MapAttr item in attrs) { if (item.LGType == FieldTypeS.Enum || item.LGType == FieldTypeS.FK) { if (DataType.IsNullOrEmpty(item.UIBindKey) == true) { item.setLGType(FieldTypeS.Normal); item.UIContralType = UIContralType.TB; item.Update(); } } } } protected override bool beforeInsert() { if (this.HisFrmType == FrmType.Url || this.HisFrmType == FrmType.Entity) { } else { this.PTable = BP.Pub.PubClass.DealToFieldOrTableNames(this.PTable); } return base.beforeInsert(); } protected override bool beforeUpdateInsertAction() { if (this.HisFrmType == FrmType.Url || this.HisFrmType == FrmType.Entity) return base.beforeUpdateInsertAction(); this.PTable = BP.Pub.PubClass.DealToFieldOrTableNames(this.PTable); MapAttrs.Retrieve(MapAttrAttr.FK_MapData, PTable); //更新版本号. this.Ver = DataType.CurrentDateTimess; //设置OrgNo. 如果是管理员,就设置他所在的部门编号。 this.OrgNo = BP.Web.WebUser.FK_Dept; #region 检查是否有ca认证设置. bool isHaveCA = false; foreach (MapAttr item in this.MapAttrs) { if (item.SignType == SignType.CA) { isHaveCA = true; break; } } this.IsHaveCA = isHaveCA; if (IsHaveCA == true) { //就增加隐藏字段. //MapAttr attr = new BP.Sys.MapAttr(); // attr.setMyPK(this.No + "_SealData"; // attr.setFK_MapData(this.No); // attr.setEditType(EditType.UnDel); //attr.setKeyOfEn("SealData"; // attr.setName("SealData"; // attr.MyDataType = BP.DA.DataType.AppString; // attr.setUIContralType(UIContralType.TB); // attr.setLGType(FieldTypeS.Normal); // attr.setUIVisible(false); // attr.setUIIsEnable(false); // attr.setMaxLen(4000; // attr.setMinLen(0); // attr.Save(); } #endregion 检查是否有ca认证设置. //清除缓存. this.ClearCash(); return base.beforeUpdateInsertAction(); } /// /// 更新版本 /// public void UpdateVer() { string sql = "UPDATE Sys_MapData SET VER='" + BP.DA.DataType.CurrentDateTimess + "' WHERE No='" + this.No + "'"; BP.DA.DBAccess.RunSQL(sql); } protected override bool beforeDelete() { string sql = ""; sql = "SELECT * FROM Sys_MapDtl WHERE FK_MapData ='" + this.No + "'"; DataTable Sys_MapDtl = DBAccess.RunSQLReturnTable(sql); string whereFK_MapData = "FK_MapData= '" + this.No + "' "; string whereEnsName = "FrmID= '" + this.No + "' "; string whereNo = "No='" + this.No + "' "; foreach (DataRow dr in Sys_MapDtl.Rows) { // ids += ",'" + dr["No"] + "'"; whereFK_MapData += " OR FK_MapData='" + dr["No"] + "' "; whereEnsName += " OR FrmID='" + dr["No"] + "' "; whereNo += " OR No='" + dr["No"] + "' "; } // string where = " FK_MapData IN (" + ids + ")"; #region 删除相关的数据。 sql = "DELETE FROM Sys_MapDtl WHERE FK_MapData='" + this.No + "'"; // sql += "@DELETE FROM Sys_FrmLine WHERE " + whereFK_MapData; sql += "@DELETE FROM Sys_FrmEle WHERE " + whereFK_MapData; sql += "@DELETE FROM Sys_FrmEvent WHERE " + whereFK_MapData; sql += "@DELETE FROM Sys_FrmBtn WHERE " + whereFK_MapData; // sql += "@DELETE FROM Sys_FrmLab WHERE " + whereFK_MapData; sql += "@DELETE FROM Sys_FrmLink WHERE " + whereFK_MapData; sql += "@DELETE FROM Sys_FrmImg WHERE " + whereFK_MapData; sql += "@DELETE FROM Sys_FrmImgAth WHERE " + whereFK_MapData; sql += "@DELETE FROM Sys_FrmRB WHERE " + whereFK_MapData; sql += "@DELETE FROM Sys_FrmAttachment WHERE " + whereFK_MapData; sql += "@DELETE FROM Sys_MapFrame WHERE " + whereFK_MapData; if (this.No.Contains("BP.") == false) sql += "@DELETE FROM Sys_MapExt WHERE " + whereFK_MapData; sql += "@DELETE FROM Sys_MapAttr WHERE " + whereFK_MapData; sql += "@DELETE FROM Sys_GroupField WHERE " + whereEnsName; sql += "@DELETE FROM Sys_MapData WHERE " + whereNo; // sql += "@DELETE FROM Sys_M2M WHERE " + whereFK_MapData; sql += "@DELETE FROM WF_FrmNode WHERE FK_Frm='" + this.No + "'"; sql += "@DELETE FROM Sys_FrmSln WHERE " + whereFK_MapData; DBAccess.RunSQLs(sql); #endregion 删除相关的数据。 #region 删除物理表。 //如果存在物理表. if (DBAccess.IsExitsObject(this.PTable) && this.PTable.IndexOf("ND") == 0) { //如果其他表单引用了该表,就不能删除它. sql = "SELECT COUNT(No) AS NUM FROM Sys_MapData WHERE PTable='" + this.PTable + "' OR ( PTable='' AND No='" + this.PTable + "')"; if (DBAccess.RunSQLReturnValInt(sql, 0) > 1) { /*说明有多个表单在引用.*/ } else { // edit by zhoupeng 误删已经有数据的表. if (DBAccess.RunSQLReturnValInt("SELECT COUNT(*) FROM " + this.PTable + " WHERE 1=1 ") == 0) DBAccess.RunSQL("DROP TABLE " + this.PTable); } } MapDtls dtls = new MapDtls(this.No); foreach (MapDtl dtl in dtls) dtl.Delete(); #endregion #region 删除注册到的外检表. SFTables sfs = new SFTables(); sfs.Retrieve(SFTableAttr.SrcTable, this.PTable); foreach (SFTable item in sfs) { if (item.IsCanDelete() == null) item.Delete(); } #endregion 删除注册到的外检表. return base.beforeDelete(); } #endregion 常用方法. #region 与Excel相关的操作 . /// /// 获得Excel文件流 /// /// /// public bool ExcelGenerFile(string pkValue, ref byte[] bytes, string saveTo) { try { byte[] by = BP.DA.DBAccess.GetByteFromDB(this.PTable, this.EnPK, pkValue, saveTo); if (by != null) { bytes = by; return true; } else //说明当前excel文件没有生成. { string tempExcel = BP.Difference.SystemConfig.PathOfDataUser + "FrmVSTOTemplate/" + this.No + ".xlsx"; if (System.IO.File.Exists(tempExcel) == true) { bytes = BP.DA.DataType.ConvertFileToByte(tempExcel); return false; } else //模板文件也不存在时 { throw new Exception("@没有找到模版文件." + tempExcel + " 请确认表单配置."); } } } catch (Exception ex) { BP.DA.Log.DebugWriteError("读取excel失败:" + ex.Message); // BP.DA.Log.DebugWriteError(); return false; } } /// /// 保存excel文件 /// /// /// public void ExcelSaveFile(string pkValue, byte[] bty, string saveTo) { BP.DA.DBAccess.SaveBytesToDB(bty, this.PTable, this.EnPK, pkValue, saveTo); } #endregion 与Excel相关的操作 . #region 与Word相关的操作 . /// /// 获得Excel文件流 /// /// /// public void WordGenerFile(string pkValue, ref byte[] bytes, string saveTo) { byte[] by = BP.DA.DBAccess.GetByteFromDB(this.PTable, this.EnPK, pkValue, saveTo); if (by != null) { bytes = by; return; } else //说明当前excel文件没有生成. { string tempExcel = BP.Difference.SystemConfig.PathOfDataUser + "FrmVSTOTemplate/" + this.No + ".docx"; if (System.IO.File.Exists(tempExcel) == false) tempExcel = BP.Difference.SystemConfig.PathOfDataUser + "FrmVSTOTemplate/NDxxxRpt.docx"; bytes = BP.DA.DataType.ConvertFileToByte(tempExcel); return; } } /// /// 保存excel文件 /// /// /// public void WordSaveFile(string pkValue, byte[] bty, string saveTo) { BP.DA.DBAccess.SaveBytesToDB(bty, this.PTable, this.EnPK, pkValue, saveTo); } #endregion 与Excel相关的操作 . } /// /// 映射基础s /// public class MapDatas : EntitiesNoName { #region 构造 /// /// 映射基础s /// public MapDatas() { } /// /// 得到它的 Entity /// public override Entity GetNewEntity { get { return new MapData(); } } #endregion #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((MapData)this[i]); } return list; } #endregion 为了适应自动翻译成java的需要,把实体转换成List. } }