Configure Oracle Reports 12c (12.2.x) for destype=file
Posted by Dirk Nachbar on Friday, September 29, 2017 with 5 comments
I currently had in a project a request, that Oracle Reports should be generated with the option destype=file to a specific location on the server which is hosting the Oracle Forms & Reports 12c environment.
Since Oracle Forms & Reports 12c, the so called "File System Access Control" is enabled by default, so any request like http://<server>:<Port_of_ManagedServer_Reports>/reports/rwservlet?report=test.rdf&userid=test/test@db1&destype=file&desformat=pdf&desname=/u00/app/oracle/demo_app/rep_output/test.pdf&server=rep_server1 will fail:
When you check the corresponding log files for your Reports Server you will find following:
You simply have to edit your rwserver.conf of your Reports Server and add the required folderAccess option within your engine. The required folderAccess option looks like that:
Example:
After the above changes, you need to stop and start your Reports Server
Now you can re-run the URL request http://<server>:<Port_of_ManagedServer_Reports>/reports/rwservlet?report=test.rdf&userid=test/test@db1&destype=file&desformat=pdf&desname=/u00/app/oracle/demo_app/rep_output/test.pdf&server=rep_server1 and your PDF named test.pdf will be generated under your target directory you defined in the URL with parameter desname.
Now, lets take the stuff one level upper :-) in some case you will have different sub directories below in which you want to generate your Reports. To list them all by semi-colon separated under the folderAccess parameter is not really my personal goal, so lets try it with wildcard:
In my corresponding rwserver.conf it would look like that:
After the above changes, restart your Reports Server once again in order to catch the changed rwserver.conf changes.
Under the target directory /u00/app/oracle/demo_app/rep_output I have 2 sub directories called out1 and out2. So lets try to set the desname parameter in the URL call to desname=/u00/app/oracle/demo_app/rep_output/out1/test.pdf
The result will be:
:-( but no worries, just download the patch 22334822 https://updates.oracle.com/download/22334822.html. The patch is available for following Releases:
Simply apply this patch to your Oracle Forms & Reports installation:
Now, just startup your complete Oracle Forms & Reports Environment and you can even use the wildcard option with the folderAccess parameter.
In case you are already on Oracle Forms & Reports 12.2.1.3.0, you are lucky the patch 22334822 is already included and you can use directly the wildcard option :-)
Since Oracle Forms & Reports 12c, the so called "File System Access Control" is enabled by default, so any request like http://<server>:<Port_of_ManagedServer_Reports>/reports/rwservlet?report=test.rdf&userid=test/test@db1&destype=file&desformat=pdf&desname=/u00/app/oracle/demo_app/rep_output/test.pdf&server=rep_server1 will fail:
When you check the corresponding log files for your Reports Server you will find following:
cd $DOMAIN_HOME/servers/<ReportsServerName>/logs vi rwEng-0_diagnostic.log [2017-09-29T10:27:14.058+02:00] [reports] [INCIDENT_ERROR] [REP-69] [oracle.reports.engine] [tid: 12] [ecid: 0000LvCjcD33n3WjLxjO8A1PnW5h000008,0:1:100000001] [EngineName: rwEng-0] REP-69 : An internal error occurred[[ REP-56133: Access is denied to write to the specified location. oracle.reports.RWException: IDL:oracle/reports/RWException:1.0 at oracle.reports.engine.EngineImpl.run(EngineImpl.java:553) at oracle.reports.engine.EngineClassPOA._invoke(EngineClassPOA.java:104) at com.sun.corba.se.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:654) at com.sun.corba.se.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:205) at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1700) at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1558) at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:940) at com.sun.corba.se.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:198) at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:712) at com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl.dispatch(SocketOrChannelConnectionImpl.java:471) at com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl.doWork(SocketOrChannelConnectionImpl.java:1230) at com.sun.corba.se.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:490) at com.sun.corba.se.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:519) ]] [2017-09-29T10:27:14.058+02:00] [reports] [NOTIFICATION] [] [oracle.reports.engine] [tid: 12] [ecid: 0000LvCjcD33n3WjLxjO8A1PnW5h000008,0:1:100000001] [EngineName: rwEng-0] EngineImpl:run oracle.reports.RWException: IDL:oracle/reports/RWException:1.0
You simply have to edit your rwserver.conf of your Reports Server and add the required folderAccess option within your engine. The required folderAccess option looks like that:
# Single Target Directory <folderAccess> <write>Target_Directory</write> </folderAccess> # Multiple Target Directories are separated with semi-colon <folderAccess> <write>Target_Directory1;Target_Directory2</write> </folderAccess>
Example:
cd $DOMAIN_HOME/config/fmwconfig/components/ReportsServerComponent/<ReportsServerName> vi rwserver.conf <?xml version = '1.0' encoding = 'ISO-8859-1'?> <server xmlns="http://xmlns.oracle.com/reports/server" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > <cache class="oracle.reports.cache.RWCache"> <property name="cacheSize" value="50"/> <property name="cacheDir" value="/u00/app/oracle/demo_app/tmp"/> <!--property name="maxCacheFileNumber" value="max number of cache files"/--> </cache> <!--Please do not change the id for reports engine.--> <!--The class specifies below is subclass of _EngineClassImplBase and implements EngineInterface.--> <engine id="rwEng" class="oracle.reports.engine.EngineImpl" maxEngine="5" minEngine="2" engLife="50" > <property name="sourceDir" value="/u00/app/oracle/demo_app/reports"/> <property name="tempDir" value="/u00/app/oracle/demo_app/tmp"/> <!--property name="keepConnection" value="yes"/--> <folderAccess> <write>/u00/app/oracle/demo_app/rep_output</write> </folderAccess> </engine> <engine id="rwURLEng" class="oracle.reports.urlengine.URLEngineImpl" maxEngine="1" minEngine="0" engLife="50" /> <security id="rwJaznSec" class="oracle.reports.server.RWJAZNSecurity"/> . . . . . .
After the above changes, you need to stop and start your Reports Server
cd $DOMAIN_HOME/bin ./stopComponent.sh <ReportsServerName> ./startComponent.sh <ReportsServerName> # e.g.: ./stopComponent.sh rep_server1 ./startComponent.sh rep_server1
Now you can re-run the URL request http://<server>:<Port_of_ManagedServer_Reports>/reports/rwservlet?report=test.rdf&userid=test/test@db1&destype=file&desformat=pdf&desname=/u00/app/oracle/demo_app/rep_output/test.pdf&server=rep_server1 and your PDF named test.pdf will be generated under your target directory you defined in the URL with parameter desname.
Now, lets take the stuff one level upper :-) in some case you will have different sub directories below in which you want to generate your Reports. To list them all by semi-colon separated under the folderAccess parameter is not really my personal goal, so lets try it with wildcard:
# Target Directory with wildcard for sub directories <folderAccess> <write>Target_Directory/*</write> </folderAccess>
In my corresponding rwserver.conf it would look like that:
<?xml version = '1.0' encoding = 'ISO-8859-1'?> <server xmlns="http://xmlns.oracle.com/reports/server" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > <cache class="oracle.reports.cache.RWCache"> <property name="cacheSize" value="50"/> <property name="cacheDir" value="/u00/app/oracle/demo_app/tmp"/> <!--property name="maxCacheFileNumber" value="max number of cache files"/--> </cache> <!--Please do not change the id for reports engine.--> <!--The class specifies below is subclass of _EngineClassImplBase and implements EngineInterface.--> <engine id="rwEng" class="oracle.reports.engine.EngineImpl" maxEngine="5" minEngine="2" engLife="50" > <property name="sourceDir" value="/u00/app/oracle/demo_app/reports"/> <property name="tempDir" value="/u00/app/oracle/demo_app/tmp"/> <!--property name="keepConnection" value="yes"/--> <folderAccess> <write>/u00/app/oracle/demo_app/rep_output/*</write> </folderAccess> </engine> <engine id="rwURLEng" class="oracle.reports.urlengine.URLEngineImpl" maxEngine="1" minEngine="0" engLife="50" /> <security id="rwJaznSec" class="oracle.reports.server.RWJAZNSecurity"/> . . . . . .
After the above changes, restart your Reports Server once again in order to catch the changed rwserver.conf changes.
Under the target directory /u00/app/oracle/demo_app/rep_output I have 2 sub directories called out1 and out2. So lets try to set the desname parameter in the URL call to desname=/u00/app/oracle/demo_app/rep_output/out1/test.pdf
The result will be:
:-( but no worries, just download the patch 22334822 https://updates.oracle.com/download/22334822.html. The patch is available for following Releases:
- Oracle Reports 12.2.1.0.0
- Oracle Reports 12.2.1.1.0
- Oracle Reports 12.2.1.2.0
Simply apply this patch to your Oracle Forms & Reports installation:
# Stop your complete Oracle Forms & Reports Environment # All Reports Servers, Oracle HTTP Server (OHS), Managed Servers, Admin Server and Node Manager # unzip the patch and navigate to the sub directory 22334822 unzip p22334822_122120_Generic.zip cd 22334822 $ORACLE_HOME/OPatch/opatch apply Oracle Interim Patch Installer version 13.9.1.0.0 Copyright (c) 2017, Oracle Corporation. All rights reserved. Oracle Home : /u00/app/oracle/product/fmw-fr-12.2.1.2.0 Central Inventory : /u00/app/oraInventory from : /u00/app/oracle/product/fmw-fr-12.2.1.2.0/oraInst.loc OPatch version : 13.9.1.0.0 OUI version : 13.9.1.0.0 Log file location : /u00/app/oracle/product/fmw-fr-12.2.1.2.0/cfgtoollogs/opatch/opatch2017-09-29_14-50-57PM_1.log OPatch detects the Middleware Home as "/u00/app/oracle/product/fmw-fr-12.2.1.2.0" Verifying environment and performing prerequisite checks... OPatch continues with these patches: 22334822 Do you want to proceed? [y|n] y User Responded with: Y All checks passed. Please shutdown Oracle instances running out of this ORACLE_HOME on the local system. (Oracle Home = '/u00/app/oracle/product/fmw-fr-12.2.1.2.0') Is the local system ready for patching? [y|n] y User Responded with: Y Backing up files... Applying interim patch '22334822' to OH '/u00/app/oracle/product/fmw-fr-12.2.1.2.0' Patching component oracle.reports.core, 12.2.1.2.0... Patch 22334822 successfully applied. Log file location: /u00/app/oracle/product/fmw-fr-12.2.1.2.0/cfgtoollogs/opatch/opatch2017-09-29_14-50-57PM_1.log OPatch succeeded. # Afterwards validate that the patch is applied $ORACLE_HOME/OPatch/opatch lsinventory Oracle Interim Patch Installer version 13.9.1.0.0 Copyright (c) 2017, Oracle Corporation. All rights reserved. . . . . . . Interim patches (9) : Patch 22334822 : applied on Fri Sep 29 14:51:09 CEST 2017 Unique Patch ID: 20728353 Patch description: "One-off" Created on 1 Nov 2016, 01:05:08 hrs PST8PDT Bugs fixed: 22334822 . . . . . .
Now, just startup your complete Oracle Forms & Reports Environment and you can even use the wildcard option with the folderAccess parameter.
In case you are already on Oracle Forms & Reports 12.2.1.3.0, you are lucky the patch 22334822 is already included and you can use directly the wildcard option :-)
Categories: Oracle Reports 12c, Oracle WebLogic Server 12c
I am able to preview a report but when I try to run it I am getting a error saying FRM-40735:when-button-pressed trigger raised unhandled exception ORA-06502.
ReplyDeleteWhen I see the job info I see the below error.
The report terminated with error:
REP-69: An internal error occurred REP-56133: Access is denied to write to the specified location.
We are writing the PDF file to a different server can I pass the whole directory location in rwserver.conf file
Hi,
Deleteas far as I know, its not possible. What you could do is, to mount (e.g. nfs) the directory from your remote server on the server which is hosting your Forms & Reports Environment and then add the mounted share within the element "folderAccess", so you should be able to push your PDF files on the remote server from Reports.
Cheers Dirk
Super helpful, thanks!
ReplyDeleteI'm just wondering if there's a way to specify the default path used when destype=file is utilized? With a fresh install of 12.2.1.4 it seems to default to the domain home folder, and I need to specify another location but I'll be darned if I can find any documentation on how to do that!
Cheers,
Hi Tubby,
Deletethe standard output directory for the destype=file is the $DOMAIN_HOME. The reference for this you can find in the My Oracle Support Doc ID 1925057.1 at the very end of this note:
===============
3) The default working directory in Reports 12c is DOMAIN_HOME path.
===============
Cheers
Dirk
Thanks Dirk!
DeleteI just assumed there would be a simple way to configure the working directory but I guess I'll have to live with the domain_home as the destination.
Cheers,