用query_string拆分多个参数的简单方法是什么?

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

我用这样的URL呼叫代理:

http://myserver/db.nsf/testagent?openagent&param1=ONE&param2=TWO

agent'testagent'应该尽快获得参数值。我读到'query_string'应该这样做,但是当我真的只想获取值ONETWO时,代码变得很长。有没有更简单/更快的方法来获取这些值?

我的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
lotus-notes lotus-domino lotusscript lotus
1个回答
4
投票

您在问题的标题中已经有了答案:只需将字符串分割开...

此外,我通常将列表用于此类任务,因为它们易于访问且快速。我将其作为一个单独的功能来使用,以便能够重用代码并使所有内容更具可读性:

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")
© www.soinside.com 2019 - 2024. All rights reserved.