Call OpenOffice through OLE Automation

Hello everybody,
I am trying to open an OpenOffice Calc window (similar to Excel)
from ABAP through OLE automation. My problem with this: it
is necessary to call an automation method of OpenOffice that
has a SAFEARRAY (OLE data type) as one of its parameters.
How do I create a data type that maps to SAFEARRAY in ABAP?
I have found no example for this.
My program looks like this, the missing line is the one that
starts with #4:
REPORT ZCALC2 NO STANDARD PAGE HEADING.
INCLUDE OLE2INCL.
DATA: SERVICE_MANAGER TYPE OLE2_OBJECT,
DESKTOP TYPE OLE2_OBJECT,
DOCUMENT TYPE OLE2_OBJECT.
CREATE OBJECT SERVICE_MANAGER 'com.sun.star.ServiceManager'.
CALL METHOD OF SERVICE_MANAGER 'createInstance' = DESKTOP
EXPORTING #1 = 'com.sun.star.frame.Desktop'.
CALL METHOD OF DESKTOP 'loadComponentFromURL' = DOCUMENT
EXPORTING #1 = 'private:factory/scalc'
          #2 = '_blank'
          #3 = 0
          #4 = ''.
FREE OBJECT SERVICE_MANAGER.
When I run the program, the CALL METHOD returns SY-SUBRC code 2 and I see the following in the trace file:
<1950=(Error): CALL METHOD "loadComponentFromURL" OF [#13/0x00229C9C/402]
                    #0: STRING "private:factory/scalc"
                    #1: STRING "_blank"
                    #2: LONG "0"
                    #3: STRING ""
IDispatch::Invoke raised exceptionTypkonflikt.
<1950=(Error):                                                 Exception fire by :[automation bridge]
<1950=(Error):                                                 Exception info:conversion not possible!
<1950=(Error):                                                 Exception code:1001
<1950=(Error):                  Error occured at Verb  : loadComponentFromURL
<1950=(Error):                                   Object: 13
<1950=(Error): SAPAWRFC leaving RfcFlushOle with RfcRaise(CALL_METHOD_FAILED)
See the <a href="http://api.openoffice.org/docs/common/ref/com/sun/star/frame/XComponentLoader.html">loadComponentFromURL</a> documentation for information on the parameters. Unfortunately it is in UNO IDL, which is specific to OpenOffice. However, a <a href="http://udk.openoffice.org/common/man/spec/ole_bridge.html">mapping</a> to OLE types is available.
There are many examples how to do this in other programming languages, for example <a href="http://www.oooforum.org/forum/viewtopic.phtml?t=9815">here</a>, but I could not find it in ABAP.
Thanks for your help,
Frederic.

Here is another interesting thing: it's possible to let OpenOffice open a multi selection file dialog from ABAP. It works like this:
CALL METHOD OF SERVICE_MANAGER 'createInstance' = DIALOG
EXPORTING #1 = 'com.sun.star.ui.dialogs.FilePicker'.
CALL METHOD OF DIALOG 'setTitle'
EXPORTING #1 = 'Hello from ABAP'.
CALL METHOD OF DIALOG 'setDisplayDirectory'
EXPORTING #1 = 'file:///C:'.
CALL METHOD OF DIALOG 'setMultiSelectionMode'
EXPORTING #1 = 1.
CALL METHOD OF DIALOG 'Execute'.
CALL METHOD OF DIALOG 'getFiles' = FILE_ARRAY.
According to the documentation, last line returns an empty array if no file has been selected. My hope was that I could use this as the 4th parameter of loadComponentFromURL, but I still get "conversion not possible".
I also wonder what should be the type of FILE_ARRAY - I expected OLE2_OBJECT, but if I try that, I can see in the debugger that the object is not properly initialized (HEADER and TYPE are not 'OBJH' and 'OLE2').

Similar Messages

  • Discoverer 3i through ole automation

    Do you know,
    where to find information about using ole automation with Discoverer 3i.

    <BLOCKQUOTE><font size="1" face="Verdana, Arial">quote:</font><HR>Originally posted by jr vasquez ([email protected]):
    Also, is there a method of bypassing the authentication and passing arguments into Discoverer rather than having to login? If I am maintaining a userlist in another application can I not use that authentication method and pass that into Discoverer?<HR></BLOCKQUOTE>
    For the Client server application, You can bypass login by passing parameters to the application. This is documented in the Discoverer User's Guide, Under Advanced Features, Using Command Line Options.
    Discoverer Viewer and Discoverer Plus (java) also permit this through the urls used to launch the application. This is also documented.
    Documentation for Discoverer OLE Automation may be found via Oracle Metalink. Type in 'Discoverer, OLE' in the search window and a technical bulletin, "Programmatic Control of Discoverer 3.1", will be returned.

  • [b]Tutorial:[/b] Simplify Developing OLE Automation Code Using VBA

    INTRODUCTION
    Automating Office applications from Oracle Forms can be a tedious, frustrating, and time-consuming process. Because the OLE2 and CLIENT_OLE2 built-ins do not validate the automation commands that they relay, code that compiles without errors often dies at runtime with a not-so-helpful error code. This tutorial will demonstrate how to simplify the development of automation code using a tool that ships with all Microsoft Office editions -- the Visual Basic for Applications (VBA) IDE.
    The VBA IDE, a core Office component, is a full-fledged development environment featuring code completion, basic syntax highlighting, context-driven help and a runtime debugger. Its Object Browser provides a convenient means of browsing the Word object model, as well as searching by keyword.
    For those who may not interested in following this tutorial in detail, I would like to stress the usefulness of the Object Browser as a tool for inspecting the functions supported by OLE server applications and, perhaps more importantly, valid values for function arguments. Whether/not anyone buys the assertion that starting with VBA prototypes is far more productive than pounding out OLE2 code from the very start, they will find the Object Browser invaluable as a reference -- I rely on it exclusively for this sort of documentation.
    A BRIEF INTRODUCTION TO THE VBA IDE & THE OBJECT BROWSER UTILITY
    Try this:
    1. Open Word
    2. Launch the VBA IDE by pressing <Alt><F11>
    3. Open the Object Browser by pressing <F2>
    The Object Browser allows you to visually navigate Word's class hierarchy. Its user interface is a bit crowded, so controls are unlabeled. Hovering the mouse cursor above a control will display a tooltip explaining that control's purpose. The browser's scope can be narrowed by using the Project/Library combo. Typing a keyword or substring in the Search Text combo and clicking on the Search button will cause all classes/members whose name contains the specified search text to be listed in the Search Results pane. Selecting an item from this list will update the two panes below it, showing the selected class, and its members. Beneath the Classes and Members panes is an untitled pane, gray in color, which displays details for the selected class/member, including hyperlinks to relevant information such as arguments, their types and allowable values. If Visual Basic Help is installed, pressing <F1> will display help on a selected class/member. (This feature can be installed from your Office install CD, if necessary.)
    NOTE: While it is possible to cut-and-paste the code examples that follow, I highly recommend that they be typed in by hand. Doing so will provide a better understanding of how the IDE's code completion behaves. Use code completion most efficiently by not using the mouse or <Enter> key when selecting from completion lists. Instead, just type enough letters to select the desired list element, then continue along as if you had typed the entire element, typing the next operator in your statement. It really is slick!
    HELLO WORLD - VBA-STYLE
    1. Open Word
    2. Launch the VBA IDE by pressing <Alt><F11>
    3. Select Module from the Insert menu.
    4. In the blank area that appears, enter the following code:
      Public Sub HelloWorld()
          Documents.Add
          Selection.TypeText ("Hello, world!")
      End Sub5. Press <F5> to run the code.
    If you switch back to Word by pressing <Alt><F11>, there should appear a newly-created document containing the text Hello, world!.
    A MORE AMBITIOUS EXAMPLE
    In this example, we will launch Word, type some text, and alter its formatting. For the purposes of this tutorial, consider it the process we wish to automate from within Forms.
    1. If Word is running, close it.
    2. Open any Office application except Word, such as Excel, Outlook or PowerPoint
    3. Launch the VBA IDE by pressing <Alt><F11>.
    4. Select References from the Tools menu -- a dialog should pop up.
    5. From within this dialog, locate and select Microsoft Word <version> Object Library, then click OK.
    6. Select Module from the Insert menu.
    7. In the blank area that appears, enter the following code:
    Public Sub LaunchWord()
        Dim app As Word.Application
        Set app = CreateObject("Word.Application")
        app.Visible = True                          '!!! IMPORTANT !!!
        app.Documents.Add
        With app.Selection
            .TypeText "This is paragraph 1."
            .TypeParagraph
            .TypeText "This is paragraph 2."
            .TypeParagraph
            .TypeText "This is paragraph 3."
        End With
        With ActiveDocument
            .Paragraphs(1).Range.Words(3).Bold = True
            .Paragraphs(2).Range.Words(3).Italic = True
            .Paragraphs(3).Range.Words(3).Underline = True
        End With
    End Sub8. Press <F5> to run the code.
    A new Word session should have been launched. Switch to it, to view the results of our handiwork!
    TAILORING VBA CODE INTENDED FOR OLE2 CONVERSION
    Now, things get a bit uglier. The code listed above gives a good idea of how concise VBA code can be, but With blocks and chained object references do not translate readily into OLE2 code. Here's the same process, rewritten in a more OLE2-friendly style. Note the numerous intermediate object references that have been declared.
    Public Sub LaunchWord()
        Dim app As Word.Application
        Dim doc As Word.Document
        Dim docs As Word.Documents
        Dim pars As Word.Paragraphs
        Dim par As Word.Paragraph
        Dim wrds As Word.Words
        Dim sel As Word.Selection
        Dim rng As Word.Range
        Set app = CreateObject("Word.Application")
        app.Visible = True                          '!!! IMPORTANT !!!
        Set doc = app.Documents.Add
        Set sel = app.Selection
        sel.TypeText "This is paragraph 1."
        sel.TypeParagraph
        sel.TypeText "This is paragraph 2."
        sel.TypeParagraph
        sel.TypeText "This is paragraph 3."
        Set pars = doc.Paragraphs
        'select third word of first paragraph and make it bold
        Set par = pars.Item(1)
        Set rng = par.Range
        Set wrds = rng.Words
        Set rng = wrds.Item(3)
        rng.Bold = True
        'select third word of second paragraph and italicize it
        Set par = pars.Item(2)
        Set rng = par.Range
        Set wrds = rng.Words
        Set rng = wrds.Item(3)
        rng.Italic = True
        'select third word of second paragraph and underline it
        Set par = pars.Item(3)
        Set rng = par.Range
        Set wrds = rng.Words
        Set rng = wrds.Item(3)
        rng.Underline = True
    End Sub
    TRANSFORMATION: CONVERTING VBA CODE INTO PL/SQL
    Here is the PL/SQL counterpart to our previous VBA routine. Compare printouts of the two and note their similarities. Notice the need for argument lists -- this causes the code to fluff up quite a bit, and really interferes with readability.
    PROCEDURE LAUNCH_WORD IS
      v_app OLE2.OBJ_TYPE;     -- Application
      v_doc OLE2.OBJ_TYPE;     -- Document
      v_docs OLE2.OBJ_TYPE;    -- Documents collection
      v_pars OLE2.OBJ_TYPE;    -- Paragraphs collection
      v_par OLE2.OBJ_TYPE;     -- Paragraph
      v_wrds OLE2.OBJ_TYPE;    -- Words collection
      v_sel OLE2.OBJ_TYPE;     -- Selection
      v_rng OLE2.OBJ_TYPE;     -- Range
      v_args OLE2.LIST_TYPE;   -- OLE2 argument list
    BEGIN
      /* launch Word and MAKE IT VISIBLE!!! */ 
        v_app := OLE2.CREATE_OBJ('Word.Application');
        OLE2.SET_PROPERTY(v_app, 'Visible', TRUE);
      /* initialize key object references */ 
        v_docs := OLE2.GET_OBJ_PROPERTY(v_app, 'Documents');
        v_doc := OLE2.INVOKE_OBJ(v_docs, 'Add');
        v_sel := OLE2.GET_OBJ_PROPERTY(v_app, 'Selection');
      /* type first paragraph */
        v_args := OLE2.CREATE_ARGLIST;
        OLE2.ADD_ARG(v_args, 'This is paragraph 1.');
        OLE2.INVOKE(v_sel, 'TypeText', v_args);
        OLE2.DESTROY_ARGLIST(v_args);
        OLE2.INVOKE(v_sel, 'TypeParagraph');
      /* type second paragraph */
        v_args := OLE2.CREATE_ARGLIST;
        OLE2.ADD_ARG(v_args, 'This is paragraph 2.');
        OLE2.INVOKE(v_sel, 'TypeText', v_args);
        OLE2.DESTROY_ARGLIST(v_args);
        OLE2.INVOKE(v_sel, 'TypeParagraph');
      /* type third paragraph */
        v_args := OLE2.CREATE_ARGLIST;
        OLE2.ADD_ARG(v_args, 'This is paragraph 3.');
        OLE2.INVOKE(v_sel, 'TypeText', v_args);
        OLE2.DESTROY_ARGLIST(v_args);
      /* set reference to Paragraphs collection */
        v_pars := OLE2.GET_OBJ_PROPERTY(v_doc, 'Paragraphs');
      /* select third word of first paragraph and make it bold */
        v_args := OLE2.CREATE_ARGLIST;
        OLE2.ADD_ARG(v_args, 1);
        v_par := OLE2.INVOKE_OBJ(v_pars, 'Item', v_args);
        OLE2.DESTROY_ARGLIST(v_args);
        v_rng := OLE2.GET_OBJ_PROPERTY(v_par, 'Range');
        v_wrds := OLE2.GET_OBJ_PROPERTY(v_rng, 'Words');
        v_args := OLE2.CREATE_ARGLIST;
        OLE2.ADD_ARG(v_args, 3);
        v_rng := OLE2.INVOKE_OBJ(v_wrds, 'Item', v_args);
        OLE2.SET_PROPERTY(v_rng, 'Bold', TRUE);
      /* select third word of second paragraph and italicize it */
        v_args := OLE2.CREATE_ARGLIST;
        OLE2.ADD_ARG(v_args, 2);
        v_par := OLE2.INVOKE_OBJ(v_pars, 'Item', v_args);
        OLE2.DESTROY_ARGLIST(v_args);
        v_rng := OLE2.GET_OBJ_PROPERTY(v_par, 'Range');
        v_wrds := OLE2.GET_OBJ_PROPERTY(v_rng, 'Words');
        v_args := OLE2.CREATE_ARGLIST;
        OLE2.ADD_ARG(v_args, 3);
        v_rng := OLE2.INVOKE_OBJ(v_wrds, 'Item', v_args);
        OLE2.SET_PROPERTY(v_rng, 'Italic', TRUE);
      /* select third word of second paragraph and underline it */
        v_args := OLE2.CREATE_ARGLIST;
        OLE2.ADD_ARG(v_args, 3);
        v_par := OLE2.INVOKE_OBJ(v_pars, 'Item', v_args);
        OLE2.DESTROY_ARGLIST(v_args);
        v_rng := OLE2.GET_OBJ_PROPERTY(v_par, 'Range');
        v_wrds := OLE2.GET_OBJ_PROPERTY(v_rng, 'Words');
        v_args := OLE2.CREATE_ARGLIST;
        OLE2.ADD_ARG(v_args, 3);
        v_rng := OLE2.INVOKE_OBJ(v_wrds, 'Item', v_args);
        OLE2.SET_PROPERTY(v_rng, 'Underline', TRUE);
    END;
    REFACTORING FOR REUSABILITY AND READABILITY
    While the previous procedure runs without errors, it suffers from poor readability which, in turn, makes it difficult to maintain. Here, we address those issues by moving repetetive low-level operations into separate procedures.
      PROCEDURE LAUNCH_WORD IS
        v_app OLE2.OBJ_TYPE;    -- Application
        v_doc OLE2.OBJ_TYPE;    -- Document
        v_docs OLE2.OBJ_TYPE;   -- Documents collection
        v_sel OLE2.OBJ_TYPE;    -- Selection
        v_args OLE2.LIST_TYPE;  -- OLE2 argument list
      BEGIN
        /* launch Word and MAKE IT VISIBLE!!! */ 
          v_app := OLE2.CREATE_OBJ('Word.Application');
          OLE2.SET_PROPERTY(v_app, 'Visible', TRUE);
        /* create a new Word document */ 
          v_docs := OLE2.GET_OBJ_PROPERTY(v_app, 'Documents');
          v_doc := OLE2.INVOKE_OBJ(v_docs, 'Add');
          v_sel := OLE2.GET_OBJ_PROPERTY(v_app, 'Selection');
        /* add a few paragraphs */
          PRINT_PARAGRAPH(v_sel, 'This is paragraph 1.');
          PRINT_PARAGRAPH(v_sel, 'This is paragraph 2.');
          PRINT_PARAGRAPH(v_sel, 'This is paragraph 3.');
        /* apply formatting */
          APPLY_FORMATTING(v_doc, 1, 3, 'Bold', TRUE);
          APPLY_FORMATTING(v_doc, 2, 3, 'Italic', TRUE);
          APPLY_FORMATTING(v_doc, 3, 3, 'Underline', TRUE);
      END;
      PROCEDURE APPLY_FORMATTING(
        v_doc OLE2.OBJ_TYPE,
        v_paragraph_num NUMBER,
        v_word_num NUMBER,
        v_attribute VARCHAR2,
        v_value BOOLEAN) IS
        v_pars OLE2.OBJ_TYPE;   -- Paragraphs collection
        v_par OLE2.OBJ_TYPE;    -- Paragraph
        v_wrds OLE2.OBJ_TYPE;   -- Words collection
        v_rng OLE2.OBJ_TYPE;    -- Range
        v_args OLE2.LIST_TYPE;  -- OLE2 argument list
      BEGIN
        /* set reference to Paragraphs collection */
          v_pars := OLE2.GET_OBJ_PROPERTY(v_doc, 'Paragraphs');
        /* get specified paragraph */   
          v_args := OLE2.CREATE_ARGLIST;
          OLE2.ADD_ARG(v_args, v_paragraph_num);
          v_par := OLE2.INVOKE_OBJ(v_pars, 'Item', v_args);
          OLE2.DESTROY_ARGLIST(v_args);
        /* get words for specified paragraph */
          v_rng := OLE2.GET_OBJ_PROPERTY(v_par, 'Range');
          v_wrds := OLE2.GET_OBJ_PROPERTY(v_rng, 'Words');
        /* apply formatting to word found at specified index */
          v_args := OLE2.CREATE_ARGLIST;
          OLE2.ADD_ARG(v_args, v_word_num);
          v_rng := OLE2.INVOKE_OBJ(v_wrds, 'Item', v_args);
          OLE2.SET_PROPERTY(v_rng, v_attribute, v_value);
      END;
      PROCEDURE PRINT_PARAGRAPH(v_sel OLE2.OBJ_TYPE, v_text VARCHAR2) IS
        v_args OLE2.LIST_TYPE;
      BEGIN
        v_args := OLE2.CREATE_ARGLIST;
        OLE2.ADD_ARG(v_args, v_text);
        OLE2.INVOKE(v_sel, 'TypeText', v_args);
        OLE2.DESTROY_ARGLIST(v_args);
        OLE2.INVOKE(v_sel, 'TypeParagraph');
      END;
    CONCLUSION
    It is my hope that this tutorial, despite it's introductory nature, has demonstrated the value of the VBA IDE, the ease with which automation processes can be prototyped using VBA, the noticeable similarity between VBA automation routines and their Forms PL/SQL counterparts, and the advantages of testing automation processes within the VBA IDE. Please feel free to follow up with any specific questions or concerns you may have.
    Thanks,
    Eric Adamson
    Lansing, Michigan
    FINAL NOTE: These examples use the OLE2 built-in, and will operate correctly when called from forms running in the Form Builder OC4J. Deploying them to an Oracle Application Server will launch Word on the server itself (if available), which is usually not the developer's intent! Automating Word client-side via web forms requires adding WebUtil support. Adapting the code for WebUtil is trivial -- just replace all instances of OLE2 with CLIENT_OLE2. Adapting forms for WebUtil and configuring OLE support into your Oracle Application Server, however, are beyond the scope of this tutorial.
    REVISION HISTORY
    This promises to be something of a 'living document'. I've snuck changes through without comment in the past, but in the future, I'll try to document significant changes here.
    2006-08-21
      * Prefaced boring subject line with text: 'Tutorial:' to clarify purpose
      * Added emphasis on value of Object Browser as a reference

    Thanks James, for your kind words. I do hope this information will help folks out. I honestly believe that tinkering around in the VBA IDE will prove highly gratifying for automation developers. It can be assured that learning to make Word jump through hoops is much more straight-forward in this environment. I'm not one for mottos, but if I were pressed for a cheesy motto, I would say: First, make it work. Then, make it work in Oracle!
    Once the idea has sunk in, that Visual Basic routines for automating Word are exact analogs to their OLE2 counterparts, we can remove keywords like Oracle and PL/SQL from our Google searches on Word automation which, at least in this context, are the proverbial kiss of death. Suddenly we find ourselves liberated by the possibility of steal-, ahem... borrowing ideas from the Visual Basic* community!
    As for links, my link of choice is invariably http://groups.google.com -- if you don't already use it at least ten times a day, you must try it. This is the venerable USENET archive, including the holdings of now-extinct DejaNews. Another possible site of interest is http://word.mvps.org/FAQs/MacrosVBA, which may serve as a good starting point for those who wish to learn how to do fancy tricks with Word using VBA.
    If these links don't prove immediately helpful, please feel free to give specifics on the sort of operations you are interested in automating, and I'll see if I can post an example that addresses it.
    Regards,
    Eric Adamson
    Lansing, Michigan
    PS: I do hope, as people read my posts, with every other acronym being VBA, that they are not mistakenly hearing a call to learn Visual Basic. I say this, not because I believe learning VB would be a Bad Thing, but because I assume that few of us feel we have the time to learn a new programming language. Despite having come to the Oracle camp already knowing VB/VBA, and having acquired a fair bit of experience with automating Office applications as an Access developer, I remain confident that what I am suggesting people attempt does not rise to the level of learning a language. What I am suggesting is that they learn enough of the language to get by.
    *VB vs. VBA
    Just a quick word on this, as readers may wonder why I seem to use these terms interchangeably. Visual Basic (VB) can refer to either a development platform or a programming language. Visual Basic for Applications (VBA) is a language -- more precisely, it is a subset of the Visual Basic language. One purchases VB, usually quite intentionally. VBA is included with Microsoft Office, as is VBA's development environment, the VBA IDE. The key distinction between VB and VBA is that VBA cannot be used to create self-contained executables. Rather, VBA relies on VBA-enabled applications, such as Microsoft Office applications, to serve as a container for VBA code, and to provide a runtime environment for that code. For the purposes of discussing OLE Automation, VB and VBA are quite interchangeable.

  • Re: OLE Automation

    Venkat,
    We have also had problems with OLE automation. In our case, we were trying
    to open Lotus WordPro from our Forte Application. There are definitely
    some issues with Forte releasing system resources, particularly if you are
    working across tasks. In our case, one task was requesting a session which
    then got started from another task. This meant that when we were finished,
    Forte incorrectly kept the count of apps using the session > 0, and the
    session never ended. I suspect if you check the task manager you will see
    multiple sessions of Impromptu running. This quickly eats up memory, which
    in turn leads to the less than gracious OLE_RESOURCE crash you describe.
    Even after restricting all related calls to one task, the WordPro session
    never goes away completely. We did manage to reconnect to any first
    session started rather than eating up system resources with multiple
    sessions.
    Hope this helps.
    Sioban Keane
    NAC Re
    We communicate between Forte and our Reporting tool, Impromptu, through
    OLE.
    Our clients run on all three Microsoft OS. Our version of Impromptu is 16
    bit.
    We notice this problem predominantly in Win 95 and 3.11, sometimes on NT
    4.0. When we run a report in Impromptu that has considerable data (
    ~30-50k), Impromptu fails to respond to Forte. Forte thinks that it is not
    started Impromptu yet. We have code in place to retry for 10 times before
    giving up. Forte gives up after 10 times, even though Impromptu is up. The
    next time we run this report on the same machine, without restarting, we
    get
    a OLE_RESOURCE exception from Forte, and the application crashes.
    Has any one noticed this problem? Is there a way from Forte, to control OLE
    resources?
    Any help will be appreciated.
    Venkat Kodumudi
    Price Waterhouse LLP
    Internet: [email protected]
    Internet2: [email protected]

    Hi Joaquin,
    For inserting many lines you should better use the OO technique instead of OLE. Check the help on Desktop Office Integration (e.g. for 4.6C):"
    http://help.sap.com/saphelp_46c/helpdata/en/e9/0bee9f408e11d1893b0000e8323c4f/frameset.htm
    Regards,
    John.

  • OLE Automation for Word. EditGoto with Word 97

    I found a solution. Instead EditGoto, use WW7_EditGoto.
    Example:
    .- A Word Template whith two bookmarks
    (Texto1, Tabla1). A normal bookmark
    (Texto1) and a bookmark into a Word
    Table (Tabla1).
    In the Word Table, is posible change
    cell o create a new row with the same
    command (NextCell).
    The word table has two columns an two
    rows.
    The first row is the Header.
    The second row the first column contain
    a bookmark (Tabla1).
    .- A Form whit two blocks:
    First block with two items:
    nombre_doc
    texto1
    Secod Block (multirecord) whit two items
    col1
    col2
    with a When-Button-Pressed:
    DECLARE
    application OLE2.OBJ_TYPE;
    args OLE2.LIST_TYPE;
    BEGIN
    -- Start WordBasic and make Word visible
    application:=OLE2.CREATE_OBJ('Word.Basic');
    OLE2.INVOKE(application, 'AppShow');
    -- Open a Word document
    args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG(args,'Plantilla.dot');
    OLE2.INVOKE(application, 'FileOpen', args);
    OLE2.DESTROY_ARGLIST(args);
    -- Put Text in the first bookmark
    args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG(args,'Texto1');
    OLE2.INVOKE(application, 'WW7_EditGoto', args);
    OLE2.DESTROY_ARGLIST(args);
    args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG(args,:Texto1);
    OLE2.INVOKE(application, 'Insert', args);
    OLE2.DESTROY_ARGLIST(args);
    -- Send data from Multirecord Block to Word Table
    GO_BLOCK('MULTI');
    FIRST_RECORD;
    IF :SYSTEM.RECORD_STATUS != 'NEW' THEN
    args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG(args,'Tabla1');
    OLE2.INVOKE(application, 'WW7_EditGoto', args);
    OLE2.DESTROY_ARGLIST(args);
    LOOP
    IF :col1 IS NOT NULL THEN
    args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG(args,:col1);
    OLE2.INVOKE(application, 'Insert', args);
    OLE2.DESTROY_ARGLIST(args);
    END IF;
    OLE2.INVOKE(application, 'NextCell');
    IF :col2 IS NOT NULL THEN
    args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG(args,:col2);
    OLE2.INVOKE(application, 'Insert', args);
    OLE2.DESTROY_ARGLIST(args);
    END IF;
    EXIT WHEN :SYSTEM.LAST_RECORD = 'TRUE';
    NEXT_RECORD;
    OLE2.INVOKE(application, 'NextCell');
    END LOOP;
    -- Save a Word document
    args := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG(args,:nombre_doc);
    OLE2.INVOKE(application, 'FileSaveas', args);
    OLE2.DESTROY_ARGLIST(args);
    --Release the OLE object
    OLE2.RELEASE_OBJ(application);
    END;
    Sorry by the sintax, but i don't speak English.
    I hope it solves this problem.

    Hello,
    I am also trying to use the OLE2 package for OLE Automation. But
    difference being that I am not using Word but am using an
    invisible control for Mail services, using the objects
    MAPISession, MAPImessages. If anyone out there had already done
    this do please give me a code snippet.
    Thanx in advance
    Anup Mistry,
    Programmer/Analyst,
    IIS,Inc
    Vasile (guest) wrote:
    : Hi Daniel,
    : I used OLE with forms 5 ,but now it work without problems in
    : forms 6, too.
    : A procedure that save doc. look like that:
    : procedure filesaveas (fname in varchar2) is
    : arglist ole2.list_type;
    : begin
    : arglist := ole2.create_arglist;
    : ole2.add_arg (arglist, fname);
    : ole2.invoke (obj_hnd, 'filesaveas', arglist);
    : ole2.destroy_arglist (arglist);
    : end;
    : I hope this help you.
    : Vasile
    : Daniel Fox (guest) wrote:
    : : I am using Forms 6.0
    : : Can anyone help with OLE automation using OLE2.
    : : I can open Word, document stored in long raw, even insert
    data
    : : from other form field into the Word Document (only at the
    : : beginning of the Document, though).
    : : All the File commands, such as FileSaveAs, EditGoTo, etc..
    : don't
    : : work. They are simply ignored - no error messages, nothing.
    : : Does anyone use Word Automation through Forms 6.0?
    : : Please, HELP....
    : : Thanks in advance,
    : : Desperate Daniel.
    null

  • OLE objects and OO methods - Error using OLE automation

    Hi,
    I'm developing an class to read/write excel sheets and i'm getting an error on the OLE method that is:
    on this instruction
    call method of l_obj_excel 'WORKBOOKS' = l_workb_col.
    i got a dump that give me the following error UC_OBJECTS_NOT_CONVERTIBLE
    The strange is that i've got the same code running on reports and it works fine only when passing it to a oo method i get that dump.
    Thzs in advanced to all
    Best regards
    Jaime

    hi check this..
    Report ZMULTICOLOR_TEST no standard page heading.
    this report demonstrates how to send some ABAP data to an
    EXCEL sheet using OLE automation.
    include ole2incl.
    handles for OLE objects
    data: h_excel type ole2_object,        " Excel object
          h_mapl type ole2_object,         " list of workbooks
          h_map type ole2_object,          " workbook
          h_zl type ole2_object,           " cell
          h_f type ole2_object,            " font
          h_c type ole2_object.            " color
    DATA: FILENAME LIKE RLGRAP-FILENAME.
    tables: spfli.
    data  h type i.
    table of flights
    data: it_spfli like spfli occurs 10 with header line.
    *&   Event START-OF-SELECTION
    start-of-selection.
    read flights
      select * from spfli into table it_spfli.
    display header
      uline (61).
      write: /     sy-vline no-gap,
              (3)  'Flg'(001) color col_heading no-gap, sy-vline no-gap,
              (4)  'Nr'(002) color col_heading no-gap, sy-vline no-gap,
              (20) 'Von'(003) color col_heading no-gap, sy-vline no-gap,
              (20) 'Nach'(004) color col_heading no-gap, sy-vline no-gap,
              (8)  'Zeit'(005) color col_heading no-gap, sy-vline no-gap.
      uline /(61).
    display flights
      loop at it_spfli.
        write: / sy-vline no-gap,
                 it_spfli-carrid color col_key no-gap, sy-vline no-gap,
                 it_spfli-connid color col_normal no-gap, sy-vline no-gap,
                 it_spfli-cityfrom color col_normal no-gap, sy-vline no-gap,
                 it_spfli-cityto color col_normal no-gap, sy-vline no-gap,
                 it_spfli-deptime color col_normal no-gap, sy-vline no-gap.
      endloop.
      uline /(61).
    tell user what is going on
      call function 'SAPGUI_PROGRESS_INDICATOR'
         exporting
              PERCENTAGE = 0
               text       = text-007
           exceptions
                others     = 1.
    start Excel
      create object h_excel 'EXCEL.APPLICATION'.
    PERFORM ERR_HDL.
      set property of h_excel  'Visible' = 1.
    CALL METHOD OF H_EXCEL 'FILESAVEAS' EXPORTING #1 = 'c:\kis_excel.xls'  .
    PERFORM ERR_HDL.
    tell user what is going on
      call function 'SAPGUI_PROGRESS_INDICATOR'
         exporting
              PERCENTAGE = 0
               text       = text-008
           exceptions
                others     = 1.
    get list of workbooks, initially empty
      call method of h_excel 'Workbooks' = h_mapl.
      perform err_hdl.
    add a new workbook
      call method of h_mapl 'Add' = h_map.
      perform err_hdl.
    tell user what is going on
      call function 'SAPGUI_PROGRESS_INDICATOR'
         exporting
              PERCENTAGE = 0
               text       = text-009
           exceptions
                others     = 1.
    output column headings to active Excel sheet
      perform fill_cell using 1 1 1 200 'Carrier id'(001).
      perform fill_cell using 1 2 1 200 'Connection id'(002).
      perform fill_cell using 1 3 1 200 'City from'(003).
      perform fill_cell using 1 4 1 200 'City to'(004).
      perform fill_cell using 1 5 1 200 'Dep. Time'(005).
      loop at it_spfli.
    copy flights to active EXCEL sheet
        h = sy-tabix + 1.
        if it_spfli-carrid cs 'AA'.
          perform fill_cell using h 1 0 000255000 it_spfli-carrid.
        elseif it_spfli-carrid cs 'AZ'.
          perform fill_cell using h 1 0 168000000 it_spfli-carrid.
        elseif it_spfli-carrid cs 'JL'.
          perform fill_cell using h 1 0 168168000 it_spfli-carrid.
        elseif it_spfli-carrid cs 'LH'.
          perform fill_cell using h 1 0 111111111 it_spfli-carrid.
        elseif it_spfli-carrid cs 'SQ'.
          perform fill_cell using h 1 0 100100100 it_spfli-carrid.
        else.
          perform fill_cell using h 1 0 000145000 it_spfli-carrid.
        endif.
        if it_spfli-connid lt 400.
          perform fill_cell using h 2 0 255000255 it_spfli-connid.
        elseif it_spfli-connid lt 800.
          perform fill_cell using h 2 0 077099088 it_spfli-connid.
        else.
          perform fill_cell using h 2 0 246156138 it_spfli-connid.
        endif.
        if it_spfli-cityfrom cp 'S*'.
          perform fill_cell using h 3 0 155155155 it_spfli-cityfrom.
        elseif it_spfli-cityfrom cp 'N*'.
          perform fill_cell using h 3 0 189111222 it_spfli-cityfrom.
        else.
          perform fill_cell using h 3 0 111230222 it_spfli-cityfrom.
        endif.
        if it_spfli-cityto cp 'S*'.
          perform fill_cell using h 4 0 200200200 it_spfli-cityto.
        elseif it_spfli-cityto cp 'N*'.
          perform fill_cell using h 4 0 000111222 it_spfli-cityto.
        else.
          perform fill_cell using h 4 0 130230230 it_spfli-cityto.
        endif.
        if it_spfli-deptime lt '020000'.
          perform fill_cell using h 5 0 145145145 it_spfli-deptime.
        elseif it_spfli-deptime lt '120000' .
          perform fill_cell using h 5 0 015215205 it_spfli-deptime.
        elseif it_spfli-deptime lt '180000' .
          perform fill_cell using h 5 0 000215205 it_spfli-deptime.
        else.
          perform fill_cell using h 5 0 115115105 it_spfli-deptime.
        endif.
      endloop.
    EXCEL FILENAME
      CONCATENATE SY-REPID '_' SY-DATUM6(2) '_' SY-DATUM4(2) '_'
                  SY-DATUM(4) '_' SY-UZEIT '.XLS' INTO FILENAME.
      CALL METHOD OF H_MAP 'SAVEAS' EXPORTING #1 = FILENAME.
      free object h_excel.
      perform err_hdl.
          FORM FILL_CELL                                                *
          sets cell at coordinates i,j to value val boldtype bold       *
    form fill_cell using i j bold col val.
      call method of h_excel 'Cells' = h_zl
        exporting
          #1 = i
          #2 = j.
      perform err_hdl.
      set property of h_zl 'Value' = val .
      perform err_hdl.
      get property of h_zl 'Font' = h_f.
      perform err_hdl.
      set property of h_f 'Bold' = bold .
      perform err_hdl.
      set property of h_f 'Color' = col.
      perform err_hdl.
    endform.                    "FILL_CELL
    *&      Form  ERR_HDL
          outputs OLE error if any                                       *
    -->  p1        text
    <--  p2        text
    form err_hdl.
      if sy-subrc <> 0.
        write: / 'OLE-Automation Error:'(010), sy-subrc.
        stop.
      endif.
    endform.                    " ERR_HDL
    regards,
    venkat

  • Problem while opening Excel through OLE

    Hi Friends
    I am facing a problem while opening an excel file through OLE. it is working fine in SAP ECC 5.0, but the problem is in ECC 6.0.
    I am adjusting the cells for auto fit. I have written the code like below.
    CALL METHOD OF e_appl 'CELLS' = e_cell.
      CALL METHOD OF e_cell 'EntireColumn' = ole_columns .
      CALL METHOD OF ole_columns 'AutoFit'.
      set property of e_appl 'VISIBLE' = 1.
    if I take out the adjustment part it is working fine for this program, rest other programs even if I have this code, they working fine.
    When I am executing the statement set property of e_appl 'VISIBLE' = 1. the return code is coming as 2.
    Could anybody please help me to overcome this problem.
    Thanks
    Praveen

    In ECC 6.0, if the worksheet is portedcted SAP unable to open that sheet, now we have taken out this option so it is working.

  • RE: Ole Automation with forte.

    Tran,
    Here is a piece of code(using Forte Version 3OF2 & Word 97) that we've
    used to determine if there is already an instance of Word running:
    // Create an instance of a Word Application and activate it.
    // If an a Word application exists, just activate it.
    if ( aTasks <> NIL and aTasks.Exists(aWordApplication.Name) )
    then
    aWordApplication.visible = TRUE;
    aWordApplication.Activate();
    else
    aWordApplication = new();
    aTasks = new();
    aWordApplication.CreateUsingProgID( 'word.application'
    aWordApplication.visible = TRUE;
    aWordApplication.Activate();
    aTasks is an attribute of type Tasks on our window & aWordApplication is
    an attribute of type _Application on our window. This code will work if
    there already is an instance of Word that was started from a Forte
    applicaiton. It doesn't recognize a instance of Word that was started
    outside of a Forte app. Hope this helps!!
    From: Quy Tran[SMTP:[email protected]]
    Sent: Wednesday, May 20, 1998 11:17 PM
    To: [email protected]
    Subject: Ole Automation with forte.
    Good Day forte users,
    I'm trying to invoke MSWord from a forte application.
    I set the objectreference using CreateUsingProgId(This is the only way
    that I could get it to work).
    The problem is when using CreateUsingProgId, forte will create another
    instance of Word. Is there a way to know if the instance already
    exists
    and retrieve the objectreference of that instance?
    Any help would be appreciated.
    Thanks
    Quy Tran
    Lumley Technology
    Analyst/Programmer
    [email protected]
    Ph : 612 93186722
    To unsubscribe, email '[email protected]' with
    'unsubscribe forte-users' as the body of the message.
    Searchable thread archive
    <URL:http://pinehurst.sageit.com/listarchive/>
    If you are not the intended recipient, please notify the Sender.
    Non-business opinions may not reflect opinions of Piper Jaffray

    Hi Aurang
    You can call almost all methods using OLE. What is required is to know how to interpret a script to ABAP OLE call. This is explained in the tutorial<a href="https://www.sdn.sap.comhttp://www.sdn.sap.comhttp://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/docs/library/uuid/c1d54348-0601-0010-3e98-bd2a2dcd9e6c">"An Easy Reference For OLE Automation"</a>
    Regards
    *--Serdar <a href="https://www.sdn.sap.com:443http://www.sdn.sap.comhttp://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.sdnbusinesscard?u=qbk%2bsag%2bjiw%3d">[ BC ]</a>

  • OLE Automation for Acrobat Reader

    Hello guys
    I have been reading some lines about OLE Automation for Acrobat READER and Full Acrobat.
    So far I have seen most saying that Reader is not fully compliant with OLE. I really have zero experience with Adobe and before I buy a full acrobat license, I want to make sure of the following:
    What I need to do is the next 4 simple calls:
    Connect to Acrobat
    Open a pdf file in invisible mode
    Perform "Select All"
    Copy Selection to clipboard
    After that, I will importclipboard to my datawindow and I will be done for my programming task.
    Have you had similar experiences about Acrobat OLE for PDF ?
    some references are in help.adobe.com/livedocs/acrobat_sdk/10/Acrobat10_HTMLHelp
    Thanks so much in advance for any hint.
    Regards

    Hello again
    Chris, thanks so much for your very quick response.
    At a first glance, the PDF Toolkit looks good and with a good price too, but I did not see if I can call functionality from PowerBuilder code without opening a user interface. Are you familiar with this ?
    Stuart, very nice approach for my need, but I apologize for not explaining clearly what I want.
    I just want to process the content of some lines in the file to find specific strings.
    As you may see, if you open the file with Adobe Reader or Adobe Acrobat and go to the edit menu, by clicking "Select All" and "Copy" you will get the text ready for pasting.
    I want to automate this process to prevent the users from opening the Adobe application.
    I'm now testing with the functions provided by Adobe documentation to perform OLE Automation and ALMOST gave me what I need with the following code:
    Documentation is found in
    http://help.adobe.com/livedocs/acrobat_sdk/10/Acrobat10_HTMLHelp/wwhelp/wwhimpl/js/html/wwhelp.htm?&accessible=true 
    // Start Code
    boolean lb
    oleobject luo_app, luo_file
    luo_app = create oleobject
    luo_app.connecttonewobject('AcroExch.app')
    luo_file = create oleobject
    luo_file.connecttonewobject('AcroExch.AvDoc')
    luo_file.open('c:\some_file.pdf')
    // Next three lines are for visual debugging and confirming that file is opening well during testing of code :=)
    luo_file.show()
    luo_file.bringtofront()
    luo_file.setviewmode(1)
    // Next two lines return FALSE, meaning they did not execute because the words "Select All" (or "SelectAll") and "Copy" are not the right words linked to the
    // menu items
    lb = luo_app.menuitemexecute('Select All')    // Neither "SelectAll"
    lb = luo_app.menuitemexecute('Copy')
    // End of code
    Everything works fine except the two lines. The Adobe application is open and the file shown, but when calling "Select All" and "Copy" in the function menuitemexecute, Adobe does not interpret these phrases.
    Just to confirm that menuitemexecute has the right syntax, I tested a call for luo_app.menuitemexecute("find") and this command is well interpreted by Adobe, which immediately opens the find window at the right corner of the file
    I hope not to be too dense with this explanation ( but maybe I was )     :=)
    Thanks for your feedback

  • OLE Automation and executing a click event

    Hi,
    Is it possible to have a LiveCycle form click event execute from OLE Automation?
    Thanks in advance

    There's a couple of ways you can handle this, depending on what level of flexibility and complication you want. One way is to use dynamic events. You can then edit the events handled by your specific event case. There's a couple of examples that ship with LabVIEW that show you how to use dynamic events. A second way is to create a boolean control/indicator called "init", and then outside your event structure set the value using the "Value (signaling)" property. Then, edit your event case to also execute when the boolean's value changes.

  • Ole Automation with forte.

    Good Day forte users,
    I'm trying to invoke MSWord from a forte application.
    I set the objectreference using CreateUsingProgId(This is the only way
    that I could get it to work).
    The problem is when using CreateUsingProgId, forte will create another
    instance of Word. Is there a way to know if the instance already exists
    and retrieve the objectreference of that instance?
    Any help would be appreciated.
    Thanks
    Quy Tran
    Lumley Technology
    Analyst/Programmer
    [email protected]
    Ph : 612 93186722
    To unsubscribe, email '[email protected]' with
    'unsubscribe forte-users' as the body of the message.
    Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>

    Hi!
    I am not sure that I can give you any "golden rules" for interfacing
    with OLE, but I can give you some thoughts on where to look for problems
    that can result in Segmentation Violations.
    I have often seen segmentation violations arise as a result of a NIL
    object. You might want to try turning on the trc:lo:25 trace flag to
    see if there is a NIL object exception being raise right before the seg
    v. You have to be careful with the trc:lo:25 flag, though, since it
    will show you every exception, no matter what, that is raised within
    Forte (even if it's been handled internally). This is of greater
    significance to OLE projects, since Forte tries several different ways
    of starting an OLE server and uses internally handled exceptions to
    notify itself if a certain method failed.
    Another thing to try is just-in-time debugging. You will need Microsoft
    Visual C++ installed on the machine where the OLE code is running, and
    you will need to set the FORTE_NOHANDLER environment variable to TRUE.
    In the MSVC development environment, go to the Tools --> Options
    properties sheet, and choose the Debug tab. On that tab, make sure that
    Just-In-Time Debugging is selected. Then, run the application. When
    you encounter the seg v, you should get a dialog box asking if you want
    to debug the application. Choosing yes (actually, I think that pressing
    Cancel does this - the dialog box tells you) will bring you into the
    MSVC development environment, where you can try some intense debugging.
    I hope this helps!
    -Katie
    [email protected] wrote:
    >
    Has anybody used Forte to communicate with external components using
    OLE
    Automation? We are creating segmentation violations through some of
    our
    use of this interface, and need to know if there are some 'golden
    rules'
    that can guide developers as they use the feature.
    Thank you!--
    Katie Carty
    Forte Consulting
    4801 Woodway Drive
    Suite 300E
    Houston, Texas 77056
    vmail: 510-986-3802
    email: [email protected]
    -----------------------------------------------

  • What commands can be performed with COM/OLE automation?

    I believe I have posted this question before. Let's hope I have better luck this time.
    Where are the "remote control" (those available through COM/OLE automation) commands documented?
    I would be satisfied if at least I can find out how to perform the following command programmatically:
      Document | OCR Text Recogniotion | Recognize Text Using OCR
    Can that particular command be performed from a plugin perhaps?
    TIA,
    -Ramon

    > OCR is NOT available via COM - it is only exposed to plugins.
    I suppose, however, that it is possible to write a plugin which is remote controlled from outside and performs the OCR phase?
    -Ramon

  • Returning VB collections through OLE

    We are creating a Forte OLE automation server which must interface
    with a VB Collection.
    We have successfully passed a collection from VB to Forte. Forte
    receives this parameter as type CDispatch (determined using
    GetClassType().Name).
    We want to add items of type ValueItem to this collection.
    ValueItem was generated from another VB component using olegen,
    so it has a CDispatch interface.
    We don't seem to be able to use the CDispatch.InvokeMethodWithResult
    to execute the method Collection.Add. This is due to the fact that
    ValueItem is a subclass of CDispatch and we must pass an array of
    variant to InvokeMethodWithResult.
    Has anybody done something similar to this?
    Thank you,
    Keith

    I'm not sure why do you need a REMOTE interface for your Entity bean...
    Anyway you never return a collection of entities from a finder, but coleection of primary keys (BMP).
    public Collection ejbFindBySurname(String Apellido1) throws FinderException
    ArrayList list = null;
    try
    Connection con = getConnection();
    try
    PreparedStatement pstmt = con.prepareStatement("select IDAbonado from Abonado where Apellido1 like ?");
    try
    pstmt.setString(1, Apellido1 + '%');
    ResultSet rs = pstmt.executeQuery();
    list = new ArrayList();
    while(rs.next())
    int index = rs.getInt(1);
    list.add(new Integer(index));
    finally { pstmt.close(); }
    finally { con.close(); }
    catch (Exception ex) { throw new FinderException(ex.getMessage()); }
    return list;
    ArrayList is Serializable
    But I prefer to use a local interface to enty in pair with SlSB
    public ArrayList findBySurname(String surname)
    ArrayList list = null;
    try
    Collection c = abonadoHome.findBySurname(surname);
    list = new ArrayList(c.size());
    Iterator i = c.iterator();
    while(i.hasNext())
    list.add(((LocalAbonado)i.next()).getMyInformationMethod();
    catch(Exception ex)
    ex.printStackTrace(System.err);
    throw new EJBException(ex);
    return list;
    Note, I do not use narrow, coz I do not use remote call.
    Cheers

  • OLE Automation with Excel

    Hi All,
    Does anyone know of any reference/help/material on how to use OLE automation to download and format data from ABAP to Excel.
    I need to know what the available methods and properties are so I could format the data the way I want.
    Any help will be greatly appreciated.
    Regards.

    Hi Aurang
    You can call almost all methods using OLE. What is required is to know how to interpret a script to ABAP OLE call. This is explained in the tutorial<a href="https://www.sdn.sap.comhttp://www.sdn.sap.comhttp://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/docs/library/uuid/c1d54348-0601-0010-3e98-bd2a2dcd9e6c">"An Easy Reference For OLE Automation"</a>
    Regards
    *--Serdar <a href="https://www.sdn.sap.com:443http://www.sdn.sap.comhttp://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.sdnbusinesscard?u=qbk%2bsag%2bjiw%3d">[ BC ]</a>

  • GPF and OLE Automation with Word6

    Has anyone else had a problem with GPFs when trying to use Word6 as an OLE
    Automation Server? Whenever our users try to open Word6 from the
    application they get a GPF in QQKN.DLL at 000C:955C. What does the QQKN.DLL
    do?
    Any ideas?
    - Scott Splavec - MIS 8
    Business Analyst
    Kirke-Van Orsdel, Inc.
    1776 West Lakes Parkway
    West Des Moines, IA 50398
    (515) 248-6472
    eMail: kvi!kvidm01![email protected]

    Hi Aurang
    You can call almost all methods using OLE. What is required is to know how to interpret a script to ABAP OLE call. This is explained in the tutorial<a href="https://www.sdn.sap.comhttp://www.sdn.sap.comhttp://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/docs/library/uuid/c1d54348-0601-0010-3e98-bd2a2dcd9e6c">"An Easy Reference For OLE Automation"</a>
    Regards
    *--Serdar <a href="https://www.sdn.sap.com:443http://www.sdn.sap.comhttp://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.sdnbusinesscard?u=qbk%2bsag%2bjiw%3d">[ BC ]</a>

Maybe you are looking for