Here's a brisk case study into the power of core BI Publisher functionality in combination with the Oracle eBusiness Suite with a focus on Bursting.
The requirement here is to send Suppliers their Remittance Advice via email with a pixel perfect PDF attachment, of course with minimal coding. I'm limiting the functionality to email remittance advice for EFT payments in order to simplify this tutorial. Plus there are some coding shortcuts - your're more than welcome to provide free code fixes if you can spot them ;-)
Test Data
Firstly, lets look at the test data ingredients used:
- 1 Supplier: say "Virtuate"
- 1 Supplier Site: say "WELLINGTON" with Remittance Email address entered, Payment Method = EFT, Bank Account assigned
- 2 Invoices for the Supplier say INV0001, INV0002
- 1 Payment Batch say BURST_01 where payments have been made and payment batch confirmed
XML Data Source
Now, we need to create the Separate Remittance XML file somehow. Rather than reinvent the wheel, I started with a stock standard Payables Separate Remittance Advice report (APXPBSRA.rdf), and did the following:
- Setup a new concurrent program definition by copying the existing one, renaming, changing the executable, changing output to XML
- Added the new concurrent program to Payables "All Reports" request group
- Copied the report definition $AP_TOP/reports/US/APXPBSRA.rdf to a new report XXV8_APXPBSRA.rdf under modifications top directory
- Spiced up the new report with a couple of extra fields (Remittance Email, Fax number, etc)
- Restricted the data returned to only Suppliers Sites with a Remittance Email address (take this out later for fax/print etc).
- Restricted the data returned to only payments with payment method of EFT (checks have their on remittance advice).
- Ran to get the XML output. Note the <APXPBSRA><LIST_G_SEL_CHECKS><G_SEL_CHECKS> structure, we will use this later in the Bursting Control File
- And of course hacked the XML output - cut'n'paste style to add more data rather than having to key it (an additional supplier and invoices). Note this technique includes overwriting the output file $APPLCSF/$APPLOUT/o{REQUEST_ID}.req and follows the principles in my post on masquerading one request as another.
Layout
Okay, that sorts out the base report and data, now onto the fun stuff with a few screenshots:
- Create a new pretty RTF layout template
- Register the Data Definition
- Register the Template
- Run XML Report Publisher on the request that produced the prior XML data, and all lovely!
Bursting
Righto, now onto the Bursting part. We're going to:
- Create a Bursting Control File to email Suppliers
- Upload the control file to the Data Definition
- Test it out by calling the XML Publisher Report Bursting Program
- (Optional) Extend the Report to automatically submit the Bursting program
At this point please make sure you have done the following EBS bursting prerequisite steps:
- (Optional, but highly recommended) Upgrade to 11.5.10.2 / XMLP 5.6.3 or higher (ATG RUP5 or higher is nice)
- Apply 5968876 XDO:EBS-BURSTING INTEGRATION PATCH
- Restarted your applications processes - or the button to upload your bursting control file won't appear!
- Set the Temporary Directory under XML Publisher Administrator, Administration, General - to e.g. /tmp, or you'll get error message:
java.lang.NullPointerException at oracle.apps.xdo.oa.cp.JCP4XDOBurstingEngine.getSystemTempDirectory(JCP4XDOBurstingEngine.java:413)
- Assign Concurrent Program "XML Publisher Report Bursting Program" to the appropriate Request Group, e.g. "All Reports" / Payables
- Make sure you have an SMTP server that you can send your email through!
Bursting Control File
Next, lets get into the Bursting control file and look at it a bit closer:
1. Create Bursting Control File to email Suppliers custom Separate Remittance Advice
<?xml version="1.0" encoding="UTF-8"?>
<xapi:requestset xmlns:xapi="http://xmlns.oracle.com/oxp/xapi">
<xapi:request select="/APXPBSRA/LIST_G_SEL_CHECKS/G_SEL_CHECKS">
<xapi:delivery>
<xapi:email server="smtp.yourdomain.com" port="25" from="youremail@yourdomain.com" reply-to ="">
<xapi:message id="${C_CHECK_ID}" to="${C_REMITTANCE_EMAIL}" cc="yourcc@yourdomain.com" attachment="true"
subject="Virtuate - Remittance Advice for Payment ${C_CHECK_NUMBER}"> Please find attached Remittance Advice for payment ${C_CHECK_NUMBER}. Regards, The Payables Team Virtuate Limited
</xapi:message>
</xapi:email>
</xapi:delivery>
<xapi:document output="Remit_Advice_${C_CHECK_NUMBER}" output-type="pdf" delivery="${C_CHECK_ID}">
<xapi:template type="rtf" location="xdo://SQLAP.XXV8_APXPBSRA.en.US/?getSource=true" filter=""></xapi:template>
</xapi:document>
</xapi:request>
</xapi:requestset>
Hmm, what does all this jargon in the control file do? Well, here's a pretty picture that explains a lot of it:
2. Make sure it all works ... gotta make sure its the right flavor!
Navigate into Payables, Submit Request, XML Publisher Report Bursting Program, and specify the request from your last custom Separate Remittance Advice request.
Hey presto, take a look at your email:
Check the output:
3. (Optional) Extend the Report to automatically submit the Bursting program
Automatic Burst
Now, we don't want to have to manually (or via request set) submit the Bursting program every time we run the report, so let's automate that. By putting a parameter on the new Separate Remittance Advice report to control whether we Burst, and submitting a new request in the after report trigger, we can achieve this. We'll implement this is a similar fashion to my post on Beautiful Statements in 1 Easy Step.
So lets do this:
- Add parameter P_BURST to report and concurrent program definition (Yes/No).
- Add code to after report trigger.
declare v_req_id number := 0; begin if nvl(:p_burst,'N') = 'Y' then v_req_id := xxv8_xmlp_burst_pkg.submit_request_burst('XXV8_APXPBSRA',:p_conc_request_id); if v_req_id > 0 then srw.message(20002, 'Submitted request_id ' || v_req_id); commit; else srw.message(20002, 'Failed to submit request'); end if; end if; end;
- Create PL/SQL package to do the submit of Bursting Program.
create or replace package XXV8_XMLP_BURST_PKG AUTHID CURRENT_USER AS function submit_request_burst ( p_code in varchar2 , p_request_id in number ) return number; end XXV8_XMLP_BURST_PKG; /
create or replace package body XXV8_XMLP_BURST_PKG AS function submit_request_burst ( p_code in varchar2 , p_request_id in number ) return number is l_req_id number := 0; begin if p_code = 'XXV8_APXPBSRA' then l_req_id := fnd_request.submit_request('XDO','XDOBURSTREP',NULL,NULL,FALSE, p_request_id); end if; return l_req_id; end submit_request_burst; end XXV8_XMLP_BURST_PKG; /
- Test it all out!
Sweet, all automatic, working and ready for the primetime!
Issues
But let's note a few issues to look out for.
- I'm not very happy about "hardcoding" the SMTP server details in the control file. Would be great if BIP honoured either the Workflow SMTP setup or database smtp_server parameter. However, since the control file is in a structured data field in the database shouldn't be hard to write a script to update them all. Left to a future exercise though!
- I'm not very happy about "real" emails being delivered from Test/Development etc. environments. Would be great if BIP honoured the "Test Address" workflow parameter. Left to a future exercise, also related to issue Issue 1.
- Resolving items higher up the XML tree seems to be an issue with bursting in that they drop out and the solution as in my post on disappearing parameters doesn't work. Update: This functionality seems to be a known issue. Enhancement Request 6969869 has been logged for this issue. Thanks Lavina! In the meantime looks like XSLT transformation would come in handy, but that's a separate post!
- Minor issue that layout is not applied to the Bursting Request so no output, but can just run XML Report Publisher over it.
References:
- Bursting Engine including Bursting Control File syntax
- 5968876 README.txt
Thanks to Dilip for the suggestions and request to put this together.
NB: In this tutorial I used Payables (SQLAP) as the application under which I register the new concurrent program and subsequently BIP Template and Data Definition, but custom Virtuate application for concurrent executable. This is to make the tutorial a working example without additional setup. You may want to use your modifications or similar custom application for all new entities.
PS. This Remittance Advice email bursting solution is an alternative to the standard Workflow Remittance Email solution.
PPS. If this all seems to hard and you are interested in BIP or Workflow Supplier Remittance Advice Email/Fax solution as a Consulting solution, contact me - see my Profile for email address.
278 comments:
«Oldest ‹Older 201 – 278 of 278Hi Gareth,
I followed your steps to burst the remittance advise. In our case, it is using the Java Concurrent Program IBY_FD_SRA_FORMAT (Send separate remittance advice) instead of APXPBSRA. There is no SRS output, hence the program fails. Can you help?
Thanks
Shanthi
Hi Shanthi,
This solution is for Release 11i not Release 12. Release 12 natively uses XML / BI Publisher templates for payment extraction formatting.
Regards,
Gareth
Hi Gareth,
Do you have a suggested solution for r12? We need to send the Separate Remittance advice in the form of an attachment.
Thanks
Shanthi
Hi Gareth,
I'm getting the error below when running the bursting program for AR Statement. Can you please help me out.
Bursting propertes.....
{user-variable:cp:territory=US, user-variable:cp:ReportRequestID=2594895, user-variable:cp:language=en, user-variable:cp:responsibility=50635, user-variable.OA_MEDIA=http://ebs.jandbmedical.com:80/OA_MEDIA, burstng-source=EBS, user-variable:cp:DebugFlag=Y, user-variable:cp:parent_request_id=2594895, user-variable:cp:locale=en-US, user-variable:cp:user=SYSADMIN, user-variable:cp:application_short_name=XDO, user-variable:cp:request_id=2595033, user-variable:cp:org_id=83, user-variable:cp:reportdescription=Statement Generation Program, user-variable:cp:Dummy for Data Security=}
Start bursting process..
Bursting process complete..
Generating Bursting Status Report..
--Exception
/d01/oracle/JBPA/apps/apps_st/comn/temp/041511_030754987/Customer Name: St. John Providence Park Hospital.pdf (No such file or directory)
java.io.FileNotFoundException: /d01/oracle/JBPA/apps/apps_st/comn/temp/041511_030754987/Customer Name: St. John Providence Park Hospital.pdf (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.(FileInputStream.java:106)
at java.io.FileInputStream.(FileInputStream.java:66)
at oracle.apps.xdo.oa.cp.JCP4XDOBurstingEngine.zipOutputFiles(JCP4XDOBurstingEngine.java:523)
at oracle.apps.xdo.oa.cp.JCP4XDOBurstingEngine.runProgram(JCP4XDOBurstingEngine.java:292)
at oracle.apps.fnd.cp.request.Run.main(Run.java:157)
seanmark
Hi Gareth,
can you please help me out.
The problem is when bursting 5 statements and only 1 has an e-mail and the other 4 statement has no email address. The statement where being sent on the email address of the statement with the email address.
How can I prevent this from happening?
please advise.
thanks
Hi Gareth,
First of all I thanks for the good blog regarding XML Bursting,
I am working on the same programn, But I am not getting the mail , and Both the programns are getting completed with out error, Please can you help me how can I resolved this issue.
Thanks,
Gajanan Tangde
Hi,
In our test instance the wrokflow mailer configuration is given as,
XX-EXCH06.dk.XXX.net as Outbound Server Name and
oa-wf-override@XXX.com as Test Address.
with this configuration the workflow mails will be redirected to oa-wf-override@XXX.com.
In XML Bursting, we are using
XX-EXCH06.dk.XXX.net as email Server (Same as workflow mail configuration). But the mails are not redirecting to oa-wf-override@XXX.com like workflow mails.
Please suggest.
Hi Prathyush,
In the data source that retrieves the email address, check and override to the Test Address. This is described here:
http://garethroberts.blogspot.com/2010/03/sql-override-address-for-workflow.html
Regards,
Gareth
Hi Seanmark,
Re null email address, put in a XPath filter in the bursting control file so that those are not selected. This is described here:
http://garethroberts.blogspot.com/2010/08/ebs-bursting-filter-on-xml-elements.html
Regards,
Gareth
Very helpful article Gareth. I tried implementing this process and below are my requirements:
1. Create a payment batch of say 3 invoices.
2. When this program is run, we need 3 separate remittance emails to be sent to the 3 different suppliers.
But for some reason, When i run this program, the email is sent only to the last supplier in the payment batch. If I change some of the template settings, then I'm able to send all the 3 invoices to only the last supplier which is wrong.
However when I run the concurrent request and give the payment number then it goes to the respective supplier.
Am I missing any step? How can I send separate remittance advice to respective suppliers by just entering the payment batch name in the concurrent request?
Thanks in advance.
Hi Shilpa,
You may have an issue with your bursting control file select statement or filter, posisbly your RTF template as the technique used should send to all email per payment.
Regards,
Gareth
Hi Gareth,
Great to see that the comments are solving problems and that you invest the time to answer the questions. After reading through all the comments I finally saw something relating to what I'm looking for at the bottom, Murphy's Law. I am trying send an email with xml as the output. I have succesfully sent a pdf but when I set up my control file with xml setup is fails. From what I see in the last of your comments you can hack a way around it with ETEXT not using XSL-XML. I can't post the control file source so I can email it if you would like to take a look. Cheers
Hilton
Hi Biking Badger,
Yes, you can use ETEXT to generate "hand cut" XML, of course need to be careful with XML tags.
Regards,
Gareth
Hi Gareth,
Just curious to know....is it possible we will do it without RTF file?
Regards,
Prakash
Hi Prakash,
The RTF file provides the layout, you could use XSL, ETEXT etc. to provide layout but you need something :-)
Regards,
Gareth
Hi Gareth,
I have done a few extensions using bursting earlier, but in this new requirement, I need to use different templates depending on the user lang and territory.
I tried using this
"xapi:template type="rtf" location="${CF_TEMPLATE_CODE}" filter="">"
The variable CF_TEMPLATE_CODE has the correct value of "xdo://DRONT.DRONTAOPRT.en.US/?getSource=true", but my bursting errors out if I use this variable. It needs a hardcoded template name.
Are you aware of any means where we can pass in a dynamic template name?
Earlier, I have resolved this problem with using different filters for different langs and adding each template name for each filter. At that time I had just three templates so used them as filters. I know that works, but the templates in this extension are much more in this case and I was looking for an alternative.
Thanks
Runa
Hi RS,
Use multiple templates with the "filter" option, like here:
http://garethroberts.blogspot.com/2010/08/ebs-bursting-filter-on-xml-elements.html
Regards,
Gareth
Hi Gareth,
Thanks for the detailed post. Could you please help me for the following issue.
Requirement: We need to tranfser the individual pdfs (bursting output) to a SFTP server.
My Control file:
Issue:
pdf
ftp
/app_logs/EBSTST1/tmp/102411_101758110/108324.pdf
success
The output is showing satus as Success, but no files are found on the server. Instead SFTP if I change delivery as Email, I am receiving all the individual files. And also I am able to transfer files to the Server manually.
So could you please help where I am going wrong.
Thanks in advance,
Ramu
Hi again,
Ooops, the Control file content is missed, I am pasting here
xapi:ftp id="sftp_delivery" server="server" user="user" password="password"
remote-directory="/users/folder" remote-file="${EMPLOYEE_NUMBER}.pdf" secure-ftp="TRUE"
Hi Ramu,
Suggest you check with Support or post forums thread on this one - I haven't used SFTP as yet. Note there are a few SFTP fixes around see here:
http://blogs.oracle.com/xmlpublisher/entry/update_for_bi_publisher_enterp
Regards,
Gareth
Hi Gareth,
I am working on an enhancement where I need to distribute Payslips to the employees who have email addresses in the application and if employee does not have email address in the system then print them.
I am using xml bursting to achieve this. With the busrting Email Payslips work fine but printing is a problem where it prints an extra blank page for each payslip delivered to the printer.
I am refering to element in xml data to decide whether to print or email.
If i look at the output of the payslip concurrent program everything looks good (no blank pages).
Can you please suggest what could be the problem??
Regards
Nalin
Hi Nalin,
Make sure you don't have any spaces or similar in the RTF that would cause overflow.
Also, switch on XDO debug (xdodebug.cfg in $AF_JRE_TOP/lib) to capture the PDF files sent to the printer and see if problem is with source PDF (ie that that do / do not have 2 pages).
Regards,
Gareth
Hi Gareth
Thanks for an early response.
Firstly can you please clarify if "switch on XDO debug (xdodebug.cfg in $AF_JRE_TOP/lib) to capture the PDF files sent to the printer" is the same as running "XML Publisher Report Bursting Program" with Debug parameter set to Yes??
Secondly I went to the path "$AF_JRE_TOP/lib" but I could not find any cfg file (we are working on version 12.1.3). Is it version dependent?
Also Just to update,
I ran the concurrent program "XML Publisher Report Bursting Program"
with the debug flag set to Yes and went into the Output Zip folder which has the individual PDFs, all the PDFs looked perfect having just one page each payslip.
Regards
Nalin
Hi Nalin,
Try printing one of the PDFs from debug direct to print from windows, see if same extra page problem is prevalent. If not I suggest you to try printing the PDF via CUPS on the server, and if problem cannot be resoved log SR.
Regards,
Gareth
Hello Gareth,
I have a requirement where i need to split the XML file based on Customer division and generate multiple excel output files. In order to achieve that i have created a plsql package and a procedure in the pacakge to generate the XML file and a procedure to call the xml bursting standard concurrent program by passing the request id of the first procedure. i have created a control file and attached to the Data Definition. when i submit the request it is triggering the bursting program but running into the below issue.
Generating Bursting Status Report..
--Exception
/apps/oracle/product/finmtvcomn/temp/00018.xls (No such file or directory (errno:2))
java.io.FileNotFoundException: /apps/oracle/product/finmtvcomn/temp/00018.xls (No such file or directory (errno:2))
I have tried all the possibilities but nothing has worked for me. can you please help me out on this?
Hi Kiran,
Not sure - this might need a patch - please log an SR if you need to.
Regards,
Gareth
Hi Gareth,
I am modifying Customer Statement to use my RTF file. Everything is done and working great thanks to you! The only thing left is that I would like to add a timestamp to my pdf files I create during bursting. Is there a way to do this in the bursting file?
thanks - jill
Hi Jill,
There is supposed to be a way to do this, see:
https://blogs.oracle.com/xmlpublisher/entry/dynamic_delivery_file_naming
I'm not 100% sure this works on EBS though, give it a try and let us know.
Regards,
Gareth
Thanks for the response. I have tried that one and it treated the %y%m%d as a string.
jill
When I call the procedure to run xml publisher and bursting from after report trigger, the concurrent request is running. It does not seem to complete until after the procedure completes. SO, in this procedure, if I add 'wait' logic before calling XDOREPPB, how do I know if the original request is complete? The staus does not change to NORMAL/COMPLETE until exiting the procedure. Please help.
jill
Hi Jill,
You'd need to commit after submit request, and you'll need to have an incompatibility to ensure the spawned request waits for the original to finish.
Regards,
Gareth
Hi Gareth,
I follwed your steps and iam able to get the mail and pdf file.But the pdf file doest have any pages.
In conc program output i have data.
Can you please tell me what will be the problem?
Thanks,
Aj
Hi,gareth
I am facing an issue in Statement of account generation.Its working fine for the US territory but its not working for the spain territory.When i submit the request in spain responsibility it triggers the program 'AR Customer balance statement'with no parameters in it.I am using the same code which is in ur blog.firstly i tried to run tjis program by creating the soft link but it did'nt work,later i placed the std ARXSGPO.rdf file in ar top of both the territories i.e US/E.So can u suggest me where i am going wrong for the spain thing to work..
Hi Abilash,
Spain responsibility is different to Spanish NLS installation. The "E" as opposed to "US" is only relevant if you are using Spanish NLS installation, which means if all your forms/HTML are in Spanish you need to consider territory E. If you are using Spain responsibility but not Spain NLS I'm not sure how your statements are setup in that case - log SR as necessary, but the point being that this post is specific to standard Statement program ARXSGP (Statement Generation) and ARXSGPO.rdf which is run "under the covers" of ARXSGP.
Regards,
Gareth
Hi Gareth,
I am using the following bursting control file. But Still I am not getting emails. My concurrent program completes normally. Please help me what am I missing.
Dear Valued Customer,
Thank you for renewing you Support Agreement.
.
Do I have to place my rtf template in temp dir? If yes, is it /usr/tmp/?
Regards
--
Bala
Hi Bala,
You have to either specify an xdo: reference to the template that will pick it up from the XML Publisher Template, or specify an absolute path.
Try switching on debugging and see what is happening.
1. Run the 'Prints environment variable values' request for variable AF_JRE_TOP.
2. Connect to the Concurrent Manager server as ‘applmgr’.
3. Create an $XDO_TOP/temp directory.
4. Go to the $AF_JRE_TOP/jre/lib directory (AF_JRE_TOP from step 1).
5. Create an xdodebug.cfg file with the following 2 lines (replace path):
LogLevel=STATEMENT
LogDir="path to XDO_TOP"/temp
6. Restart the Concurrent Managers
7. Reproduce the problem.
Debug files will be created under the $XDO_TOP/temp
Regards,
Gareth
Hi Gareth,
Hope you are doing good.
Can bursting be used to send emails using outlook templates?
I am not sure if XML internally uses sendmail to send emails but I wanted to know if we can use our own templates to send email using bursting process?
Thanks in Advance.
-Kaushek
Hi Kaushek,
I'm not aware of that capability, however, BI Publisher at least in version 5.6.3 to 10 can do formatting using CSS inline styles or header CSS style, so you can achieve formatting that you require. See my post garethroberts.blogspot.co.nz/2009/11/html-formatting-issues-in-ebs-r12-xml.html
Regards,
Gareth
Dear Gareth,
I'm getting same error
Error!! Could not deliver the output for Delivery channel:null . Please check the Log for error details.
Telnet working fine.
I checked Oracle metalink where the suggest to add a "missing" rule to exchange server.They haven't mention which rule to add !!! You have any suggestions?
Kind regards,
Anwar
Hi Anwar Aziz,
Make sure all your incoming email addresses are valid formats - see my post on validating email address via regex.
Regards,
Gareth
Dear Gareth,
I already tested the emails using telnet and it working fine.
Actually the emails I'm using is my email for tesing :)
Regards,
Anwar
Hi Gareth,
I am using R12 applications.
I get this error 'Error!! Could not deliver the output for Delivery channel:null' in the output file of the bursting concurrent program.
But some times its Completed normal and burst the email. I don't know why i am facing this issue.
Below is the bursting control file.
Please find attached output of Sample Document report.
Log File:
========
][oracle.apps.xdo.delivery.smtp.SMTPDeliveryRequestHandler][STATEMENT] submitRequest(): called
[022213_111436505][oracle.apps.xdo.delivery.smtp.SMTPDeliveryRequestHandler][STATEMENT] submitRequest(): This request has never been submitted before.
[022213_111436515][oracle.apps.xdo.delivery.smtp.Attachment][STATEMENT] addAttachment(): Adding an attachment ...[filename]=[null], [content-type]=[text/plain;charset=UTF-8], [index]=[0], [disposition]=[inline]
[022213_111436515][oracle.apps.xdo.delivery.smtp.Attachment][STATEMENT] addAttachment(): Character set for MIME headers : UTF-8
[022213_111436515][oracle.apps.xdo.delivery.smtp.Attachment][STATEMENT] addAttachment(): Character encoding for MIME headers : B
[022213_111436515][oracle.apps.xdo.delivery.smtp.Attachment][STATEMENT] addAttachment(): Exiting addAttachment()
[022213_111436525]
(XMLParser.java:292)
at oracle.apps.xdo.batch.BurstingProcessorEngine.burstingConfigParser(BurstingProcessorEngine.java:968)
at oracle.apps.xdo.batch.BurstingProcessorEngine.process(BurstingProcessorEngine.java:912)
at oracle.apps.xdo.oa.cp.JCP4XDOBurstingEngine.runProgram(JCP4XDOBurstingEngine.java:286)
at oracle.apps.fnd.cp.request.Run.main(Run.java:157)
[022213_111441707][][EXCEPTION] Error!! Could not deliver the output for Delivery channel:null . Please check the Log for error details..
[022213_111441709][oracle.apps.xdo.batch.BurstingProcessorEngine][STATEMENT] ========================> startElement() ::: endDocument is entered <========================
[022213_111441710][oracle.apps.xdo.batch.BurstingProcessorEngine][STATEMENT] ========================> startElement() ::: endDocument is entered <========================
[022213_111441761][][STATEMENT] /tmp/022213_111431996 deleted successfully...
Appreciated your prompt reply..
Regards
Adnan
Hi Adnan,
Sorry, some of your details didn't come through.
Firstly I'd switch on debug. On concurrent processing tier put the following in $AF_JRE_TOP/lib/xdodebug.cfg
LogLevel=STATEMENT
LogDir=/tmp
Then rerun - this will put trace files in /tmp (change as you require, generally I use $XDO_TOP/temp
Hopefully then you'll get more detailed debug.
Often it can be because of invalid email address (see my blog post on email address validation) or it could be some other unexpected error.
Worst case, log a Service Request with support. And if still struggling drop me an email.
Regards,
Gareth
Hi Gareth,
This is a nice article.
However, I have a different requirement here.
My user wanted to select "format" dynamically.
Here are the steps..
-- before submitting a concurrent program, he goto : Upon Completion > Options > Change Format to Excel or PDF.
Now how to capture this format in bursting control file ?
Thanks,
Chandra
Hi Chandra,
With bursting there is a "filter" option so you can put multiple templates in the bursting control file. If your report is a custom one where you have ability to add to XML you could put additional query to get the format into the XML then use filter to have "if statement" type logic in your control file. Drop me an email if you want to discuss further. See my blog post filter on xml elements
Regards,
Gareth
Hi Gareth,
I'm not getting exactly.
Yes, as you said, I am working on custom report.
Below is my control file.
===
===
here is my control file. do we have any kind of variable such as OUTPUT_FORMAT ?
Hi Gareth,
Hope you doing well.
I am facing a very strange problem and I have done this kind of development many times in the past and have not faced this issue before.
I tried whatever I could and now since the issue still remains unsolved thought of asking you.
I have a custom report with rdf as the executable file. This rdf has the paper layout so the output is in text format. Then the user would save this output file as a csv file and view it in excel.
The new requirement was to add 50 more columns to the underlying query (single query) and display the output in excel directly. So the intermediate step of saving the file as csv and then viewing it in excel would be avoided.
What I did: I changed the concurrent program definition where I changed the output format to XML from Text.
I created a new data definition with the short name, created a template , got the output in xml format, generated the rtf template using the xml and added it to the template definition.
Now my output should be defaulted to excel as I selected the default output type as excel while creating the template.
The issue is I still get to see the xml output when I say view output after the successful completion of the program.
What could be the possible reasons?
If you need any other details please let me know.
Thanks & Regards,
Kaushek
Hi Gareth,
I followed all the steps listed in your blog but I´n receiving next error:
Error!! Could not deliver the output for Delivery channel:null . Please check the Log for error details..
I have reviewed lots of metalink notes but I did't find a solution.
I think it´s a problem with the delivery information and have some questions:
-- Is it necessary the xdodelivery.cfg file on $XDO_TOP/resource?
-- About the delivery tag inside sould it map to the delivery channel inside xdodelivery.cfg?
-- If more than one mail sould be send, can the id tag inside be hardcoded to 123?
Best Regards
Javier
Hi Javier,
Please check your data for invalid email addresses as that can cause the invalid delivery channel null error. Also, yes you need to have xdodelivery.cfg in place, and you can hardcode the ID.
Regards,
Gareth
Hi Garath,
We are using 12.1.3 version,but Bursting Control file adding(ADD file button) option diabled.
Can you suggest the solution for this issue
Thanks
Umapathy raju
Hi Gareth
Error!! Could not deliver the output for Delivery channel:null . Please check the Log for error details..
i follow all above steps, still i am getting same,
pls help me on this issue.
Regards,
Rahul
Hi Rahul,
Either your email server configuration is incorrect / blocked, or your target email address is null/badly formed. Please look at those closer.
Regards,
Gareth
Is there a way to capture errors in the XML bursting process like IN ERROR - to tell the program to halt and stop? I know if errors are encountered they can show up in the output processor log but looking to see if error can be captured other ways and reported on rather through output processor log especially given the size of that log file at certain points when we burst out 25,000 invoices that get e-mailed. I have issues identifying if e-mails went out and trying to figure out how to capture that. Any thoughts are welcomed.
Thanks.
Dave
Hi Dave,
With standard functionality I'm not aware of trapping failures - usually its invalid email addresses that cause failures, so I'd fix and prevent invalids emails at source. But you could possibly implement a BI Publisher Listener that would pre-process, or on the fly process exceptions.
Regards,
Gareth
I am doind Bursting for first time. Just want to store files on to file system. Bursting Job is completed properly, it created individual files too for the require key. But these pdf files have no pages....
My email id is oracle_raj@yahoo.com.
Hi Gareth,
Is it possible in ebs xml publisher, through bursting to save the output files in local directory while sending email?
i have done this in bi publisher 11g it works fine.
Regards,
Zubair
Hi Zubair,
Yes you can burst to server local filesystem and email, just an additional delivery channel in the bursting control file.
Regards,
Gareth
Hi,
I am able to send the email by executing XML Publisher Report Bursting Program
but I want email to be send automatic when my concurrent finishes. For this I have added below code in the after report trigger of the rdf file but it is not working. Kindly help how I can achive the same.
function AfterReport return boolean is
v_sub_req NUMBER;
v_cp_description VARCHAR2(100);
c_cp_request_id CONSTANT NUMBER := fnd_global.conc_request_id;
BEGIN
BEGIN
SELECT fcp.user_concurrent_program_name
INTO v_cp_description
FROM FND_CONCURRENT_REQUESTS fcr,
FND_CONCURRENT_PROGRAMS_VL fcp
WHERE fcr.concurrent_program_id = fcp.concurrent_program_id
AND fcr.request_id = c_cp_request_id;
EXCEPTION WHEN OTHERS THEN
v_cp_description := NULL;
END;
BEGIN
v_sub_req :=fnd_request.submit_request('XDO',
'XDOBURSTREP',
'',
'',
FALSE,
'Y', c_cp_request_id, 'Y',
chr(0), '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '');
COMMIT;
IF v_sub_req <= 0
THEN
SRW.MESSAGE('206','Failed to submit Bursting XML Publisher Request for Request ID = '|| c_cp_request_id);
ELSE
SRW.MESSAGE('207','Submitted Bursting XML Publisher Request Request ID = ' || v_sub_req);
END IF;
EXCEPTION
WHEN OTHERS THEN
RAISE SRW.PROGRAM_ABORT;
END;
SRW.USER_EXIT('FND SRWEXIT');
RETURN (TRUE);
EXCEPTION
WHEN SRW.USER_EXIT_FAILURE
THEN
SRW.MESSAGE (1, 'Failed in AFTER REPORT TRIGGER');
RETURN (FALSE);
WHEN OTHERS
THEN
SRW.MESSAGE (1000, 'Failed in When Others' || SQLERRM);
END;
Gareth,
Do you know if we can use a if condition in the Bursting XML file's message?
For example, if ORG_ID=123, display a message, else display a different message.
I know I can probably control this through RDF, but really wanted avoid it since it's much easier to make changes in XML file than RDF.
Thanks for your excellent guide for the BI Publisher, BTW. Very helpful website.
Thanks.
Abul Mohsin
Hi Abul,
Yes you can have multiple templates with filter clause to meet your requirement.
See this post here: http://garethroberts.blogspot.co.nz/2010/08/ebs-bursting-filter-on-xml-elements.html
Regards,
Gareth
While bursting the logo file is not showing in the rtf template. Requirement is to pickup various RTF files based on org conditions. However when we submit concurrent program with the template details the template output shows the logo, but when we email via bursting the rtf templates doesnt show the logo .
The property of the logo is url:{'${OA_MEDIA}/logo.jpg'}. Please advice
Hi ssuummaa,
With emails the image needs to be available via an external URL, I'm not aware of a way that images can be embedded in the email. See my post here, item #3:
http://garethroberts.blogspot.co.nz/2009/11/html-formatting-issues-in-ebs-r12-xml.html
And add yourself to enhancement request 9834226.
Regards,
Gareth
Thanks Gareth, the usual way of using the directory path for fetching the image is not working. You are right . I followed the bug but there seems to be no resolution for it. If I do find out, i will keep you updated. Thanks for your help
Cheers
Suma
Hi Gareth,
I fixed the issue . I found that the db was RAC system and hence had two values for the variable OA_MEDIA in the db , hence it was not picking up the right value. The property of the logo had the property set as below url:{'${OA_MEDIA}/logo.jpg'}. For now I am getting the path and passing the value instead of OA_MEDIA hence it fixed the path issue . The path can be got with the below query
SELECT img_VAL||'/' val
FROM
(SELECT DISTINCT fec.value img_val
--INTO l_file_path_media
FROM fnd_env_context fec
WHERE fec.variable_name = 'OA_MEDIA'
AND SUBSTR(fec.value, 6, 1) =
(SELECT SUBSTR(instance_name, 1, 1) FROM v$instance
)
);
Hi Gareth,
I have a requirement in my BI report.
My BI report is based on a data template. The user wants to set warning in certain conditions. How can we achieve this? Considering the fact that the concurrent programs executable is a java program . Please advice how we can set this warning in the data template.
Thanks
Suma
it is a very nice content your blog
Filter Elements supplier in Agra
Hi Gareth,
Very useful article.
One question: do you know where in the user interface of EBS can be seen the "remittance_email" of the site. On your first picture this is shown but in the Oracle Forms user interface. I'm working on EBS R12, I know where to go to see Supplier info: it's all web interface in R12 but I cannot find where is displayed the remmittance email of a supplier site.
Thanks.
Lilian
Hi Lilian,
Payables > Supplier Entry, search for your Supplier, click on Payment Details on the left, under Supplier Sites down the bottom, click on Update Payment Details link, click on Separate Remittance Advice tab down the bottom, enter Email Address in the Email field.
Regards,
Gareth
Hi Gareth,
I am setting the number of copies in a bursting dynamically. But once the parameter is set it is not getting reset for the next g_invoice_grp run.
${CP_NUMBER_OF_COPIES} variable changes for every pdf gerenated for different customer. That is copies are set at customer level as a dff and I need to pass no of copies
for every single customer. Please give your valuable suggestions
Thanks
Suma
Hi Gareth,
I am unable to paste the bursting file here, it just shows as blank. Let me know if I can email the same to you.
Thanks
Suma
Hi Gareth ,
I have a variable CP_NUMBER_OF_COPIES as a variable assigned to copies for printing . This is not getting reset. Once set it remains same throughout the program.
I have a scenario where the no of copies change as per customer, so do the email ids.
All the email ids (CF_BILL_TO_EMAIL1, CF_BILL_TO_EMAIL2, CF_BILL_TO_EMAIL3…..) get reset to new values for per customer as from the xml , but the CP_NUMBER_OF_COPIES is not getting reset, only the first value gets assigned from the xml. If anyone faced this issue , please let me know. I did check the xml and all the values are getting reset correctly in the xml for CP_NUMBER_OF_COPIES. All the variables are in the same hierarchy /XXGENRAX_INV_PRINT_EMAIL/LIST_G_INVOICE_GRP/G_INVOICE_GRP .Please let me know if anyone face this issue before
I have the burst example in the below link https://community.oracle.com/message/13165306
Hi Gareth,
We have an AR Invoice Report which has different Translations. I have created all the Translation files and uploaded to the Template through Upload Translations. It is working completely fine when run from Submit Request Window.
But, when i am trying to send an email with the same template with Translations through Bursting, it is always selecting ONLY base language i.e. English. Please help.
Tried following methods:
Method1:
===Method1 Outcome=== No exceptions raised. No Errors Encountered for both methods. The Log file shows that Translation has been recognized, Mail Received with Attachment, but still the attachment is in English.
Method2:
===Method2 Outcome=== Below Exception arises. Mail Received without Attachment.
[032116_150844478][oracle.apps.xdo.batch.DeliveryHelper][EXCEPTION] java.io.FileNotFoundException: /usr/tmp/032116_150843118/INVOICE-181448.pdf (No such file or directory)
.
..
...
Bursting process complete..
Generating Bursting Status Report..
--Exception
/usr/tmp/032116_150843118/STERIS RECHNUNG-181448.pdf (No such file or directory)
java.io.FileNotFoundException: /usr/tmp/032116_150843118/INVOICE-181448.pdf (No such file or directory)
Please help.
Regards,
Ranjith
Hello Gareth,
Thank you for the useful information.
Could you also please, advise if there is a way to implement profile option for the server name? So that, if there is a need to change the server name, then we dont have to change it for all the applicable templates , but just handle it at profile option.
Thank you,
Keerthi
Hi Keerthi,
You may be able to use xdodelivery.cfg, alternatively have the server in the source XML, selected from profile option or similar.
Regards,
Gareth
Post a Comment