大家好,感谢大家观看这个问题,
我有一个程序,用户可以通过登录屏幕访问。一旦在登录屏幕上验证了用户的凭据,就会调用主程序(从登录屏幕),登录屏幕就会消失。所有的好。但是,如果会话崩溃(或者我按下CTRL-PAUSE),主程序将终止,我将返回初始登录屏幕。我认为,在会话崩溃后,进度(11.4)应该带我回到操作系统(Windows Server 2012),而不是回到初始屏幕。我尝试在程序的不同区域放置QUIT,但是Progress仍然把我带回到初始屏幕,而我需要它完全退出。任何想法都将非常感激。谢谢!
AVM的默认行为是在未处理的STOP条件发生后重新运行启动过程。
可以添加
ON STOP UNDO, RETURN "stopped" .
选项的DO, FOR或REPEAT块关闭,当你的"崩溃";发生了。然后调用过程可以检查& stopped"的RETURN-VALUE。
假设您使用的是最新版本(OpenEdge 12.x),您也可以对Progress.Lang.Stop:
使用CATCH块CATCH stopcon AS Progress.Lang.Stop:
QUIT.
END CATCH.
我认为你对"撞车"这个词的使用非常非常令人困惑。如果你的会话真的崩溃了在通常意义上,_progress(或prowin,如果这是Windows)终止,那么您将不会有任何锁定记录剩余。您还需要一个概要文件,它将帮助您确定问题发生的位置。
顺便说一下,您可以在客户机启动时添加错误日志记录,以确定QXtend无法找到的错误发生的位置:
_progres dbname -p startup.p -clientlog logname.log
您没有共享任何代码,所以我只能猜测,但是,推测,您正在通过-p启动参数运行您的登录程序。
纠正我,如果我错了,但沿着这些行:
_progres dbname -p startup.p
启动程序然后运行它运行的任何程序来让你登录并运行应用程序。也许像这样:
/* startup.p
*/
message "(re)starting!".
pause.
run value( "login.p" ).
run value( "stuff.p" ).
message "all done".
pause.
quit.
:
/* login.p
*/
message "hello, logging in!".
pause.
return.
随着:
/* stuff.p
*/
message "hello, doing stuff!".
pause.
run value( "notthere.p" ).
message "hello, doing more stuff!".
pause.
return.
在某个点出现错误(您似乎想将其称为"崩溃")。我已经安排了一个严重的错误发生的时候的东西。P试图"不在那里运行"。所以,如果你运行我的例子,你会看到你所描述的行为-你的会话"崩溃",启动过程重新运行,你再次进入登录屏幕。
要改变并捕获错误,只需使用"DO ON STOP"围绕RUN语句。这样的:
/* startup.p
*/
message "(re)starting!".
pause.
do on error undo, leave
on endkey undo, leave
on stop undo, leave
on quit undo, leave: /* "leave", exits this block when one of the named conditions arises */
run value( "login.p" ).
run value( "stuff.p" ).
/* we just leave because we finished normally */
end.
message "all done".
pause.
quit.
你提到qextend,所以我猜MFG/Pro涉及。如果您不能直接修改MFG/Pro启动过程(我记得应该是"-p MFG . "),只需将上面的代码调整为"这就是制造业。p从"DO ON STOP…"块。
我相信我已经找到了一种方法来退出初始登录屏幕时,这是一个会话崩溃的结果,通过使用ETIME函数。再次感谢Mike的回复。