Lotus关于获取URL字符串参数
Published by admin on 02月 27, 2011
在B/S结构开发中,我们需要经常使用从URL链接中包含特定的参数或数据信息以用于获取相应的数据用于展现相应的动态页面。在早先的JSP\ASP,这样的方法使用很简单的Request内置对象来代替。但是在Lotus中却没有这样的机制,你需要自己编写方法来解析这些字符串。
下面是在项目开发过程中,根据之前同事编写的函数进行参数的简化更加符合正常的使用习惯。
【说明】需要在表单上设置一个显示时计算的域,在其中输入公式:@UrlQueryString
如果需要解码可以使用
@UrlDecode(“Domino”;@UrlQueryString)或@UrlDecode(“Platform”;@UrlQueryString)
函数:getParamByName
参数:所需要获取URL字符串标记名称
过程:从形如…?…&….&…的串中提取数据,假设?OpenAgent&key1=value1&key2=value2,使用getParamByName(key1)将返回value1,使用getParamByName(key2)返回value2,其他数据将返回空串。
Function getParamByName (Byval key As String)As String
Dim curDoc As NotesDocument
Dim session As New NotesSession
Dim QueryString,keyValue As String
Dim pos,nextPos, equalPos,lenKey As Integer
Set curDoc=session.DocumentContext
QueryString=curDoc.Query_String(0)
pos=Instr(1,QueryString,“&”+key)
If pos>=1 Then
lenKey=Len(key)
nextPos=Instr(pos+lenKey+1,QueryString,“&”)
If nextPos>=pos+lenKey+1 Then
‘&Key1=12&key2=value2
‘1 5 9
keyValue=Right(Left(QueryString,nextPos-1),nextPos-pos-lenKey-2)
Else
‘&Key1=12
‘1 5678
keyValue=Right(QueryString,Len(QueryString)-pos-lenKey-1)
End If
equalPos=Instr(1,keyValue,“=”)
If equalPos>=1 Then
keyValue=Right(keyValue,Len(keyValue)-equalPos)
End If
getParamByName =keyValue
Else
getParamByName =“”
End If
End Function
函数:getParamByIndex
参数:所需要获取URL字符串顺序标记,从1到n。
过程:从形如…?…&….&…的串中提取数据,假设?OpenAgent&value1&key2=value2,使用getParamByIndex (1)将返回value1,使用getParamByIndex (2)返回value2,其他数据将返回空串。
Function getParamByIndex(Byval index As Integer)As String
‘index 1~n
On Error Goto FuncErr
Dim curDoc As NotesDocument
Dim session As New NotesSession
Dim QueryString,keyValue As String
Dim paramArray As Variant
Dim LowBound,UpperBound As Integer
Dim keyItem As String
Set curDoc=session.DocumentContext
QueryString=curDoc.Query_String(0)
paramArray=Split(QueryString,“&”)
getParamByIndex =“”
‘..?OpenAgent&key1=value1&value2&key3=value3
If Isarray(paramArray) Then
LowBound=Lbound(paramArray)
UpperBound=Ubound(paramArray)
If UpperBound-LowBound+1>=index Then
Dim pos As Integer
keyItem=paramArray(LowBound+index)
pos= Instr(1,keyItem,“=”)
‘key1=123
‘1 45678
If pos>1 Then
getParamByIndex =Right(keyItem,Len(keyItem)-pos)
Else
getParamByIndex =keyItem
End If
End If
End If
Exit Function
FuncErr:
Msgbox Error$ + ” at line: “ + Cstr(Erl()) + ” in getParamByIndex “
Exit Function
End Function
也可以在Declarations(声明)中,声明一个列表,在初始化时将URL字符串各参数存储在一个列表中,可以使用参数名获取数据也可以使用索引来获取指定位置数据。
Dim Request List As String
Sub initRequest()
On Error Goto FuncErr
Dim curDoc As NotesDocument
Dim session As New NotesSession
Dim QueryString,keyValue As String
Dim paramArray As Variant
Dim LowBound,UpperBound As Integer
Dim keyItem,key As String
Dim index As Integer
Set curDoc=session.DocumentContext
QueryString=curDoc.Query_String(0)
paramArray=Split(QueryString,”&”)
If Isarray(paramArray) Then
LowBound=Lbound(paramArray)
UpperBound=Ubound(paramArray)
For index=LowBound To UpperBound
Dim pos As Integer
keyItem=paramArray(index)
pos= Instr(1,keyItem,“=”)
If pos>1 Then
keyValue=Right(keyItem,Len(keyItem)-pos)
key=Left(keyItem,pos-1)
Else
keyValue=keyItem
key=“&”+Cstr(index)
End If
key=Lcase(key) ‘不区分大小写
If Not Iselement(Request(key)) Then
Request(key)=keyValue
End If
Next
End If
Exit Sub
FuncErr:
Msgbox Error$ + ” at line: ” + Cstr(Erl()) + ” in initRequest “
Exit Sub
End Sub
如果需要根据索引来取得列表Request的数据,可以通过这样的方式来获取。
Function getRequestByIndex(ByVal index As Integer) As String
Dim count As Integer
count=0
getRequestByIndex=””
Forall requestItem in Request
count=count+1
If count=index Then
getRequestByIndex=Request(ListTag(requestItem))
Exit Function
End If
End Forall
End Function
Function getRequestByName(ByVal name As String) As String
getRequestByName=””
If iselement(Request(name)) then getRequestByName=Request(name)
End Function

Add A Comment