我正在尝试复制同事在 VBA 环境中开发的一种方法(用于验证我们 ERP 系统的用户),并在现有的 ASP Classic 应用程序中实现它。
ERP 供应商为其应用程序提供了 COM Provider。我们提供用户的 ERP 凭证,并使用该组件来确认它们是否有效。
我以为我在遵循同事的方法,当我提供有效凭据时它确实有效,但是当我提供无效凭据时,它会锁定应用程序。
深入挖掘,如果凭证有效,则方法调用将返回一个值并按预期继续执行。但如果凭据错误,则会出现一个对话框。我的同事将此事件困在他的 VBA 应用程序中,自动取消对话框,将控制权返回给原始调用函数。
VBA 代码示例:
Private WithEvents m_oServer As Server
Private Sub m_oServer_RequestCredentials(Identification As String, Password As String, Cancel As Boolean)
'Dialog will appear unless we cancel it
Cancel = True
End Sub
Public Function Check_Logon_Credentials() As Boolean
'starts here
If m_oServer.Invoke("ClientApplication", "IdentifyCurrentUser", m_oResult, sibtRecord) Then
Check_Logon_Credentials = True
Else
Check_Logon_Credentials = False
End If
'Do more stuff
End Function
看来 m_oServer_RequestCredentials 是组件公开的事件处理程序,VBA 能够拦截,取消对话框。
问题是如何在我的 ASP 应用程序中复制它 - 是否有类似的方法来创建事件处理程序(可以取消对话框)?
或者我是否必须将对该组件的调用包装在另一个可以拦截对话框的组件中?
还有其他解决方案吗?