表单中域值如何在未提交时从Session中取到?
我看了许多代理,
Set Doc=session.DocumentContext
year = Doc.year(0)
这样即可取到当前表单中的域值,但是我怎么试也取不到,请问取这个值需要什么条件?
修改表单属性?还是admin端设置?还是程序里需要加什么别的?
问题点数:20、回复次数:19Top
1 楼EANFS(我的爱是折下自己的翅膀 送给你飞翔)回复于 2004-12-04 13:53:00 得分 10
dim session as new NotesSession
dim doc as NotesDocument
set doc = session.DocumentContext
print doc.year(0)
一定可以的Top
2 楼Xray2004(鸟蛋(孵化中))回复于 2004-12-04 16:11:02 得分 0
我又试了几次,找到问题了.
楼上的大侠,你的代理时怎么激活的?用公式还是JS啊?我用JS总是没法保留Session。
用公式倒是可以:@Command([ToolsRunMacro];"test") ,test就是这个代理,
但是这时又有一个问题,就是我在测试库中可以正常运行,print doc.year(0)也确定打印出了数据。可是当我在应用库比如我们做的档案库和发文库里就出错了,代理与表单是最简单的,不行,改用测试库中的代理与表单拷贝过来也不行,我把这两个库的数据库属性都改成和测试库差不多了还是不行(除了两个应用库有模板库)。
结果就是用JS保留不了session,用公式直接就出错了,页面错误,后台提示:
HTTP Web Server: Corrupt Data Exception [/lfoa/dangan.nsf/years?openform&seq=1]Top
3 楼kingchang2000(骠骑大将)回复于 2004-12-04 18:32:16 得分 0
你用js是用什么方法呀,一般用url的方法打开对应的代理是可以的,
你报的这个错误好像是你修改了years这个表单后再作代理操作发生的。
EAFNS的方法是正确的。Top
4 楼EANFS(我的爱是折下自己的翅膀 送给你飞翔)回复于 2004-12-04 22:56:31 得分 0
JS应该是不能调用代理的吧,没有试过,
有用过一个控件倒是可以的Top
5 楼Xray2004(鸟蛋(孵化中))回复于 2004-12-05 12:29:28 得分 0
js我用的是window.open();和location.replace();一个是新开一页,一个是当前页换了,都保留不了session, 公式@Command([ToolsRunMacro];"test")有时无法用,报上面说的错,有时也是打开空白页这时当前的地址栏显示的是test?openagent,只有在测试库中对过几次,print doc.year(0)能打印出来,地址栏是years?openform&seq=1;各位大侠,这到底是怎么回事啊?
(痛苦中!!)Top
6 楼Xray2004(鸟蛋(孵化中))回复于 2004-12-06 08:48:34 得分 0
沉了,顶一下。没人遇到过这样郁闷的问题吗?Top
7 楼gzxiaohao()回复于 2004-12-06 09:06:38 得分 0
可以取到的。你把代理用公式写在一个按钮里面,然后用JS去点击他就OK了。这个是最常用的办法。结帐。呵呵!Top
8 楼Xray2004(鸟蛋(孵化中))回复于 2004-12-06 09:27:37 得分 0
楼上的大侠,你能说的具体点吗?你说的和做个按钮放入@Command([ToolsRunMacro];"test")有什么样的区别?能够保留session?
我最苦恼的是测试库中这样做有时好用,有时不行,而应用库根本不行,能告诉我原因吗?
万分感谢!!Top
9 楼xaser(繁星似火)回复于 2004-12-06 09:56:15 得分 0
什么叫保留session???在notes中没有这样的概念,不要把asp中的思路带到notes中来。
在notes中每次都是在代理中这样取session
dim session as new NotesSessionTop
10 楼xaser(繁星似火)回复于 2004-12-06 09:58:00 得分 0
在未提交时取域值是什么意思呢?不明白,
想用js取域值就这样
alert(document.forms[0].fieldname.value)Top
11 楼Xray2004(鸟蛋(孵化中))回复于 2004-12-06 10:41:41 得分 0
"在未提交时"那是我开始的一个误解,JS这样取值我知道,但是通过url传参,在url里时中文,在代理中就变成乱码了,不知道怎么处理?
“保留session”我是说为什么有时通过调用代理取session中的DOC.year(0)取不到值的问题。
呵呵,用词不准。Top
12 楼xaser(繁星似火)回复于 2004-12-06 11:14:40 得分 10
1.url传参数不要使用中文,js使用escape(),将中文转换后再带入url,公式则使用@URLEncode,同样先转换中文。
2.检查year这个域的属性,不要为显示时计算。Top
13 楼Xray2004(鸟蛋(孵化中))回复于 2004-12-06 11:42:52 得分 0
大大,year域确实是个可编辑的域啊,谢谢老大对中文处理的解释^-^Top
14 楼zhanyunpeng(大鸟)回复于 2004-12-06 12:52:15 得分 0
如果用openagnet调用代理的话,取出的session是 agent的,就是说,你的documentcontext是代理程序的,而不是文档Top
15 楼Xray2004(鸟蛋(孵化中))回复于 2004-12-06 15:36:20 得分 0
楼上的 zhanyunpeng(大鸟),请问你是怎么调用代理的呢?Top
16 楼xaser(繁星似火)回复于 2004-12-06 16:36:40 得分 0
要对当前文档进行操作,不要使用url带参数的方式去打开agent,
直接使用按钮、或者热点,
这些按钮或者热点的点击事件可以执行公式@command([toolsrunmacro];"AgentName")
不过,看你写的内容(years?openform&seq=1)来看应该是这样做的。
或者js触发这些按钮或热点的点击事件
比如按钮有个id (button123),
则js:document.all.button123.click().
Top
17 楼zhanyunpeng(大鸟)回复于 2004-12-06 16:48:32 得分 0
Xray2004(鸟蛋(孵化中)) :
用xaser(繁星似火)的方法调用代理就可以Top
18 楼Xray2004(鸟蛋(孵化中))回复于 2004-12-06 18:14:43 得分 0
发现一个问题,公式命令@command([toolsrunmacro];"AgentName")在数据库A表单中打开web页浏览,点击按钮激活公式命令后,系统确去找数据库B中的代理?这是为什么?代理名字也不对,是很久以前改的代理名字。
再次谢谢大家的热心!!Top
19 楼Xray2004(鸟蛋(孵化中))回复于 2004-12-07 08:55:28 得分 0
代理没动,表单与数据库没动,就把按钮删了,重建了一个一摸一样的就好了,不知道是不是lotus的BUG。呵呵Top




