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 FormEventBase
{
#region 要求子类强制重写的属性.
///
/// 表单编号/表单标记.
/// 该参数用于说明要把此事件注册到那一个表单模版上.
///
abstract public string FormMark
{
get;
}
#endregion 要求子类重写的属性.
#region 属性/内部变量(表单在运行的时候触发各类事件,子类可以访问这些属性来获取引擎内部的信息).
///
/// 实体,一般是工作实体
///
public Entity HisEn = 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");
}
}
#endregion
#region 常用属性.
///
/// 工作ID
///
public int OID
{
get
{
return this.GetValInt("OID");
}
}
#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 FormEventBase()
{
}
#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 SaveAfter()
{
return null;
}
///
/// 保存前
///
public virtual string SaveBefore()
{
return null;
}
///
/// 附件上传前
///
public virtual string AthUploadeBefore()
{
return null;
}
///
/// 上传后
///
public virtual string AthUploadeAfter()
{
return null;
}
///
/// 从表保存前
///
public virtual string DtlRowSaveBefore()
{
return null;
}
///
/// 从表保存后
///
public virtual string DtlRowSaveAfter()
{
return null;
}
///
/// 创建工作ID后的事件
///
///
public virtual string CreateOID()
{
return null;
}
#endregion 要求子类重写的方法(节点事件).
#region 基类方法.
///
/// 执行事件
///
///
///
///
///
///
public string DoIt(string EventSource, Entity en, string atPara)
{
this.HisEn = en;
#region 处理参数.
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 (EventSource)
{
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();
case EventListFrm.AthUploadeBefore: // 附件上传前.。
return this.AthUploadeBefore();
case EventListFrm.AthUploadeAfter: // 附件上传后.。
return this.AthUploadeAfter();
case EventListFrm.DtlRowSaveBefore: // 从表-保存前.。
return this.DtlRowSaveBefore();
case EventListFrm.DtlRowSaveAfter: // 从表-保存后.。
return this.DtlRowSaveAfter();
default:
throw new Exception("@没有判断的表单事件类型:" + EventSource);
break;
}
#endregion 执行事件.
return null;
}
#endregion 基类方法.
}
}