“子终止”被执行。我怎样才能禁用它?

问题描述 投票:0回答:1

MS Word报告的输出设置在“sub terminate”。终止时 - 使用“X”按钮退出表单,还会执行“子终止”。我怎样才能禁用它?

我正在处理一个旧案例,我不知道为什么输出是用 sub terminate 写的?

lotus-notes lotusscript
1个回答
0
投票

简单的回答:你不能。

有些代码部分总是被执行。对于任何 LotusScript-Container,这在加载时为“Sub Initialize”,在卸载时为“Sub Terminate”。

例如一个表单还有诸如“QueryOpen”、“PostOpen”、“QuerySave”、“PostSave”...等事件:你也不能阻止这些事件的执行。

现在,如果您的代码在 Sub Terminate 中,但您不想在按下窗口关闭“X”按钮时执行它,那么您需要在某处设置一个标志。如果缺少此标志:不要执行。

您可以选择全局变量、文档项值或环境变量来确定是否应执行代码:

我将展示一个带有全局变量的示例:

在(声明)中放置:

Dim executeTerminate as Boolean

在你的终止中你包装你现有的代码:

If executeTerminate Then
  '- your code
End If

或者你退出(如果你不喜欢附加if的缩进:

If executeTerminate = False Then Exit Sub

现在只要单击“x”,什么都不会发生。

如果你有一个应该触发代码的按钮,然后在按钮内部使用它:

executeTerminate = True

那应该可以解决问题。如前所述,您还可以使用文档项或环境变量来解决问题:

'- in button
'- With item:
Call doc.Replaceitemvalue( "ExecuteTerminate" , "1" )
'- With Environment
Call session.SetEnvironmentVar( "ExecuteTerminate" , "1" )

'- in Terminate
'- item:
If doc.GetitemValue( "ExecuteTerminate" )(0) = "1" Then
  '- don't forget to reset
  Call doc.Replaceitemvalue( "ExecuteTerminate" , "" )
'- Environment:
executeTerminate = session.GetEnvironmentString( "ExecuteTerminate" )
'- don't forget to reset
Call session.SetEnvironmentVar( "ExecuteTerminate" , "" )
If executeTerminate = "1" Then
© www.soinside.com 2019 - 2024. All rights reserved.