Manage Learn to apply best practices and optimize your operations.

Quickly parse URL parameters

Tired of cutting out ParentUNID and Count Start when submitting a page from browsers? This function makes a list of parameters and their corresponding values, if any.

View member feedback to this tip.

I got tired of cutting out the ParentUNID and Count and Start parameters from a URL when submitting a page from browsers. So I came up with this LotusScript function named "makeParams()" to make a list of parameters and their corresponding values, if any. The parameter can be accessed from the list in LotusScript by using the format paramlist("ParentUNID").

I've also provided this function in JavaScript below, too. (I tested it on Internet Explorer though, so I'm not sure how it'll work on Netscape, Opera, Mac, etc.) You can access the JavaScript list using paramlist["ParentUNID"].

LotusScript code:

Function makeParams()
'Better that paramlist is declared in 
(Declarations) by: Dim paramlist list as
String
'If you declare it here, the list dies when 
the function looses scope
 Dim paramlist list as String
 Dim arg As Variant
 Dim parts As Variant
 arg = Evaluate({ @explode
( Query_String ; "&") }, doc)
 Dim tempdoc As notesdocument
 Set tempdoc = 
s.currentdatabase.createdocument
 Forall params In arg
  tempdoc.params = params
  parts = Evaluate( {@explode
( params ; "=" )} , tempdoc)
  If Ubound( parts ) = 1 Then 
   paramlist(parts(0)) = parts(1)
  Else 
   paramlist(parts(0)) = ""
  End If  
 End Forall

' To test for a parameter use  IsElement 
( listName ( stringExpr ) )

If ( IsElement(paramlist("parametername") ) 
then
  'Then the string  <parametername> 
was in the URL

  'If it had a value associated with it then 
accessing the list 
  'with the string <parametername> 
will return the associated value
  'If you just included a parameter in the 
URL like  <&responses>
  'then just finding the string <&responses>
 is useful by itself.
  'For instance if 
Query_String=http://someDomain.com/
TheOnlyNotesDBwithoutScopeCreep.nsf/anyDBform
?OpenForm&ParentUNID=
3330E53C72B61DD588256E9D0025C853&responses
  'Calling <paramlist("ParentUNID")> 
returns the UniversalID 333...853
  'To check to see if responses is in the url 
IsElement tells you that
End If

End Function

JavaScript code:

locationHREF= 
"http://someDomain.com/TheOnlyNotes
DBwithoutScopeCreep.nsf/an
yDBform?OpenForm&ParentUNID=
3330E53C72B61DD588256E9D0025C853&responses";
paramlist = new Array();
contextlist = new Array();
splitReturn = locationHREF.split
(new RegExp("&","g"));
  for (paramNum in splitReturn) {
  parts = splitReturn[paramNum].split("=");
  if ( 2 == parts.length ) { 
   paramlist[parts[0]] = parts[1];
  } else {
   paramlist[parts[0]] = "";
  }
 }

// If you try to get the value of a 
Non-parameter it returns null
 if ( null==paramlist ["notaparameter"] ){
  alert("Not a param");
 }else{
  alert("Is a param");
 }

MEMBER FEEDBACK TO THIS TIP

Domino 6 has a command called @UrlQueryString that may be easier to use. Presumably it works with the LotusScript Evaluate command if you need to use it in LotusScript.

—Mark B.

******************************************

I think it's also worth pointing out that ND6 foregoes the need for any of this using the @URLQueryString function. Also, users can then use split and join in LotusScript rather than an Evaluate and @Explode.

I have found that I've had to rewrite code like these functions as they don't cater for characters such as quotation marks being passed in via the URL, and this effectively breaks the LotusScript as the @Explode can't cope. Of course, there are workarounds, but if you have ND6 you don't need to bother!

—Giles H.

******************************************

Re: LotusScript version

You can use the Split function for this. The code doesn't "URL decode" the parameters, so it will fail with values that contain spaces, "&" or other characters that can't appear or have special meaning in the URL.

Portions of the parameter value to the right of an "=" are lost -- e.g., "&Equation=e=m*c^2" would only see the value "e."

Andre Guirard

Do you have comments on this tip? Let us know.

This tip was submitted to the SearchDomino.com tip exchange by member Sean Haggerty. Please let others know how useful it is via the rating scale below. Do you have a useful Notes/Domino tip or code to share? Submit it to our monthly tip contest and you could win a prize and a spot in our Hall of Fame.

Dig Deeper on LotusScript

Start the conversation

Send me notifications when other members comment.

Please create a username to comment.

-ADS BY GOOGLE

SearchWindowsServer

Search400

  • iSeries tutorials

    Search400.com's tutorials provide in-depth information on the iSeries. Our iSeries tutorials address areas you need to know about...

  • V6R1 upgrade planning checklist

    When upgrading to V6R1, make sure your software will be supported, your programs will function and the correct PTFs have been ...

  • Connecting multiple iSeries systems through DDM

    Working with databases over multiple iSeries systems can be simple when remotely connecting logical partitions with distributed ...

SearchDataCenter

SearchContentManagement

Close