How do I call a SAP RFC from an Oracle Form using webutils CLIENT_OLE2?

Hi guys,
Your help on this problem would be greatly appreciated.
We have an older forms 6i application which we are currently updating to 10g (which is a pain itself... but that's a different story.) which currently uses unssupported c++ routines to connect to the SAP system, we want to do away with this c++.
What I have so far is the following test code:
PROCEDURE cmd_summary
IS
o_sap_log client_ole2.obj_type;
o_sap_conn client_ole2.obj_type;
o_sap_rfcc client_ole2.obj_type;
-- o_sap_rfcx client_ole2.obj_type;
-- o_sap_rfc client_ole2.obj_type;
v_args ole2.list_type;
v_logon BOOLEAN := FALSE;
BEGIN
:block3.txt_result := 'TEST Started!';
--create logon control object
o_sap_log := client_ole2.create_obj ('SAP.logoncontrol.1');
--create the function object
o_sap_rfcc := client_ole2.create_obj ('SAP.Functions');
--create a new connection object
o_sap_conn := client_ole2.invoke_obj (o_sap_log, 'NewConnection');
--set the connection properties
client_ole2.set_property (o_sap_conn, 'System', caps$get_sys_param ('SAP_DST'));
client_ole2.set_property (o_sap_conn, 'MessageServer', caps$get_sys_param ('SAP_HST'));
client_ole2.set_property (o_sap_conn, 'GroupName', 'DEVELOP');
client_ole2.set_property (o_sap_conn, 'client', caps$get_sys_param ('SAP_CLT'));
client_ole2.set_property (o_sap_conn, 'SystemNumber', caps$get_sys_param ('SAP_SYN'));
client_ole2.set_property (o_sap_conn, 'User', caps$get_sys_param ('SAP_USR'));
client_ole2.set_property (o_sap_conn, 'Password', caps$get_sys_param ('SAP_PWD'));
client_ole2.set_property (o_sap_conn, 'language', caps$get_sys_param ('SAP_LNG'));
--set up the logon arguements
v_args := client_ole2.create_arglist;
client_ole2.add_arg (v_args, 1);
client_ole2.add_arg (v_args, TRUE);
--run the logon function
v_logon := client_ole2.get_bool_property (o_sap_conn, 'logon', v_args);
client_ole2.destroy_arglist (v_args);
IF v_logon
THEN
:block3.txt_result := :block3.txt_result || CHR (10) || 'LOGON Worked!!';
ELSE
:block3.txt_result := :block3.txt_result || CHR (10) || 'LOGON Failed!!';
END IF;
:block3.txt_result := :block3.txt_result || CHR (10) || 'TEST Ended!';
EXCEPTION
WHEN OTHERS
THEN
:block3.txt_result := :block3.txt_result || CHR (10) || SQLERRM (SQLCODE);
END cmd_summary;
NOTE: the get_sys_param functionis returning text from a table.
This seems to work okay, the logon command returning a TRUE. All good so far.
However, when I try to then use this connection for anything then I stumble and fall!
I've seen an example in VB where the SAP RFC object is "assigned" the connection object by simply stating:
Set oSAPrfc.Connection = oSAPconn
Where oSAPconn is setup in a similar way to my o_Sap_conn in the above example.
I have tried using the CLIENT_OLE2.SET_PROPERTY procedures but I don't think that's quite right.
I've tried using invoke, to try and "run" the method like:
v_args := CLIENT_OLE2.CREATE_ARGLIST;
client_ole2.add_arg_obj(v_args,o_sap_conn);
client_ole2.invoke(o_sap_rfcc,'Connection',v_args);
client_ole2.destroy_arglist(v_args);
but it fails.
I have also tried using the actual Connection function directly:
SAP_ISAPFUNCTIONS.connection(o_sap_rfcc, o_sap_conn);
But that just causes the Forms Server to crash... :?
Has anyone connected to SAP via Forms? I noticed one post on this forum which an example of some code using a SAPBAPI control but not WEBUTIL (Which I think I'd need to use because we are running 10g)
As a side note we are also looking into SAP Adapter as a possible "other" route but this too is getting very complicated... And I can't see a way of connecting a form to the Adpater anyway :(
Any advice would be very much appreciated.

Can anyone help?
Mike

Similar Messages

  • Error while calling standard OAF page from custom Oracle Form

    Hi,
    I am calling standard OAF page from custom oracle form using the following code.
    FND_FUNCTION.EXECUTE(FUNCTION_NAME=>'FUN_TRX_ENTRY_OUT_VIEW_BATCH',
    OPEN_FLAG =>'Y',
    SESSION_FLAG =>'N' ,
    OTHER_PARAMS =>'&ViewBatchID = "' || NAME_IN('FUN_AGIS_LINE_D.BATCH_ID') ||
                        '&CallingFunction = "' || 'MANEXPINQ' ||'"');
    But I am getting this error.
    oracle.apps.fnd.framework.OAException: This request was not processed as the request URL %2FOA_HTML%2FOA.jsp%3Fpage%3D%2Foracle%2Fapps%2Ffun%2Ftransaction%2Fentry%2Fwebui%2FViewOutBatchPG%26OAPB%3DFUN_PRODUCT_BRAND%26OAHP%3DFUN_SSWA_MENU%26OASF%3DFUN_TRX_ENTRY_OUT_SEARCH%26_ti%3D1217029204%26language_code%3DUS%26%26ViewBatchID%20%3D%20%22203148%26CallingFunction%20%3D%20%22MANEXPINQ%22%26CallFromForm%3D%27Y%27%26oas%3DqZqg3tmdEdUNyw_HtskVow.. contained potentially illegal or un-encoded characters. Please try again by submitting a valid URL or contact your systems administrator for assistance.
    Please let me know any thing I missed out here.
    Any suggestion will highly appreciated.
    Thanks & Regards,
    Sunita

    I am using FND_FUNCTION.EXECUTE to call a OAF page from PLSQL in R12. I am getting following error"Error(9,23): PLS-00302: component 'EXECUTE' must be declared"

  • How to call a COM object from an Oracle Form?

    Hi All,
    Pls advice. How to call a COM object from an Oracle Form?
    Thanks.

    try asking the "Form" forum

  • How can i call a VB6 project from my java application using JNI

    hi
    can anyone tell me the procedure of calling a VB6 project from any java application using JNI
    if anyone does know then tell me the detail procedure of doing that. I know that i have to create a dll of that VB6 project then to call it from the java application.
    if anyone know that procedure of creating dll file of an existing VB6 project please reply
    please if anyone know then let me know

    Ahh, kind of a duplicate thread:
    http://forums.java.sun.com/thread.jspa?threadID=631642
    @OP. You could have clarified your original post and the relationship of your question to java. You did not need a new thread.
    � {�                                                                                                                                                                                                                                                                                                                                                                                                                                                               

  • Calling a Database Procedure from an Oracle Form

    Hi,
    I have a question we will be calling the procedure from an Oracle form and through that can we pass like 1000 input values to this procedure and we need to return certain values back to the Oracle Form also. Here the proceduere take two or more parameters. Please advice.
    To receive the input values we have the input parameter of the procedure as type object, so that we can receive multiple parameter values.
    Thanks and Regards
    Srinivas

    user2626293 wrote:
    Hi Francois,
    Thanks for your response, please suggest me as to how we can acheive passing of parameters which can hold multiple values, while making a call to the database procedure from the Oracle Form
    Hi Srinivas,
    Here is an example of procedure...
    CREATE OR REPLACE PROCEDURE P_GET_SAL (P_EMPID NUMBER, P_SAL OUT NUMBER)
    IS
    BEGIN
         SELECT SALARY
         INTO P_SAL
         FROM EMPLOYEE
         WHERE EMPLOYEE_ID=P_EMPID;
    END;
    SQL> VAR G_SAL NUMBER;
    SQL> EXEC P_GET_SAL(100,:G_SAL);
    PL/SQL procedure successfully completed.
    SQL> PRINT G_SAL;
    G_SAL
          2300Hope this helps
    Hamid
    If someone's response is helpful or correct, please mark it accordingly.*

  • How can we call a WEB SERVICE from an Oracle DB?

    <h2>
    What the methods available to call a WEB SERVICE from the DB. I.e. through a DB Stored Procedure?
    I was given this article by a colleague, but since it’s a 2005 one, I feel it could be outdated?
    http://www.oracle.com/technology/pub/articles/mensah_dws.html
    Also, is it possible to write ONE “Common” DB stored procedure to call ANY WEB SERVICE?
    </h2>

    <h2> No Girish, what I meant is, since it is 2005 article, the method it describes to call a WS is out of date.
    Because I am quite sure in 2009, 4 years later Oracle must have added built-in packages and other methods to simplify it???
    Also, I would be very grateful if you advice on the other issue: Is there a way to create a single DB stored procedure to call ANY WS?? i.e. a common routine to call any web service?
    </h2>

  • How to upload data from excel to form using webutil

    Hi,
    In the sample provided by Oracle
    http://www.oracle.com/technology/products/forms/htdocs/webutil/howto_ole.html
    Note 247606.1 How to Copy Records From a Form Into Excel
    It shown the methods of how to copy data from form to excel but is there any sample to provide the step on how to read the cell from excel into Form in 10g.

    declare
    args client_ole2.list_type;
    application client_ole2.obj_type;
    vworkbooks client_ole2.obj_type;
    vdoc     client_ole2.obj_type;
    vworksheet     client_ole2.obj_type;
    vrange               client_ole2.obj_type;
    begin
    -- create app object
    application := client_ole2.create_obj('Excel.Application');
    client_OLE2.SET_PROPERTY(application, 'Visible','True');
    -- get workbooks object
    vworkbooks := client_ole2.get_obj_property(application, 'Workbooks');
    -- and open a file
    args := client_ole2.create_arglist;
    client_ole2.ADD_ARG(args, 'c:\tp_ae.xls');
    vdoc :=client_ole2.INVOKE_OBJ(vworkbooks,'Open',args);
    client_ole2.destroy_arglist(args);
    -- get a worksheet object
    -- for this to work you need to know the sheet name or its index
    args := client_ole2.create_arglist;
    client_ole2.ADD_ARG(args, 1); <-- name or index
    vworksheet := client_ole2.get_obj_property(vdoc,'Worksheets',args);          
    client_ole2.destroy_arglist(args);
    -- get a range object which in this case is just a cell
    -- for this to work you need to know the cell coordinates
    args := client_ole2.create_arglist;
    client_ole2.ADD_ARG(args, 'B6');          
    vrange := client_ole2.get_obj_property(vworksheet,'Range',args);
    client_ole2.destroy_arglist(args);
    -- and here you get the value
    message(client_ole2.get_char_property(vrange,'Value'));
    -- release objects          
    client_ole2.release_obj(vrange);
    client_ole2.release_obj(vworksheet);
    client_ole2.release_obj(vdoc);
    client_ole2.release_obj(vworkbooks);
    client_ole2.release_obj(application);
    end;

  • Can u call a BIP Report from within Oracle Forms?

    Hi,
    We want to use BIP as a reports solution for a Forms 10g Application. Currently we use oracle Reports. I would be very grateful if anybody can show us how to do the following as I could not find it in any documentation. Of course, I get the feeling that these cannot be done, but I want to double-check.
    (1.) How to call a BIP report with a input parameters from within an Oracle 10g Menu? i.e. when the user clicks on the menu item, BIP should be started and it should run the report within the BIP.
    -- So we also need a way to pass parameters to the BIP
    -- Also BIP has a different username/password also
    Is this possible or NOT POSSIBLE( i.e. U have to ask the user to login to BIP and then run the report)?
    Thanks & Regards,
    CS

    Hi,
    Have a look in this document to get an idea how to do:
    http://www.oracle.com/technology/products/xml-publisher/docs/Forms_BIP_v22.pdf
    Regards
    Rainer

  • How to run a DOS command from an Oracle form.

    How can I run a DOS command from an Oracle form (i.e. open the calculator located at c:\windows\system32\calc.exe)?

    first of all get the environment variable for the c:\windows\system32 direcotry for any of the windows
    you can use get variable from the ora env package
    now cancat the system32 variable with the calc.exe string
    now pass the string with host command as parameters
    this process will work for all type of windows.

  • Calling SAP RFC from ODI

    I want to call SAP RFC from ODI. Client has provided only a set of RFC's. So I want to call these RFC's to extract data from SAP ERP system or BW to Oracle Staging using ODI. Would anyone please tell me how it will be possible?

    I want to call SAP RFC from ODI. Client has provided only a set of RFC's. So I want to call these RFC's to extract data from SAP ERP system or BW to Oracle Staging using ODI. Would anyone please tell me how it will be possible?

  • How can I call a java class from within my program?

    I was wondering if there's a platform independent way to call a java class from my program.

    Here's my scenario. I'm working on a platform independent, feature rich, object-oriented command prompt program. The way I'm designing it is that users can drop classes they write into my bin directory and gain access to the class through my program. For example, they drop a class named Network.class in the bin directory. They would type Network network at my command prompt and gain access to all the methods available in that class. They can then type system.echo network.ipaddress() at my prompt and get the system's ip address. I have it designed that there's a server running in the background and the clients connect to my port. Once connected the end-user can enter their user name and password and gain access to the system. When they type a command they actually call another java program which connects to my server using a seperate thread. They can then communicate back and forth. I have it set that everything has a process id and it's used to keep track of who called what program. Once the program is done it disconnects and closes. Rather than getting into the nitty gritty (I didn't want to get into heavy detail, I know how everything will work) I'm really interested in finding out how I can call a java program from my program. I don't want it to be part of the app in any way.

  • How can I call a plsql function from an attribute?

    I have an attribute defined in an element. I want execute a PLSQL function from the attribute, and display the returne value with an HTML template.
    I've defined the attribute's type like PLSQL, and I've put the called of the function in the value of the attribute, but it doesn't work. The only value I obtain is an URL (I think that is the URL of the function or someting like this).
    How can I call to my function from the attribute and display the returnes value in the page?
    Thanks.

    Thanks, but it doesn't work. I have an attribute called ID_BOL and I want to associate a sequence to that attribute. I've created a function, with the sequence. This function return de value of the sequence. I want taht the attribute takes the value of the sequenece dinamically.
    I've tried it, creating the type attribute like PLSQL, and calling the function from the attribute, but it doesn't work.
    How can I return the sequence value to my attribute?
    Thanks.

  • Can any one tell me how can i call a shell script from pl/sql

    i like to call shell script from pl/sql procedure.
    can any one suggest how can i do this

    Have you not mastered in asking the same kind of question ?
    First do write a script...
    no one will spoon feed you.
    How can i call a shell script from procedure
    How to call Shell Script from pl/sql block
    -Sk

  • How can i call a shell script from procedure

    I have a shell script.now i am i a situation to call that shell script from one of my procedures and need to get a value from that script.
    can u suggest me that how can a call the shell script from pl/sql?

    Is the same question you asked here
    How to call Shell Script from pl/sql block
    -SK

  • How to call a Report 10g from a parameter form..?

    Hello,
    pls i wanna know the procedure of :
    How to call a Report 10g from a parameter form..?
    regards,
    Abdetu..

    hopes it work for you.
    procedure get_report is
    pl_id paramlist;
    p_year varchar2(4);
    param_name varchar2(10) :'param';
    begin
    pl_id := get_parameter_list(param_name);
    if not id_null(pl_id_)then
    destroy_parameter_list(pl_id);
    end if;
    pl_id := create_parameter_list(param_name);
    p_year := year -- assign the value.
    add_parameter(pl_id,'p_year',text_parameter,p_year);
    execute_report('report_name',pl_id);
    end;

Maybe you are looking for