****************记录锁定问题,如何操作?
记录锁定问题
很多相同职责的用户可以处理相同阶段的记录,但我怕当A用户处理记录aaa01时,B用户也来处理这一记录,当A用户处理好的数据更新这一记录后,等一下B用户的处理数据又再次更新了它,A用户的就没有了,我不想这种事情发生。
因此,我想,表中加一字段TreatStatus,用来设置成编辑锁定功能的,实现的思路是这样的:
当有个用户对相应阶段的这一记录进行编辑处理时,我设定字段TreatStatus为1,其它用户只可浏览,不能编辑,他想编辑时,就提示:有人在编辑 ,请选择另一记录。当该用户处理完毕后这一记录就到下一阶段了(因相同职责的用户只能处理相同阶段的记录,所以他就没有机会再来处理这一阶段的这一记录了),然后窗口关闭时,设定这一记录的字段TreatStatus为0,下一阶段的用户同样如此操作。
具体是这样:
public void Page_Loand(object sender,EventArgs e)
{
if(字段TreatStatus为1)
{
Response.Wrinte(“有人在处理”);
Response.End();
}
else
{
//字段TreatStatus为1
}
}
public void Page_Unloand(object sender,EventArgs e)
{
//字段TreatStatus为0
}
现在的问题是:
Page_Load事件设置字段TreatStatus为1后,一看数据库,还是为0,原因是
网页Page_Unload事件里又设置字段TreatStatus为0了,怎么办????
------解决方案--------------------服务器端的page_unload并不是关闭窗口,客户端document的unload也不是。具体什么时候发生这种事件,你可以自己写程序输出记录。
客户端关闭窗口在服务器端无法准确捕获。除非你是纯粹的Ajax程序,页面从来不刷新,这时候才可以用document.unload事件当作用户关闭窗口(其实也是重定向,当用户重新切换回来这也页面会发现已经作废了)。
你可以google一下统计“在线”的解决方案。当用户以任何操作方式刷新页面的时候不会误报为离线,能够在用户关闭浏览器甚至直接关闭电源等离线几秒钟内都准确捕获离线的解决方法才能用。