using System; using System.Collections; using System.Data; using BP.DA; using BP.En; using BP.Web; using BP.Sys; using BP.Difference; namespace BP.Sys.Base { /// /// 表单从表事件基类 /// 0,集成该基类的子类,可以重写事件的方法与基类交互. /// 1,一个子类必须与一个表单模版绑定. /// 2,基类里有很多表单运行过程中的变量,这些变量可以辅助开发者在编写复杂的业务逻辑的时候使用. /// 3,该基类有一个子类模版,位于:\CCForm\WF\Admin\AttrForm\F001Templepte.cs . /// abstract public class FormEventBaseDtl { #region 要求子类强制重写的属性. /// /// 表单编号/表单标记. /// 该参数用于说明要把此事件注册到那一个表单模版上. /// abstract public string FormDtlMark { get; } #endregion 要求子类重写的属性. #region 属性/内部变量(表单在运行的时候触发各类事件,子类可以访问这些属性来获取引擎内部的信息). /// /// 实体,一般是工作实体 /// public Entity HisEn = null; /// /// /// public Entity HisEnDtl = null; /// /// 参数对象. /// private Row _SysPara = null; /// /// 参数 /// public Row SysPara { get { if (_SysPara == null) _SysPara = new Row(); return _SysPara; } set { _SysPara = value; } } #endregion 属性/内部变量(表单在运行的时候触发各类事件,子类可以访问这些属性来获取引擎内部的信息). #region 系统参数 /// /// 表单ID /// public string FK_Mapdata { get { return this.GetValStr("FK_MapData"); } } /// /// 从表ID /// public string FK_MapDtl { get { return this.GetValStr("FK_MapDtl"); } } #endregion #region 常用属性. /// /// 从表ID /// public int OID { get { return this.GetValInt("OID"); } } /// /// 主表ID /// public int OIDOfMainEn { get { return this.GetValInt("OIDOfMainEn"); } } #endregion 常用属性. #region 获取参数方法 /// /// 事件参数 /// /// 时间字段 /// 根据字段返回一个时间,如果为Null,或者不存在就抛出异常. public DateTime GetValDateTime(string key) { try { string str = this.SysPara.GetValByKey(key).ToString(); return DataType.ParseSysDateTime2DateTime(str); } catch (Exception ex) { throw new Exception("@表单从表事件实体在获取参数期间出现错误,请确认字段(" + key + ")是否拼写正确,技术信息:" + ex.Message); } } /// /// 获取字符串参数 /// /// key /// 如果为Null,或者不存在就抛出异常 public string GetValStr(string key) { try { return this.SysPara.GetValByKey(key).ToString(); } catch (Exception ex) { throw new Exception("@表单从表事件实体在获取参数期间出现错误,请确认字段(" + key + ")是否拼写正确,技术信息:" + ex.Message); } } /// /// 获取Int64的数值 /// /// 键值 /// 如果为Null,或者不存在就抛出异常 public Int64 GetValInt64(string key) { return Int64.Parse(this.GetValStr(key)); } /// /// 获取int的数值 /// /// 键值 /// 如果为Null,或者不存在就抛出异常 public int GetValInt(string key) { return int.Parse(this.GetValStr(key)); } /// /// 获取Boolen值 /// /// 字段 /// 如果为Null,或者不存在就抛出异常 public bool GetValBoolen(string key) { if (int.Parse(this.GetValStr(key)) == 0) return false; return true; } /// /// 获取decimal的数值 /// /// 字段 /// 如果为Null,或者不存在就抛出异常 public decimal GetValDecimal(string key) { return decimal.Parse(this.GetValStr(key)); } #endregion 获取参数方法 #region 构造方法 /// /// 表单从表事件基类 /// public FormEventBaseDtl() { } #endregion 构造方法 #region 节点表单从表事件 public virtual string FrmLoadAfter() { return null; } public virtual string FrmLoadBefore() { return null; } #endregion #region 要求子类重写的方法(表单从表事件). /// /// 表单删除前 /// /// 返回null,不提示信息,返回信息,提示删除警告/提示信息, 抛出异常阻止删除操作. public virtual string BeforeFormDel() { return null; } /// /// 表单删除后 /// /// 返回null,不提示信息,返回信息,提示删除警告/提示信息, 抛出异常不处理. public virtual string AfterFormDel() { return null; } #endregion 要求子类重写的方法(表单从表事件). #region 要求子类重写的方法(节点事件). /// /// 附件上传前 /// public virtual string AthUploadeBefore() { return null; } /// /// 上传后 /// public virtual string AthUploadeAfter() { return null; } /// /// 从表保存前 /// public virtual string RowSaveBefore() { return null; } /// /// 从表保存后 /// public virtual string RowSaveAfter() { return null; } /// /// 从表del前 /// public virtual string DtlRowDelBefore() { return null; } /// /// 从表del后 /// public virtual string DtlRowDelAfter() { return null; } /// /// 创建工作ID后的事件 /// /// public virtual string CreateOID() { return null; } #endregion 要求子类重写的方法(节点事件). #region 基类方法. /// /// 执行事件 /// /// 事件类型 /// 主表实体 /// 从表实体 /// 参数 /// 返回执行的结果 public string DoIt(string eventType, Entity en, Entity enDtl, string atPara) { this.HisEn = en; #region 处理参数. if (en == null) return null; Row r = en.Row; try { //系统参数. r.Add("FK_MapData", en.ClassID); } catch { r["FK_MapData"] = en.ClassID; } if (atPara != null) { AtPara ap = new AtPara(atPara); foreach (string s in ap.HisHT.Keys) { try { r.Add(s, ap.GetValStrByKey(s)); } catch { r[s] = ap.GetValStrByKey(s); } } } if (BP.Difference.SystemConfig.IsBSsystem == true) { /*如果是bs系统, 就加入外部url的变量.*/ foreach (string key in HttpContextHelper.RequestParamKeys) { string val = HttpContextHelper.RequestParams(key); try { r.Add(key, val); } catch { r[key] = val; } } } this.SysPara = r; #endregion 处理参数. #region 执行事件. switch (eventType) { case EventListFrm.DtlRowSaveBefore: // 从表-保存前.。 return this.RowSaveBefore(); case EventListFrm.DtlRowSaveAfter: // 从表-保存后.。 return this.RowSaveAfter(); case EventListFrm.DtlRowDelBefore: // 从表-保存前.。 return this.DtlRowDelBefore(); case EventListFrm.DtlRowDelAfter: // 从表-保存后.。 return this.DtlRowDelAfter(); default: throw new Exception("@没有判断的表单从表事件类型:" + eventType); break; } #endregion 执行事件. return null; } #endregion 基类方法. } }