public package Foswiki::OopsException 
  public package Foswiki::OopsException is a Error 
Exception used to raise a request to output a preformatted page.
Despite the name, 
oops is not used just for errors; it is also used
for one-time redirection, for example during the registration process.
The 
Foswiki::UI::run function, which is in the call stack for almost
all cases where an 
OopsException will be thrown, traps the exception
and outputs an 
oops page to the browser. This requires
the name of a template file from the 
templates directory, which it
expands.  (The passed template name is prefixed with "oops", as shown below.)
Parameter values passed to the exception are instantiated in
the expanded template. The 
oops page is output with an HTTP status
appropriate to the event that caused the exception (default 500).
Extensions may throw 
Foswiki::OopsException. For example:
use Error qw(:try);
...
throw Foswiki::OopsException( 'bathplugin',
                            status => 418,
                            web => $web,
                            topic => $topic,
                            params => [ 'big toe', 'stuck in', 'hot tap' ] );
This will raise an exception that uses the 
oopsbathplugin.tmpl template. If
UI::run handles the exception it will generate a redirect to:
oops?template=oopsbathplugin;param1=bigtoe;param2=hot%20tap
The 
oopsbathplugin.tmpl might contain:
(<nop> inserted to prevent translation interface from extracting these examples)
%TMPL:INCLUDE{"oops"}%
%TMPL:DEF{"titleaction"}% %<nop>MAKETEXT{"Bathing problem"}% %TMPL:END%
%TMPL:DEF{"heading"}%%<nop>MAKETEXT{"Problem filling bath"}%%TMPL:END%
%TMPL:DEF{"topicactionbuttons"}%%TMPL:P{"oktopicaction"}%%TMPL:END%
%TMPL:DEF{"script"}%<meta http-equiv="refresh" content="0;url=%SCRIPTURL{view}%/%WEB%/%TOPIC%" />%TMPL:END%
%TMPL:DEF{"pagetitle"}%%TMPL:P{"heading"}%%TMPL:END%
%TMPL:DEF{"webaction"}% *%<nop>MAKETEXT{"Warning"}%* %TMPL:END%
%TMPL:DEF{"message"}%
%<nop>MAKETEXT{"Your bath cannot be filled because your [_1] is [_2] the [_3]" args="drain,flooding,basement"}%%TMPL:END%
In this case the 
oops page will be rendered with a 418 ("I'm a teapot")
status in the HTTP header.
A more practical example for plugins authors that does not require them to
provide their own template file involves use of the generic message template
available from 
oopsattention.tmpl:
throw Foswiki::OopsException( 'attention', def => 'generic',
   params => [ Operation is not allowed  ] );
Note that to protect against cross site scripting all parameter values are
automatically and unconditionally entity-encoded so you cannot pass macros
if you need messages to be automatically translated you either need to handle
it in the perl code before throwing 
Foswiki::OopsException or put the %MAKETEXT
in the template. You cannot pass macros through the parameters.
Since date indicates where functions or parameters have been added since
the baseline of the API (TWiki release 4.2.3). The 
date indicates the
earliest date of a Foswiki release that will support that function or
parameter.
Deprecated date indicates where a function or parameters has been
deprecated. Deprecated
functions will still work, though they should
not be called in new plugins and should be replaced in older plugins
as soon as possible. Deprecated parameters are simply ignored in Foswiki
releases after 
date.
Until date indicates where a function or parameter has been removed.
The 
date indicates the latest date at which Foswiki releases still supported
the function or parameter.
  ClassMethod new( $template, ...) 
 
-  templateis the name of an oops template. e.g. 'bathplugin' refers totemplates/oopsbathplugin.tmpl
 
The remaining parameters are interpreted as key-value pairs. The following keys are used: 
-  webwill be used as the web for the oops
-  topicwill be used as the topic for the oops
-  def- is the (optional) name of a TMPL:DEF within the template
-  keep- if set, the exception handler should try its damnedest to retain parameter values from the query.
-  paramsis a reference to an array of parameters. These will be substituted for %PARAM1%, %PARAM2% ... %PARAMn% in the template.
For an example of how to use the 
def parameter, see the 
oopsattention
template.
NOTE: parameter values are automatically and unconditionally entity-encoded
  ObjectMethod stringify( [$session] ) → $string 
Generates a string representation for the object. if a session is passed in,
and the exception specifies a def, then that def is expanded. This is to allow
internal expansion of oops exceptions for example when performing bulk
operations, and also for debugging.
  ObjectMethod generate( $session ) 
Generate an error page for the exception. This will output the error page
to the browser. The default HTTP Status for an Oops page is 500. This
can be overridden using the 'status => ' parameter to the constructor.