Getting the Base URL of the Current Database with SSJS

It’s easy to get the current page URL in SSJS with context.getUrl().toString(). However, it’s a little less straightforward if you just want to determine the base URL of the current application. This can be useful when you need to build a link to some other page within the current application and send it out in an e-mail notification. In this post, I’ll look at the results of some methods in the XSPUrl object and show how to achieve the desired effect.

In the last post, I looked at URL @functions in the Extension Library. There are some useful functions there, but none that retrieve what I’m looking for.

XSPUrl

The global context object has a getUrl() method that makes it easy to get a handle to an XSPUrl object representing the current URL. You can retrieve the full URL (including the querystring) or use any of the methods available to get pieces of the URL ( getAddress(), getHost(),getParameter(), getPath(), getPort(), getQueryString()).

Here are some examples of the output, given this url: http://127.0.0.2/BlogTesting.nsf/URL.xsp?parameter1=a

Method Result
context.getUrl().toString() http://127.0.0.2/BlogTesting.nsf/URL.xsp?parameter1=a
context.getUrl().getPath() /BlogTesting.nsf/URL.xsp
context.getUrl().getAddress() http://127.0.0.2/BlogTesting.nsf/URL.xsp
context.getUrl().getHost() 127.0.0.2
context.getUrl().getSiteRelativeAddress(context) /URL.xsp

There are several handy methods, but none providing exactly what I’m looking for.

Options for Getting the Base URL

The getAddress() method gets the URL up to, but not including, the querystring. However, it still includes the current page name. The global view object has a getPageName() method that returns the name of the currently-displayed XPage.

The snippet that I’ve been using recently uses the getAddress() method and replaces the current page name with an empty string, leaving us with the base URL:

context.getUrl().getAddress().replace(view.getPageName(), '')

You could just as easily use Javascript’s substr or substring methods to look for the ‘.nsf’ and only retrieve characters up to the end of it in most cases, but that may be problematic if you have routing that masks the NSF name.

What’s Your Solution?

This seems like something that probably has a number of workarounds. How have you solved it? Is there something simpler that I’ve overlooked?

Update

Check out David Leedy’s XPages URL Cheatsheet for more URL-related functions http://xpagescheatsheet.com/cheatsheet.nsf/url.xsp

There are two listed on there that sounded like they might provide what I was looking for, but did not.

  • database.getHttpURL() – includes the database replica ID rather than name and appends ?OpenDatabase to the end
  • view.getBaseURL() – sounds perfect, but doesn’t return anything
Advertisements

3 responses to “Getting the Base URL of the Current Database with SSJS”

  1. DavidLeedy (@DavidLeedy) says :

    Great post! I would normally have answered that when in doubt I just go to the XPages URL Cheatsheet ( http://xpagescheatsheet.com/cheatsheet.nsf/url.xsp ) but I realized I was missing some of these and took the liberty of adding them. 🙂

    Thanks for the info!!!

    • Brad Balassaitis says :

      I did not remember about the URL page of the cheatsheet, so I’m glad you brought it up.

      I also thought I saw the answer I was looking for on there but database.getHttpURL() shows the replica ID of the database rather than the file name (and appends ?OpenDatabase to the end)

  2. Fatih Duranoglu says :

    Many many Thanks.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: