11 - COM Automation Feature Developers Guide
11 - COM Automation Feature Developers Guide
Developer’s Guide
Release 9.2
March 2002
Part No. A95499-01
Oracle COM Automation Feature Developer’s Guide, Release 9.2
Contributors: Janis Greenberg, Eric Belden, Steven Caminez, Jagadish Changavi, Barmak Meftah
The Programs (which include both the software and documentation) contain proprietary information of
Oracle Corporation; they are provided under a license agreement containing restrictions on use and
disclosure and are also protected by copyright, patent and other intellectual and industrial property
laws. Reverse engineering, disassembly or decompilation of the Programs, except to the extent required
to obtain interoperability with other independently created software or as specified by law, is prohibited.
The information contained in this document is subject to change without notice. If you find any problems
in the documentation, please report them to us in writing. Oracle Corporation does not warrant that this
document is error-free. Except as may be expressly permitted in your license agreement for these
Programs, no part of these Programs may be reproduced or transmitted in any form or by any means,
electronic or mechanical, for any purpose, without the express written permission of Oracle Corporation.
If the Programs are delivered to the U.S. Government or anyone licensing or using the programs on
behalf of the U.S. Government, the following notice is applicable:
Restricted Rights Notice Programs delivered subject to the DOD FAR Supplement are "commercial
computer software" and use, duplication, and disclosure of the Programs, including documentation,
shall be subject to the licensing restrictions set forth in the applicable Oracle license agreement.
Otherwise, Programs delivered subject to the Federal Acquisition Regulations are "restricted computer
software" and use, duplication, and disclosure of the Programs shall be subject to the restrictions in FAR
52.227-19, Commercial Computer Software - Restricted Rights (June, 1987). Oracle Corporation, 500
Oracle Parkway, Redwood City, CA 94065.
The Programs are not intended for use in any nuclear, aviation, mass transit, medical, or other inherently
dangerous applications. It shall be the licensee's responsibility to take all appropriate fail-safe, backup,
redundancy, and other measures to ensure the safe use of such applications if the Programs are used for
such purposes, and Oracle Corporation disclaims liability for any damages caused by such use of the
Programs.
Oracle is a registered trademark, and Oracle Store, Oracle8i, Oracle9i, PL/SQL, SQL*Plus, and
Pro*C/C++ are trademarks or registered trademarks of Oracle Corporation. Other names may be
trademarks of their respective owners.
Contents
Preface............................................................................................................................................................ ix
Audience .................................................................................................................................................. x
Organization............................................................................................................................................ x
Related Documentation ........................................................................................................................ xi
Conventions........................................................................................................................................... xii
Documentation Accessibility ............................................................................................................ xviii
iii
Java Architecture........................................................................................................................... 1-7
Reliability ................................................................................................................................ 1-8
iv
InitOutArg ................................................................................................................................... 3-17
GetArg .......................................................................................................................................... 3-18
SetArg........................................................................................................................................... 3-19
Invoke........................................................................................................................................... 3-21
Java APIs............................................................................................................................................. 3-22
Automation Constructor ........................................................................................................... 3-24
Create............................................................................................................................................ 3-25
Destroy ......................................................................................................................................... 3-26
GetProperty ................................................................................................................................. 3-27
SetProperty .................................................................................................................................. 3-28
InitArg .......................................................................................................................................... 3-29
SetArg........................................................................................................................................... 3-30
Invoke........................................................................................................................................... 3-31
Currency Constructor ................................................................................................................ 3-33
Get................................................................................................................................................. 3-34
Set.................................................................................................................................................. 3-34
v
Using the MAPI Demo............................................................................................................... 4-17
Core Functionality ...................................................................................................................... 4-18
Glossary
Index
vi
Send Us Your Comments
Oracle COM Automation Feature Developer’s Guide, Release 9.2
Part No. A95499-01
Oracle Corporation welcomes your comments and suggestions on the quality and usefulness of this
document. Your input is an important part of the information used for revision.
■ Did you find any errors?
■ Is the information clearly presented?
■ Do you need more information? If so, where?
■ Are the examples correct? Do you need more examples?
■ What features did you like most?
If you find any errors or have any other suggestions for improvement, please indicate the document
title and part number, and the chapter, section, and page number (if available). You can send com-
ments to us in the following ways:
■ Electronic mail: [email protected]
■ FAX: (650) 506-7365 Attn: Oracle Database for Windows Documentation
■ Postal service:
Oracle Corporation
Oracle Database for Windows Documentation Manager
500 Oracle Parkway, Mailstop 1op6
Redwood Shores, CA 94065
USA
If you would like a reply, please give your name, address, telephone number, and (optionally) elec-
tronic mail address.
If you have problems with the software, please contact your local Oracle Support Services.
vii
viii
Preface
ix
Audience
Oracle COM Automation Feature Developer’s Guide is intended for developers who
develop solutions that use COM.
To use this document, you need familiarity with:
■ Component Object Model (COM)
■ Object Linking and Embedding (OLE) Automation
■ Structured Query Language (SQL)
■ Data Definition Language (DDL)
■ Data Manipulation Language (DML)
■ PL/SQL or Java
■ Oracle object-relational database management (ORDBMS) concepts
■ Windows NT
Organization
This document contains:
x
Chapter 5, "Oracle COM Automation Java Demos"
Describes how to use the Java demos for Oracle COM Automation Feature.
Glossary
Defines terms used in this document.
Related Documentation
For more information, see these Oracle resources:
■ Oracle9i Database Installation Guide for Windows
■ Oracle9i Database Release Notes for Windows
■ Oracle9i Database Administrator’s Guide for Windows
■ Oracle Enterprise Manager Administrator’s Guide
■ Oracle Services for Microsoft Transaction Server Developer’s Guide
■ Oracle9i Net Services Administrator’s Guide
■ Oracle9i Real Application Clusters Concepts
■ Oracle9i Database New Features
■ Oracle9i Database Concepts
■ Oracle9i Database Reference
■ Oracle9i Database Error Messages
■ Oracle9i Java Developer’s Guide
■ Oracle9i Java Stored Procedures Developer’s Guide
Many of the examples in this book use the sample schemas of the seed database,
which is installed by default when you install Oracle. Refer to Oracle9i Sample
Schemas for information on how these schemas were created and how you can use
them yourself.
xi
In North America, printed documentation is available for sale in the Oracle Store at
http://oraclestore.oracle.com/
Customers in Europe, the Middle East, and Africa (EMEA) can purchase
documentation from
http://www.oraclebookshop.com/
If you already have a username and password for OTN, then you can go directly to
the documentation section of the OTN Web site at
http://otn.oracle.com/docs/index.htm
Conventions
This section describes the conventions used in the text and code examples of this
documentation set. It describes:
■ Conventions in Text
■ Conventions in Code Examples
■ Conventions for Windows Operating Systems
xii
Conventions in Text
We use various conventions in text to help you more quickly identify special terms.
The following table describes those conventions and provides examples of their use.
xiii
Conventions in Code Examples
Code examples illustrate SQL, PL/SQL, SQL*Plus, or other command-line
statements. They are displayed in a monospace (fixed-width) font and separated
from normal text as shown in this example:
SELECT username FROM dba_users WHERE username = ’MIGRATE’;
The following table describes typographic conventions used in code examples and
provides examples of their use.
xiv
Convention Meaning Example
Italics Italicized text indicates placeholders or CONNECT SYSTEM/system_password
variables for which you must supply DB_NAME = database_name
particular values.
UPPERCASE Uppercase typeface indicates elements SELECT last_name, employee_id FROM
supplied by the system. We show these employees;
terms in uppercase in order to distinguish SELECT * FROM USER_TABLES;
them from terms you define. Unless terms DROP TABLE hr.employees;
appear in brackets, enter them in the
order and with the spelling shown.
However, because these terms are not
case sensitive, you can enter them in
lowercase.
lowercase Lowercase typeface indicates SELECT last_name, employee_id FROM
programmatic elements that you supply. employees;
For example, lowercase indicates names sqlplus hr/hr
of tables, columns, or files. CREATE USER mjones IDENTIFIED BY ty3MU9;
Note: Some programmatic elements use a
mixture of UPPERCASE and lowercase.
Enter these elements as shown.
xv
Convention Meaning Example
C:\> Represents the Windows command C:\oracle\oradata>
prompt of the current hard disk drive.
The escape character in a command
prompt is "^". Your prompt reflects the
subdirectory in which you are working.
Referred to as the command prompt in
this manual.
Special characters The backslash special character (\) is C:\>exp scott/tiger TABLES=emp
sometimes required as an escape QUERY=\"WHERE job=’SALESMAN’ and
character for the double quote (") special sal<1600\"
character at the Windows command
C:\>imp SYSTEM/password
prompt. Parentheses and the single quote
FROMUSER=scott TABLES=(emp, dept)
special character (’) do not require an
escape character. See your Windows
operating system documentation for more
information on escape and special
characters.
HOME_NAME Represents the Oracle home name. C:\> net start OracleHOME_
NAMETNSListener
The home name can be up to 16
alphanumeric characters. The only special
character allowed in the home name is the
underscore.
xvi
Convention Meaning Example
ORACLE_HOME In releases prior to Oracle8i release 8.1.3, Go to the ORACLE_BASE\ORACLE_
and ORACLE_ when you installed Oracle components, HOME\rdbms\admin directory.
BASE all subdirectories were located under a
top level ORACLE_HOME directory that by
default was:
■ C:\orant for Windows NT
■ C:\orawin98 for Windows 98
or whatever you called your Oracle home.
This release complies with Optimal
Flexible Architecture (OFA) guidelines.
All subdirectories are not under a top
level ORACLE_HOME directory. There is a
top level directory called ORACLE_BASE
that by default is C:\oracle. If you
install the latest Oracle release on a
computer with no other Oracle software
installed, then the default setting for the
first Oracle home directory is
C:\oracle\orann where nn is the latest
release number. The Oracle home
directory is located directly under
ORACLE_BASE.
All directory path examples in this
manual follow OFA conventions.
See Oracle9i Database Getting Started for
Windows for additional information on
OFA compliance and for information on
installing Oracle products in non-OFA
compliant directories.
xvii
Documentation Accessibility
Our goal is to make Oracle products, services, and supporting documentation
accessible, with good usability, to the disabled community. To that end, our
documentation includes features that make information available to users of
assistive technology. This documentation is available in HTML format, and contains
markup to facilitate access by the disabled community. Standards will continue to
evolve over time, and Oracle Corporation is actively engaged with other
market-leading technology vendors to address technical obstacles so that our
documentation can be accessible to all of our customers. For additional information,
visit the Oracle Accessibility Program Web site at
http://www.oracle.com/accessibility/.
xviii
What’s New in Oracle COM Automation
Feature?
The following sections describe the new features in Oracle COM Automation
Feature:
■ New Features in Oracle COM Automation Feature for Release 9.2
■ New Features in Oracle COM Automation Feature for Release 9.0.1
■ New Features in Oracle COM Automation Feature for Release 8.1.6
xix
New Features in Oracle COM Automation Feature for Release 9.2
This section contains these topics:
■ Granting Privileges for Java
A new SQL script, grant.sql, must be run for each user of Oracle COM
Automation for Java. The script grants the necessary privileges. For more
information, see "Configuring Oracle COM Automation Feature for Java" on
page 2-4.
■ Many new features were added for Oracle9i release 1 (9.0.1). If you are
upgrading from a pre-9.0.1 release, read the new features for "New Features in
Oracle COM Automation Feature for Release 9.0.1".
■ Sample Schema
Many of the examples in this book use the sample schemas of the seed
database, which is installed by default when you install Oracle. Refer to Oracle9i
Sample Schemas for information on how these schemas were created and how
you can use them yourself.
■ New functionality to support Java Stored Procedures
Oracle COM Automation Feature is now available for Java as well as PL/SQL.
While the general functionality is parallel, this document indicates those areas
where functionality, setup, and architecture differ.
■ Migration from Oracle8i to Oracle9i
For this release, Oracle has renamed the com81.dll to orawpcom.dll. If you
are migrating from Oracle8i, you must re-run comwrap.sql to continue using
Oracle COM Automation Feature for PL/SQL.
xx
■ Microsoft Word Java Demo
For Oracle COM Automation Feature for Java, a demo is available that shows
how to load and run a Microsoft Word code sample.
■ Oracle COM Automation Feature for PL/SQL
Additional instructions have been presented to aid in use of the MAPI demo.
xxi
xxii
1
Introducing Oracle COM Automation
Feature
This chapter describes the Oracle COM Automation Feature Software Development
Kit (SDK) and provides an overview of the product. Read this chapter before
installing or using Oracle COM Automation Feature.
This chapter contains these topics:
■ Introduction to Oracle COM Automation Feature
■ Benefits of Oracle COM Automation Feature
■ Oracle COM Automation Feature Architecture
■ Enhanced Integration
Oracle COM Automation Feature enables you to deploy Oracle in a combined
Oracle and Windows environment. You can be assured that Oracle integrates
fully with and capitalizes on the services that are exposed by Windows NT,
Windows 2000, Windows XP, Microsoft BackOffice applications, and Microsoft
Office applications.
■ Portability and Platform-Specific Requirements
Applications using Oracle COM Automation Feature are written in Java or
PL/SQL, which are platform-independent. Only the database instance that
needs to invoke COM components must be run on Windows NT, Windows
2000, or Windows XP.
Microsoft Office
Oracle (Word, Powerpoint,
Net and Excel)
Client PC
Oracle
Net Oracle Any COM
database
with COM Automation
feature Server
Client PC
Oracle
Net MAPI Compliant
Applications
Client PC
The architectural differences between Oracle COM Automation Feature for PL/SQL
and for Java are described in the next two sections.
PL/SQL Architecture
Oracle COM Automation Feature for PL/SQL provides a package of PL/SQL APIs
for manipulating COM objects. These APIs are implemented as external procedures
in a Dynamic Link Library (DLL).
Oracle9i supports external procedures that enable developers to call Third
Generation Language (3GL) functions from server-based object type methods and
stored procedures. External procedures are invoked exactly like standard PL/SQL
stored procedures. However, unlike standard PL/SQL procedures where the body
of the procedure is written in PL/SQL and stored in the database, external
procedures are C functions that reside within a DLL. You can invoke Oracle COM
Automation Feature APIs in the same manner as if you are calling a standard
PL/SQL stored procedure or function.
Figure 1–2, "COM Automation Feature Architecture for PL/SQL" shows an Oracle9i
database invoking COM Automation external procedure APIs.
PL/SQL script
(any stored
procedure, function,
or trigger)
Oracle
Oracle Listener
Database
Instance Oracle Net
RPC
External
Procedure
Handler
Data
Store
COM Automation
COM feature Server (In-process,
COM Local, or Remote)
or DCOM
Java Architecture
Oracle COM Automation Feature for Java is implemented by the Java Native
Interface (JNI) as shown in Figure 1–3, "COM Automation Feature Architecture for
Java".
The key components of this architecture are the Automation class and the Java
COM Proxy DLL, orawcom.dll.
The interface is the Automation class, a Java proxy to COM Automation server.
The Automation class provides the methods necessary for developers to
manipulate COM objects through the IDispatch interface.
The Java-specific COM proxy, orawcom.dll, enables Java functions to invoke their
corresponding COM functions.
Java Stored
Procedures
Oracle Automation
Database class
Instance
Reliability
Oracle COM Automation Feature for Java invokes COM components from the
database server. However, these COM components are run outside of the Oracle9i
database process. This design prevents unstable COM components from interfering
with the database process.
This chapter provides an overview of the Oracle COM Automation installation and
post-installation configuration tasks.
This chapter contains these topics:
■ Oracle COM Automation Feature Components
■ System Requirements
■ Migration from Oracle8i to Oracle9i
■ Configurations for Oracle COM Automation Feature
■ Configuring the Listener for PL/SQL
■ Support for DCOM
See Also: The Oracle9i Database Installation Guide for Windows for
installation instructions
The COM Automation package includes the following PL/SQL and Java
components:
PL/SQL Components
■ Oracle COM Automation PL/SQL feature (orawpcom.dll)
■ PL/SQL installation and definition script (comwrap.sql)
■ Oracle COM Automation demonstration programs
■ Message files (such as comus.msb)
Oracle COM Automation PL/SQL feature orawpcom.dll is located in the
ORACLE_BASE\ORACLE_HOME\bin directory.
All other components are located in the ORACLE_BASE\ORACLE_HOME\com
directory.
Java Components
■ The JAR file, orawcom.jar
■ Oracle COM Automation Java feature (orawcom.dll)
■ Oracle COM Automation demonstration programs
Oracle COM Automation Java feature orawcom.dll is located in the ORACLE_
BASE\ORACLE_HOME\bin directory. All other components are located in the
ORACLE_BASE\ORACLE_HOME\com\java directory.
System Requirements
Note the following system requirements.
■ Oracle COM Automation Feature requires:
■ Windows NT 4.0, Windows 2000, or Windows XP
■ a functioning Oracle database server on the computer before installation
takes place
■ For PL/SQL, Oracle COM Automation Feature requires:
■ Oracle8i or higher
■ For Java, Oracle COM Automation Feature requires:
■ Oracle9i or higher
■ Oracle COM Automation Feature demonstrations require that you first install
the applications that are used in the demonstration programs.
■ The Word demos for PL/SQL and Java require Microsoft Word 95 or higher.
■ The Excel demo requires Microsoft Excel 95 or higher.
■ The PowerPoint demo requires Microsoft PowerPoint 97 or higher.
■ The MAPI demo requires Microsoft Outlook 2000 or higher.
The demonstrations and installations are discussed in "Overview of PL/SQL
Demos" on page 4-2 and "Oracle COM Automation Feature Java Demos
Overview" on page 5-2.
3. Grant the CREATE LIBRARY privilege to the database users that will use Oracle
COM Automation Feature. For example:
SQL> GRANT CREATE LIBRARY TO hr;
4. Connect to the user that will use Oracle COM Automation Feature and run the
comwrap.sql script at the SQL*Plus prompt:
SQL> CONNECT hr/hr;
SQL> @ORACLE_BASE\ORACLE_HOME\com\comwrap.sql
2. Run grant.sql with the name of the user that will be using COM
Automation. You may need to capitalize all the letters in the user's name. For
example:
SQL> @ORACLE_BASE\ORACLE_HOME\com\java\grant.sql HR
ORACLE_BASE\ORACLE_HOME\com\java\orawcom.jar
(SID_DESC =
(SID_NAME = plsextproc)
(PROGRAM=extproc)
)
)
PASSWORDS_LISTENER = (oracle)
Problem 1
Problem: The listener is not started.
Action: You must start the OracleHOME_NAMETNSListener service from the
Control Panel or the command prompt.
To start Oracle services from the Control Panel:
1. Choose Start > Settings > Control Panel.
The Control Panel window appears.
2. Double-click Services.
The Services dialog box appears.
3. Find OracleHOME_NAMETNSListener in the list and verify that it has a status
of Started. If it does not, select it and click Start.
Problem 2
Problem: The listener is not configured correctly.
Action: You must modify the listener.ora and tnsnames.ora files.
See Also: "Configuring the Listener for PL/SQL" on page 2-5 for
information on how to configure these files
In order to use DCOM, you must configure security settings on the following:
■ The computer that is running the database instance
■ The computer that contains the remote COM object
If the COM object attempts to perform an action for which it does not have
permission, DCOM denies the operation and returns a security violation to Oracle
COM Automation Feature. It is essential that you configure the DCOM security
properly and provide the Oracle database with the necessary permissions.
This chapter describes aspects of the programming interface for Oracle COM
Automation Feature.
This chapter contains these topics:
■ Datatype Conversions
■ HRESULT Error Codes
■ Oracle COM Automation for Java Exception Handling
■ Typical COM Automation Functionality
■ Application Programming Interfaces
■ PL/SQL APIs
■ Java APIs
Datatype Conversions
Because Microsoft COM Automation uses COM Automation datatypes, and Oracle
COM Automation Feature uses either PL/SQL or Java datatypes, Oracle COM
Automation Feature must convert the data that it receives and pass it to the COM
Automation object, and vice versa.
Note: The HRESULT data member has the same meaning as the
HRESULT returned by the PL/SQL functions.
Code Sample
This example demonstrates the COMException exception.
try
{
// Some code which might throw a COMException exception.
}
catch(COMException e)
{
System.out.println(e.toString());
if(e.excepInfo)
{
System.out.println(e.source);
System.out.println(e.description);
System.out.println(e.helpfile);
System.out.println(e.helpid);
}
}
Use the progID with the API that instantiates the COM object.
■ You must be aware of the types of properties and methods that are exposed
through the COM object’s IDispatch interface. Usually, the ISV provides
documentation describing the names and datatype of the object’s properties
and the prototypes of the object’s methods. Properties are referred to by a
descriptive string, such as xpos or ypos. A property can be any standard COM
Automation datatype, such as INT or BSTR. The GetProperty and
SetProperty APIs take the property name and a variable of the appropriate
datatype. Methods are referred to by a descriptive string, such as
InsertChart. A method takes a set of parameters that are of different COM
Automation datatypes and returns a COM Automation datatype.
The following is an example of a COM Automation method prototype in COM
Interface Definition Language (IDL) grammar:
[id(0x6003000)]
long Post([in, out] long* lngAccountNo,
[in, out] long* lngAmount,
[in, out] BSTR* strResult);
Interfaces define object methods and properties. COM IDL is used to specify
interfaces that are defined on COM objects.
PL/SQL APIs
The feature externalizes the following APIs for PL/SQL development:
■ CreateObject
■ DestroyObject
■ GetLastError
■ GetProperty
■ SetProperty
■ InitArg
■ InitOutArg
■ GetArg
■ SetArg
■ Invoke
Java APIs
The COM Automation Feature externalizes the following APIs for Java
development:
■ Automation Constructor
■ Automation Methods
■ Create
■ Destroy
■ GetProperty
■ SetProperty
■ InitArg
■ SetArg
■ Invoke
■ Currency Constructor
■ Currency Methods
■ Get
■ Set
PL/SQL APIs
This section describes the PL/SQL APIs for manipulating COM objects using the
COM Automation interface. Each of the following PL/SQL stored procedures
resides in the package ORDCOM.
CreateObject
Instantiates a COM object in a COM Automation server.
Syntax
FUNCTION CreateObject(progid VARCHAR2, reserved BINARY_INTEGER, servername
VARCHAR2, objecttoken OUT BINARY_INTEGER) RETURN BINARY_INTEGER;
Where Is
progid the programmatic identifier (progID) of the COM Automation
object to create. This character string describes the class of the
COM Automation object and has the following form:
COMComponent.Object
COMComponent is the component name of the COM
Automation server, and Object is the name of the COM
Automation object. The specified COM Automation object must
be creatable and must support the IDispatch interface.
reserved a parameter currently reserved for future use. Pass a value of 0.
Future versions of Oracle COM Automation Feature may use
this parameter.
Where Is
servername the name of the remote DCOM server on which the COM object
is being instantiated.
Passing a specified name forces Oracle COM Automation
Feature to attempt to instantiate the COM object on a remote
computer. Passing an empty string, for example, ‘’, forces Oracle
COM Automation Feature to check the registry for the location
of the COM object. Registry information indicates whether the
COM object is local or remote. Therefore, to create a local COM
object, always pass an empty string and ensure the registry
indicates that the COM object exists locally. The registry
information for COM objects can be configured with the tool
dcomcnfg.exe.
objecttoken the returned object token. It must be a local variable of datatype
BINARY_INTEGER. This object token identifies the created COM
Automation object and is used in calls to the other Oracle COM
Automation Feature APIs.
Remarks
The created COM Automation object is freed with a corresponding call to
DestroyObject. This nullifies the internal representation of the object in the
Oracle COM Automation Feature and releases all the interfaces associated with the
object.
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
Code Sample
HRESULT BINARY_INTEGER;
applicationToken BINARY_INTEGER:=-1;
DestroyObject
Destroys a created COM Automation object.
Syntax
FUNCTION DestroyObject(objecttoken BINARY_INTEGER) RETURN BINARY_INTEGER;
Where Is
objecttoken the object token of a COM Automation object previously created
by CreateObject.
Remarks
Calling DestroyObject nullifies the internal representation of the object in the
Oracle COM Automation Feature and releases all the interfaces associated with the
object.
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
Code Sample
HRESULT BINARY_INTEGER;
applicationToken BINARY_INTEGER:=-1;
/*
At some point before this, we called CreateObject and
got a valid applicationToken.
*/
HRESULT:=ORDCOM.DestroyObject(applicationToken);
GetLastError
Obtains the COM Automation error information about the last error that occurred.
Syntax
FUNCTION GetLastError(source OUT VARCHAR2, description OUT VARCHAR2, helpfile
OUT VARCHAR2, helpid OUT BINARY_INTEGER) RETURN BINARY_INTEGER;
Where Is
source the source of the error information. If specified, it must be a local
CHAR or VARCHAR variable. The return value is truncated to fit
the local variable if necessary.
description the description of the error. If specified, it must be a local CHAR
or VARCHAR variable. The return value is truncated to fit the
local variable if necessary.
helpfile the Help file for the COM Automation object. If specified, it
must be a local CHAR or VARCHAR variable. The return value is
truncated to fit the local variable if necessary.
helpid the Help file context ID. If specified, it must be a local INT
variable.
Remarks
Each call to an Oracle COM Automation Feature API (except GetLastError)
resets the error information, so that GetLastError obtains error information only
for the most recent Oracle COM Automation Feature API call. Because
GetLastError does not reset the last error information, it can be called multiple
times to get the same error information.
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
See "Microsoft COM Automation Errors" on page A-4 for a description of the types
of errors that can be returned by this function.
Code Sample
applicationToken BINARY_INTEGER:=-1;
HRESULT BINARY_INTEGER;
error_src VARCHAR2(255);
error_description VARCHAR2(255);
error_helpfile VARCHAR2(255);
error_helpID BINARY_INTEGER;
return HRESULT;
END IF;
GetProperty
Gets a property value of a COM Automation object.
Syntax
FUNCTION GetProperty(objecttoken BINARY_INTEGER, propertyname VARCHAR2, argcount
BINARY_INTEGER, propertyvalue OUT any_PL/SQL_datatype) RETURN BINARY_INTEGER;
Where Is
objecttoken the object token of a COM object previously created by
CreateObject.
propertyname the property name of the COM object to return.
argcount the index of the property array. If the property is not an array,
then the developer should specify 0.
propertyvalue the returned property value. The returned property type
depends on the COM Automation datatype that is returned. You
must pass the PL/SQL datatype that corresponds to the COM
Automation datatype of the COM Automation property.
Otherwise, the COM Automation Feature will not properly
convert the COM Automation datatype.
any_PL/SQL_ any datatype supported by COM Automation Feature.
datatype
Remarks
If the property returns a COM object, you must specify a local variable of datatype
BINARY_INTEGER for the propertyvalue parameter. An object token is stored in
the local variable, and this object token can be used with other COM Automation
stored procedures.
When the property returns an array, if propertyvalue is specified, it is set to
NULL.
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
Code Sample
ChartObject BINARY_INTEGER:=-1;
ChartToken BINARY_INTEGER := -1
HRESULT BINARY_INTEGER;
/* Previously, ChartObject was initialized calling CreateObject */
HRESULT:=ORDCOM.getProperty(ChartObject, ’Chart’, 0, ChartToken);
IF HRESULT=-1 THEN
/* Do error checking here */
return HRESULT;
END IF;
SetProperty
Sets a property of a COM Automation object to a new value.
Syntax
FUNCTION SetProperty(objecttoken BINARY_INTEGER, propertyname VARCHAR2, newvalue
any_PL/SQL_datatype, datatype VARCHAR2) RETURN BINARY_INTEGER;
Where Is
objecttoken the object token of a COM Automation object previously created
by CreateObject.
propertyname the property name of the COM object to set to a new value.
newvalue the new value of the property. It must be a value of the
appropriate datatype.
any_PL/SQL_ any datatype supported by COM Automation Feature.
datatype
Where Is
datatype the explicitly specified datatype of the value passed in. The
available datatypes are:
■ UI1 - byte integer
■ I2 - 2 byte integer
■ I4 - 4 byte integer
■ R4 - IEEE 4 byte real
■ R8 - IEEE 8 byte real
■ SCODE - error code
■ CY - currency (value - 9999999999.9999 to 9999999999.9999)
(This is an Oracle restriction)
■ DISPATCH - dispatch pointer
■ BSTR - String
■ BOOL - boolean
■ DATE - date
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
Code Sample
RangeToken BINARY_INTEGER:=-1;
HRESULT BINARY_INTEGER;
/*
Previously, RangeToken has been initialized to a valid object token with a
property by the name of value.
*/
HRESULT:=ORDCOM.SetProperty(RangeToken, 'Value', ‘EmpNo’, ‘BSTR’);
IF HRESULT=-1 THEN
/* Do error checking here */
return HRESULT;
END IF;
InitArg
Initializes the parameter set passed to an Invoke call.
Syntax
PROCEDURE InitArg();
Remarks
The InitArg call initializes the parameter set. After InitArg has been called, a
SetArg call sets the first parameter to the specified value. A second SetArg call
sets the second parameter in the parameter list. Subsequent calls set the nth
parameters in the parameter list, where n is the number of times SetArg has been
called after an InitArg call. Another call to InitArg resets the argument list and a
call to SetArg sets the first parameter again.
Code Sample
See "Invoke" on page 3-21 for sample code.
InitOutArg
InitOutArg must be called after a COM method is invoked in preparation for
getting the values of OUT and IN OUT parameters using GetArg. After calling
InitOutArg, the first call to GetArg gets the value for the first OUT or IN OUT
parameter, the second call to GetArg gets the value for the second OUT or IN OUT
parameters, and so on. Calling InitOutArg again restarts this process.
Syntax
PROCEDURE InitOutArg();
Remarks
See the section on SetArg datatype strings in "SetArg" on page 3-30 for
information about IN and OUT parameters.
Code Sample
See "Invoke" on page 3-31 for sample code.
GetArg
Gets the argument of OUT and IN OUT parameters after the COM method has been
invoked.
Syntax
PROCEDURE GetArg(data OUT any_PL/SQL_datatype, type VARCHAR2);
Where Is
data the value of the OUT or IN OUT parameter after the COM method
has been invoked.
any_PL/SQL_ any datatype supported by COM Automation Feature.
datatype
datatype the COM Automation datatype of the parameter.
The available datatypes are:
■ pUI1 - byte integer
■ pI2 - 2 byte integer
■ pI4 - 4 byte integer
■ pR4 - IEEE 4 byte real
■ pR8 - IEEE 8 byte real
■ pSCODE - error code
■ pCY - currency (value -9999999999.9999 to 9999999999.9999)
(This is an Oracle restriction)
■ pDISPATCH - dispatch pointer
■ pBSTR - String
■ pBOOL - boolean
■ pDATE - date
Remarks
See the section on SetArg datatype strings in "SetArg" on page 3-30 for
information about IN and OUT parameters.
Code Sample
See "Invoke" on page 3-31 for sample code.
SetArg
Used to construct the parameter list for the next Invoke call.
SetArg sets a parameter’s value to be passed by value.
Syntax
PROCEDURE SetArg(paramvalue any_PL/SQL_datatype, datatype VARCHAR2);
Where Is
paramvalue the value of the parameter to be passed to an Invoke call. The
parameter set is the nth parameter in the parameter list, where n
is the numbers of times SetArg has been called after an
InitArg call.
datatype the explicitly specified datatype for the parameters.
Those datatypes prefaced by an initial p are IN OUT or OUT
parameters. The p indicates that the VT_BYREF flag will be set
for the COM Automation datatype.
Those datatypes without the initial p are IN parameters. The
available datatypes are:
■ UI1 - byte integer
■ pUI1 - byte integer
■ I2 - 2 byte integer
■ pI2 - 2 byte integer
■ I4 - 4 byte integer
■ pI4 - 4 byte integer
■ R4 - IEEE 4 byte real
■ pR4 - IEEE 4 byte real
■ R8 - IEEE 8 byte real
■ pR8 - IEEE 8 byte real
■ SCODE - error code
■ pSCODE - error code
Where Is
■ CY - currency (value -9999999999.9999 to 9999999999.9999)
(This is an Oracle restriction)
■ pCY - currency (value -9999999999.9999 to 9999999999.9999)
(This is an Oracle restriction)
■ DISPATCH - dispatch pointer
■ pDISPATCH - dispatch pointer
■ BSTR - String
■ pBSTR - String
■ BOOL - boolean
■ pBOOL - boolean
■ DATE - date
■ pDATE - date
any_PL/SQL_ any datatype supported by COM Automation Feature.
datatype
Remarks
Each SetArg procedure sets the nth parameter value. The InitArg call initializes
the parameter set. After InitArg has been called, a SetArg call sets the first
parameter to the specified value. A second SetArg call sets the second parameter
in the parameter list. Subsequent calls set the nth parameters in the parameter list,
where n is the number of times SetArg has been called after an InitArg call.
Another call to InitArg resets the argument list and a call to SetArg sets the first
parameter again.
Datatypes without the initial p are IN parameters. Those datatypes prefaced by an
initial p are IN OUT or OUT parameters.
Code Sample
See "Invoke" on page 3-21 for sample code.
Invoke
Calls a method of a COM Automation object. This function uses the parameter list,
previously created by the calls to InitArg and SetArg as input for the COM
Automation method.
Syntax
FUNCTION Invoke(objecttoken BINARY_INTEGER, methodname VARCHAR2, argcount
BINARY_INTEGER, returnvalue OUT any_PL/SQL_datatype) RETURN BINARY_INTEGER;
Where Is
objecttoken the object token of a COM Automation object previously created
by CreateObject.
methodname the method name of the COM Automation object to call.
argcount the number of arguments passed to the COM Automation object
method.
returnvalue the return value of the method of the COM Automation object. If
specified, it must be a local variable of the appropriate datatype.
any_PL/SQL_ any datatype supported by COM Automation Feature.
datatype
Remarks
If the method’s return value is a COM object, then the developer must specify a
local variable of datatype BINARY_INTEGER for the returnvalue parameter. An
object token is stored in the local variable, and this object token can be used with
other Oracle COM Automation Feature APIs.
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
Code Sample
/*
* Following is the IDL definition of the COM Automation method
* being called:
*
* HRESULT TestOutArg([in, out] short *x1,
* [in] short x2,
* [out] short *x3,
* [out, retval] short *x4);
*/
applicationToken binary_integer:=-1;
i binary_integer:=-1;
x1 double precision:=12;
x2 double precision:=7;
x3 double precision:=0;
x4 double precision:=0;
ORDCOM.InitArg();
ORDCOM.SetArg(x1, ’pI2’);
ORDCOM.SetArg(x2, ’I2’);
ORDCOM.SetArg(x3, ’pI2’);
ORDCOM.InitOutArg();
ORDCOM.GetArg(x1, ’pI2’);
ORDCOM.GetArg(x3, ’pI2’);
Java APIs
This section describes the Java APIs for manipulating COM objects using the COM
Automation interface. These APIs are found in the Automation and Currency
Java classes.
The Automation Java class provides access to COM objects that support COM
Automation. With this Java class, you can create a COM object, and obtain a pointer
to the IDispatch interface for the COM object. You can then get and set properties
on the COM object, as well as invoke methods (with or without arguments) on the
COM object. This class provides a wrapper for the COM object, so there is no direct
access to the COM object, or to its IDispatch interface.
The Currency Java class represents the CURRENCY COM Automation datatype.
CURRENCY is a an 8-byte number where the last 4 digits represent the fractional
part of the value. For example, the number 12345 actually represents the value
1.2345. CURRENCY has a range of (+/-)922337203685477.5807.
Note: Oracle COM Automation Feature for Java does not allow
in-process COM Automation servers. Developers can use dllhost
to support in-process servers.
Automation Constructor
Creates a COM object.
Syntax
public Automation()
public Automation(String progID)
public Automation(String progID, String serverName)
Where Is
progid the programmatic identifier (progID) of the COM Automation
object to create. This character string describes the class of the
COM Automation object and has the following form:
COMComponent.Object
COMComponent is the component name of the COM
Automation server, and Object is the name of the COM
Automation object. The specified COM Automation object must
be creatable and must support the IDispatch interface.
servername the name of the remote DCOM server on which the COM object
is being instantiated.
Passing a specified name forces Oracle COM Automation
Feature to attempt to instantiate the COM object on a remote
computer.
Remarks
The default constructor public Automation() does nothing. It is used with a Create
method.
Using the constructor that takes only the progid parameter forces Oracle COM
Automation Feature to check the registry for the location of the COM object.
Registry information indicates whether the COM object is local or remote.
COM Automation objects created using the nondefault constructors are freed with a
corresponding call to Destroy. This nullifies the internal representation of the
objects in the Oracle COM Automation Feature and releases all the interfaces
associated with the objects.
Oracle COM Automation Feature for Java does not allow in-process COM
Automation servers. Developers can use dllhost to support in-process servers.
The exception COMException is thrown if an error occurs.
Code Sample
The following code sample demonstrates the nondefault constructors.
Create
Instantiates a COM object in a COM Automation server.
Syntax
public void Create(String progID)
public void Create(String progID, String serverName)
Where Is
progid the programmatic identifier (progID) of the COM Automation
object to create. This character string describes the class of the
COM Automation object and has the following form:
COMComponent.Object
COMComponent is the component name of the COM
Automation server, and Object is the name of the COM
Automation object. The specified COM Automation object must
be creatable and must support the IDispatch interface.
servername the name of the remote DCOM server on which the COM object
is being instantiated.
Where Is
Passing a specified name forces Oracle COM Automation
Feature to attempt to instantiate the COM object on a remote
computer.
Remarks
The COM Automation object created with the Create method is freed with a
corresponding call to Destroy. This nullifies the internal representation of the
object in the Oracle COM Automation Feature and releases all the interfaces
associated with the object.
Using the constructor that takes only the progid parameter forces Oracle COM
Automation Feature to check the registry for the location of the COM object.
Registry information indicates whether the COM object is local or remote.
Oracle COM Automation Feature for Java does not allow in-process COM
Automation servers. Developers can use dllhost to support in-process servers.
The exception COMException is thrown if an error occurs.
Code Sample
// Use the default constructor.
Automation word = new Automation();
Automation excel = new Automation();
Destroy
Destroys a created COM Automation object.
Syntax
public void Destroy()
Remarks
Calling Destroy nullifies the internal representation of the object in the Oracle
COM Automation Feature and releases all the interfaces associated with the object.
Code Sample
See "Create" on page 3-25 for code sample.
GetProperty
Gets a property value of a COM Automation object.
Syntax
public allowed_type GetProperty(String propName, allowed_type[] propVal)
Where Is
propName the property name of the COM object to return.
propVal the returned property value. The returned property type
depends on the COM Automation type that is returned. The
array must be big enough to hold at least one element although
only the first element will be accessed in order to return the
property.
allowed_type from the following list:
■ boolean
■ byte
■ char
■ short
■ int
■ long
■ float
■ double
■ java.long.String
■ oracle.win.com.Automation
■ oracle.win.com.Currency
■ java.util.Calendar
Remarks
If the property is a COM object, it can be retrieved using the allowed_type of
oracle.win.com.Automation. The Automation Java object that is returned can
be used to get and set properties and call methods on the property.
GetProperty uses an array parameter to return the property value in order to
overload the GetProperty method. Overloading would not be possible if the
property value were simply returned as a return value. The array solves the
problem caused by Java not having an out parameter.
The property is still returned as a return value for convenience.
The exception, COMException, is thrown if an error occurs.
Code Sample
SetProperty
Sets a property of a COM Automation object to a new value.
Syntax
public void SetProperty(String propName, allowed_type propVal)
Where Is
propName the property name of the COM object being set to a new value.
Where Is
propVal the new value of the property. It must be a value of the
appropriate datatype.
allowed_type from the following list:
■ boolean
■ byte
■ char
■ short
■ int
■ long
■ float
■ double
■ java.long.String
■ oracle.win.com.Automation
■ oracle.win.com.Currency
■ java.util.Calendar
Remarks
If the property is a COM object, it can be set using the allowed type of
oracle.win.com.Automation. The property value must be a valid Automation
Java object.
The exception, COMException, is thrown if an error occurs.
Code Sample
See "GetProperty" on page 3-27 for sample code.
InitArg
Initializes the parameter set passed to an Invoke call.
Syntax
public void InitArg()
Remarks
The InitArg call initializes the parameter set and must be called even if the COM
method does not take any parameters. After InitArg has been called, a SetArg
call sets the first parameter to the specified value. A second SetArg call sets the
second parameter in the parameter list. Subsequent calls set the nth parameters in
the parameter list, where n is the number of times SetArg has been called after an
InitArg call. Another call to InitArg resets the argument list and a call to
SetArg sets the first parameter again.
Code Sample
See "Invoke" on page 3-31 for sample code.
SetArg
Used to construct the parameter list for the next Invoke call.
Syntax
public void SetArg(allowed_type val)
Where Is
val the value of the parameter to be passed to an Invoke call. The
parameter set is the nth parameter in the parameter list, where n
is the numbers of times SetArg has been called after an
InitArg call.
allowed_type from the following list.
■ boolean
■ byte
■ char
■ short
■ int
■ long
■ float
■ double
Where Is
■ java.long.String
■ oracle.win.com.Automation
■ oracle.win.com.Currency
■ java.util.Calendar
Remarks
If a parameter is a COM object, then the allowed_type of the corresponding
argument should be oracle.win.com.Automation. The argument should be a
valid Automation Java object.
No exceptions are thrown at this time. However, if an error occurs, for example, if
the wrong argument type is passed, then it will be caught when the Invoke
method is called.
Code Sample
See "Invoke" on page 3-31 for sample code.
Invoke
Calls a method of a COM Automation object. This function uses the parameter list,
previously created by the calls to InitArg and SetArg, as input for the COM
Automation method.
Syntax
public void Invoke(String methodName, allowed_type[] retVal)
public void Invoke(String methodName)
Where Is
methodName the method name of the COM Automation object to call.
retVal the return value of the method of the COM Automation object. If
specified, it must be a local variable of the appropriate datatype.
The array must be big enough to hold at least one element,
although only the first element will be accessed in order to
return the property.
allowed_type a type from the following list:
Where Is
■ boolean
■ byte
■ char
■ short
■ int
■ long
■ float
■ double
■ java.long.String
■ oracle.win.com.Automation
■ oracle.win.com.Currency
■ java.util.Calendar
Remarks
If the COM method returns a COM object as the return value, the allowed_type
of the return value is oracle.win.com.Automation. The Automation Java object that
is returned can be used to get and set properties, and call methods on the return
value.
In order to overload the Invoke method, Invoke uses an array parameter to
return the values of COM object methods. Overloading would not be possible if the
property value was simply returned as a return value. The array solves the problem
caused by Java not having an out parameter.
The version of Invoke that takes only one parameter, public void
Invoke(String methodName), is used for COM object methods with void
return types.
The property is still returned as a return value for convenience.
The exception COMException is thrown if an error occurs.
Code Sample
// A Microsoft Excel Worksheet object.
Automation workSheet = null;
// A Microsoft Excel ChartObjects collection object.
Automation chartObjects = null;
// A Microsoft Excel ChartObject object.
Automation chartObject = null;
// Used for return values of type Automation.
Automation[] autorv = { null };
// Dimensions for a Microsoft Excel ChartObject object.
short xpos = 100, ypos = 30, width = 400, height = 250;
Currency Constructor
Creates a currency Java object.
Syntax
public Currency(long value)
Where Is
value the 8-byte CURRENCY number.
Get
Gets the 8-byte CURRENCY number.
Syntax
public long Get()
Remarks
Returns the 8-byte CURRENCY number.
Set
Sets the 8-byte CURRENCY number.
Syntax
public void Set(long value)
Where Is
value the 8-byte CURRENCY number.
This chapter describes how to use Oracle COM Automation Feature demonstration
programs for PL/SQL.
This chapter contains these topics:
■ Overview of PL/SQL Demos
■ Microsoft Word Demo
■ Microsoft Excel Demo
■ Microsoft PowerPoint Demo
■ MAPI Demo
2. Connect to the Oracle database instance as the user that will use the Microsoft
Word demo. For example:
SQL> connect hr/hr
This script creates the ORDWord package in the current user’s schema. You
receive the following error several times when you run this script for the first
time:
ORA-04043: object XXXX does not exist.
Core Functionality
The following subsections describe the APIs that the Microsoft Word demo exposes.
These APIs are primitive. Be aware that much of the functionality that Microsoft
Word exposes through COM Automation is not exposed through these APIs.
CreateWordObject
Instantiates a Word.Basic object in the Microsoft Word Automation server.
Syntax
FUNCTION CreateWordObject() RETURN BINARY_INTEGER;
Remarks
This function must be called before any other operation can be performed. This
procedure returns a 0 when successful or a nonzero HRESULT when an error occurs.
FileNew
Creates a new Microsoft Word document.
Syntax
FUNCTION FileNew() RETURN BINARY_INTEGER;
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
FileLoad
Loads a document into Microsoft Word.
Syntax
FUNCTION FileLoad(filename VARCHAR2) RETURN BINARY_INTEGER;
Where Is
filename the fully qualified filename of the document.
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
FileSave
Saves the current Microsoft Word document to disk.
Syntax
FUNCTION FileSave() RETURN BINARY_INTEGER;
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
FileSaveAs
Saves the current Microsoft Word document as a specific file.
Syntax
FUNCTION FileSaveAs(filename VARCHAR2) RETURN BINARY_INTEGER;
Where Is
filename the fully qualified filename of the document.
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
FileClose
Closes the current Microsoft Word document.
Syntax
FUNCTION FileClose() RETURN BINARY_INTEGER;
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
InsertText
Inserts a text string into the current Microsoft Word document.
Syntax
FUNCTION InsertText(textstr VARCHAR2) RETURN BINARY_INTEGER;
Where Is
textstr the text that will be inserted into the document.
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
InsertNewLine
Inserts a carriage return into the current Microsoft Word document.
Syntax
FUNCTION InsertNewLine() RETURN BINARY_INTEGER;
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
FormatFontSize
Sets the font size for the current Microsoft Word document.
Syntax
FUNCTION FormatFontSize(fontsize BINARY_INTEGER) RETURN BINARY_INTEGER;
Where Is
fontsize the point size of the font.
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
2. Connect to the Oracle database instance as the user that will use the Microsoft
Excel demo. For example:
SQL> connect hr/hr
This script creates the ORDExcel package in the current user’s schema. You
receive the following error several times when you run this script for the first
time:
ORA-04043: object XXXX does not exist.
Core Functionality
The following subsections describe the APIs that the Microsoft Excel demo exposes.
These APIs are primitive. Be aware that much of the functionality that Microsoft
Excel exposes through COM Automation is not exposed through these APIs.
CreateExcelWorkSheet
Starts the Microsoft Excel COM Automation server and instantiates the objects for a
workbook and a worksheet.
Syntax
FUNCTION CreateExcelWorkSheet() RETURN BINARY_INTEGER;
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
InsertData
Inserts any kind of data into a specific cell of the current Excel worksheet.
Syntax
FUNCTION InsertData(range VARCHAR2, data ANY PL/SQL DATATYPE, datatype VARCHAR2)
RETURN BINARY_INTEGER;
Where Is
range a string that indicates a specific cell in the current Excel
worksheet (for example, ‘A1’, ‘B1’).
data the data that you want to insert into the current Excel worksheet.
datatype a string that indicates the datatype of the data that you are
inserting into Excel. The list of available datatypes are:
■ I2 - 2 byte integer
■ I4 - 4 byte integer
■ R4 - IEEE 4 byte real
■ R8 - IEEE 8 byte real
■ SCODE - error code
■ CY - currency
■ DISPATCH - dispatch pointer
■ BSTR - String
■ BOOL - boolean
■ DATE - date
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
InsertChart
Creates a chart of a specified range of data and inserts the chart at the x and y
position of the current worksheet with the desired height and width.
Syntax
FUNCTION InsertChart(xpos BINARY_INTEGER, ypos BINARY_INTEGER, width BINARY_
INTEGER, height BINARY_INTEGER, range VARCHAR2, type VARCHAR2) RETURN BINARY_
INTEGER;
Where Is
xpos the x position in the current worksheet where the chart should
be inserted.
ypos the y position in the current worksheet where the chart should
be inserted.
width the width of the chart.
height the height of the chart.
range the range of cells to be graphed.
type the datatype of the data to be graphed.
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
SaveExcelFile
Saves the current Microsoft Excel workbook as a specific file.
Syntax
FUNCTION SaveExcelFile(filename VARCHAR2) RETURN BINARY_INTEGER;
Where Is
filename the fully qualified filename of the Excel workbook
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
ExitExcel
Performs some cleanup and destroys the outstanding references to the Excel COM
Automation server. This should be the last API called.
Syntax
FUNCTION ExitExcel() RETURN BINARY_INTEGER;
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
2. Connect to the Oracle database instance as the user that will use the Microsoft
PowerPoint demo. For example:
SQL> connect hr/hr
This script creates the ORDPPT package in the current user’s schema. You
receive the following error several times when you run this script for the first
time:
ORA-04043: object XXXX does not exist.
Core Functionality
The following subsections describe the APIs that the Microsoft PowerPoint demo
exposes. These APIs are primitive. Be aware that much of the functionality that
Microsoft PowerPoint exposes through COM Automation is not exposed through
these APIs.
CreatePresentation
Starts the Microsoft PowerPoint COM Automation server and instantiates the
objects for a presentation.
Syntax
FUNCTION CreatePresentation (servername IN VARCHAR2) RETURN BINARY_INTEGER;
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
AddSlide
Inserts a new slide in the PowerPoint presentation.
Syntax
FUNCTION AddSlide (layout IN BINARY_INTEGER) RETURN BINARY_INTEGER;
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
SetTitle
Specifies the title of the PowerPoint slide.
Syntax
FUNCTION SetTitle (title IN VARCHAR2) RETURN BINARY_INTEGER;
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
InsertText
Inserts text into the specified location on the slide.
Syntax
FUNCTION InsertText (orientation IN BINARY_INTEGER, left IN BINARY_INTEGER, top
IN BINARY_INTEGER, width IN BINARY_INTEGER, height IN BINARY_INTEGER, text IN
VARCHAR2) RETURN BINARY_INTEGER;
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
PresentationSave
Saves the current PowerPoint presentation.
Syntax
FUNCTION PresentationSave RETURN BINARY_INTEGER;
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
PresentationSaveAs
Saves the current presentation using the specified name.
Syntax
FUNCTION PresentationSaveAs (filename IN VARCHAR2) RETURN BINARY_INTEGER;
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
PresentationClose
Closes the current PowerPoint presentation.
Syntax
FUNCTION PresentationClose RETURN binary_integer;
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
Exit
Exits the PowerPoint program.
Syntax
FUNCTION Exit RETURN BINARY_INTEGER;
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
MAPI Demo
The following sections detail how to install the Messaging Application
Programming Interface (MAPI) demo and describe the APIs that it exposes. This
demo is provided as an example of the types of solutions that can be built with
Oracle and MAPI-compliant applications.
The MAPI demo provides the following:
■ ORDMAPI, a PL/SQL package that exposes several APIs for manipulating
Extended MAPI client.
■ mapidem.sql, a script that displays the capabilities of exchanging data
between Oracle and Extended MAPI client.
4. Set Microsoft Outlook as the default program for the e-mail, newsgroups, and
calender tools as follows:
From Internet Explorer, choose the Tools menu > Internet Options > Programs
and set the fields.
12. Enter the password and confirm the password for DOMAIN-1\hr.
2. Connect to the Oracle database instance as the user that will use the MAPI
demo. For example:
SQL> connect hr/hr
This script creates the ORDMAPI package in the current user’s schema. You
receive the following error several times when you run this script for the first
time:
ORA-04043: object XXXX does not exist.
This script connects to a database server, extracts the data, and sends an e-mail
to a specified recipient.
Core Functionality
The following subsections describe the APIs that the MAPI demo exposes. These
APIs are primitive. Be aware that much of the functionality that MAPI exposes
through COM Automation is not exposed through these APIs.
CreateMAPISession
Starts the MAPI COM Automation server and instantiates the objects for a session.
Syntax
FUNCTION CreateMAPISession (servername IN VARCHAR2 DEFAULT ’’, profilename IN
VARCHAR2 DEFAULT NULL, password IN VARCHAR2 DEFAULT NULL) RETURN BINARY_INTEGER;
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
NewMessage
Creates a new message.
Syntax
FUNCTION NewMessage RETURN BINARY_INTEGER;
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
AddRecipient
Adds the e-mail address of a recipient. This is the address where the e-mail message
will be sent.
Syntax
FUNCTION AddRecipient (emailaddress VARCHAR2) RETURN BINARY_INTEGER;
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
SetSubject
Specifies the subject of the e-mail message.
Syntax
FUNCTION SetSubject (subject VARCHAR2) RETURN BINARY_INTEGER;
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
SetBody
Inserts the body text of the e-mail message.
Syntax
FUNCTION SetBody (messagetext VARCHAR2) RETURN BINARY_INTEGER;
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
SendMessage
Sends the e-mail message to the specified recipients.
Syntax
FUNCTION SendMessage RETURN BINARY_INTEGER;
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
EndMAPISession
Exits the MAPI session.
Syntax
FUNCTION EndMAPISession RETURN BINARY_INTEGER;
Remarks
This procedure returns a 0 when successful or a nonzero HRESULT when an error
occurs.
This chapter describes how to use the demonstration program designed for Oracle
COM Automation Feature for Java.
This chapter contains these topics:
■ Oracle COM Automation Feature Java Demos Overview
■ Microsoft Word Java Demo
2. Start SQL*Plus.
C:\>SQLPLUS
3. Connect to the Oracle database instance as the user that will use the Microsoft
Word demo. For example:
SQL> connect hr/hr
See Also:
■ Oracle9i Java Developer’s Guide for further information on using
the loadjava tool
■ Oracle9i Java Stored Procedures Developer’s Guide for further
information on call specs
Core Functionality
The following subsections describe the APIs that the Microsoft Word Java demo
exposes. These APIs are primitive. Be aware that much of the functionality that
Microsoft Word exposes through COM Automation is not exposed through these
APIs.
TestWORD
The constructor. It does nothing.
Syntax
public TestWORD()
CreateWordObject
Creates the Word.Basic COM object.
Syntax
public void CreateWordObject(java.lang.String servername)
Where Is
servername the server on which to create the COM object. Specify null or the
empty string for the local server.
DestroyWordObject
Destroys the Word.Basic COM object.
Syntax
public void DestroyWordObject()
FileNew
Creates a new Microsoft WORD document.
Syntax
public void FileNew()
Remarks
Wrapper for the FileNewDefault COM method of the Word.Basic COM object.
FileLoad
Loads an existing Microsoft WORD document.
Syntax
public void FileLoad(java.lang.String filename)
Where Is
filename the name of the file to load.
Remarks
Wrapper for the FileOpen COM method of the Word.Basic COM object.
FormatFontSize
Sets the font size.
Syntax
public void FormatFontSize(long fontsize)
Where Is
fontsize the new font size.
Remarks
Wrapper for the FormatFont COM method of the Word.Basic COM object.
InsertText
Inserts text into the Microsoft Word document.
Syntax
public void InsertText(java.lang.String textstr)
Where Is
textstr the text to insert.
Remarks
Wrapper for the Insert COM method of the Word.Basic COM object.
InsertNewLine
Inserts a newline into the Microsoft Word document.
Syntax
public void InsertNewLine()
Remarks
Wrapper for the InsertPara COM method of the Word.Basic COM object.
FileSaveAs
Saves the Microsoft Word document using a specified name.
Syntax
public void FileSaveAs(java.lang.String filename)
Where Is
filename the name of the file.
Remarks
Wrapper for the FileSaveAs COM method of the Word.Basic COM object.
FileSave
Saves the Microsoft Word document.
Syntax
public void FileSave()
Remarks
Wrapper for the FileSave COM method of the Word.Basic COM object.
FileClose
Closes the Microsoft Word document, and exits Microsoft Word.
Syntax
public void FileClose()
Remarks
Wrapper for the FileClose and FileExit COM methods of the Word.Basic COM
object.
COM-0018: The requested member does not exist, or the call to Invoke tried to set
the value of a read-only property
Action: Make sure the property value can be written to or the member exists.
COM-0020: One of the arguments in rgvarg could not be coerced to the specified
type
Action: Make sure that the coerced arguments are of compatible datatypes.
external procedure
A function written in a third-generation language (3GL), such as C, and callable
from within PL/SQL or SQL as if it were a PL/SQL function or procedure.
GUID
An identifier that uniquely identifies a COM object. GUID is an acronym for
Globally Unique Identifier.
IID
A GUID that identifies a COM interface.
listener
The server process that listens for and accepts incoming connection requests from
client applications. Oracle listener processes start up Oracle database processes to
handle subsequent communications with the client.
Glossary-1
listener.ora
A configuration file that describes one or more Transparent Network Substrate
(TNS) listeners on a server.
Oracle Net
The Oracle client/server communication software that offers transparent operation
to Oracle tools or databases over any type of network protocol and operating
system.
PL/SQL
Oracle Corporation’s procedural language extension to SQL.
progID
A descriptive string that maps to a GUID.
tnsnames.ora
A file that contains connect descriptors mapped to net service names. The file may
be maintained centrally or locally, for use by all or individual clients.
Glossary-2
Index
A configuration
Java, 2-4
APIs PL/SQL, 2-4
Java, 3-22
configuring
PL/SQL, 3-10
DCOM, 2-7
application programming interfaces (APIs), 3-9 listener for Oracle COM Automation for
Java, 3-22
PL/SQL, 2-5
PL/SQL, 3-10
Oracle COM Automation, 2-4
Architecture constructor, 3-24, 3-33
Java, 1-7
core functionality
PL/SQL, 1-5
Oracle COM Automation, 1-2
architecture Create
Oracle COM Automation, 1-5 Java API, 3-25
Automation
CreateObject
Java API, 3-24, 3-33 PL/SQL API, 3-10
B D
benefits
datatypes
Oracle COM Automation, 1-3 conversion, 3-2
Java to COM Automation datatypes, 3-2
C PL/SQL to Visual Basic, 3-2
DCOM
call spec, 5-3
configuring, 2-7
COM automation
demos
invoking, 1-6
installing MAPI demo, 4-17
PL/SQL errors, A-2
installing Microsoft Excel demo, 4-7
COM objects
installing Microsoft PowerPoint demo, 4-11
program ID, 3-6
installing Microsoft Word demo, 4-3
properties and methods, 3-6
MAPI, 4-15
required information, 3-6
Microsoft Excel, 4-7
viewing, 3-7
Microsoft PowerPoint, 4-11
comwrap.sql, 2-2, 2-4
Microsoft Word, 4-2
Oracle COM Automation, 4-2
Index-1
Oracle COM Automation for Java, 5-2 I
PL/SQL, 4-2
Destroy IDispatch interface, 3-10, 3-22, 3-24
IDL, 3-6
Java API, 3-26
InitArg
DestroyObject
PL/SQL API, 3-12 Java API, 3-29
PL/SQL API, 3-17
InitOutArg
E PL/SQL API, 3-17
errors installation
codes, 3-3 Oracle COM Automation, 2-2
HRESULT, 3-3 installing PL/SQL MAPI demo
messages, A-4 preparation, 4-16
Microsoft COM automation, A-4 Installing the Microsoft Word Java Demo, 5-3
Oracle COM automation, A-2 Interface Definition Language, 3-6
examples Internet Explorer, 4-16
MAPI, 4-15 Invoke
Microsoft Excel, 4-7 Java API, 3-31
Microsoft PowerPoint, 4-11 PL/SQL API, 3-21
Microsoft Word, 4-2
Microsoft Word Java, 5-2 J
Exchange Server, 4-15
EXTPROC Java
configuration, 2-4
extproc.exe, 1-6
Java API
Automation, 3-24, 3-33
G Create, 3-25
GetArg Destroy, 3-26
PL/SQL API, 3-18 GetProperty, 3-27
GetLastError InitArg, 3-29
PL/SQL API, 3-12 Invoke, 3-31
GetProperty SetArg, 3-30
Java API, 3-27 SetProperty, 3-28
PL/SQL API, 3-14 Java APIs, 3-22
Globally Unique Identifier (GUID), 3-6 Java Automation constructor, 3-24, 3-33
grant.sql, 2-4 Java Components, 2-2
H L
HRESULT listener
return codes, 3-3 configuring for Oracle COM Automation, 2-5
loadjava, 5-3
Index-2
M Outlook Client, 4-15
MAPI
demo script mapidem.sql, 4-15 P
PL/SQL example, 4-15 PL/SQL
MAPI demo, 4-16 configuration, 2-4
Messaging Application Programming Interface. See ORDExcel package, 4-7
MAPI ORDMAPI package, 4-15
Microsoft Excel ORDPPT package, 4-11
demo script exceldem.sql, 4-7 ORDWord package, 4-2
PL/SQL example, 4-7 PL/SQL API
Microsoft Outlook, 4-16 CreateObject, 3-10
Microsoft PowerPoint DestroyObject, 3-12
demo script pptdem.sql, 4-11 GetArg, 3-18
PL/SQL example, 4-11 GetLastError, 3-12
Microsoft Word GetProperty, 3-14
demo script worddem.sql, 4-2, 4-7 InitArg, 3-17
example, 4-2 InitOutArg, 3-17
Microsoft Word Java Demo, 5-2 Invoke, 3-21
Migration from Oracle8i to Oracle 9i, 2-3 SetArg, 3-19
SetProperty, 3-15
O PL/SQL Architecture, 1-5
PL/SQL Components, 2-2
OLE/COM Object Viewer, 3-7
preparing to install, 4-16
ORA-28575 error message, 2-6
progID
Oracle COM Automation COM objects, 3-6
architecture, 1-5
program ID
benefits, 1-3
COM objects, 3-6
components, 2-2
configuring, 2-4
core functionality, 1-2 R
demos, 4-2 return codes
installing, 2-2 HRESULT, 3-3
introduction, 1-2
Java demos, 5-2
orawcom.dll, 2-2 S
orawpcom.dll, 1-6, 2-2 sample schema, 4-2, 5-2
ORDExcel SERVEROUTPUT, 5-4
PL/SQL package, 4-7 SetArg
ORDMAPI Java API, 3-30
PL/SQL package, 4-15 PL/SQL API, 3-19
ORDPPT SetProperty
PL/SQL package, 4-11 Java API, 3-28
ORDWord PL/SQL API, 3-15
PL/SQL package, 4-2
Index-3
system requirements
Oracle COM Automation, 2-3
T
TestWORD, 5-4
TestWORD.class, 5-2
TestWORD.java, 5-2
TestWORD.sql, 5-2, 5-3
troubleshooting
Oracle COM automation PL/SQL errors, A-2
U
Using the Microsoft Word Demo, 5-4
W
wordemoj.doc, 5-4
Index-4