82. Notes客户端Print相同信息到状态栏的问题

这可能是个微不足道的问题,不过其他人也应该遇到过。在Notes客户端用LotusScript的Print语句输出信息到状态栏时,如果多次调用传入的参数实际相同,状态栏只会显示该信息一次。例如:

Print "a"

Print "a"

Print "a"

不会输出三行a,而只有一行。如果作为参数的变量内容相同,多次调用也只会输出一次。例如:

Print view.Toplevelentrycount

Print view.Toplevelentrycount

Print view.Toplevelentrycount

你或许会问,即使这有些不正常,也没什么妨碍,重复输出有什么意义呢?原因如下。在客户端应用程序中,这些对Print的调用都是为了在程序运行时给用户(不论是普通用户还是开发者人员)信息和反馈。Print重复的静态信息的用例会出现在报告事件和处理进度时,例如在批量审批流程、处理附件、查找特定记录等等时,可以在发生或处理完一个事件后,调用这样的语句:Print"A purchase workflow is reviewed.",Print "A XXX record is found."。以上情况还可以通过在输出的信息中添加序列号来解决。而受这种输出丢失影响更大的则是Print的参数为变量的情况。尤其是在调试程序时,往往会在代码的不同处Print同一变量,以理解某些语句的效果或弄清错误的原因。这时应该的多行输出变为一行,令人困扰。当然可以人为添加一些注释使得每次输出都有差别,但很麻烦。

Print只在客户端运行的代码中,也就是输出到客户端状态栏时,有这种行为。包含它的代码运行在服务器端时,按触发方式或者输出到服务器控制台,或者返回给浏览器,都没有这个问题。所以这是Print语句的特性,抑或是Notes客户机状态栏的问题,似乎更有可能是后者。

这种行为是不是bug?或者是出于某些限制或考量有意设计如此?非计算机科班出身的我,想不出来,在网上也没有查到。不过我印象中Firefox的Firebug插件的控制台也曾有同样行为,用console.log()方法输出重复信息时,只会显示一条。后来有了改进,在输出信息的左边会在括号里标注重复输出的次数,例如(5)Show me again.

剩下的就是如何应对,即workaround。

首先容易想到的就是写一个函数包装Print,在实际要输出的信息前附上当前时间。除却我们的目的,显示输出信息的时间本身也是有益的。遗憾的是LotusScript里的日期时间类型Variant只精确到秒,如果重复信息的输出是在同一秒内,问题依旧。LotusScript可获得的最精确的当前时间是Timer函数的返回值,精确到百分之一秒。于是我们可以写出如下函数:

	Public Function PrintMsg(msg As Variant)
		Dim strTime As String
		strTime=Format(Now, "hh:mm:ss")
		Dim hs As Long 
		hs=Timer Mod 100
		strTime=strTime & ":" & hs
		Print(strTime & " - " & msg)
	End Function

但在应用

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值