Wednesday, March 26, 2008

BI Publisher EBS Bursting 101: A tutorial/case study including Bursting Control File to email Suppliers Remittance Advice in 1 easy step

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:

  1. Setup a new concurrent program definition by copying the existing one, renaming, changing the executable, changing output to XML
  2. Added the new concurrent program to Payables "All Reports" request group
  3. Copied the report definition $AP_TOP/reports/US/APXPBSRA.rdf to a new report XXV8_APXPBSRA.rdf under modifications top directory
  4. Spiced up the new report with a couple of extra fields (Remittance Email, Fax number, etc)
  5. Restricted the data returned to only Suppliers Sites with a Remittance Email address (take this out later for fax/print etc).
  6. Restricted the data returned to only payments with payment method of EFT (checks have their on remittance advice).
  7. 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
  8. 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:

  1. Create a new pretty RTF layout template
  2. Register the Data Definition
  3. Register the Template
  4. 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:

  1. Create a Bursting Control File to email Suppliers
  2. Upload the control file to the Data Definition
  3. Test it out by calling the XML Publisher Report Bursting Program
  4. (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.

  1. 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!
  2. 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.
  3. 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!
  4. Minor issue that layout is not applied to the Bursting Request so no output, but can just run XML Report Publisher over it.

References:

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 278
Unknown said...

Hi 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

Gareth said...

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

Unknown said...

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

seanmark said...

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

seanmark said...

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

gaju said...

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

prathyush said...

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.

Gareth said...

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

Gareth said...

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

Shilpa said...

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.

Gareth said...

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

Unknown said...

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

Gareth said...

Hi Biking Badger,

Yes, you can use ETEXT to generate "hand cut" XML, of course need to be careful with XML tags.

Regards,
Gareth

Unknown said...

Hi Gareth,

Just curious to know....is it possible we will do it without RTF file?

Regards,
Prakash

Gareth said...

Hi Prakash,
The RTF file provides the layout, you could use XSL, ETEXT etc. to provide layout but you need something :-)

Regards,
Gareth

RS said...

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

Gareth said...

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

Ramu said...

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

Ramu said...

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"

Gareth said...

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

Nalin said...

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

Gareth said...

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

Nalin said...

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

Gareth said...

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

Kiran Reddy said...

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?

Gareth said...

Hi Kiran,
Not sure - this might need a patch - please log an SR if you need to.
Regards,
Gareth

jill said...

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

Gareth said...

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

jill said...

Thanks for the response. I have tried that one and it treated the %y%m%d as a string.

jill

jill said...

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

Gareth said...

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

Aj said...

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

abilash said...

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..

Gareth said...

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

Unknown said...

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

Gareth said...

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

kaushek said...

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

Gareth said...

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

Anwar Aziz said...

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

Gareth said...

Hi Anwar Aziz,
Make sure all your incoming email addresses are valid formats - see my post on validating email address via regex.

Regards,
Gareth

Anwar Aziz said...

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

Adnan said...

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

Gareth said...

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

Chandra R Matta said...

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

Gareth said...

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

Chandra R Matta said...

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 ?

kaushek said...

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

Unknown said...

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

Gareth said...

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

Uma Pathy said...

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

Unknown said...

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

Gareth said...

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

AzzKckrUGA said...

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

Gareth said...

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

Unknown said...
This comment has been removed by the author.
Unknown said...

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.

Unknown said...

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

Gareth said...

Hi Zubair,

Yes you can burst to server local filesystem and email, just an additional delivery channel in the bursting control file.

Regards,
Gareth

Unknown said...

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;

Aopu Mohsin said...

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

Aopu Mohsin said...
This comment has been removed by the author.
Gareth said...

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

ssuummaa said...

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

Gareth said...

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

ssuummaa said...

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

ssuummaa said...

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
)
);

ssuummaa said...
This comment has been removed by the author.
ssuummaa said...

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

Unknown said...

it is a very nice content your blog
Filter Elements supplier in Agra

Unknown said...

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

Gareth said...

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

ssuummaa said...

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

ssuummaa said...

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

ssuummaa said...

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

ssuummaa said...

I have the burst example in the below link https://community.oracle.com/message/13165306

Ranjith said...

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

Unknown said...

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

Gareth said...

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

«Oldest ‹Older   201 – 278 of 278   Newer› Newest»