# Request Handlers
RHCore simplifies the creation of a request handler and has a few advantages over standard approaches:
- reduces boilerplate by abstracting away
guiComponentsandpageManager; - provides a logical place for determining whether a request handler may be executed; and
- uses
RHTemplateinstead of weblingo.
# Setup
A request can be built by subclassing one of the following into your module and giving it a unique name:
RHTemplate::RHTemplateRequestHandlerRHTemplate::RHTemplateAdminRequestHandlerRHTemplate::RHTemplateHomeRequestHandler
These are all direct subclasses from the standard LLRequestHandler, AdminLLRequestHandler, and HomeRequestHandler.
The following features should be implemented:
fEnabled- set totrue;fFuncPrefix- something unique (such as the ospace name);SetPrototype(and.fPrototype) - a list defining the parameters of the request handler; andSubclassExecute()- a script with the logic of the request handler.
The following features can be toggled true or false to display the related component:
fEnabledFooterfEnableLivelinkUIfEnableMastheadfEnableMenufEnableSearch
The mayPerformRequest() function can be implemented to return false if the request may not be executed for any reason (e.g., permissions, a URL parameter is invalid, etc.).
# Implementation
A bare-bones implementation of SubclassExecute() is as follows:
function Void SubclassExecute(Object prgCtx, Record request, Assoc response)
Frame template = $RHTemplate.RHTemplate.New(prgCtx, 'rhcore/generic_properties_form.html')
Frame context = $RHTemplate.RHContext.New(request)
// place your logic here
.SetTemplate(template)
.SetContext(context)
end
The template and context can be setup as required, and rendered by passing them to the SetTemplate and SetContext functions.
# Building a URL
Links to a request handler can be generated with the $RHCore.Utils.BuildURL() function as follows:
String url = $RHCore.Utils.BuildURL(request, <request name> [,parameters])
Parameters are passed in to match the prototype and are automatically escaped.
For example, a login page URL (which has a required nexturl parameter defined in the prototype) can be created as follows:
String url = $RHCore.Utils.BuildURL(request, 'll.getlogin', {nexturl})
This is easier than pasting the URL together using string operations.