Creating and Manipulating a Parameter List

21-6 Publishing Reports to the Web with Oracle Reports Services ■ SRW.START_DEBUGGING ■ SRW.STOP_DEBUGGING To switch on debugging mode simply call SRW.START_DEBUGGING and to stop it call SRW.STOP_DEBUGGING. The debugging mode must be started immediately before you run your actual logic. It stays on as long as the current instance of the package is loaded. One way you can display this information is by setting SERVEROUT to ON in SQLPLUS before you run your script. In addition to this method of debugging, the API has a set of pre-defined exceptions to be used for error handling. Youll find examples of these exceptions in the srw_ test.sql script provided with your Oracle Reports Services installation.

21.3 Invoking a Report from a Database Event

Database triggers are the primary mechanism for invoking reports using the Event-Driven Publishing API. The Oracle database enables you to define various scopes of triggers that fire in response to various events. To submit a database-driven job, you use the code described in the previous sections within a database trigger. There are many ways to use event-driven publishing. One way is to create security protocols using a trigger that fires whenever a grant is done or a user logs on or off. Another way is to create automated processes that respond to certain types of changes to data in a table. For example, a database trigger could fire when the status of an expense report changes to DONE; in turn, a report could automatically be sent to an employees manager. For example: CREATE TRIGGER EXP_REP_TRG AFTER INSERT OR UPDATE on EXP_REP FOR EACH ROW myPlist SRW_PARAMLIST; myIdent SRW.JOB_IDENT; BEGIN IF :new.ExpStat = DONE THEN myPlist := SRW_PARAMLISTSRW_PARAMETER,; SRW.ADD_PARAMETERmyPlist,GATEWAY,http:…; SRW.ADD_PARAMETERmyPlist,SERVER,fooSVR; SRW.ADD_PARAMETERmyPlist,REPORT,foo.RDF; SRW.ADD_PARAMETERmyPlist,USERID,foobar; SRW.ADD_PARAMETERmyPlist,ExpenseID,:new.ExpID; myIdent := SRW.RUN_REPORTmyPlist; END IF; END; This trigger will fire after each update on the EXP_REP table. In the event the status changes to DONE, the report request is run. If you want your request to run against a key specified in the cgicmd.dat key map file for more information, see Section 18.13, Using a Key Map File , specify the CMDKEY parameter in lieu of the REPORT parameter. If the key contains user ID information, you can omit the USERID parameter as well. For example: CREATE TRIGGER EXP_REP_TRG AFTER INSERT OR UPDATE on EXP_REP FOR EACH ROW myPlist SRW_PARAMLIST; myIdent SRW.JOB_IDENT; BEGIN Using Event-Driven Publishing 21-7 IF :new.ExpStat = DONE THEN myPlist := SRW_PARAMLISTSRW_PARAMETER,; SRW.ADD_PARAMETERmyPlist,GATEWAY,http:…; SRW.ADD_PARAMETERmyPlist,SERVER,fooSVR; SRW.ADD_PARAMETERmyPlist,CMDKEY,keyvalue; SRW.ADD_PARAMETERmyPlist,ExpenseID,:new.ExpID; myIdent := SRW.RUN_REPORTmyPlist; END IF; END; Additionally, if you have defined an advanced distribution model through a distribution XML file, you can specify that file with the DESTINATION parameter. For example: CREATE TRIGGER EXP_REP_TRG AFTER INSERT OR UPDATE on EXP_REP FOR EACH ROW myPlist SRW_PARAMLIST; myIdent SRW.JOB_IDENT; BEGIN IF :new.ExpStat = DONE THEN myPlist := SRW_PARAMLISTSRW_PARAMETER,; SRW.ADD_PARAMETERmyPlist,GATEWAY,http:…; SRW.ADD_PARAMETERmyPlist,SERVER,fooSVR; SRW.ADD_PARAMETERmyPlist,REPORT,foo.RDF; SRW.ADD_PARAMETERmyPlist,USERID,foobar; SRW.ADD_PARAMETERmyPlist,DISTRIBUTE,YES; SRW.ADD_PARAMETERmyPlist,DESTINATION,filename.xml; SRW.ADD_PARAMETERmyPlist,ExpenseID,:new.ExpID; myIdent := SRW.RUN_REPORTmyPlist; END IF; END; This is one way to move this kind of logic from your application into the database and use the database as a central storage for business processes.

21.4 Integrating with Oracle Advanced Queuing

Oracle Advanced Queuing is a means for building an asynchronous requestresponse mechanism around a so-called queue and two processes: ENQUEUE, which puts MESSAGES into a queue, and DEQUEUE, which reads the queue. Advanced queuing provides sophisticated mechanisms for distributing messages across queues and for queue subscription. These mechanisms are all built on top of these basic elements ENQUEUE, DEQUEUE, and MESSAGES. With the Event-Driven Publishing API you can use these queues to store and transmit report jobs. You can even build your own queuing mechanism if the one provided with Oracle Reports Services does not fit your needs.

21.4.1 Creating a Queue That Holds Messages of Type SRW_PARAMLIST

A queue is a table in the database that holds, along with several administrative columns, an object column that represents a message. In our case the message is the parameter list. Note: Youll find additional examples of the Event-Driven Publishing API in action in the demo script srw_test.sql, included with your Oracle Reports Services installation.