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'||'&paramform=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:
    4dyomi

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

    otn.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,
    Pippa

    Philippy,
    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

  • Running reports through Forms server using run_report_object produces no output.

    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 Kumar

    Hi 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 you

    Simple 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 "&gt;" and "&lt;"
       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.

  • How to print the report directly without previewing (report viewer) using c# windows application

    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,
    Hardz

    After 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