NOTES的经典问题讨论

oatiew 2004-09-01 05:06:34
NOTES中的文档复制冲突恐怕让所有的开发者都头疼过,在R5下,NOTES本身没有提供很好的机制来解决此问题,我们只好自己写代码对文档进行了加锁的控制,当有一个用户编辑文档时,文档被加锁,其他用户打不开。
到了R6,NOTES增加了一个关键字lock,可以实现对文档的加锁,但仍需要开发者编程实现。
由于对数据的处理不是基于事务的,所以这个问题成为NOTES的经典问题,不知各位大师有何见解?
...全文
1325 53 打赏 收藏 转发到动态 举报
写回复
用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)
本书全面介绍了Lotus Notes R5中文版的操作和使用。共分24学时进行讲解,是自学和培训的优秀教程。它既适合初学者学习,也可以作为高级操作人员的参考书。 本书主要包括以下方面的内容:创建和发送电子邮件;使用Lotus Notes R5客户端程序漫游Web;把Notes带到路途上或在家中使用;在Lotus Notes R5的客户端中搜索和保存;管理日历项和任务;使用群组日历和安排计划;复制数据库;操作附件;自定义Notes客户端。 目 录 前言 第1学时 Notes起步 1 1.1 Lotus Notes和Domino概述 1 1.2 了解Notes的安全性 1 1.3 启动Notes 2 1.4 漫游Notes R5 客户程序 5 1.5 打开菜单并选择命令 7 1.6 查看便捷图标 8 1.7 使用对话框和属性框 9 1.8 修改口令 11 1.9 锁定标识符 12 1.10 退出Notes 12 1.11 学时小结 13 1.12 专家答疑 13 第2学时 操作数据库 14 2.1 阅读和使用文档 14 2.2 操作视图 15 2.3 刷新视图 17 2.4 查看状态栏 17 2.5 获得Notes帮助 18 2.6 打开新的数据库并添加书签 20 2.7 本地与服务器的对比 21 2.8 查看数据库属性 22 2.9 删除数据库 22 2.10 学时小结 23 2.11 专家答疑 23 第3学时 阅读邮件 24 3.1 打开邮件收件箱 24 3.1.1 使用导航面板 25 3.1.2 使用视图面板 26 3.1.3 使用活动栏 26 3.2 选择和标记邮件 27 3.3 阅读和预览邮件 27 3.3.1 了解阅读书签 28 3.3.2 使用预览窗格 28 3.4 学时小结 30 3.5 专家答疑 30 第4学时 创建、拼写检查和发送邮件 31 4.1 创建邮件 31 4.2 添加邮件地址 32 4.2.1 使用自动查找 34 4.2.2 了解Internet邮件地址 35 4.3 键入及拼写检查邮件 36 4.4 发送邮件 38 4.5 选择邮递选项 39 4.6 回信 41 4.7 转发邮件 42 4.8 学时小结 43 4.9 专家答疑 43 第5学时 管理邮件 44 5.1 打印邮件 44 5.2 邮件礼节 45 5.3 漫游邮件 46 5.4 控制未读的标记 46 5.5 排序邮件 47 5.6 删除和恢复删除的邮件 47 5.7 使用文件夹 49 5.7.1 创建文件夹 49 5.7.2 在文件夹中保存邮件 50 5.7.3 从文件夹中删除邮件 50 5.8 使用Notes Minder 51 5.9 归档邮件 52 5.10 压缩邮件 53 5.11 学时小结 53 5.12 专家答疑 54 第6学时 优化邮件 55 6.1 选择信头 55 6.2 创建信笺 56 6.3 操作定则 57 6.4 使用离开办公室通知 59 6.5 创建链接消息 62 6.6 生成电话消息 62 6.7 设置代替便笺编辑器 63 6.8 指定邮件惯用选项 64 6.8.1 设置邮件使用权限 64 6.8.2 如果你有访问权,就能够打开 别人的邮件 65 6.8.3 在邮件上添加签名 65 6.8.4 设置其他邮件惯用选项 66 6.8.5 设置影响邮件的Notes惯用选项 67 6.9 学时小结 68 6.10 专家答疑 69 第7学时 使用日历 70 7.1 选择日历视图 70 7.2 了解日历项的类型 72 7.3 进入约会 73 7.4 创建提示 76 7.5 创建纪念日 78 7.6 生成事件 78 7.7 添加待办事宜 79 7.8 用Actioneer 制作项目 81 7.9 学时小结 82 7.10 专家答疑 82 第8学时 管理日历项和任务 84 8.1 编辑日历项 84 8.2 转换日历项 85 8.3 管理任务 85 8.3.1 对任务的响应 86 8.3.2 转换待办事宜 87 8.3.3 分配任务 87 8.3.4 查看任务状态 91 8.3.5 标记完成的任务 91 8.4 添加节假日 91 8.5 打印日历 92 8.6 查看其他人的日历 92 8.7 设置日历惯用选项 93

535

社区成员

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

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