我正在尝试复制一个同事(用于验证我们的ERP系统的用户),该方法是在VBA环境中开发的同事,并在现有的ASP Classic应用程序中实现它。
ERP供应商为其应用程序提供了COM提供程序。我们提供用户的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应用程序中复制它 - 是否有类似的方法来创建事件处理程序(可以取消对话框)?
或者我是否必须在另一个组件中包含对此组件的调用,可以拦截对话框?
还有其他解决方案吗?
答案 0 :(得分:0)
您无法使用纯服务器端asp经典代码处理事件。您需要使用客户端VBScript处理这些类型的事件,但不幸的是,客户端VBScript仅适用于Internet Explorer。以下是client-side VBScript的示例代码:
<script language="VBScript">
function mybutton_OnClick()
answer = MsgBox("2+2=4?",vbYesNo,"Math Test")
if answer=vbYes then
MsgBox "Congratulations!",vbOkOnly+vbInformation,"True!"
else
MsgBox "Go learn Math!",vbOkOnly+vbCritical,"Wrong!"
end if
end function
</script>
<input type="button" value="Math Test" name="mybutton">
您可以复制上面的代码并将其粘贴到记事本中,然后保存为“.html”文件,然后在IE中打开它。