NOTES的经典问题讨论

oatiew 2004-09-01 05:06:34
NOTES中的文档复制冲突恐怕让所有的开发者都头疼过,在R5下,NOTES本身没有提供很好的机制来解决此问题,我们只好自己写代码对文档进行了加锁的控制,当有一个用户编辑文档时,文档被加锁,其他用户打不开。
到了R6,NOTES增加了一个关键字lock,可以实现对文档的加锁,但仍需要开发者编程实现。
由于对数据的处理不是基于事务的,所以这个问题成为NOTES的经典问题,不知各位大师有何见解?
...全文
1361 53 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
53 条回复
切换为时间正序
请发表友善的回复…
发表回复
sampanx 2004-09-27
  • 打赏
  • 举报
回复
你想怎么处理就怎么处理呀,只要后台多做些工作。
可以判断冲突项并给出详细的提示;没有冲突的可以合并;或者询问是否覆盖;......
oatiew 2004-09-27
  • 打赏
  • 举报
回复
sampanx(fire@2003):那提示后又该如何做呢?
sampanx 2004-09-25
  • 打赏
  • 举报
回复
同意gavinli(gavin) 的做法。假设B/S下:
A打开编辑,记录其打开时间Ta;
B打开编辑,记录其打开时间Tb;
如果B先保存将同时保存时间Tb,则A保存时根据比较Ta和Tb得出已经有人保存,提示A;
如果A先保存将同时保存时间Ta,则B保存时根据比较Ta和Tb得出已经有人保存,提示B;
希望对大家有帮助!
oatiew 2004-09-24
  • 打赏
  • 举报
回复
再没人顶,国庆后结
kingchang2000 2004-09-23
  • 打赏
  • 举报
回复
我觉得文件锁其实不是很好,
因为它要延伸出很多问题,而且不敢保证这些问题解决了,
文件锁就没有问题了,就象大家说的那样那样。
而且开发上很占人力、时间资源。

我个人比较倾向于如果不是编辑者就不允许保存的策略,我想这种方法
对于客户也有说法,呵呵

流程上我觉得同时做决策操作是不大可能的,而且业务逻辑也说不通
只能
1、说服客户放弃并行操作的念头,一定要努力扼杀~~
2、如果非要用,只能让并行处理做会签功能,不能对主文挡进行操作,
否则,无论如何,都避免不了冲突

诶,冲突,lotus人员的痛~~~
oatiew 2004-09-23
  • 打赏
  • 举报
回复
Zerotm(悠久金星):读者域中如果有N个读者呢?
hq_1980(Tommy):其实我这里的问题也就是用户太叼钻,你所说的超过规定时间保存无效他们是无论如何也不会接受的,这些用户都是省级领导,是我们BOSS的BOSS,...

我觉得用主、答文档的方式可能还好一些,但这种方式就需要对每个域值在流程中的修改情况进行细化,看哪些域值在哪些环节可以修改,哪些域值哪些环节值需要拼接....
唉,我现在的这套系统要改成这种方式可能性已经不大了,需要改的地方太多,改不好又成了马蜂窝,等下次项目吧...
Zerotm 2004-09-23
  • 打赏
  • 举报
回复
notes的最强的就是权限控制!
用读者域做不就都解决了?
oatiew 2004-09-23
  • 打赏
  • 举报
回复
kingchang2000(萨那) 提出了一个观点,就是程序人员难以实现的业务需求应该去引导用户改变需求,也就是扼杀,这一点强烈同意!

用最简单的codes做最复杂的things
oatiew 2004-09-22
  • 打赏
  • 举报
回复
temcozw(矿泉水) :如你所说,但是还会发生如

同一个域值被两个用户改了,A改成“OK”,B改成“NO”,保存时,是要“OK”呢,还是要“NO”呢?

的问题呀...
hq_1980 2004-09-22
  • 打赏
  • 举报
回复
在我说的方法中,如果用户长时间占用一个文档,超过规定时间,而文档又被另一个用户编辑时,如果前一个用户要保存文档,会在webquerysave中判断当前的标志文档中记录的用户是否是当前用户,不过不是,文档不会被保存,所以不会出现上述的问题。

  其实要完全做到真正的同时编辑,又不产生冲突或答复文档,是几乎不可能的。我们能做的就是在不同的情况下,选择最好的方法,尽量避免错误的发生。比如说在流程中的某些步骤,用户不会同时去修改同一个域,他们只是填写自己的意见,我们只需把他们的意见拼接起来存放到文档中,那么我就可以用主文档,答复文档的方式来做。但别的情况下可能这个方法并不适用。

  的确DOMINO没有良好的机制来一劳永逸的解决这个问题,但我觉得通过对不同的实际情况,选择最正确的方法,还是会有令人满意的结果的!:)
oatiew 2004-09-22
  • 打赏
  • 举报
回复
感谢大家的帮助,其实,不管哪种方式,在某些极端情况下,都避免不了有些问题:

文档直接加锁方式:
如一用户长时间占用一个文档,会导致其他用户打不开;死机时产生死文档...

主文档、答复文档方式:
同一个域值被两个用户同时改了,A改成“OK”,B改成“NO”,保存时,是要“OK”呢,还是要“NO”呢?

文档直接加锁,定时解锁:
如一用户长时间占用一个文档,则会产生复制冲突...

创建锁标志文档:
如一用户长时间占用一个文档,也会产生上述问题...

问题在根源在于OA系统中不同用户操作相同数据的概率比较大而DOMINO又没有良好的解决机制,大家说呢?
zzzlinda 2004-09-22
  • 打赏
  • 举报
回复
这方法比较好
hq_1980 2004-09-22
  • 打赏
  • 举报
回复
其实 fjjiantuo(黄浪) 的方法是比较传统而可行的,不过建议不要直接修改主文档来加锁。可以创建一个记录用户编辑标志的文档。

当用户编辑一个无人编辑的文档时,webqueryopen创建一个编辑标志文档,记录主文档的id,当前编辑人,开始编辑时间。

当用户编辑一个已存在编辑标志文档的文档时,判断编辑标志文档中的user是否和当前用户相同,如相同,进入编辑,修改编辑标志文档;如果不同,判断当前时间和编辑标志文档纪录的时间相差是否超过规定时间(假设为30分钟),如果超过,进入编辑,修改编辑标志文档,没超过,提示无法编辑,关闭窗口。

当用户在编辑文档时,刷新或直接关闭文档时,触发js的onBeforeUnload事件,在该事件中调用代理删除编辑标志文档。保存时同样去删除相应的编辑标志文档.

当然还可以加一个定时代理,去判断编辑标志文档的时间,和当前时间,超过30分钟删除编辑标志文档。

这个方法我觉得基本上还是可行的,只是在一个用户同时打开两个ie窗口去编辑同一个文档时,会产生冲突。!

楼主如果有兴趣,我可以发个库给你做参考。
temcozw 2004-09-17
  • 打赏
  • 举报
回复
在正常的情况下,复制冲突只在多人并行处理时才会发生
又想让多人可以同时编辑并保存文档,又想不冲突,建议使用主文档-答复文档来实现!
对每个环节-处理人生成一个答复文档,这样就只需要在保存的时候加锁主文档,不会有个别处理人独占文档的现象!
如果串行的话就直接编辑主文档.
oatiew 2004-09-16
  • 打赏
  • 举报
回复
yhbtzy(yhbtzy):自己用代码合并?到到底如何合并呢?比如同一个域值被两个用户改了,A改成“OK”,B改成“NO”,自己用代码合并时,是要“OK”呢,还是要“NO”呢?
oatiew 2004-09-14
  • 打赏
  • 举报
回复
BS下得相对更难搞一些,比如用户一边浏览XX网站一边编辑文档,突然旁边有人经过,用户慌忙将所有的IE都X掉,得,文档锁死了...
yhbtzy 2004-09-13
  • 打赏
  • 举报
回复
最好不要产生冲突文档,每次编辑不同的文档。然后自己用代码合并。
fjjiantuo 2004-09-13
  • 打赏
  • 举报
回复
没人继续此问题
fjjiantuo 2004-09-10
  • 打赏
  • 举报
回复
我还做一个强行解锁,避免突然断电

难道没有行之有效的办法??
fjjiantuo 2004-09-10
  • 打赏
  • 举报
回复
domino5.05的B/S下如何有效的加锁解锁,真是好头痛,我试好好多还是时不时有问题
我是这样设计的,表单里有个editor域,为空可以进入编辑,锁住就是正在编辑的人名

进行编辑,onload事件判断是否锁了,若锁了alert谁正在编辑人的姓名,否则运行代理把当前的用户名填入editor,保存并编辑打开.

保存文档,则editor=""

unload中写了一个代理判断eidtor是否为当前操作人,是则editor=""并保存

我不做一个强行解锁,避免突然断电

理想下好像是可行,但用户那时不时被锁住



大家多提见意
加载更多回复(32)

536

社区成员

发帖
与我相关
我的任务
社区描述
企业开发 Exchange Server
社区管理员
  • 消息协作社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧