« XPages for iPhone | Main| Building an XPages Calendar Custom Control »

Advanced XPages : Debugging Scoped Variables

Tags : XPages Scope Debug
Bookmark : del.icio.us  Technorati  Digg This  Add To Furl  Add To YahooMyWeb  Add To Reddit  Add To NewsVine 

Probably one of the most useful features in XPages has to be the scope variables, with proper planning you can really make good use of them and eliminate the need to store temporary values in backend notes documents. As I showed in a recent blog entry you can put anything into a scope variable, including a hashmap and you can then run a repeat control off the hashmap. Well the scope variables themselves are also hashmaps so why not use the same technique to see what's in them.

There are four scope variables that you can use, applicationScope, sessionScope, requestScope and viewScope. To make it easier to debug an application that is using scoped variables I have created four new custom controls, one for each of the four scoped variables. The code in the custom controls is simple.

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:panel id="applicationVars" styleClass="debugPanel">
<xp:table styleClass="debug">
<xp:tr>
<th>Variable Name</th>
<th>Variable Content</th>
</xp:tr>
<xp:repeat id="varRepeat" rows="30" value="#{javascript:applicationScope.keySet();}" var="scopeData">
<xp:tr>
<xp:td>
<xp:text escape="true" id="varName" value="#{javascript:scopeData}" />
</xp:td>
<xp:td>
<xp:text escape="true" id="varValue" value="#{javascript:applicationScope.get(scopeData)}" />
</xp:td>
</xp:tr>
</xp:repeat>
</xp:table>
</xp:panel>
</xp:view>


For the other custom controls you just need to replace applicationScope with the other scope variables.

Using your new custom controls is easy, just add them to the bottom of any page where you need to keep an eye on the scoped variables. If your only using the sessionScope on a page then you just need to add that custom control, if your making use of the requestScope then just include that custom control.

I also like to create a new xPage in my applications called 'debug' where I put in the custom controls for the application and session scopes for easy access to them.

Don't forget to remove ( or hide ) the debug info before releasing your application.

Comments

Gravatar Image1 - Nice one. Leave the controls there but only show them when a session variable "isDebug" has the value "boolean true". Then you can switch on debugging in a runtime environment