Sending parameters to reports by using Run_Report_Object
Hi All,
How do I send parameters to report while using Run_Report_Object built-in ?
Thanks in advance.
Regards,
Sanjay Kanakath
hello,
there is a builtin for setting the parameters :
from the forms builder online help :
DECLARE
repid REPORT_OBJECT;
report_prop VARCHAR2(20);
BEGIN
repid := find_report_object('report4');
SET_REPORT_OBJECT_PROPERTY(repid, REPORT_EXECUTION_MODE, BATCH);
SET_REPORT_OBJECT_PROPERTY(repid, REPORT_COMM_MODE, SYNCHRONOUS);
SET_REPORT_OBJECT_PROPERTY(repid, REPORT_DESTYPE, FILE);
END;
you can use
SET_REPORT_OBJECT_PROPERTY(repid,
REPORT_OTHER,
'deptno=10');
to set the Other Parameters property of the report object.
regards,
philipp
Similar Messages
-
Execute report output using RUN_REPORT_OBJECT built-in in Oracle Forms 10
hello,
am executing report when am pressing the Button
in the WHEN-BUTTON-PRESSED Trigger i wrote the below code
Declare
v_report_id report_object;
v_report varchar2(100);
vjob_id varchar2(100);
vc_rep_status varchar2(100);
BEGIN
v_report_id := FIND_REPORT_OBJECT('new_test_report');
v_report := RUN_REPORT_OBJECT ( v_report_id );
vjob_id := substr (v_report,31); -- ( vc_ReportServerJob, length(vc_reportserver)
+2, length(vc_ReportServerJob) );
vc_rep_status := REPORT_OBJECT_STATUS (v_report);
IF vc_rep_status = 'FINISHED' THEN
WEB.SHOW_DOCUMENT ('/reports/rwservlet/getjobid'|| vjob_id||'?server=rep_mohahubkpcomp_ORaHOme_IAS'||'&userid=bedman/bedman@bedman'||'¶mform=no','_blank');
ELSE
message ('Report failed with error message '||vc_rep_status);
message ('Report failed with error message '||vc_rep_status);
END IF;
END;
the above code is executing the output but it is asking the AUTHENTICATION TO OID(Oracle Internet Directory). If i give this id then only the Output is displaying..
in WEB.SHOW_DOCUMENT i mentioned that userid is DB id... if it is wrong
which id i have to specify.
and The report is located in Reportserver . and it is added to Form. in report node.
it is an urgent requirement.
Thanks & Regards
Gagan.Hello,
Have you created a "reports object" in Forms ?
(watch under the Reports node in the "Object Navigator".
Regards -
Sending notifications or reports without using SMTP
We are currently looking to implement DPM in an isolated network with a domain but no email server or connection to the Internet. Is there a way to deliver notifications or reports to a network folder or to a Windows workstation on that isolated network?
I agree with
Robert Hedblom !
QuickTricks: Where are the DPM 2012 management packs
Managing and Monitoring System Center DPM 2012 with SCOM Part 1
Monitor Data Protection Manager 2012 using SCOM 2012 SP1
Have a nice day !!! -
Using Run_Report_Object() To Call Reports with a Parameter Form
Hi
I have successfully migrated a version 5 application to 10g but, I'm having a particular issue with reports run from a menu.
The report has 3 user parameters and they previously worked with a client server parameter form.
How do I pass the parameters from the report to the RUN_REPORT_OBJECT in the pl/sql editor in the menu ?
In my other reports I have used a :block.item bind variables but in this case there is no datablock involved.
Any help with the correct syntax will help.
Message was edited by:
4dyomi
Message was edited by:
4dyomiDear Friend,
You can use following code to run a report from "Forms10g" using RUN_REPORT_OBJECT. Directly copy below code to your forms10g and make appropriate changes. In the code, "Manish" is the name of report server running on your application server. To start report server u can run this command on command prompt on your application server.
rwserver server=<server_name>
This command will start report server. In below code i have a text box called "ADDRESS_CODE" which i am passing as a parameter to report which conatains a parameter called "SUBCODE". This is a tested code and works fine in Forms10g DS.
declare
cnt number(3);
report_id report_object;
REPORTSERVERJOB VARCHAR2(100);
VJOBID VARCHAR2(100);
REPORTSERVER VARCHAR2(50) := 'MANISH';
V_URL2 VARCHAR2(500);
V_URL VARCHAR2(100);
PARA PARAMLIST ;
begin
PARA := CREATE_PARAMETER_LIST('INPUT1');
--'ADDRESS_BOOK' IS A REPORT OBJECT DEFINED
REPORT_ID := FIND_REPORT_OBJECT('ADDRESS_BOOK');
--FOLLOWING PARAMETERS ARE MANDATORY PARAMETERS TO SET REPORT OBJECT
SET_REPORT_OBJECT_PROPERTY(report_id, REPORT_COMM_MODE, SYNCHRONOUS);
SET_REPORT_OBJECT_PROPERTY(report_id, REPORT_EXECUTION_MODE, BATCH);
SET_REPORT_OBJECT_PROPERTY(report_id, REPORT_DESTYPE, FILE);
SET_REPORT_OBJECT_PROPERTY(report_id, REPORT_DESFORMAT, 'HTMLCSS');
SET_REPORT_OBJECT_PROPERTY(report_id, REPORT_SERVER, REPORTSERVER);
--TO SEND PARAMETERS TO REPORT ADD FOLLOWING CODE, (:ADDRESS_CODE IS A TEXT ITEM)
ADD_PARAMETER(PARA,'SUBCODE',TEXT_PARAMETER,:ADDRESS_CODE);
--RUN REPORT OBJECT TO FETCH JOBID
REPORTSERVERJOB := RUN_REPORT_OBJECT(REPORT_ID,PARA);
--VJOBID IS JOBID THAT IS SET AT RUNTIME BY REPORT SERVER
vjobID := substr(ReportServerJob,length(reportserver)+2,length(ReportServerJob));
v_url := '/reports/rwservlet/getjobid'||vjobID||'?server='||reportserver;
Web.Show_Document(v_url,'_blank');
DESTROY_PARAMETER_LIST(PARA);
end;
Regards,
Manish Trivedi
Software Developer
Ambuja Cement,
India. -
Passing multiple parameters to report using run_report_object
Can someone give an example of passing more than 1 parameter from a form to a report using run_report_object.
Thanksotn.oracle.com/products/forms --> collateral
A Reports integration whitepaper exists for all releases of Oracle Forms, also containing this information.
Frank -
FRM-41213 When calling report from a form using RUN_REPORT_OBJECT
Hi,
I get an error frm-41214:unable to connect to the report server when i am trying to call a report from a form using RUN_REPORT_OBJECT.
My code is as follows:
I have created a simple report using employee table such tht when i give the department number as parameter it should get the corresponding details along with that i also have highlited the system parameters:
DESFORMAT
DESNAME
DESTYPE
also other user parameters as
p_action
p_servername
p_user_connect
and in the before parameter form trigger the following code:
function BeforePForm return boolean is
vc_parameter_form VARCHAR2(4000);
vc_hidden_runtime_values VARCHAR2(1000);
vc_report_name VARCHAR2(100);
begin
IF (:P_ACTION = '_action_') THEN
vc_hidden_runtime_values := '_hidden_';
ELSE
srw.get_report_name(vc_report_name);
vc_hidden_runtime_values:='report='||vc_report_name||'&destype='||:destype||'&desformat='
||:desformat||'&userid='||:p_user_connect||'&server='||:p_servername;
END IF;
vc_parameter_form:='<html><body bgcolor="#ffffff"><form method=post action="'
||:P_ACTION||'">'||'<input name="hidden_run_parameters" type=hidden value="'
||vc_hidden_runtime_values||'">'||'<center><p><table border=0 cellspacing=0 cellpadding=0><tr><td>'
||'<input type=submit></td><td width=15><td><input type=reset></td>'||'</tr></table><p><hr><p>';
srw.set_before_form_html(srw.text_escape,vc_parameter_form);
return (TRUE);
end;
After this i created a form with department table as my datablock:
I created a report object in the form with name REPORT6.
-Created a procedure in the form with the following code
PROCEDURE RUN_REPORT_OBJECT_PROC(report_id REPORT_OBJECT,reportserver VARCHAR2,runformat VARCHAR2) IS
report_message VARCHAR2(100);
rep_status VARCHAR2(100);
vc_user_name VARCHAR2(100);
vc_user_password VARCHAR2(100);
vc_user_connect VARCHAR2(100);
vc_connect VARCHAR2(300);
BEGIN
vc_user_name:=get_application_property(username);
vc_user_password:=get_application_property(password);
vc_user_connect:=get_application_property(connect_string);
vc_connect:=vc_user_name||'/'||vc_user_password||'@'||vc_user_connect;
SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_EXECUTION_MODE,BATCH);
SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_COMM_MODE,ASYNCHRONOUS);
SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_DESTYPE,CACHE);
SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_DESFORMAT,runformat);
SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_SERVER,reportserver);
SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_OTHER,'p_deptno='
||:Dept.Deptno
||' paramform=yes P_USER_CONNECT='
||vc_connect||' P_SERVERNAME='||reportserver
||' P_ACTION=http://iitv-1:8888/reports/rwservlet?');
report_message:=run_report_object(report_id);
rep_status := report_object_status(report_message);
WHILE rep_status in ('RUNNING','OPENING_REPORT','ENQUEUED')LOOP
rep_status := report_object_status(report_message);
END LOOP /* Wait for Report to be finished */;
IF rep_status='FINISHED' then
web.show_document('http://iitv-1:8888/reports/rwservlet/getjobid'||
substr(report_message,instr(report_message,'_',-1)+1)||'?server'
||reportserver,'_blank');
ELSE
message (rep_status||' Report output aborted');
END IF;
END;
I created a press button and in the when_button_pressed trigger i added the following code:
declare
repid REPORT_OBJECT;
repserver VARCHAR2(100);
runformat VARCHAR2(10);
BEGIN
repid := find_report_object('REPORT6');
repserver := 'rep_iitv-1';
runformat := 'HTML';
run_report_object_proc(repid,repserver,runformat);
END;
Then tried to run the form but i got this error frm-41213 unable to connect to the report server.
Any one please help me.Run_report_object can't work with forms9i
Regards
Vikas Singhal -
How do I launch report from menu using RUN_REPORT_OBJECT?
Hi all,
Re: How do I launch report from menu (and have it print to the screen) using RUN_REPORT_OBJECT?
I am using Oracle 9iAS on Windows 2000 and I have a similar problem with launching reports from the menu. The application should call the report via the RUN_REPORT_OBJECT builtin feature from Forms. The report is never displayed.
The report is in the same folder as the menu form calling it. Do the reports have to be in a specific format? How do I get the report_id?
The name of the report is seconds_calls. No user-specified parameters are passed. Also, the report object in the object navigator in Forms is Report4 (is this relevant?)
When I try to run report via the form using this code:
DECLARE
report_id REPORT_OBJECT;
rep_status VARCHAR2(200);
v_rep VARCHAR2(100);
report_job_id VARCHAR2(200);
-- job_number NUMBER;
-- server_name VARCHAR2(200) := 'repserver';
BEGIN
report_id:= FIND_REPORT_OBJECT('seconds_calls');
rep_status:=REPORT_OBJECT_STATUS(report_job_id);
v_rep := RUN_REPORT_OBJECT(report_id);
END;
I get this error message:
FRM-41219 Cannot find report:Invalid ID
And this message
FRM-40738 Argument 1 to builtin RUN_REPORT_OBJECT cannot be null
When I tried to use the same code (above), substituting the object name for the form name,
I got these messages:
FRM-41219 Cannot find report:Invalid ID
FRM-40738 Argument 1 to builtin RUN_REPORT_OBJECT cannot be null
And FRM-10259 Invalid null argument to packaged procedure or function (???)
Any ideas?
Cheers,
PippaPhilippy,
substr(v_rep,instr(v_rep,'_',-1)+1)
This code extracts the Reports job id from the Reports Server name. The run_report_object() built-in
retrieves e.g. RepServ_9 as a job id, but in Reports9i you only need the '9' as a value to retrieve the
output.
Use the following sample a template. It is a procedure that expects the reports object name, teh reports server name and the
output format as an argument. The call to Web.show_document expects the ReportsSrevices to be accessible from teh same server
(relative addressing is used)
PROCEDURE RUN_REPORT_OBJECT_PROC (vc_reportobj Varchar2, vc_reportserver varchar2, vc_runformat varchar2) IS
v_report_id Report_Object;
vc_ReportServerJob VARCHAR2(100); /* unique id for each Report request */
vc_rep_status VARCHAR2(100); /* status of the Report job */
vjob_id VARCHAR2(100); /* job_id as number only string*
BEGIN
/* Get a handle to the Report Object itself. */
v_report_id:= FIND_REPORT_OBJECT(vc_reportobj);
SET_REPORT_OBJECT_PROPERTY(v_report_id,REPORT_COMM_MODE,SYNCHRONOUS);
SET_REPORT_OBJECT_PROPERTY(v_report_id,REPORT_DESTYPE,CACHE);
/* Define the Report output format and the name of the Reports Server as well as a user-defined parameter, passing the department number from Forms to the Report. We don't need a parameter form to be displayed, and therefore paramform is set to "no". */
SET_REPORT_OBJECT_PROPERTY(v_report_id,REPORT_DESFORMAT, vc_runformat);
SET_REPORT_OBJECT_PROPERTY(v_report_id,REPORT_SERVER, vc_reportserver);
SET_REPORT_OBJECT_PROPERTY(v_report_id,REPORT_OTHER, 'p_deptno='||:dept.deptno||'paramform=no');
vc_ReportServerJob:=RUN_REPORT_OBJECT(report_id);
/* remove the Reports Server name from teh job id */
vjob_id := substr(vc_ReportServerJob,length(reportserver)+2,length(vc_ReportServerJob));
/* Check the report status if finished. */
vc_rep_status := REPORT_OBJECT_STATUS(vc_ReportServerJob);
IF vc_rep_status='FINISHED' THEN
/* Call the Report output to be displayed in a separate browser window.
The URL for relative addressing is only valid when the Reports Server
is on the same host as the Forms Server. For accessing a Remote Reports
Server on a different machine, you must use the prefix http://hostname:port/ */
WEB.SHOW_DOCUMENT ('/reports/rwservlet/getjobid '||vjob_id ||'?server='vc_reportserver,'_blank');
ELSE
message ('Report failed with error message '||vc_rep_status);
END IF;
END;
Frank -
I am running a non-parameterized report from forms on the forms server using run_report_object. The parameters being passed to the reports server through the property palette are
file name = blr_ndc_005
execution mode= RUNTIME
communication mode = ASYNCHRONOUS
destype= SCREEN
desformat=
desname=
report server= REP60_9IAS
although the report ran successfully there is no output being displayed in any browser window. Though when i change the destype parameter to 'FILE' the report runs successfully and the file is generated.
I want similar functionality to the web.show_document built-in but the purpose is to hide the username and password.
I would be very grateful if anyone could help me in this regard or let me know if this is not possible.
Thanking in anticipation,
Majid.please check the reports and forms integration paper on otn to see the correct way to get your output from the report.
-
Passing parameter to report from form using RUN_REPORT_OBJECT method
Will you please let me know how to do this. I tried using run_product but it is giving error as too many declarations. So I decided to use RUN_REPORT_OBJECT, but no help is provided how to pass paramters to this routine from FORMS to REPORTS.
If you just want to change the heading of a column dynamically, you can go with any of the two options. For both the options, you need to remove the static text and replace it with any dummy field (ensure the reference of field w.r. to repeating frame)
1. Use the Format Trigger and change the heading to either "school" or "college" based on your field value.
Ex.
If :<field_name> = 'S'
then :dummy_field := 'School'
Else
:dummy_field := 'College'
End If;
Return (true)
2. Another option is similar to this and uses a CF.
(I would prefer CF).
Warm Regards,
Raja. -
What reports are used to send PO, Conf and Inv from MM to SUS?
Hi dudes
What reports are used to send PO, Conf and Inv from MM to SUS?
Regards
Raj KumarHi Raj kumar,
First implemting MM-SUS or EBP-SUS XI is mandatory. For sending a PO, it 's standard process. You have to define partner profile and once you create a PO system geneartes an IDOC with orders02 and send to XI from there goes to SUS.
For confirmation you have to run the report rpoddelvery report . this reports sends all the GR's to SUS.
Please follow the config doc and follow below links
http://help.sap.com/saphelp_srm50/helpdata/en/56/54f137a5e6740ae10000009b38f8cf/frameset.htm
http://help.sap.com/saphelp_srm50/helpdata/en/62/fb7d3cb7f58910e10000000a114084/frameset.htm
http://help.sap.com/saphelp_srm50/helpdata/en/2a/38fd37dcc4e34ce10000009b38f842/content.htm
Please let me know if any problem
Thnaks
Ravi -
Report Viewer WP - Sending Parameters from querystring to Report
Hello All,
I have a report viewer Web Part in a page and I need to pass page query string value as parameter to this report.
how could i achieve that???Hi,
Please refer to the threads below:
http://social.technet.microsoft.com/forums/sharepoint/en-US/b60bb5f8-8ce5-4a76-b100-72e4e16ecb69/query-string-url-parameter
http://social.technet.microsoft.com/Forums/en-US/51b06f71-bd02-4d55-bdff-b96fd6330a09/passing-report-parameters-by-report-viewer?forum=sqlreportingservices
In addition, you could ask the question in Power View forum for more sufficient resource and assistance:
http://social.technet.microsoft.com/Forums/en-US/home?forum=sqlreportingservices
Regards,
Rebecca Tu
TechNet Community Support -
Sending email to multiple address using Utl_Smtp
Hi,
I want to send email to multiple address using the Utl_Smtp feature.
When I am sending email to one email address in the To:Field it works fine.However, when I send
to multiple address I am getting the below error.I am using a table(Email_test) to store all email id.
Error report:
ORA-29279: SMTP permanent error: 501 5.1.3 Invalid address
ORA-06512: at "SYS.UTL_SMTP", line 20
ORA-06512: at "SYS.UTL_SMTP", line 98
ORA-06512: at "SYS.UTL_SMTP", line 240
ORA-06512: at line 48
29279. 00000 - "SMTP permanent error: %s"
*Cause: A SMTP permanent error occurred.
*Action: Correct the error and retry the SMTP operation.
I am trying two options both ways I am getting error
Option 1:
Selecting two email id indivually in the select query as below
select email into v_Recipient1 from Email_test where Key_name='U1';
select email into v_Recipient2 from Email_test where Key_name='U2';
v_Recipient := v_Recipient1||';'||v_Recipient2;
Option 2:
Is there a way to use option
select email into v_Recipient1 from Email_test where Key_name='U4';
===========================================================
Create table Script
===========================================================
create table Email_test (Email varchar2(100),Key_name varchar2(10));
insert into Email_test values ('[email protected]','U1');
insert into Email_test values ('[email protected]','U2');
insert into Email_test values ('[email protected]','U3')
insert into Email_test values ('[email protected];[email protected];[email protected]','U4');
select * from Email_test
[email protected] U1
[email protected] U2
[email protected] U3
[email protected];[email protected];[email protected] U4
select * from Email_test where Key_name in ('U1','U2','U3')
[email protected] U1
[email protected] U2
[email protected] U3
select * from Email_test where Key_name='U4'
[email protected];[email protected];[email protected]
=======================================================
PL/SQL Block
===========================================================
declare
v_From VARCHAR2(80) := '[email protected]';
v_cc VARCHAR2(80);
v_Recipient VARCHAR2(80) ;
v_Recipient1 VARCHAR2(80) ;
v_Recipient2 VARCHAR2(80) ;
v_Subject VARCHAR2(80);
v_Mail_Host VARCHAR2(50);
v_Mail_Conn utl_smtp.Connection;
crlf VARCHAR2(2) := chr(13)||chr(10);
begin
--Mail Host name
select VALUE into v_Mail_Host from Server_info where server_name = 'SMTPServer';
select email into v_Recipient1 from Email_test where Key_name='U1';
select email into v_Recipient2 from Email_test where Key_name='U2';
v_Recipient := v_Recipient1||';'||v_Recipient2;
--for CC
select email into v_cc from Email_test where Key_name='U3';
v_Mail_Conn := utl_smtp.Open_Connection(v_Mail_Host, 25);
utl_smtp.Helo(v_Mail_Conn, v_Mail_Host);
utl_smtp.Mail(v_Mail_Conn, v_From);
utl_smtp.Rcpt(v_Mail_Conn, v_Recipient);
utl_smtp.Rcpt(v_Mail_Conn, v_cc); -- To CC recepient
utl_smtp.Rcpt(v_Mail_Conn, v_BCC); To BCC recepient
utl_smtp.Data(v_Mail_Conn,
'Date: ' || to_char(sysdate, 'Dy, DD Mon YYYY hh24:mi:ss') || crlf ||
'From: ' || v_From || crlf ||
'Subject: '|| v_Subject || crlf ||
'To: ' || v_Recipient || crlf ||
'Cc: ' || v_cc || crlf ||
'Content-Type: text/html;' ||crlf ||
--'Hello this is a test email');
crlf || to_char(sysdate, 'Dy, DD Mon YYYY hh24:mi:ss') || crlf );
utl_smtp.Quit(v_mail_conn);
end;
Any suggestion how to approach this issue.
Thank youSimple Mail Transfer Protocol RFC 5321 specifications.
RCPT TO:<forward-path> [ SP <rcpt-parameters> ] <CRLF>
The first or only argument to this command includes a forward-path
(normally a mailbox and domain, always surrounded by ">" and "<"
brackets) identifying one recipient.In other words, you can only define a SINGLE mailbox address at a time. Multiple addresses requires multiple repeats of this command verb, once per maibox.
Do not confuse this and the To: tag line in the Mime header that contains a comma delimited list of recipients. That tag line can contain anything - it is not parsed, not checked, and not verified as matching the actual recipient mailboxes as specified via the RCPT TO verb. -
Defining SERVER_NAME to use RUN_REPORT_OBJECT on a hardware load balancer
Hi everybody,
We are deploying a Forms application on OAS (actually Forms & Reports Services - FRS) 10.1.2.0.2 using a hardware load balancer, that distributes workload between two FRS instances on separate computers.
Forms work without a hitch, but it is executing reports that's not working.
The problem is that when using RUN_REPORT_OBJECT you have to supply the REPORT_SERVER parameter, and each computer has a different report server name, but you don't know in advance wich FRS instance you are going to connect to, because the URL is that of the load balancer.
We thought that omitting the report server name from the report_object would do the trick but then we get an "FRM-41211 integration error" message
What would be the right o recomended way to solve this problem?
Thanks in advance,
Miguel.What would be the right o recomended way to solve this problem?I don't know what would be the right or recomended way, I can say how we solved the problem in our Forms/Reports applications.
We have a lookup table where each machine has some parameters configured, one of which is the reports server name. The first form in each application identifies the machine where it's running, and reads corresponding rows in that table. -
Hi,
Currently, we are using crystal report to all of our reporting applications, but since I/users have encountered some issues about CR's speed to load only a simple report, maybe it is now time for us to adopt a new reporting environment in which I think SSRS
can fill this problem.
To start with, I have here a sample code, that uses the crystal report to print the report directly without previewing:
csCashInvoiceCal csCashCal; --Crystal report name .rpt
dsCsReceipt dsCs; --created dataset
DataTable u;
DataRow s;
private System.Drawing.Printing.PrintDocument printDocument1;
private System.Windows.Forms.PrintDialog printDialog1;
ParameterValues paramValue;
ParameterDiscreteValue discreteValue;
ParameterFieldDefinition fieldDefinition;
private void btnPrint_Click(object sender, EventArgs e)
this.Cursor = Cursors.WaitCursor;
loadReceipt2();
print2();
csCashCal.Close();
this.Cursor = Cursors.Default;
private void loadReceipt2()
dsCs = new dsCsReceipt(); --created dataset
u = dsCs.Tables.Add("DtCsReceipt");
u.Columns.Add("Qty", Type.GetType("System.String"));
u.Columns.Add("UOM", Type.GetType("System.String"));
u.Columns.Add("Description", Type.GetType("System.String"));
u.Columns.Add("UnitPrice", Type.GetType("System.String"));
u.Columns.Add("Discount", Type.GetType("System.String"));
u.Columns.Add("Amount", Type.GetType("System.String"));
try
for (int i = 0; i < dgvDesc.Rows.Count - 1; i++)
s = u.NewRow(); double.TryParse(dgvDesc.Rows[i].Cells[Discount2.Name].Value.ToString(), out discount);
s["Qty"] = double.Parse(dgvDesc.Rows[i].Cells[Qty.Name].Value.ToString());
s["UOM"] = dgvDesc.Rows[i].Cells[Uom2.Name].Value.ToString();
s["Description"] = invcode + dgvDesc.Rows[i].Cells[Description.Name].Value.ToString();
s["UnitPrice"] = dgvDesc.Rows[i].Cells[UnitPrice.Name].Value.ToString();
if (discount != 0)
s["Discount"] = "(" + string.Format("{0:0.##}", discount) + "%)";
else
s["Discount"] = "";
s["Amount"] = dgvDesc.Rows[i].Cells[Amount2.Name].Value.ToString();
u.Rows.Add(s);
catch (Exception) { }
csCashCal = new csCashInvoiceCal();
csCashCal.SetDataSource(dsCs.Tables[1]);
//csCashCal.Refresh();
loadParameter2();
private void loadParameter2()
ParameterFieldDefinitions paramFieldDefinitions;
paramValue = new ParameterValues();
discreteValue = new ParameterDiscreteValue();
paramFieldDefinitions = csCashCal.DataDefinition.ParameterFields;
discreteValue.Value = date;
fieldDefinition = paramFieldDefinitions["Date"];
commonParam();
discreteValue.Value = txtcsno.Text;
fieldDefinition = paramFieldDefinitions["InvoiceNo"];
commonParam();
discreteValue.Value = txtNameTo.Text;
fieldDefinition = paramFieldDefinitions["CustomerName"];
commonParam();
discreteValue.Value = txtAdd.Text;
fieldDefinition = paramFieldDefinitions["CustomerAddress"];
commonParam();
------other parameters----
private void commonParam()
paramValue.Clear();
paramValue.Add(discreteValue);
fieldDefinition.ApplyCurrentValues(paramValue);
private void print2()
using (printDocument1 = new System.Drawing.Printing.PrintDocument())
using (this.printDialog1 = new PrintDialog())
//this.printDialog1.UseEXDialog = true;
this.printDialog1.Document = this.printDocument1;
DialogResult dr = this.printDialog1.ShowDialog();
if (dr == DialogResult.OK)
int nCopy = this.printDocument1.PrinterSettings.Copies;
int sPage = this.printDocument1.PrinterSettings.FromPage;
int ePage = this.printDocument1.PrinterSettings.ToPage;
string PrinterName = this.printDocument1.PrinterSettings.PrinterName;
try
csCashCal.PrintOptions.PrinterName = PrinterName;
csCashCal.PrintToPrinter(nCopy, false, sPage, ePage);
printcount++;
//saveCountPrint();
catch (Exception err)
MessageBox.Show(err.ToString());
This is only a simple sales receipt application that uses dgv and textboxes to push its data to dataset to the crystal report, a simple one but there are instances that it is very slow.
But I'm having trouble implementing this using SSRS, since I'm only new to this one, wherein I created the report using report wizard, with two button options inside the form for print preview or direct print selection. Actually, it is very easy to implement
with print preview because it uses reportviewer. My problem is that how can I print the report directly without using a reportviewer?
So here is my code so far which I don't know what's next:
private void button2_Click(object sender, EventArgs e)
this.Cursor = Cursors.WaitCursor;
loadReceipt3();
//print3();
this.Cursor = Cursors.Default;
ReportParameter[] parameter = new ReportParameter[11];
private void loadParameter3()
parameter[0] = new ReportParameter("InvoiceNo", txtcsno.Text);
parameter[1] = new ReportParameter("Date", date);
parameter[2] = new ReportParameter("CustomerTin", txtTin.Text);
parameter[3] = new ReportParameter("CustomerName", txtNameTo.Text);
parameter[4] = new ReportParameter("CustomerAddress", txtAdd.Text);
parameter[5] = new ReportParameter("Agent", agent);
parameter[6] = new ReportParameter("Discount", "Discount: ");
parameter[7] = new ReportParameter("TotalDiscount", lblDiscount.Text + "%");
parameter[8] = new ReportParameter("TotalSales", rdtotal);
parameter[9] = new ReportParameter("Tax", rdtax);
parameter[10] = new ReportParameter("TotalAmount", rdnet);
private void loadReceipt3()
DataSet dsrs = new DataSet();
DataTable dtrs = new DataTable();
DataRow drs;
dtrs.Columns.Add("Qty", Type.GetType("System.String"));
dtrs.Columns.Add("UOM", Type.GetType("System.String"));
dtrs.Columns.Add("Description", Type.GetType("System.String"));
dtrs.Columns.Add("UnitPrice", Type.GetType("System.String"));
dtrs.Columns.Add("Discount", Type.GetType("System.String"));
dtrs.Columns.Add("Amount", Type.GetType("System.String"));
try
for (int i = 0; i < dgvDesc.Rows.Count - 1; i++)
drs = dtrs.NewRow();
drs["Qty"] = double.Parse(dgvDesc.Rows[i].Cells[Qty.Name].Value.ToString());
drs["UOM"] = dgvDesc.Rows[i].Cells[Uom2.Name].Value.ToString();
drs["Description"] = invcode + dgvDesc.Rows[i].Cells[Description.Name].Value.ToString();
drs["UnitPrice"] = dgvDesc.Rows[i].Cells[UnitPrice.Name].Value.ToString();
if (discount != 0)
drs["Discount"] = "(" + string.Format("{0:0.##}", discount) + "%)";
else
drs["Discount"] = "";
drs["Amount"] = dgvDesc.Rows[i].Cells[Amount2.Name].Value.ToString();
dtrs.Rows.Add(s);
catch (Exception) { }
int addtlRow = 7;
if (addtlRow > (count - 1))
addtlRow = addtlRow - (count - 1);
for (int i = 0; i < addtlRow; i++)
dtrs.Rows.Add();
loadParameter3();
LocalReport localreport = new LocalReport();
localreport.SetParameters(parameter);
localreport.DataSources.Clear();
localreport.DataSources.Add(new ReportDataSource("dsSalesReceiptSsrs", dtrs));
localreport.Refresh();
//what's next....
So what's next after local..refresh()? Actually, I have googled a lot but I didn't found the exact solution that I'm looking for which confuses me a lot.
Anyway I'm using VS 2010 with sql server 2012 express.
You're help will be greatly appreciated.
Thank you,
HardzAfter some further studies with ReportViewer controls and with the use of this tutorial @ : http://msdn.microsoft.com/en-us/library/ms252091.aspx, which helps me a lot on how to print a report without using a report viewer, I found out what is missing
with my code above and helps solve my question.
Here's the continuation of the code above:
private void loadReceipt3()
loadParameter3();
LocalReport localreport = new LocalReport();
localreport.ReportPath = @"..\..\SsrsCashReceipt.rdlc";
localreport.SetParameters(parameter);
localreport.DataSources.Clear();
localreport.DataSources.Add(new ReportDataSource("dsSalesReceiptSsrs", dtrs));
Export(localreport);
print4();
private IList<Stream> m_streams;
private int m_currentPageIndex;
private void Export(LocalReport report)
string deviceInfo =
@"<DeviceInfo>
<OutputFormat>EMF</OutputFormat>
<PageWidth>8.5in</PageWidth>
<PageHeight>11in</PageHeight>
<MarginTop>0.25in</MarginTop>
<MarginLeft>0.25in</MarginLeft>
<MarginRight>0.25in</MarginRight>
<MarginBottom>0.25in</MarginBottom>
</DeviceInfo>";
Warning[] warnings;
m_streams = new List<Stream>();
report.Render("Image", deviceInfo, CreateStream,
out warnings);
foreach (Stream stream in m_streams)
stream.Position = 0;
private void print4()
if (m_streams == null || m_streams.Count == 0)
throw new Exception("Error: no stream to print.");
PrintDocument printDoc = new PrintDocument();
PrintDialog printDlg = new PrintDialog();
printDlg.Document = printDoc;
DialogResult dr = printDlg.ShowDialog();
if (dr == DialogResult.OK)
if (!printDoc.PrinterSettings.IsValid)
throw new Exception("Error: cannot find the default printer.");
else
printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
m_currentPageIndex = 0;
printDoc.Print();
Dispose();
public void Dispose()
if (m_streams != null)
foreach (Stream stream in m_streams)
stream.Close();
m_streams = null;
private Stream CreateStream(string name, string fileNameExtension, Encoding encoding, string mimeType, bool willSeek)
Stream stream = new FileStream(name + "." + fileNameExtension,
FileMode.Create);
m_streams.Add(stream);
return stream;
private void PrintPage(object sender, PrintPageEventArgs ev)
Metafile pageImage = new
Metafile(m_streams[m_currentPageIndex]);
// Adjust rectangular area with printer margins.
Rectangle adjustedRect = new Rectangle(
ev.PageBounds.Left - (int)ev.PageSettings.HardMarginX,
ev.PageBounds.Top - (int)ev.PageSettings.HardMarginY,
ev.PageBounds.Width,
ev.PageBounds.Height);
// Draw a white background for the report
ev.Graphics.FillRectangle(Brushes.White, adjustedRect);
// Draw the report content
ev.Graphics.DrawImage(pageImage, adjustedRect);
// Prepare for the next page. Make sure we haven't hit the end.
m_currentPageIndex++;
ev.HasMorePages = (m_currentPageIndex < m_streams.Count);
Thank you very much for this wonderful tutorial. :) -
How to send mails to multiple recipents using SO_DOCUMENT_SEND_API
Hi ,
I am using the FM "SO_DOCUMENT_SEND_API".
I am able to send an Excel sheet as attachement, but my requirement is to send multiple mails to the corresponding persons. I tried using coma, colan, semi colan as the separator in the import parameter SENDER_ADDRESS for two different mail id's but it was not useful.
I need to send mails to multiple recipens using the same FM. (keeping one person in to list and two of the persons in CC.)
can any on throw some light on this.
Thanks
rewards will be great.....................................Hi,
The code below demonstrates how to send an email to an external email address([email protected]),
where the data is stored within a .xls attachment.
Instead of the statement, <b>PARAMETERS: p_email TYPE somlreci1-receiver
DEFAULT '[email protected]'.</b>,
use select-options & give the e-mail addresses that you want.
*& Report ZEMAIL_ATTACH *
*& Example of sending external email via SAPCONNECT *
REPORT ZEMAIL_ATTACH .
TABLES: ekko.
PARAMETERS: p_email TYPE somlreci1-receiver
DEFAULT '[email protected]'.
TYPES: BEGIN OF t_ekpo,
ebeln TYPE ekpo-ebeln,
ebelp TYPE ekpo-ebelp,
aedat TYPE ekpo-aedat,
matnr TYPE ekpo-matnr,
END OF t_ekpo.
DATA: it_ekpo TYPE STANDARD TABLE OF t_ekpo INITIAL SIZE 0,
wa_ekpo TYPE t_ekpo.
TYPES: BEGIN OF t_charekpo,
ebeln(10) TYPE c,
ebelp(5) TYPE c,
aedat(8) TYPE c,
matnr(18) TYPE c,
END OF t_charekpo.
DATA: wa_charekpo TYPE t_charekpo.
DATA: it_message TYPE STANDARD TABLE OF solisti1 INITIAL SIZE 0
WITH HEADER LINE.
DATA: it_attach TYPE STANDARD TABLE OF solisti1 INITIAL SIZE 0
WITH HEADER LINE.
DATA: t_packing_list LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,
t_contents LIKE solisti1 OCCURS 0 WITH HEADER LINE,
t_receivers LIKE somlreci1 OCCURS 0 WITH HEADER LINE,
t_attachment LIKE solisti1 OCCURS 0 WITH HEADER LINE,
t_object_header LIKE solisti1 OCCURS 0 WITH HEADER LINE,
w_cnt TYPE i,
w_sent_all(1) TYPE c,
w_doc_data LIKE sodocchgi1,
gd_error TYPE sy-subrc,
gd_reciever TYPE sy-subrc.
*START_OF_SELECTION
START-OF-SELECTION.
Retrieve sample data from table ekpo
PERFORM data_retrieval.
Populate table with detaisl to be entered into .xls file
PERFORM build_xls_data_table.
*END-OF-SELECTION
END-OF-SELECTION.
Populate message body text
perform populate_email_message_body.
Send file by email as .xls speadsheet
PERFORM send_file_as_email_attachment
tables it_message
it_attach
using p_email
'Example .xls documnet attachment'
'XLS'
'filename'
changing gd_error
gd_reciever.
Instructs mail send program for SAPCONNECT to send email(rsconn01)
PERFORM initiate_mail_execute_program.
*& Form DATA_RETRIEVAL
Retrieve data form EKPO table and populate itab it_ekko
FORM data_retrieval.
SELECT ebeln ebelp aedat matnr
UP TO 10 ROWS
FROM ekpo
INTO TABLE it_ekpo.
ENDFORM. " DATA_RETRIEVAL
*& Form BUILD_XLS_DATA_TABLE
Build data table for .xls document
FORM build_xls_data_table.
CONSTANTS: con_cret TYPE x VALUE '0D', "OK for non Unicode
con_tab TYPE x VALUE '09'. "OK for non Unicode
*If you have Unicode check active in program attributes thnen you will
*need to declare constants as follows
*class cl_abap_char_utilities definition load.
*constants:
con_tab type c value cl_abap_char_utilities=>HORIZONTAL_TAB,
con_cret type c value cl_abap_char_utilities=>CR_LF.
CONCATENATE 'EBELN' 'EBELP' 'AEDAT' 'MATNR'
INTO it_attach SEPARATED BY con_tab.
CONCATENATE con_cret it_attach INTO it_attach.
APPEND it_attach.
LOOP AT it_ekpo INTO wa_charekpo.
CONCATENATE wa_charekpo-ebeln wa_charekpo-ebelp
wa_charekpo-aedat wa_charekpo-matnr
INTO it_attach SEPARATED BY con_tab.
CONCATENATE con_cret it_attach INTO it_attach.
APPEND it_attach.
ENDLOOP.
ENDFORM. " BUILD_XLS_DATA_TABLE
*& Form SEND_FILE_AS_EMAIL_ATTACHMENT
Send email
FORM send_file_as_email_attachment tables pit_message
pit_attach
using p_email
p_mtitle
p_format
p_filename
p_attdescription
p_sender_address
p_sender_addres_type
changing p_error
p_reciever.
DATA: ld_error TYPE sy-subrc,
ld_reciever TYPE sy-subrc,
ld_mtitle LIKE sodocchgi1-obj_descr,
ld_email LIKE somlreci1-receiver,
ld_format TYPE so_obj_tp ,
ld_attdescription TYPE so_obj_nam ,
ld_attfilename TYPE so_obj_des ,
ld_sender_address LIKE soextreci1-receiver,
ld_sender_address_type LIKE soextreci1-adr_typ,
ld_receiver LIKE sy-subrc.
ld_email = p_email.
ld_mtitle = p_mtitle.
ld_format = p_format.
ld_attdescription = p_attdescription.
ld_attfilename = p_filename.
ld_sender_address = p_sender_address.
ld_sender_address_type = p_sender_addres_type.
Fill the document data.
w_doc_data-doc_size = 1.
Populate the subject/generic message attributes
w_doc_data-obj_langu = sy-langu.
w_doc_data-obj_name = 'SAPRPT'.
w_doc_data-obj_descr = ld_mtitle .
w_doc_data-sensitivty = 'F'.
Fill the document data and get size of attachment
CLEAR w_doc_data.
READ TABLE it_attach INDEX w_cnt.
w_doc_data-doc_size =
( w_cnt - 1 ) * 255 + STRLEN( it_attach ).
w_doc_data-obj_langu = sy-langu.
w_doc_data-obj_name = 'SAPRPT'.
w_doc_data-obj_descr = ld_mtitle.
w_doc_data-sensitivty = 'F'.
CLEAR t_attachment.
REFRESH t_attachment.
t_attachment[] = pit_attach[].
Describe the body of the message
CLEAR t_packing_list.
REFRESH t_packing_list.
t_packing_list-transf_bin = space.
t_packing_list-head_start = 1.
t_packing_list-head_num = 0.
t_packing_list-body_start = 1.
DESCRIBE TABLE it_message LINES t_packing_list-body_num.
t_packing_list-doc_type = 'RAW'.
APPEND t_packing_list.
Create attachment notification
t_packing_list-transf_bin = 'X'.
t_packing_list-head_start = 1.
t_packing_list-head_num = 1.
t_packing_list-body_start = 1.
DESCRIBE TABLE t_attachment LINES t_packing_list-body_num.
t_packing_list-doc_type = ld_format.
t_packing_list-obj_descr = ld_attdescription.
t_packing_list-obj_name = ld_attfilename.
t_packing_list-doc_size = t_packing_list-body_num * 255.
APPEND t_packing_list.
Add the recipients email address
CLEAR t_receivers.
REFRESH t_receivers.
t_receivers-receiver = ld_email.
t_receivers-rec_type = 'U'.
t_receivers-com_type = 'INT'.
t_receivers-notif_del = 'X'.
t_receivers-notif_ndel = 'X'.
APPEND t_receivers.
CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
EXPORTING
document_data = w_doc_data
put_in_outbox = 'X'
sender_address = ld_sender_address
sender_address_type = ld_sender_address_type
commit_work = 'X'
IMPORTING
sent_to_all = w_sent_all
TABLES
packing_list = t_packing_list
contents_bin = t_attachment
contents_txt = it_message
receivers = t_receivers
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.
Populate zerror return code
ld_error = sy-subrc.
Populate zreceiver return code
LOOP AT t_receivers.
ld_receiver = t_receivers-retrn_code.
ENDLOOP.
ENDFORM.
*& Form INITIATE_MAIL_EXECUTE_PROGRAM
Instructs mail send program for SAPCONNECT to send email.
FORM initiate_mail_execute_program.
WAIT UP TO 2 SECONDS.
SUBMIT rsconn01 WITH mode = 'INT'
WITH output = 'X'
AND RETURN.
ENDFORM. " INITIATE_MAIL_EXECUTE_PROGRAM
*& Form POPULATE_EMAIL_MESSAGE_BODY
Populate message body text
form populate_email_message_body.
REFRESH it_message.
it_message = 'Please find attached a list test ekpo records'.
APPEND it_message.
endform. " POPULATE_EMAIL_MESSAGE_BODY
Hope this helps.
Reward if helpful.
Regards,
Sipra
Maybe you are looking for
-
Hi all, Installed WAIK on server 2008 R2 64 bit. I'm setting up some boot images, and am having a real hard time getting drivers to integrate into the driver store in the boot images. What I'm finding is that when adding drivers to the boot image the
-
my iPhone 4s will not sync a changed playlist from itunes unless i turn off music match. Shouldn't I be able to use a playlist and music match at the same time?
-
Need more storage - larger internal drive, or external drive?
Good day...here's a little background before I head into my question. I have a mid-2010 Macbook Pro with a 320 GB hard drive. I have an 2 GB WD External Hard drive...I've partitioned 500 GB that I use for my Time Machine backups and use the remainin
-
Problem with mutiple BAPI calls during the commit
Hi all, I am trying to create accounts for a given partner i the transaction F9K1 using the BAPI BAPI_BKK_ACCNT_CREATE. After calling the BAPI I am committing it too. The problem is if I try to create multiple accounts like RCA, ACA, MCA, IOE and so
-
How to resolve insufficient data for an image
Hi I am using oracle 9i database I have written a package using 'utl_smtp' package to send email and attachment. When I am attaching a oracle report (in .pdf format;This report has an Image inserted into it) and sent it to an email address, the attac