我用这样的URL呼叫代理:
http://myserver/db.nsf/testagent?openagent¶m1=ONE¶m2=TWO
agent'testagent'应该尽快获得参数值。我读到'query_string'应该这样做,但是当我真的只想获取值ONE和TWO时,代码变得很长。有没有更简单/更快的方法来获取这些值?
我的Lotus Script代码如下:
Dim s As New NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim arg As String, p1 As Long
arg = s.DocumentContext.Query_String(0)
p1 = InStr(arg, "&")
If p1 = 0 Then
Print "ERROR: No arugment."
Exit Sub
Else
arg = LCase(Mid$(arg, p1 + 1))
' (more code): Split again the ARG to & (more code)
' (more code): Split the values again to =, after that fill the 2 element as param 1 (ONE) and param 2 (TWO)
End If
您在问题的标题中已经有了答案:只需将字符串分割开...
此外,我通常将列表用于此类任务,因为它们易于访问且快速。我将其作为一个单独的功能来使用,以便能够重用代码并使所有内容更具可读性:
Function GetQuerystringParameters( strQueryString as String ) as Variant
Dim varParams as Variant
Dim lstrParams List as String
varParams = Split( strQueryString, "&")
Forall strParam in varParams
If Instr(strParam, "=") > 0 then
lstrParams( strtoken( strParam, "=", 1))= strtoken( strParam, "=", 2)
End If
End ForAll
GetQuerystringParameters = lstrParams
End Function
现在您可以简单地获取正确的参数,而参数甚至不需要以正确的顺序排列:
Dim urlParams as Variant
Dim yourArg as String
urlParams = GetQuerystringParameters( arg )
If isElement( urlParams( "param1" ) ) then
yourArg = urlParams( "param1" )
Else
Print "Error: no param1"
Exit Sub
End If
希望有所帮助。
编辑:我甚至可能会由此创建一个类,以进一步减少代码并使其更加可重用:
Class UrlParameters
Private lstrParams List as String
Sub New( strQueryString as String )
Call Me.GetParameters( strQueryString )
End Sub
Private Sub GetParameters( strQs as String )
Dim varParams as Variant
varParams = Split( strQs, "&")
Forall strParam in varParams
If Instr(strParam, "=") > 0 then
Me.lstrParams( strtoken( strParam, "=", 1)) = strtoken( strParam, "=", 2)
End If
End ForAll
End Sub
Function getUrlParameter( strParam as String ) as String
If Iselement(Me.lstrParams(strParam)) then
getUrlParameter = Me.lstrParams(strParam)
Else
GetUrlParameter = ""
End If
End Function
End Class
您可以这样使用此类:
Dim myParams as UrlParameters
Set myParams = New UrlParameters( arg )
param1 = myParams.getUrlParameter("param1")
param2 = myParams.getUrlParameter("param2")