Lotus教程、Java教程、Java虚拟机、Java软件综合开发社区

Lotus、Domino、Java、C#、Web、数据库综合开发教程、资料社区

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字符串顺序标记,从1n

过程:从形如…?…&….&…的串中提取数据,假设?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