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 { /// /// 表单事件列表 /// public enum FrmEvenList11 { /// /// 创建OID /// CreateOID, /// /// 装载前 /// FrmLoadBefore, /// /// 装载后 /// FrmLoadAfter, /// /// 保存前 /// SaveBefore, /// /// 保存后 /// SaveAfter } /// /// 表单事件基类 /// abstract public class FrmEventBase { #region 要求子类强制重写的属性. /// /// 表单编号 /// 该参数用于说明要把此事件注册到那一个表单模版上. /// abstract public string FrmNo { get; } #endregion 要求子类重写的属性. #region 常用属性. /// /// 工作ID /// public int OID { get { return this.GetValInt("OID"); } } /// /// 工作ID /// public Int64 WorkID { get { if (this.OID == 0) return this.GetValInt64("WorkID"); /*有可能开始节点的WorkID=0*/ return this.OID; } } /// /// 流程ID /// public Int64 FID { get { return this.GetValInt64("FID"); } } /// /// 传过来的WorkIDs集合,子流程. /// public string WorkIDs { get { return this.GetValStr("WorkIDs"); } } /// /// 编号集合s /// public string Nos { get { return this.GetValStr("Nos"); } } /// /// 行数据 /// public Row Row { get; set; } #endregion 常用属性. #region 数据字段的方法 /// /// 时间参数 /// /// 时间字段 /// 根据字段返回一个时间,如果为Null,或者不存在就抛出异常. public DateTime GetValDateTime(string key) { try { string str = this.Row.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.Row.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 FrmEventBase() { } #endregion 构造方法 #region 节点表单事件 public virtual string FrmLoadAfter() { return null; } public virtual string FrmLoadBefore() { return null; } #endregion #region 要求子类重写的方法(节点事件). /// /// 保存后 /// public virtual string SaveAfter() { return null; } /// /// 保存前 /// public virtual string SaveBefore() { return null; } /// /// 创建OID后的事件 /// /// public virtual string CreateOID() { return null; } #endregion 要求子类重写的方法(节点事件). #region 基类方法. /// /// 执行事件 /// /// 事件类型 /// 实体参数 public string DoIt(string eventType, Entity en, Row row, string atPara) { this.Row = row; #region 处理参数. Row r = en.Row; try { //系统参数. this.Row.Add("FK_MapData", en.ClassID); } catch { this.Row["FK_MapData"] = en.ClassID; } if (atPara != null) { AtPara ap = new AtPara(atPara); foreach (string s in ap.HisHT.Keys) { try { this.Row.Add(s, ap.GetValStrByKey(s)); } catch { this.Row[s] = ap.GetValStrByKey(s); } } } if (BP.Difference.SystemConfig.IsBSsystem == true) { /*如果是bs系统, 就加入外部url的变量.*/ foreach (string key in HttpContextHelper.RequestParamKeys) { string val = HttpContextHelper.RequestParams(key); try { this.Row.Add(key, val); } catch { this.Row[key] = val; } } } #endregion 处理参数. #region 执行事件. switch (eventType) { case EventListFrm.CreateOID: // 节点表单事件。 return this.CreateOID(); case EventListFrm.FrmLoadAfter: // 节点表单事件。 return this.FrmLoadAfter(); case EventListFrm.FrmLoadBefore: // 节点表单事件。 return this.FrmLoadBefore(); case EventListFrm.SaveAfter: // 节点事件 保存后。 return this.SaveAfter(); case EventListFrm.SaveBefore: // 节点事件 - 保存前.。 return this.SaveBefore(); default: throw new Exception("@没有判断的事件类型:" + eventType); break; } #endregion 执行事件. return null; } #endregion 基类方法. } }