using System;
using System.Data;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BP.WF;
using BP.WF.Template;
using BP.En;
using BP.DA;
using BP.Port;
using BP.Demo.BPFramework;
using BP.Sys;
public partial class SDKFlowDemo_DemoEntity : System.Web.UI.Page
{
///
/// ccbpm API开发 Demo
///
public void ccbpmDemo()
{
// 让用户登录.
BP.WF.Dev2Interface.Port_Login("liyan");
//定义一个测试的流程编号.
string flowNo = "001";
#region ccbpm 的最简单的API操作。
//创建一个workid.
Int64 workid = BP.WF.Dev2Interface.Node_CreateBlankWork(flowNo);
//执行开始节点的发发送,获得一个发送对象.
BP.WF.SendReturnObjs objs= BP.WF.Dev2Interface.Node_SendWork(flowNo, workid);
//输出发送对象,流程在发送的时候会把发送的过程记录在这个对象里,比如:发送给谁?发送到那个节点了?提示的信息是什么?是否发送成功?
foreach (BP.WF.SendReturnObj obj in objs)
{
this.Response.Write("Key=" + obj.MsgFlag + " Value=" + obj.MsgOfText);
}
//输出发送成功信息.
this.Response.Write(objs.ToMsgOfHtml());
//获取发送到节点ID.
int nextNodeID = objs.VarToNodeID;
//获取接受人, 多个的话,用逗号分开的,比如: zhangsan,lisi
string nextWorker= objs.VarAcceptersID;
// 如果发送人这个时间感到发送错误了,忘记了填写东西 ,需要撤销,就执行撤销API.
if (1 == 2)
{
//执行撤销API.
string undoMsg= BP.WF.Dev2Interface.Flow_DoUnSend(flowNo, workid);
}
//让下一个接受人登录, 让其执行发送。
BP.WF.Dev2Interface.Port_Login(nextWorker);
// 如果你要退回,就执行退回接口.
if (1 == 2)
{
string returnMsg= BP.WF.Dev2Interface.Node_ReturnWork(flowNo, workid, 0, nextNodeID, 101, "退回测试", false);
}
// 如果你要删除,就执行删除接口.
if (1 == 2)
{
BP.WF.Dev2Interface.Flow_DoDeleteFlowByReal(flowNo, workid, false);
return;
}
// 如果你要移交,就执行移交接口.
if (1 == 2)
{
BP.WF.Dev2Interface.Node_Shift(flowNo,nextNodeID,workid,0,"fuhui","移交测试.");
return;
}
// 执行下一步发送。
objs = BP.WF.Dev2Interface.Node_SendWork(flowNo, workid);
//objs.VarWorkID
#endregion ccbpm 的最简单的API操作。
}
protected void Page_Load(object sender, EventArgs e)
{
}
public void GEEntity()
{
Int64 workidOld = 9090;
Int64 workid = BP.WF.Dev2Interface.Node_CreateBlankWork("001");
GEEntity entityA = new GEEntity("FrmIDA", workidOld);
GEEntity entityB = new GEEntity("FrmIDB", 1001);
}
///
/// 写入日志
///
public void WriteLogApp()
{
// 写入一条消息.
BP.Sys.Base.Glo.WriteLineInfo("这是一条消息. ");
// 写入一条警告.
BP.Sys.Base.Glo.WriteLineWarning("这是一条警告. ");
// 写入一条异常或者错误.
BP.Sys.Base.Glo.WriteLineError("这是一条错误. "); // 以上这些日志写入了 \DataUser\Log\*.*
//写入用户日志
BP.Sys.Base.Glo.WriteUserLog("Login", "stone", "系统登录");
BP.Sys.Base.Glo.WriteUserLog("Login", "stone", "系统登录", "192.168.1.100"); // 以上用户日志写入了 Sys_UserLog 表里.)
}
///
/// 全局的基本应用,获取当前操作员的信息.
///
public void GloBaseApp()
{
// 执行登陆。
BP.WF.Dev2Interface.Port_Login("guobaogeng");
// 当前登陆人员编号.
string currLoginUserNo = BP.Web.WebUser.No;
// 登陆人员名称
string currLoginUserName = BP.Web.WebUser.Name;
// 登陆人员部门编号.
string currLoginUserDeptNo = BP.Web.WebUser.FK_Dept;
// 登陆人员部门名称
string currLoginUserDeptName = BP.Web.WebUser.FK_DeptName;
//以上可以用到ccflow的表达式里, 使用@WebUser.No, @WebUser.Name, @WebUser.FK_Dept, @WebUser.FK_DeptName,
// 表达式里就会自动替换以上变量.
//退出.
BP.WF.Dev2Interface.Port_SigOut();
}
///
/// 数据库操作访问
///
public void DataBaseAccess()
{
#region 执行不带有参数.
// 执行Insert ,delete, update 语句.
int result = BP.DA.DBAccess.RunSQL("DELETE FROM Port_Emp WHERE 1=2");
// 执行多个sql
string sqls = "DELETE FROM Port_Emp WHERE 1=2";
sqls += "@DELETE FROM Port_Emp WHERE 1=2";
sqls += "@DELETE FROM Port_Emp WHERE 1=2";
BP.DA.DBAccess.RunSQLs(sqls);
//执行查询返回datatable.
string sql = "SELECT * FROM Port_Emp";
DataTable dt = BP.DA.DBAccess.RunSQLReturnTable(sql);
//执行查询返回 string 值.
sql = "SELECT FK_Dept FROM Port_Emp WHERE No='" + BP.Web.WebUser.No + "'";
string fk_dept = BP.DA.DBAccess.RunSQLReturnString(sql);
//执行查询返回 int 值. 也可以返回float, string
sql = "SELECT count(No) as Num FROM Port_Emp ";
int empNum = BP.DA.DBAccess.RunSQLReturnValInt(sql);
//运行存储过程.
// string spName = "MySp";
//BP.DA.DBAccess.RunSP(spName);
#endregion 执行不带有参数.
#region 执行带有参数.
// 执行Insert ,delete, update 语句.
// 已经明确数据库 sqlserver 类型.
Paras ps = new Paras();
ps.SQL = "DELETE FROM Port_Emp WHERE No=@UserNo";
ps.Add("UserNo", "zhangsan");
BP.DA.DBAccess.RunSQL(ps);
// 不知道数据库类型.
ps = new Paras();
ps.SQL = "DELETE FROM Port_Emp WHERE No=" + BP.Difference.SystemConfig.AppCenterDBVarStr + "UserNo";
ps.Add("UserNo", "abc");
BP.DA.DBAccess.RunSQL(ps);
//执行查询返回datatable.
ps = new Paras();
ps.SQL = "SELECT * FROM Port_Emp WHERE FK_Dept=@DeptNoVar";
ps.Add("DeptNoVar", "0102");
DataTable dtEmps = BP.DA.DBAccess.RunSQLReturnTable(ps);
foreach (DataRow dr in dtEmps.Rows)
{
string no = dr["No"].ToString();
string name = dr["Name"].ToString();
}
//运行存储过程.
//ps = new Paras();
//ps.Add("DeptNoVar", "0102");
//spName = "MySp";
//BP.DA.DBAccess.RunSP(spName, ps);
#endregion 执行带有参数.
#region 向数据库存储、读写文件.
//写入实例.
string tmpFile = "c:\\111.txt";
BP.DA.DBAccess.SaveFileToDB(tmpFile, "WF_Flow", "No", "001", "FlowJson"); // FlowJson是一个已经存在的img字段.
//读取文件到指定的位置.
string saveToFile = "c:\\222.txt";
// string byt = BP.DA.DBAccess.GetBigTextFromDB(saveToFile, "WF_Flow", "No", "001", "FlowJson");
// FlowJson是一个已经存在的img字段, 系统就会生成一个 temp文件在指定的路径下. 返回的是一个byt 类型的数据流.
#endregion 向数据库存储文件.
}
public void EntitiesDemo()
{
//查询所有的实体,并输出.
Students stus = new Students();
stus.RetrieveAll();
string strs = "";
foreach (Student stu in stus)
{
strs += "
";
strs += "
编号:" + stu.No + " 名称:" + stu.Name + " 地址:" + stu.Addr + " 性别:" + stu.XB + " 性别Text:" + stu.XBText;
}
this.Response.Write(strs);
//按照条件查询
Students stus1 = new Students();
stus1.Retrieve(StudentAttr.FK_BanJi, "01"); //查询所有班级编号 = 01 的学生.
strs = "";
foreach (Student stu in stus1)
{
strs += "
";
strs += "
编号:" + stu.No + " 名称:" + stu.Name + " 地址:" + stu.Addr;
}
this.Response.Write(strs);
//按照条件查询
Students stus2 = new Students();
stus2.Retrieve(StudentAttr.FK_BanJi, "01", StudentAttr.XB, 0); //查询所有班级编号 = 01 的学生 and XB = 0
strs = "";
foreach (Student stu in stus2)
{
strs += "
";
strs += "
编号:" + stu.No + " 名称:" + stu.Name + " 地址:" + stu.Addr;
}
this.Response.Write(strs);
//多条件查询.
Students stus3 = new Students();
BP.En.QueryObject qo = new QueryObject(stus3);
qo.AddWhere(StudentAttr.FK_BanJi, "01");
qo.addAnd();
qo.AddWhere(StudentAttr.XB, 0);
qo.addAnd();
qo.AddWhere(StudentAttr.ZZMM, 0);
int num = qo.DoQuery();
strs = "一共查询到{" + num + "}条数据.";
foreach (Student stu in stus3)
{
strs += "
";
strs += "
编号:" + stu.No + " 名称:" + stu.Name + " 地址:" + stu.Addr + " 班级:" + stu.FK_BanJiText;
}
this.Response.Write(strs);
//按照sql查询.
string sql = "SELECT * FROM Demo_Student WHERE FK_BanJi='01' AND XB=0 AND ZZMM=0 ";
DataTable dt = BP.DA.DBAccess.RunSQLReturnTable(sql);
}
public void EntityDemo()
{
Student stu = new Student();
stu.No = "9000";
stu.Name = "周朋";
stu.Addr = "shandong.jinan";
stu.Tel = "186601434343";
if (stu.IsExits == true)
stu.Update();
else
stu.Insert();
//执行Update.
Student stu1 = new Student();
stu1.No = "9000";
stu1.Retrieve();
stu1.Name = "李四";
stu1.Addr = "山东菏泽.";
stu1.Update();
//直接 delete .
Student stu2 = new Student();
stu2.No = "9000";
stu2.Delete();
}
///
/// Entity 的基本应用.
///
public void EntityBaseApp()
{
#region 直接插入一条数据.
BP.Port.Emp emp = new BP.Port.Emp();
emp.CheckPhysicsTable();
/* 检查物理表是否与Map一致
* 1,如果没有这个物理表则创建。
* 2,如果缺少字段则创建。
* 3,如果字段类型不一直则删除创建,比如原来是int类型现在map修改成string类型。
* 4,map字段减少则不处理。
* 5,手工的向物理表中增加的字段则不处理。
* 6,数据源是视图字段不匹配则创建失败。
* */
emp.No = "zhangsan";
emp.Name = "张三";
emp.FK_Dept = "01";
emp.Pass = "pub";
emp.Insert(); // 如果主键重复要抛异常。
#endregion 直接插入一条数据.
#region 保存的方式插入一条数据.
emp = new BP.Port.Emp();
emp.No = "zhangsan";
emp.Name = "张三";
emp.FK_Dept = "01";
emp.Pass = "pub";
emp.Save(); // 如果主键重复直接更新,不会抛出异常。
#endregion 保存的方式插入一条数据.
#region 其他方法.
BP.Port.Emp myEmp2 = new BP.Port.Emp();
myEmp2.No = "zhangsan";
//检查主键数据是否存在 ?
bool isExit = myEmp2.IsExits;
if (myEmp2.RetrieveFromDBSources() == 0)
{
/*说明没有查询到数据。*/
}
#endregion.
#region 数据复制.
/*
* 如果一个实体与另外的一个实体两者的属性大致相同,就可以执行copy.
* 比如:在创建人员时,张三与李四两者只是编号与名称不同,只是改变不同的属性就可以执行相关的业务操作。
*/
Emp emp1 = new BP.Port.Emp("zhangsan");
emp = new BP.Port.Emp();
emp.Copy(emp1); // 同实体copy, 不同的实体也可以实现copy.
emp.No = "lisi";
emp.Name = "李四";
emp.Insert();
// copy 在业务逻辑上会经常应用,比如: 在一个流程中A节点表单与B节点表单字段大致相同,ccflow就是采用的copy方式处理。
#endregion 数据复制.
#region 单个实体查询.
string msg = ""; // 查询这条数据.
BP.Port.Emp myEmp = new BP.Port.Emp();
myEmp.No = "zhangsan";
if (myEmp.RetrieveFromDBSources() == 0) // RetrieveFromDBSources() 返回来的是查询数量.
{
this.Response.Write("没有查询到编号等于zhangsan的人员记录.");
return;
}
else
{
msg = "";
msg += "
编号:" + myEmp.No;
msg += "
名称:" + myEmp.Name;
msg += "
密码:" + myEmp.Pass;
msg += "
部门编号:" + myEmp.FK_Dept;
msg += "
部门名称:" + myEmp.FK_DeptText;
this.Response.Write(msg);
}
myEmp = new BP.Port.Emp();
myEmp.No = "zhangsan";
myEmp.Retrieve(); // 执行查询,如果查询不到则要抛出异常。
msg = "";
msg += "
编号:" + myEmp.No;
msg += "
名称:" + myEmp.Name;
msg += "
密码:" + myEmp.Pass;
msg += "
部门编号:" + myEmp.FK_Dept;
msg += "
部门名称:" + myEmp.FK_DeptText;
this.Response.Write(msg);
#endregion 查询.
#region 两种方式的删除。
// 删除操作。
emp = new BP.Port.Emp();
emp.No = "zhangsan";
int delNum = emp.Delete(); // 执行删除。
if (delNum == 0)
this.Response.Write("删除 zhangsan 失败.");
if (delNum == 1)
this.Response.Write("删除 zhangsan 成功..");
if (delNum > 1)
this.Response.Write("不应该出现的异常。");
// 初试化实例后,执行删除,这种方式要执行两个sql.
emp = new BP.Port.Emp("abc");
emp.Delete();
#endregion 两种方式的删除。
#region 更新。
emp = new BP.Port.Emp("zhangyifan"); // 事例化它.
emp.Name = "张一帆123"; //改变属性.
emp.Update(); // 更新它,这个时间BP将会把所有的属性都要执行更新,UPDATA 语句涉及到各个列。
emp = new BP.Port.Emp("fuhui"); // 事例化它.
emp.Update("Name", "福慧123"); //仅仅更新这一个属性。.UPDATA 语句涉及到Name列。
#endregion 更新。
}
///
/// Entities 的基本应用.
///
public void EntitiesBaseApp()
{
//查询出来班级 = 01 所有学生。
Students stus = new Students();
stus.Retrieve(StudentAttr.FK_BanJi, "01");
foreach (Student stu in stus)
{
string str = "学生:" + stu.No + " 名称:" + stu.Name;
this.Response.Write( str+"
");
}
//查询出来班级 = 01 and XB = 女的所有学生.
stus = new Students();
stus.Retrieve(StudentAttr.FK_BanJi, "01", StudentAttr.XB,0);
foreach (Student stu in stus)
{
string str = "学生:" + stu.No + " 名称:" + stu.Name;
this.Response.Write(str + "
");
}
//查询全部的学生, 如果有缓存就会从缓存里查询.
stus = new Students();
stus.RetrieveAll();
//查询全部的学生, 从数据库里查询.
stus = new Students();
stus.RetrieveAllFromDBSource();
//访问集合的数量属性.
int numOfStus = stus.Count;
//判断集合里是否包含主键等于特定值的.
bool isExits = stus.Contains("zhangsan");
#region 查询全部
/* 查询全部分为两种方式,1 从缓存里查询全部。2,从数据库查询全部。 */
Emps emps = new Emps();
int num = emps.RetrieveAll(); //从缓存里查询全部数据.
this.Response.Write("RetrieveAll查询出来(" + num + ")个");
foreach (Emp emp in emps)
{
this.Response.Write("
人员名称:" + emp.Name);
this.Response.Write("
人员编号:" + emp.No);
this.Response.Write("
部门编号:" + emp.FK_Dept);
this.Response.Write("
部门名称:" + emp.FK_DeptText);
}
//把entities 数据转入到DataTable里。
DataTable empsDTfield = emps.ToDataTableField(); //以英文字段做为列名。
DataTable empsDTDesc = emps.ToDataTableDesc(); //以中文字段做为列名。
// 从数据库里查询全部。
Emps emps2 = new Emps();
num = emps2.RetrieveAllFromDBSource();
this.Response.Write("RetrieveAllFromDBSource查询出来(" + num + ")个");
foreach (Emp emp in emps2)
{
this.Response.Write("
人员名称:" + emp.Name);
this.Response.Write("
人员编号:" + emp.No);
this.Response.Write("
部门编号:" + emp.FK_Dept);
this.Response.Write("
部门名称:" + emp.FK_DeptText);
}
#endregion 查询全部
#region 按条件查询
// 单个条件查询。
Emps myEmps = new Emps();
QueryObject qo = new QueryObject(myEmps);
qo.AddWhere(EmpAttr.FK_Dept, "01");
qo.addOrderBy(EmpAttr.No); // 增加排序规则,Order OrderByDesc, addOrderByDesc addOrderByRandom.
num = qo.DoQuery(); // 返回查询的个数.
this.Response.Write("查询出来(" + num + ")个,部门编号=01的人员。");
foreach (Emp emp in myEmps)
{
this.Response.Write("
人员名称:" + emp.Name);
this.Response.Write("
人员编号:" + emp.No);
this.Response.Write("
部门编号:" + emp.FK_Dept);
this.Response.Write("
部门名称:" + emp.FK_DeptText);
}
//等于.
myEmps.Retrieve(EmpAttr.FK_Dept, "01");
DataTable mydt = qo.DoQueryToTable(); // 查询出来的数据转入到datatable里。.
Emps myemps = new Emps();
myemps.Retrieve(EmpAttr.FK_Dept, "01");
foreach (Emp item in myemps)
{
this.Response.Write("
人员名称:" + item.Name);
this.Response.Write("
人员编号:" + item.No);
this.Response.Write("
部门编号:" + item.FK_Dept);
this.Response.Write("
部门名称:" + item.FK_DeptText);
}
// 多个条件查询。
myEmps = new Emps();
qo = new QueryObject(myEmps);
qo.AddWhere(EmpAttr.FK_Dept, "01");
qo.addAnd();
qo.AddWhere(EmpAttr.No, "guobaogen");
num = qo.DoQuery(); // 返回查询的个数.
this.Response.Write("查询出来(" + num + ")个,部门编号=01并且编号=guobaogen的人员。");
foreach (Emp emp in myEmps)
{
this.Response.Write("
人员名称:" + emp.Name);
this.Response.Write("
人员编号:" + emp.No);
this.Response.Write("
部门编号:" + emp.FK_Dept);
this.Response.Write("
部门名称:" + emp.FK_DeptText);
}
// 具有括号表达式的查询。
myEmps = new Emps();
qo = new QueryObject(myEmps);
qo.addLeftBracket(); // 加上左括号.
qo.AddWhere(EmpAttr.FK_Dept, "01");
qo.addAnd();
qo.AddWhere(EmpAttr.No, "guobaogen");
qo.addRightBracket(); // 加上右括号.
num = qo.DoQuery(); // 返回查询的个数.
this.Response.Write("查询出来(" + num + ")个,部门编号=01并且编号=guobaogen的人员。");
foreach (Emp emp in myEmps)
{
this.Response.Write("
人员名称:" + emp.Name);
this.Response.Write("
人员编号:" + emp.No);
this.Response.Write("
部门编号:" + emp.FK_Dept);
this.Response.Write("
部门名称:" + emp.FK_DeptText);
}
// 具有where in 方式的查询。
myEmps = new Emps();
qo = new QueryObject(myEmps);
qo.AddWhereInSQL(EmpAttr.No, "SELECT No FROM Port_Emp WHERE FK_Dept='02'");
num = qo.DoQuery(); // 返回查询的个数.
this.Response.Write("查询出来(" + num + ")个,WHERE IN (SELECT No FROM Port_Emp WHERE FK_Dept='02')人员。");
foreach (Emp emp in myEmps)
{
this.Response.Write("
人员名称:" + emp.Name);
this.Response.Write("
人员编号:" + emp.No);
this.Response.Write("
部门编号:" + emp.FK_Dept);
this.Response.Write("
部门名称:" + emp.FK_DeptText);
}
// 具有LIKE 方式的查询。
myEmps = new Emps();
qo = new QueryObject(myEmps);
qo.AddWhere(EmpAttr.No, " LIKE ", "guo");
num = qo.DoQuery(); // 返回查询的个数.
this.Response.Write("查询出来(" + num + ")个,人员编号包含guo的人员。");
foreach (Emp emp in myEmps)
{
this.Response.Write("
人员名称:" + emp.Name);
this.Response.Write("
人员编号:" + emp.No);
this.Response.Write("
部门编号:" + emp.FK_Dept);
this.Response.Write("
部门名称:" + emp.FK_DeptText);
}
#endregion 按条件查询
#region 集合业务处理.
myEmps = new Emps();
myEmps.RetrieveAll(); // 查询全部出来.
// 遍历集合是常用的处理方法。
foreach (Emp emp in myEmps)
{
this.Response.Write("
人员名称:" + emp.Name);
this.Response.Write("
人员编号:" + emp.No);
this.Response.Write("
部门编号:" + emp.FK_Dept);
this.Response.Write("
部门名称:" + emp.FK_DeptText);
}
// 判断是否包含是指定的主键值.
bool isHave = myEmps.Contains("Name", "郭宝庚"); //判断是否集合里面包含Name=郭宝庚的实体.
bool isHave1 = myEmps.Contains("guobaogeng"); //判断是否集合里面主键No=guobaogeng的实体.
// 获取Name=郭宝庚的实体,如果没有就返回空。
Emp empFind = myEmps.GetEntityByKey("Name", "郭宝庚") as Emp;
if (empFind == null)
this.Response.Write("
没有找到: Name =郭宝庚 的实体.");
else
this.Response.Write("
已经找到了: Name =郭宝庚 的实体. 他的部门编号="+empFind.FK_Dept+",部门名称="+empFind.FK_DeptText);
// 批量更新实体。
myEmps.Update(); // 等同于下一个循环。
foreach (Emp emp in myEmps)
emp.Update();
// 删除实体.
myEmps.Delete(); // 等同于下一个循环。
foreach (Emp emp in myEmps)
{
emp.Delete();
}
// 执行数据库删除,类于执行 DELETE Port_Emp WHERE FK_Dept='01' 的sql.
myEmps.Delete("FK_Dept", "01");
#endregion
}
///
/// 展示EnttiyNo自动编号
///
public void EnttiyNo()
{
// 创建一个空的实体.
BP.Demo.BPFramework.Student en = new BP.Demo.BPFramework.Student();
// 给各个属性赋值,但是不要给编号赋值.
en.Name = "张三";
en.FK_BanJi = "001";
en.Age = 19;
en.XB = 1;
en.Tel = "0531-82374939";
en.Addr = "山东.济南.高新区";
en.Insert(); //这里会自动给该学生编号,从0001开始,编号规则打开该类的Map.
string xuehao = en.No;
this.Response.Write("信息已经加入,该学生的学号为:" + xuehao);
//查询出来该实体。
BP.Demo.BPFramework.Student myen = new BP.Demo.BPFramework.Student(xuehao);
this.Response.Write("学生姓名:" + myen.Name);
this.Response.Write("地址:" + myen.Addr);
}
///
/// 实体OID
///
public void EnttiyOID()
{
// 创建一个空的简历实体.
BP.Demo.Resume dtl = new BP.Demo.Resume();
dtl.RefPK = "zhangsan"; //给关联的主键赋值.
dtl.NianYue = "2014年4月";
dtl.GongZuoDanWei = "济南驰骋公司"; // 工作单位.
dtl.ZhengMingRen = "李四"; //证明人,李四.
dtl.Insert(); //这里会自动给该实体主键OID赋值, 他是一个自动增长的列.
this.Response.Write("信息已经加入,OID:" + dtl.OID);
//初始化该实体,并把它显示出来.
BP.Demo.Resume mydtl = new BP.Demo.Resume(dtl.OID);
this.Response.Write("工作单位:" + dtl.GongZuoDanWei + "证明人:" + dtl.ZhengMingRen);
}
///
/// 具有MyPK类型的实体,该类实体的主键是MyPK.
/// 它的主键是本表的2个或者3个以上的字段组合得来的.
///
public void EnttiyMyPK()
{
// 创建一个员工考核实体.
BP.Demo.BPFramework.EmpCent en = new BP.Demo.BPFramework.EmpCent();
en.FK_Emp = "zhangsan";
en.FK_NY = "2003-01";
en.MyPK = en.FK_NY + "_" + en.FK_Emp;
en.Cent = 100;
en.Insert(); // 插入到数据库里.
this.Response.Write("信息已经加入,Cent:" + en.Cent);
BP.Demo.BPFramework.EmpCent myen = new BP.Demo.BPFramework.EmpCent(en.MyPK);
this.Response.Write("人员:" + myen.FK_Emp + ",月份:" + myen.FK_NY+", 得分:"+myen.Cent);
}
///
/// 树的实体包含了No,Name,ParentNo,Idx 必须的属性(字段),它是树结构的描述.
///
public void EnttiyTree()
{
//创建父节点, 父节点的编号必须为1 ,父节点的ParentNo 必须是 0.
FlowSort en = new FlowSort("1");
en.Name = "根目录";
//创建子目录节点.
FlowSort subEn = (FlowSort)en.DoCreateSubNode();
subEn.Name = "行政类";
subEn.Update();
//创建子目录的评级节点.
FlowSort sameLevelSubEn = (FlowSort)subEn.DoCreateSameLevelNode();
sameLevelSubEn.Name = "业务类";
sameLevelSubEn.Update();
//创建子目录的下一级节点1.
FlowSort sameLevelSubSubEn = (FlowSort)subEn.DoCreateSameLevelNode();
sameLevelSubSubEn.Name = "日常办公";
sameLevelSubSubEn.Update();
//创建子目录的下一级节点1.
FlowSort sameLevelSubSubEn2 = (FlowSort)subEn.DoCreateSameLevelNode();
sameLevelSubSubEn2.Name = "人力资源";
sameLevelSubSubEn2.Update();
/**
* 根目录
* 行政类
* 日常办公
* 人力资源
* 业务类
*
*/
}
///
/// 多对多的关系,这种实体就有两个列(属性)
/// 这俩个列都是外键,并且也是该表的主键.
///
public void EnttiyMM()
{
//BP.Port.EmpStation en = new BP.Port.EmpStation();
//en.FK_Emp = "zhangsan";
//en.FK_Station = "01";
//en.Insert();
}
///
/// 与文件相关的操作.
///
public void EnttiyOptionWithFile()
{
//把一个文件存入到entity.
string fileFullName = "c:\\temp.doc";
Flow fl = new Flow("001");
fl.SaveFileToDB("ABC",fileFullName); //如果没有ABC 字段,系统就会自动创建。
//把流存入数据库entity.
byte[] betys = null; ;
fl = new Flow("001");
fl.SaveFileToDB("ABC", betys); //如果没有ABC 字段,系统就会自动创建。
//获取文件.
string saveTo="c:\\tempfile.doc";
fl.GetFileFromDB("ABC", saveTo);
//特别说明,使用该方法,必须是已经存在数据库的一个实体,在没有插入之前,是不能调用的。
}
}