Report Trigger
1.1 Which report trigger to use
As a general rule, any processing that will affect the data retrieved by the report should be performed in the Before Parameter Form or After Parameter Form triggers. (These are the two report triggers that fire before anything is parsed or fetched.) Any processing that will not affect the data retrieved by the report can be performed in the other triggers.
翻译:
一般法则,任何能影响报表提取的数据的行为都要在Before Parameter Form和After Parameter Form triggers中执行,(这两个报表触发器将在任何语法分析和数据提取之前。),而其它不能够影响报表提取的数据的行为可以在其它触发器中执行。
1. Before Report: Fires before the report is executed but after queries are parsed.
Before Report触发器在查询语句解析之后报表执行之前引发。
2. After Report: Fires after you exit the Previewer, or after report output is sent to a specified destination, such as a file, a printer, or an Oracle Office userid. This trigger can be used to clean up any initial processing that was done, such as deleting tables. Note, however, that this trigger always fires, whether or not your report completed successfully.
After Report触发器将在退出预览器之后或者报表输出到指定的目的如:打印机、Oracle Office用户之后执行。这触发器能够用来清除任何已经完成的初始化行为,例如删除数据表(一般是临时表)。注意,无论你的报表是否能够成功运行,这个触发器总会触发。
3. Between Pages :Fires before each page of the report is formatted, except the very first page. This trigger can be used for customized page formatting. In the Previewer, this trigger only fires the first time that you go to a page. If you subsequently return to the page, the trigger does not fire again
Between Pages触发器将在除第一页的其它每一页编排之前触发。这触发器能够用来定制报表页的编排。在预览时候,这触发器只在你转到某一页时触发。假如接着你返回到已经预览过的报表页时,触发器不会再触发。Before Parameter Form: Fires before the Runtime Parameter Form is displayed. From this trigger, you can access and change the values of parameters, PL/SQL global variables, and report-level columns. If the
1. Runtime Parameter Form is suppressed, this trigger still fires. Consequently, you can use this trigger for validation of command line parameters.
Before Parameter Form触发器将在Runtime Parameter Form(运行时刻参数输入表框)显示之前触发。通过这触发器,你能够存取和改变参数、PL/SQl中全局变量和报表级别列的值。假如Runtime Parameter Form被终止,这触发器仍然会触发。因此,你能够用它来验证命令行参数的有效性。
2. After Parameter Form :Fires after the Runtime Parameter Form is displayed. From this trigger, you can access parameters and check their values. This trigger can also be used to change parameter values or, if an error occurs, return to the Runtime Parameter Form. Columns from the data model are not accessible from this trigger. If the Runtime Parameter Form is suppressed, the After Parameter Form trigger still fires. Consequently, you can use this trigger for validation of command line parameters or other data.
After Parameter Form触发器将在Runtime Parameter Form(运行时刻参数输入表框)显示之后触发。通过这触发器你可以存取和核对参数的值。当错误发生时,这触发器能够改变参数的值并返回给Runtime Parameter Form。Data Model中的列对这触发器是不可见的,
假如Runtime Parameter Form被终止,这触发器仍然会触发。因此,你能够用它来验证命令行参数的有效性。
1.2 Report trigger order of execution(Trigger执行顺序)
The order of events when a report is executed is as follows:
Before Parameter Form trigger is fired.
1. Runtime Parameter Form appears (if not suppressed).
2. After Parameter Form trigger is fired (unless the user cancels from the Runtime Parameter Form).
3. Report is "compiled."
4. Queries are parsed.
5. Before Report trigger is fired.
6. SET TRANSACTION READONLY is executed (if specified via the READONLY argument or setting).
7. The report is executed and the Between Pages trigger fires for each page except the last one. (Note that data can be fetched at any time while the report is being formatted.) COMMITs can occur during this time due to any of the following—user exit with DDL, SRW.DO_SQL with DDL, or if ONFAILURE=COMMIT, and the report fails.
8. COMMIT is executed (if READONLY is specified) to end the transaction.
9. After Report trigger is fired.
10. COMMIT/ROLLBACK/NOACTION is executed based on what was specified via the ONSUCCESS argument or setting.
1.3 Report trigger restrictions(报表中触发器的一些约定)
1. If you are sending your report output to the Runtime Previewer or Live Previewer,you should note that some or all of the report triggers may be fired before you see the report output. For example, suppose that you use SRW.MESSAGE to issue a message in the Between Pages trigger when a condition is met. If there are forward references in the report (e.g., a total number of pages displayed before the last page),
Report Builder may have to format ahead to compute the forward references. Hence, even though you have not yet seen a page, it may already have been formatted and the trigger fired.
例如,假如当条件符合时候,你用SRW.MESSAGE在Between Pages Trigger中发布消息。如果报表中有提前引用变量(例如,一总页数在最后页之前显示),Report Builder将事先计算这提前引用变量.因此,即使你没有看到一页报表,但这页报表已经编排了,而且触发器也触发了。
2. In report triggers, you can use the values of report-level(报表级) columns and parameters. For example, you might need to use the value of a parameter called COUNT1 in a condition (e.g., IF :COUNT1 = 10). Note, though, that you cannot reference any page-dependent columns (i.e., a column with a Reset At of Page) or columns that rely on page-dependent columns.
注意,你不能够引用任何页级列(例如,设置为Reset At of Page的列),和依赖于页级的列。
3. In the Before and After Parameter Form, and Before and After Report triggers, you can set the values of parameters (e.g., give them a value in an assignment statement,:COUNT1 = 15). In the Before and After Report triggers, you can also set the values of report-level, placeholder columns.
在Before and After Report triggers中,你能够给参数,报表级的占位列赋值。
4. In the Between Pages trigger, you cannot set the values of any data model objects. Note also that the use of PL/SQL global variables to indirectly set the values of columns or parameters is not recommended. If you do this, you may get unpredictable results.
在Between Pages trigger中你不能对任何Data Model对象赋值。同样要注意用PL/SQL全局变量间接去给列或参数赋值也是不提倡的。如果你那样做的话,你可能取得意想不到的结果。
If you run a report from Report Builder Runtime (i.e., not the
1. command line or SRW.RUN_REPORT), you should commit database changes you make in the Before Parameter Form, After Parameter Form, and Validation triggers before the report runs. When running in this way, these triggers will share the parent process’ database connection. When the report is actually executed, however, it will establish its own database connection.
2. A lexical reference cannot be used to create additional bind variables after the After Parameter Form trigger fires. For example, suppose you have a query like the following (note that the WHERE clause is replaced by a lexical reference):
SELECT ENAME, SAL FROM EMP &where_clause
If the value of the WHERE_CLAUSE parameter contains a reference to a bind variable, you must specify the value in the After Parameter Form trigger or earlier. You would get an error if you supplied the following value for the parameter in the Before Report trigger. If you supplied this same value in the After Parameter Form trigger, the report would run.
WHERE SAL =: new_bind
如果Where表达式引用绑定变量,你必须在After Parameter Form trigger中或者更早指定它的值。假如你在Before Report trigger给参数赋下面的值,将报错。
Reprot中的五个Trigger说明