PK AAoa,mimetypeapplication/epub+zipPKAAiTunesMetadata.plistj artistName Oracle Corporation book-info cover-image-hash 314352609 cover-image-path OEBPS/dcommon/oracle-logo.jpg package-file-hash 838323769 publisher-unique-id E10591-05 unique-id 95994328 genre Oracle Documentation itemName Oracle® COM Automation Feature Developer's Guide for Microsoft Windows, 11g Release 2 (11.2) releaseDate 2011-01-21T18:09:26Z year 2011 PK j]ojPKAAMETA-INF/container.xml PKYuPKAAOEBPS/cover.htmO Cover

Oracle Corporation

PK[pTOPKAAOEBPS/appendix.htm:@ſ COM Automation Error Messages

A COM Automation Error Messages

This appendix contains these topics:

Oracle COM Automation Feature, PL/SQL Errors

The following is a list of Oracle COM Automation Feature PL/SQL errors and their common causes.

COM-0001: Not a Boolean type
Cause: The property type, or return value type, is not a boolean, but a Boolean value was requested.
Action: Make sure that the variable is of the appropriate data type.
COM-0002: Invalid Token or no interface for token
Cause: The token that was specified does not reference any COM object created using CreateObject, or the COM object was freed using DestroyObject.
Action: Make sure that the interface exists.
COM-0003: Maximum Objects reached
Cause: Only 1024 COM objects can be active at any time. This includes COM objects created using CreateObject as well as COM objects obtained as property values and return values.
Action: Make sure that objects are destroyed after they are used, by calling DestroyObject.
COM-0004: The registered CLSID for the ProgID is invalid
Cause: The ProgID is located in the registry, but the CLSID associated with the ProgID is not correct.
Action: Check that the COM component of the specified ProgID is registered.
COM-0005: An error occurred writing the CLSID to the registry
Cause: The ProgID is not located in the registry. An attempt was made to create the ProgID and assign a CLSID to it, but the registry could not be modified.
Action: Ensure that your registry can be written to and is not corrupted.
COM-0006: A specified class is not registered in the registration database
Cause: A specified class is not registered in the registration database.
Action: Make sure that the class is registered.
COM-0007: Failed to initialize COM Automation object
Cause: There was an error creating the COM object.
Action: Make sure that the object is registered as a COM Automation object.
COM-0008: No interface is supported
Cause: This COM object does not support the IDispatch interface, so it cannot support COM Automation.
Action: Verify that the interface specified is valid.
COM-0014: Failure to invoke
Cause: There was an error invoking the method or property.
Action: Verify that the method name is valid for the object.
COM-0015: Bad parameter count
Cause: The number of parameters given for the method or property is different from the number of parameters expected.
Action: Make sure that the number of parameters for a method is equal to the count.
COM-0017: The application needs to raise an exception. The structure passed in pexcepinfo should be filled in
Cause: The COM object threw an exception.
Action: The exception includes an error source, error description, Help file, and the help file context. Call GetLastError to get this additional information
COM-0018: The requested member does not exist, or the call to Invoke tried to set the value of a read-only property
Cause: The requested member does not exist, or the call to Invoke tried to set the value of a read-only property.
Action: Make sure that 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
Cause: One of the arguments is not the type expected by the method or property, and the argument cannot be coerced to the expected type.
Action: Make sure that the coerced arguments are of compatible data types.
COM-0022: One or more of the arguments could not be coerced
Cause: One of the arguments is not the type expected by the method or property, and the argument cannot be coerced to the expected type.
Action: Make sure that your arguments are compatible.
COM-0025: Not an optional parameter
Cause: A required argument is missing.
Action: Make sure that your argument count is correct for the number of -parameters passed in.
COM-0026: Name exceeded the maximum character allowed
Cause: The property name, method name, server name, or ProgID is too long.
Action: Enter less than 1024 characters for the name.

Microsoft COM Automation Errors

The following is a list of Microsoft COM Automation errors and their common causes. Both the hexadecimal and binary error codes are listed.

(0x800401f3) (-2147221005) Invalid class string
Cause: The specified ProgID or CLSID is not registered as a COM object in the registry of the local computer.
Action: Correctly install the COM component.
(0x8007007e) (-2147024770) The specified module could not be found
Cause: The specified COM object is registered as an in-process COM server (DLL file), but the DLL file could not be found or loaded.
Action: Correctly install the COM component.
(0x80020004) (-2147352572) Parameter not found
Cause: A named parameter was specified before a positional parameter.
Action: Ensure that all named parameters are specified after all positional parameters.
(0x80020005) (-2147352571) Type mismatch
Cause: The data type of a PL/SQL local variable used to store a returned property value or a method return value did not match the Visual Basic data type of the property or method return value, or the return value of a method was requested, but it does not return a value.
Action: Ensure that the local variable is of the appropriate data type and, for methods, ensure that the return value is not type void.
(0x80020006) (-2147352570) Unknown name
Cause: The specified property or method name was not found for the specified object.
Action: Verify that the method or property name is valid for the object.
(0x80020008) (-2147352568) Bad variable type
Cause: The data type of a PL/SQL or Java value passed as a method parameter did not match the COM Automation data type of the method parameter, or a NULL value was passed as a method parameter.
Action: Ensure that any local variables used as method parameters are of the appropriate data type and are set to a value other than NULL.
(0x80080005) (-2146959355) Server execution failed
Cause: The specified COM object is registered as a local COM server (.EXE file), but the .EXE file could not be found or started.
Action: Correctly install the COM component.
PK?@:@PKAAOEBPS/ch3core.htm Oracle COM Automation Feature Core Functionality

3 Oracle COM Automation Feature Core Functionality

This chapter describes aspects of the programming interface for Oracle COM Automation Feature.

This chapter contains these topics:

Data Type Conversions

Because Microsoft COM Automation uses COM Automation data types, and Oracle COM Automation Feature uses either PL/SQL or Java data types, Oracle COM Automation Feature must convert the data that it receives and pass it to the COM Automation object. Similarly, Oracle COM Automation Feature must pass the data that it receives from the COM Automation object and convert it.

Data Type Conversion for PL/SQL

Table 3-1 shows the mapping between PL/SQL data types and COM Automation data types.

This guide follows a convention where COM Automation data types are prefaced by an initial p when used as IN OUT or OUT parameters. Data types without the initial p are IN parameters.

Table 3-1 PL/SQL to COM Automation Data Types

PL/SQL Data TypeCOM Automation Data Type

VARCHAR2

BSTR, pBSTR

BOOLEAN

BOOL, pBOOL

BINARY_INTEGER

DISPATCH, pDISPATCH

DOUBLE PRECISION

UI1, pUI1, I2, pI2, I4, pI4, R4, pR4, R8, pR8, SCODE, pSCODE, CY, pCY, DISPATCH, pDISPATCH

DATE

DATE, pDATE



Note:

Oracle restricts a CY and pCY value to be between -9999999999.9999 and 9999999999.9999.

Data Type Conversion for Java

Table 3-2 lists the supported COM Automation data types and related mappings to Java data types.

All data type mapping applies to properties, arguments, and return values, except void, which applies only to return values.

Table 3-2 Java to COM Automation Data Types

Java Data TypeCOM Automation Data Type

boolean

BOOL

char

CHAR

double

DOUBLE

int

INT

long

LONG

float

FLOAT

short

SHORT

byte

BYTE

java.lang.String

BSTR

oracle.win.com.Currency

CURRENCY

java.util.Calendar

DATE

void

VOID (return values only)

oracle.win.com.Automation

IDispatch*


HRESULT Error Codes

HRESULT error codes are provided by the Microsoft Windows API.

An HRESULT is a COM error code of the hexadecimal form 0x800nnnnn. However, it has the decimal form -214nnnnnnn. For example, passing an invalid object name when creating a COM object causes the HRESULT of -2147221005 to be returned, which is 0x800401f3 in hexadecimal form.

For complete information about the HRESULT return code, refer to the Microsoft documentation.


See Also:

"Microsoft COM Automation Errors" for additional information

PL/SQL Use of HRESULT

The PL/SQL APIs return an integer return code. The return code is 0 when successful, or a nonzero value of HRESULT when an error occurs.


See Also:

"GetLastError" for additional information about how to interpret the return codes from Oracle COM Automation Feature

Java Use of HRESULT

In the Java API, HRESULT is a data member of the COMException class.

Oracle COM Automation for Java Exception Handling

Oracle COM Automation for Java uses standard Java exception mechanisms. Specifically, a Java exception class, oracle.win.com.COMException, is introduced to represent COM errors.

This exception is thrown by the Automation Java class when an error occurs.

The error information provided by this exception is similar to that provided by the PL/SQL API GetLastError function.


Note:

The HRESULT data member has the same meaning as the value of HRESULT returned by the PL/SQL functions.

If the COM error is DISP_E_EXCEPTION as indicated by the excepInfo data member, COMException uses the source, description, helpfile, and helpid data members. Otherwise, these data members are not valid.

The COMException writes an error message representing the COM error to the errmsg data member.

Table 3-3 lists the COMException data members and their descriptions.

Table 3-3 COMException Data Members

MemberDescription

hresult

is an HRESULT value as defined by the Windows API.

errmsg

is the textual representation of HRESULT in the appropriate language.

source

is the source of the exception, typically the application name.

description

is the error description.

helpfile

is the fully qualified path name of the helpfile containing more information about the error.

helpid

is the help context ID of a topic within the helpfile specified by help file.

excepInfo

is DISP_E_EXCEPTION, if HRESULT returns true, and source, description, helpfile, and helpid contain more information.


Code Sample

This example demonstrates the COMException exception.

 try
   {
     // Some code that 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);
     }
   }

Typical COM Automation Functionality

This section discusses the required information and the general steps to build a solution using Oracle COM Automation Feature.

Information Required for COM Objects

Review the following information about the COM objects that you intend to use:

  • You must determine the Program ID of the COM object. The Program ID, or progID, is a descriptive string that maps to the globally unique identifier (GUID), a hexadecimal number that uniquely identifies a COM object.

    The following string is an example of a progID:

    Excel.Worksheet.1
    

    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 data type 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 data type, such as INT or BSTR. The GetProperty and SetProperty APIs take the property name and a variable of the appropriate data type. Methods are referred to by a descriptive string, such as InsertChart. A method takes a set of parameters that are of different COM Automation data types and returns a COM Automation data type.

    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.

OLE/COM Object Viewer

Microsoft provides a tool called the OLE/COM Object Viewer with Microsoft Visual Studio for browsing the properties and methods of COM objects on a local system. This tool enables you to quickly and easily determine the properties and methods that each COM object exposes. See Figure 3-1 for an example.

Figure 3-1 OLE/COM Object Viewer

Description of Figure 3-1 follows
Description of "Figure 3-1 OLE/COM Object Viewer"

Using COM Automation Feature APIs

In a typical use of Oracle COM Automation Feature, you design a Java class or PL/SQL block to create and manipulate a COM object. The class or code block performs the following steps:

  1. Creates the COM object as follows:

    • In PL/SQL, using CreateObject

    • In Java, using a constructor or the Create method

  2. Manipulates the COM object calling the following APIs:

    • GetProperty to get a property value

    • SetProperty to set a property value to a new value

  3. Calls Invoke to call a method

    To prepare for the Invoke call, you use InitArg and SetArg to package the argument to be sent to the COM Automation method.

  4. Calls GetLastError in PL/SQL to get the most recent error information

  5. Destroys the object using DestroyObject in PL/SQL or Destroy in Java

Application Programming Interfaces

This section lists and then describes the APIs available for Oracle COM Automation Feature.

PL/SQL APIs

Oracle COM Automation Feature externalizes the following APIs for PL/SQL development:

Java APIs

Oracle COM Automation Feature externalizes the following APIs for Java development:

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

This API 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;
WhereIs
progidthe 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.

reserveda parameter currently reserved for future use. Pass a value of 0. Future versions of Oracle COM Automation Feature may use this parameter.
servernamethe 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 that the registry indicates that the COM object exists locally. The registry information for COM objects can be configured with the tool dcomcnfg.exe.

objecttokenthe returned object token. It must be a local variable of data type 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 interfaces associated with the object.

This function returns 0 when successful, or a nonzero value for HRESULT when an error occurs.

Code Sample

HRESULT BINARY_INTEGER;
applicationToken BINARY_INTEGER:=-1;

HRESULT :=ORDCOM.CreateObject('Excel.Application', 0, '', applicationToken);
IF (HRESULT!=0) THEN
  dbms_output.put_line(HRESULT);
END IF;

DestroyObject

This API destroys a created COM Automation object.

Syntax

FUNCTION DestroyObject(objecttoken BINARY_INTEGER) RETURN BINARY_INTEGER;
WhereIs
objecttokenthe 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 interfaces associated with the object.

This function returns 0 when successful, or a nonzero value of HRESULT when an error occurs.

Code Sample

HRESULT BINARY_INTEGER;
applicationToken BINARY_INTEGER:=-1;

/* Assume applicationToken is initialized. */

HRESULT:=ORDCOM.DestroyObject(applicationToken);
IF (HRESULT!=0) THEN
   dbms_output.put_line(HRESULT);

GetLastError

This API 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;
WhereIs
sourcethe 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.
descriptionthe 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.
helpfilethe 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.
helpidthe 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 function returns 0 when successful, or a nonzero value of HRESULT when an error occurs.

See "Microsoft COM Automation Errors" for a description of the types of errors that can be returned by this function.

Code Sample

HRESULT BINARY_INTEGER;
applicationToken BINARY_INTEGER:=-1;
error_src VARCHAR2(255);
error_description VARCHAR2(255);
error_helpfile VARCHAR2(255);
error_helpID BINARY_INTEGER;

HRESULT:=ORDCOM.CreateObject('Excel.Application', 0, '', applicationToken);
IF (HRESULT!=0) THEN
  ORDCOM.GetLastError(error_src, error_description, error_helpfile, 
      error_helpID);
  dbms_output.put_line(error_src);
  dbms_output.put_line(error_description);

  dbms_output.put_line(error_helpfile);
END IF;

GetProperty

This API returns the property value of a COM Automation object.

Syntax

FUNCTION GetProperty(objecttoken BINARY_INTEGER, propertyname VARCHAR2, argcount BINARY_INTEGER, 
propertyvalue OUT any_PL/SQL_data type) RETURN BINARY_INTEGER;
WhereIs
objecttokenthe object token of a COM object previously created by CreateObject.
propertynamethe property name of the COM object to return.
argcountthe index of the property array. If the property is not an array, then the developer should specify 0.
propertyvaluethe returned property value. The returned property type depends on the COM Automation data type that is returned. You must pass the PL/SQL data type that corresponds to the COM Automation data type of the COM Automation property. Otherwise, the COM Automation Feature will not properly convert the COM Automation data type.
any_PL/SQL_data typeany data type supported by COM Automation Feature.

Remarks

If the property returns a COM object, then you must specify a local variable of data type 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, then it is set to NULL.

This function returns 0 when successful, or a nonzero value of HRESULT when an error occurs.

Code Sample

/*
 * This is an excerpt from a Microsoft Excel application.
 */

HRESULT BINARY_INTEGER;
ChartObject BINARY_INTEGER := -1;
ChartToken BINARY_INTEGER := -1;

/* Assume ChartObject is initialized. */

HRESULT := ORDCOM.GetProperty(ChartObject, 'Chart', 0, ChartToken);
IF (HRESULT!=0) THEN    
  dbms_output.put_line(HRESULT);
END IF;

SetProperty

This API sets a property of a COM Automation object to a new value.

Syntax

FUNCTION SetProperty(objecttoken BINARY_INTEGER, propertyname VARCHAR2, newvalue any_PL/SQL_data type, 
data type VARCHAR2) RETURN BINARY_INTEGER;
WhereIs
objecttokenthe object token of a COM Automation object previously created by CreateObject.
propertynamethe property name of the COM object to set to a new value.
newvaluethe new value of the property. It must be a value of the appropriate data type.
data typethe explicitly specified data type of the value passed in. The available data types 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

any_PL/SQL_data typeany data type supported by COM Automation Feature.

Remarks

This function returns a 0 when successful, or a nonzero value of HRESULT when an error occurs.

Code Sample

/*
 * This is an excerpt from a Microsoft Excel application.
 */

HRESULT BINARY_INTEGER;
RangeToken BINARY_INTEGER := -1;

/* Assume RangeToken is initialized. */

HRESULT := ORDCOM.SetProperty(RangeToken, 'Value', 'EmpNo', 'BSTR');
IF (HRESULT!=0) THEN    
  dbms_output.put_line(HRESULT);
END IF;

InitArg

This API 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" 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 data type strings in "SetArg" for information about IN and OUT parameters.

Code Sample

See "Invoke" 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_data type, type VARCHAR2);
WhereIs
datathe value of the OUT or IN OUT parameter after the COM method has been invoked.
typethe COM Automation data type of the parameter.

The available data types 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

any_PL/SQL_data typeany data type supported by COM Automation Feature.

Remarks

See the section on SetArg data type strings in "SetArg" for information about IN and OUT parameters.

Code Sample

See "Invoke" 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_data type, data type VARCHAR2);
WhereIs
paramvaluethe 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 number of times SetArg has been called after an InitArg call.
data typethe explicitly specified data type for the parameters.

Those data types 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 data type.


Those data types without the initial p are IN parameters. The available data types 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


  • 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_data typeany data type supported by COM Automation Feature.

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.

Data types without the initial p are IN parameters. Those data types prefaced by an initial p are IN OUT or OUT parameters.

Code Sample

See "Invoke" for sample code.

Invoke

This API 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_data type) RETURN BINARY_INTEGER;
WhereIs
objecttokenthe object token of a COM Automation object previously created by CreateObject.
methodnamethe method name of the COM Automation object to call.
argcountthe number of arguments passed to the COM Automation object method.
returnvaluethe return value of the method of the COM Automation object. If specified, it must be a local variable of the appropriate data type.
any_PL/SQL_data typeany data type supported by COM Automation Feature.

Remarks

If the return value of the function is a COM object, then the developer must specify a local variable of data type 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 function returns 0 when successful, or a nonzero value of 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);
*/

HRESULT BINARY_INTEGER := -1;
applicationToken BINARY_INTEGER := -1;
x1 DOUBLE PRECISION := 12;
x2 DOUBLE PRECISION := 7;
x3 DOUBLE PRECISION := 0;
x4 DOUBLE PRECISION := 0;

/* Assume applicationToken is initialized. */

ORDCOM.InitArg();
ORDCOM.SetArg(x1, 'pI2');
ORDCOM.SetArg(x2, 'I2');
ORDCOM.SetArg(x3, 'pI2');

HRESULT := ORDCOM.Invoke(applicationToken, 'TestOutArg', 3, x4);
IF (HRESULT!=0) THEN    
  dbms_output.put_line(HRESULT);
END IF;

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 data type. CURRENCY is a an 8-byte number where the last four 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.

COM Object Reference Counting

COM object interface reference counting is handled internally, and IUnknown::AddRef() and IUnknown::Release() are not exposed. The user cannot explicitly address COM object interfaces. The lifetime of a particular COM object starts when the associated Java constructor or Create method is invoked, and it is released when the associated Destroy method is invoked.

Constructors and Destructors

Because the default constructor does not create a COM object, there are two approaches to creating a COM object:

Handling COM Object Errors

All COM errors are mapped to Java exceptions. Users can catch COM object errors through the Java exception handling mechanism.


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

This API creates a COM object.

Syntax

  public Automation()
        public Automation(String progID)
        public Automation(String progID, String serverName)
WhereIs
progIDthe 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.

serverNamethe 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 a 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 Oracle COM Automation Feature and releases all 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 COMException exception is thrown if an error occurs.

Code Sample

The following code sample demonstrates the nondefault constructors.

 // Use the registry to determine where to create the COM object.
   Automation word = new Automation("Word.Basic");

   // Create the COM object on the specified server.
   Automation excel = new Automation("Excel.Application", 
                                     "\\ServerName");

   // Free the COM objects.
   word.Destroy();
   excel.Destroy();

Create

This API instantiates a COM object in a COM Automation server.

Syntax

public void Create(String progID)
public void Create(String progID, String serverName)
WhereIs
progIDthe 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.

serverNamethe 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 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 Oracle COM Automation Feature and releases all 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 COMException exception is thrown if an error occurs.

Code Sample

  // Use the default constructor.
   Automation word = new Automation();
   Automation excel = new Automation();

   // Use the registry to determine where to create the COM object.
   word.Create("Word.Basic");

   // Create the COM object on the specified server system.
   excel.Create("Excel.Application", "\\ServerName");

   // Free the COM objects.
   word.Destroy();
   excel.Destroy();

Destroy

This API 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 interfaces associated with the object.

Code Sample

See "Create" for code sample.

GetProperty

This API gets a property value of a COM Automation object.

Syntax

public allowed_type GetProperty(String propName, allowed_type[] propVal)
WhereIs
propNamethe property name of the COM object to return
propValthe 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 to return the property.
allowed_typefrom 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, then 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 to overload the GetProperty method. Overloading would not be possible if the property value were 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 COMException exception is thrown if an error occurs.

Code Sample

   // A Microsoft Excel ChartObject object.
   Automation chartObject = null;
   // A Microsoft Excel Chart object.
   Automation chart = null;
   // Used for properties of type Automation.
   Automation[] autoProp = { null };

   // Assume the Microsoft Excel ChartObject object is initialized.

   // Get the Chart property.
   chartObject.GetProperty("Chart", autoProp);
   chart = autoProp[0];

   // Set the Chart property.
   chartObject.SetProperty("Chart", chart);

SetProperty

This API sets a property of a COM Automation object to a new value.

Syntax

public void SetProperty(String propName, allowed_type propVal)
WhereIs
propNamethe property name of the COM object being set to a new value
propValthe new value of the property. It must be a value of the appropriate data type.
allowed_typefrom 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 COMException exception is thrown if an error occurs.

Code Sample

See "GetProperty" for sample code.

InitArg

This API 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" for sample code.

SetArg

This API is used to construct the parameter list for the next Invoke call.

Syntax

public void SetArg(allowed_type val)
WhereIs
valthe 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 number of times SetArg has been called after an InitArg call.
allowed_typefrom 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 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" 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)
WhereIs
methodNamethe method name of the COM Automation object to call
retValthe return value of the method of the COM Automation object. If specified, then it must be a local variable of the appropriate data type. The array must be big enough to hold at least one element, although only the first element will be accessed to return the property.
allowed_typea 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 COM method returns a COM object as the return value, then 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.

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 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 COMException exception 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;

   // Assume the Microsoft Excel Worksheet object is initialized.

   // Invoke a method that takes no arguments.
   workSheet.InitArg();
   workSheet.Invoke("ChartObjects", autorv);
   chartObjects = autorv[0];
   
   // Invoke a method that takes multiple arguments.
   chartObjects.InitArg();
   chartObjects.SetArg(xpos);
   chartObjects.SetArg(ypos);
   chartObjects.SetArg(width);
   chartObjects.SetArg(height);
   chartObjects.Invoke("Add", autorv);
   chartObject = autorv[0];

Currency Constructor

This API creates a currency Java object.

Syntax

public Currency(long value)
WhereIs
valuethe 8-byte CURRENCY number

Get

This API gets the 8-byte CURRENCY number.

Syntax

public long Get()

Remarks

Returns the 8-byte CURRENCY number.

Set

This API sets the 8-byte CURRENCY number.

Syntax

public void Set(long value)
WhereIs
valuethe 8-byte CURRENCY number

PKfzYYPKAAOEBPS/title.htmk Oracle COM Automation Feature Developer's Guide, 11g Release 2 (11.2) for Microsoft Windows

Oracle® COM Automation Feature

Developer's Guide

11g Release 2 (11.2) for Microsoft Windows

E10591-05

January 2011


Oracle COM Automation Feature Developer's Guide, 11g Release 2 (11.2) for Microsoft Windows

E10591-05

Copyright © 1999, 2011, Oracle and/or its affiliates. All rights reserved.

Primary Author: Tulika Das

Contributors:  Neeraj Gupta, Janis Greenberg, Eric Belden, Steven Caminez, Jagadish Changavi, Barmak Meftah, Valarie Moore, Vikhram Shetty, Sujith Somanathan, Alex Keh, Christian Shay, Riaz Ahmed

This software and related documentation are provided under a license agreement containing restrictions on use and disclosure and are protected by intellectual property laws. Except as expressly permitted in your license agreement or allowed by law, you may not use, copy, reproduce, translate, broadcast, modify, license, transmit, distribute, exhibit, perform, publish, or display any part, in any form, or by any means. Reverse engineering, disassembly, or decompilation of this software, unless required by law for interoperability, is prohibited.

The information contained herein is subject to change without notice and is not warranted to be error-free. If you find any errors, please report them to us in writing.

If this software or related documentation is delivered to the U.S. Government or anyone licensing it on behalf of the U.S. Government, the following notice is applicable:

U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, the use, duplication, disclosure, modification, and adaptation shall be subject to the restrictions and license terms set forth in the applicable Government contract, and, to the extent applicable by the terms of the Government contract, the additional rights set forth in FAR 52.227-19, Commercial Computer Software License (December 2007). Oracle USA, Inc., 500 Oracle Parkway, Redwood City, CA 94065.

This software is developed for general use in a variety of information management applications. It is not developed or intended for use in any inherently dangerous applications, including applications which may create a risk of personal injury. If you use this software in dangerous applications, then you shall be responsible to take all appropriate fail-safe, backup, redundancy, and other measures to ensure the safe use of this software. Oracle Corporation and its affiliates disclaim any liability for any damages caused by use of this software in dangerous applications.

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

This software and documentation may provide access to or information on content, products, and services from third parties. Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any kind with respect to third-party content, products, and services. Oracle Corporation and its affiliates will not be responsible for any loss, costs, or damages incurred due to your access to or use of third-party content, products, or services.

PK)PKAAOEBPS/glossary.htm# Glossary

Glossary

Component Object Model (COM)

A binary standard that enables objects to interact with other objects, regardless of the programming language that each object was written in

Distributed Component Object Model (DCOM)

An extension of COM that enables objects to interact with other objects across a network

dynamic-link library (DLL)

An executable file that a Windows application can load when needed

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

listener.ora

A configuration file that describes one or more Transparent Network Substrate (TNS) listeners on a server

messaging application programming interface (MAPI)

A messaging architecture composed of a set of common application programming interfaces that enables multiple applications to interact with multiple messaging systems across a variety of hardware platforms

Optimal Flexible Architecture (OFA)

A set of file naming and placement guidelines for Oracle software and databases

Oracle COM Automation Feature

An Oracle feature that enables PL/SQL developers to programmatically manipulate COM objects through the IDispatch COM Automation interface

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'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

PK܃PKAAOEBPS/preface.htm& Preface

Preface

This document is your primary source of introductory, installation, postinstallation configuration, and usage information for Oracle COM Automation Feature.


Note:

Oracle Database 11g Release 2 (11.2) is the last database version that supports Oracle COM Automation feature. Oracle Database versions, which are released after Oracle Database 11g Release 2 (11.2), will not support Oracle COM Automation feature. You can continue to use Oracle COM Automation feature with existing Oracle Database versions that are covered under the lifetime support policy of Oracle.

This document describes the features of Oracle Database for Windows that apply to the Windows 2000, Windows XP, and Windows Server 2003 operating systems.

This Preface contains these topics:

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:

Documentation Accessibility

Our goal is to make Oracle products, services, and supporting documentation accessible to all users, including users that are disabled. 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. Accessibility standards will continue to evolve over time, and Oracle 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 more information, visit the Oracle Accessibility Program Web site at http://www.oracle.com/accessibility/.

Accessibility of Code Examples in Documentation

Screen readers may not always correctly read the code examples in this document. The conventions for writing code require that closing braces should appear on an otherwise empty line; however, some screen readers may not always read a line of text that consists solely of a bracket or brace.

Accessibility of Links to External Web Sites in Documentation

This documentation may contain links to Web sites of other companies or organizations that Oracle does not own or control. Oracle neither evaluates nor makes any representations regarding the accessibility of these Web sites.

Access to Oracle Support

Oracle customers have access to electronic support through My Oracle Support. For information, visit http://www.oracle.com/support/contact.html or visit http://www.oracle.com/accessibility/support.html if you are hearing impaired.

Related Documents

For more information, see these Oracle resources:

For information about Oracle error messages, see Oracle Database Error Messages. Oracle error message documentation is available only in HTML. If you only have access to the Oracle Documentation CD, you can browse the error messages by range. Once you find the specific range, use your browser's "find in page" feature to locate the specific message. When connected to the Internet, you can search for a specific error message using the error message search feature of the Oracle online documentation.

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 Oracle Database Sample Schemas for information about how these schemas were created and how you can use them yourself.

Conventions

The following text conventions are used in this document:

ConventionMeaning
boldfaceBoldface type indicates graphical user interface elements associated with an action, or terms defined in text or the glossary.
italicItalic type indicates book titles, emphasis, or placeholder variables for which you supply particular values.
monospaceMonospace type indicates commands within a paragraph, URLs, code in examples, text that appears on the screen, or text that you enter.

PK!ڦ &&PKAAOEBPS/index.htmW4 Index

Index

A  B  C  D  E  G  H  I  J  L  M  O  P  R  S  T  U  W 

A

APIs
Java, 3.7
PL/SQL, 3.6
application programming interfaces (APIs), 3.5
Java, 3.7
PL/SQL, 3.6
Architecture
Java, 1.3.2
PL/SQL, 1.3.1
architecture
Oracle COM Automation, 1.3
Automation
Java API, 3.7.1

B

benefits
Oracle COM Automation, 1.2

C

call spec, 5.2.1
COM automation
invoking, 1.3.1.1
PL/SQL errors, A.1
COM objects
program ID, 3.4.1
properties and methods, 3.4.1
required information, 3.4.1
viewing, 3.4.2
comwrap.sql, 2.1.1, 2.4.1
configuration
Java, 2.4.2
PL/SQL, 2.4.1
configuring
listener for Oracle COM Automation for PL/SQL, 2.5
Oracle COM Automation, 2.4
constructor, 3.7.1
core functionality
Oracle COM Automation, 1.1.1
Create
Java API, 3.7.2
CreateObject
PL/SQL API, 3.6.1
Currency
Java API, 3.7.9

D

data types
conversion, 3.1.1, 3.1.2
Java to COM Automation data types, 3.1.2
PL/SQL to COM Automation data types, 3.1.1
dcomcnfg.exe tool, 2.7.2
demos
installing MAPI demo, 4.5.3
installing Microsoft Excel demo, 4.3.1
installing Microsoft PowerPoint demo, 4.4.1
installing Microsoft Word demo, 4.2.1
MAPI, 4.5
Microsoft Excel, 4.3
Microsoft PowerPoint, 4.4
Microsoft Word, 4.2
Oracle COM Automation, 4.1
Oracle COM Automation for Java, 5.1
PL/SQL, 4.1
Destroy
Java API, 3.7.3
DestroyObject
PL/SQL API, 3.6.2
Distributed Component Object Model (DCOM)
configuration, 2.7
definition, 2.6

E

errors
codes, 3.2
HRESULT, 3.2
messages, A.2
Microsoft COM automation, A.2
Oracle COM automation, A.1
examples
MAPI, 4.5
Microsoft Excel, 4.3
Microsoft PowerPoint, 4.4
Microsoft Word, 4.2
Microsoft Word Java, 5.2
Exchange Server, 4.5.1
EXTPROC
extproc.exe, 1.3.1.1

G

GetArg
PL/SQL API, 3.6.8
GetLastError
PL/SQL API, 3.6.3
GetProperty
Java API, 3.7.4
PL/SQL API, 3.6.4
Globally Unique Identifier (GUID), 3.4.1
grant.sql, 2.1.2, 2.4.2

H

HRESULT
return codes, 3.2

I

IDispatch interface, 3.6.1, 3.7, 3.7.1
IDL, 3.4.1
InitArg
Java API, 3.7.6
PL/SQL API, 3.6.6
InitOutArg
PL/SQL API, 3.6.7
installation
Oracle COM Automation, 2.1
installing PL/SQL MAPI demo
preparation, 4.5.2
Installing the Microsoft Word Java Demo, 5.2.1
Interface Definition Language, 3.4.1
Internet Explorer, 4.5.1
Invoke
Java API, 3.7.8
PL/SQL API, 3.6.10

J

Java
configuration, 2.4.2
Java API
Automation, 3.7.1
Create, 3.7.2
Currency, 3.7.9
Destroy, 3.7.3
GetProperty, 3.7.4
InitArg, 3.7.6
Invoke, 3.7.8
SetArg, 3.7.7
SetProperty, 3.7.5
Java APIs, 3.7
CreateWordObject, 5.2.4
DestroyWordObject, 5.2.4
FileClose, 5.2.4
FileLoad, 5.2.4
FileNew, 5.2.4
FileSave, 5.2.4
FileSaveAs, 5.2.4
FormatFontSize, 5.2.4
InsertNewLine, 5.2.4
InsertText, 5.2.4
TestWORD, 5.2.4
Java Automation constructor, 3.7.1
Java Components, 2.1.2
Java Currency constructor, 3.7.9

L

listener
configuring for Oracle COM Automation, 2.5
loadjava, 5.2.1

M

MAPI
demo script mapidem.sql, 4.5
PL/SQL example, 4.5
MAPI demo, 4.5.2
Messaging Application Programming Interface. See MAPI
Microsoft Excel
demo script exceldem.sql, 4.3, 4.3, 4.3
PL/SQL example, 4.3
Microsoft Outlook, 4.5.1
Microsoft PowerPoint
demo script pptdem.sql, 4.4
demo script pptsol.sql, 4.4
PL/SQL example, 4.4
Microsoft Word
demo script worddem.sql, 4.2
example, 4.2
Microsoft Word Java Demo, 5.2

O

OLE/COM Object Viewer, 3.4.2
ORA-04043 error message, 2.4.1
ORA-28575 error message, 2.5.1
Oracle COM Automation
architecture, 1.3
benefits, 1.2
components, 2.1
configuring, 2.4
core functionality, 1.1.1
demos, 4.1
installing, 2.1
introduction, 1.1
Java demos, 5.1
Oracle COM Automation Feature Developer's Guide, Preface
orawcom.dll, 2.3
orawcomVER.dll, 1.3.2, 1.3.2, 2.1.2
orawpcomVER.dll, 1.3.1.1, 1.3.1.1, 2.1.1
ORDExcel
PL/SQL package, 4.3
ORDMAPI
PL/SQL package, 4.5
ORDPPT
PL/SQL package, 4.4
ORDWord
PL/SQL package, 4.2
Outlook Client, 4.5.1

P

PL/SQL
configuration, 2.4.1
ORDExcel package, 4.3
ORDMAPI package, 4.5
ORDPPT package, 4.4
ORDWord package, 4.2
PL/SQL API
CreateObject, 3.6.1
DestroyObject, 3.6.2
GetArg, 3.6.8
GetLastError, 3.6.3
GetProperty, 3.6.4
InitArg, 3.6.6
InitOutArg, 3.6.7
Invoke, 3.6.10
SetArg, 3.6.9
SetProperty, 3.6.5
PL/SQL APIs
AddRecipient, 4.5.5
AddSlide, 4.4.3
CreateExcelWorkSheet, 4.3.3
CreateMAPISession, 4.5.5
CreatePresentation, 4.4.3
CreateWordObject, 4.2.3
EndMAPISession, 4.5.5
Exit, 4.4.3
ExitExcel, 4.3.3
FileClose, 4.2.3
FileLoad, 4.2.3
FileNew, 4.2.3
FileSave, 4.2.3
FileSaveAs, 4.2.3
FormatFontSize, 4.2.3
InsertChart, 4.3.3
InsertData, 4.3.3
InsertNewLine, 4.2.3
InsertText, 4.2.3, 4.4.3
NewMessage, 4.5.5
PresentationClose, 4.4.3
PresentationSave, 4.4.3
PresentationSaveAs, 4.4.3
SaveExcelFile, 4.3.3
SendMessage, 4.5.5
SetBody, 4.5.5
SetSubject, 4.5.5
SetTitle, 4.4.3
PL/SQL Architecture, 1.3.1
PL/SQL Components, 2.1.1
preparing to install, 4.5.2
privileges granting, 2.4.1
progID
COM objects, 3.4.1
program ID
COM objects, 3.4.1

R

return codes
HRESULT, 3.2

S

sample schema, 4.1, 5.1
SERVEROUTPUT, 5.2.2
SetArg
Java API, 3.7.7
PL/SQL API, 3.6.9
SetProperty
Java API, 3.7.5
PL/SQL API, 3.6.5
system requirements
Oracle COM Automation, 2.2

T

TestWORD, 5.2.3
TestWORD.class, 5.2
TestWORD.java, 5.2
TestWORD.sql, 5.2, 5.2.1
troubleshooting
Oracle COM automation PL/SQL errors, A.1

U

Using the Microsoft Word Demo, 5.2.2

W

worddemoj.doc, 5.2.2
PK-WWPKAAOEBPS/img/comdg001.gifFhGIF89aղ867($%JIKccejjkqrt₂RRTDBCz{}[[]ڬҴǣtux~¼UVXlmp|~wy{efh]^`FFGnprMMOxvwHEFPMM.+,301쏍=;<`]^WTUolmhef~~A@AIHI# ghk_`b?>@WXZPPSjghROPrppZWXc`a!,`uxYYT-Y=1&(&25V`ͥfI6~~I]-Z"\\]\~ SGb 10HlAŋhQǏ A8@\ɲe q!8YӈO#5B Y:醧hР!E 5G`cʗ`ÊKOL.]2hpB!D" #v|Ō %,pc ?X 4(apa &KlA ?)ˊM4b #nʥ;* Xa/p$PqȒ\`K N6M0A "1x bڷsPA`= gA8ˡX@Ct(d$wWy{Y|qjWh8B 疃z[pסr()ƨ"/#zמH&~>8\v'F*xJBބOZx|mx(t_ia`2dJfƙ%w&hy M֨flRr墜vjZ.`h:ZzꫢLh9# $"k&6F|"kΈ&NjX $@L+k/"X;`(fj+J(jZ­)( Wlgw1<6YPb譮* , <@-Dm?1r'Kjg˂Z ۬5)8`-?ELsqF|)Znmw(]|m6 1&׊v<2g}W޳1dSO1'\7c"嬷.A﫶ӎ,5.~u㧧.oаND&roZ:'۾ӆC:0ը ncߺk'^[Gm!vc^P6LtS_z5. ~̠1j ]ܨ8ς :`1-(G` hx-18 Y5GW(V(g8(*ʹ`Œ054$p%@ eG|kE;ҭ4b( ,a;@(` 8<&P? =Cf !`RG<#$VD۝F?9N6#df #@0 n8~P@j l ި ?`p j0΄@h  @j-/wC;B &J#x=(P(4@ BXЃ/ L@&@lFj@Bpl=nzM L~.l3 vf ~v<D<ŝ =+"@D@,@QL `"ÖUL/`GufEfp@gXgkC t38@ lg@_͝}A 7Y P~`:ȁIZ&Ј jAU^JЗ{-$3 a0 `;A^ag .5 : 8$4d.x n`g.@~ 5cWx?؂V  PhtC@z5T6 Av9xf4@.8BczxA K=zP! \4)^;eJ†>B{f! n@qY^;"P!!Wt,ͳXt?xAv_W=z2я;~يyD;Z+ɝ~x3u Hߚ ߙ0CX_p U Te 0} ֠đGo[6D 4&t -\0Y 04H?Y9pT9Q R` s8 r;2@89S"ƛAL*@-@Ea 0 `az@B8  U 1 Sn%Y  '&7yx FOқ~ O%PpX$A ,(aP2 ALHxrs.i.țh`HX-]X 418wgitϨ>`@l 

3;P]>#@<  _W@W-` t`Rp1P_0\PQY|  /p,pdc }0GE#3,g&6_pe@53d@S!p47(-0(xC ]cpc>P }0 0Hdy@POPy{e 4a P1``%`5\tX ZY~0>@,dž=`X100Ip/58`'/H4@GedidYNw tِ:@ p yxP[P Ls02}H`KPlPx@T 0E^chu;j@(!`"!fM8b@ <@&C``sdpCGa%)^A0[}&~UpTK@XEpPZpj@4C@5 PwИyUP-{ vLwXl sג2Jz:3h8p=` ,P]5 P`ݙW0;E GA WAPUF@Cw `5JSA Ե30+7 V4 W &`")0//;`& 6+i"k8pk`  3db.P_,0`0b\;#3g(ņ.o60P^ER-p;F V4 I.0GIG F0 0/8[)(6@XPn(O0Sʴ3%05X P`l$)pdVSg30;Յ= Aq3<5P ^`i_@VD)+@Ε~F bSWuY2-g%P pR hPS캮2E`[;#["#T.fjA0Gb)F)"31!h3,Xp6~n]0$G0 64`*G0~;@.0ASL'y^y\/QPFS @p! V;?N\aU=3]%r?p39O@v$ I `*S{psft pL0m qPSp0+ $Ip}`d~n;k 2=C3233g; 4`XoD b|[sQGG<\|jTcS6 { ‹ KpAY”W77p~x9[6wU>@:0D\F|HJl9_A>\20 >Ps@x 72\0PG$S0cWve Lf7x&Pv|xz|~Pu@)Y{7pvwk[d hjƞtu42Sʦ|ʨʪʬʮE0ơP NH[mg[wL `vɜ<69\9#ʤ\|ͨYpP|o 0qNLLpvЀ[0 dGxBU\<0qԋ4qRk9<ؼ ХR0LՒ#3S\ yl m|L. @vW`xT 8x4@BO: =}H  ; *wP-WnXK`\ҢJOw`S-|<L4g@8^`=C[ o]hB~B٠ XDEP0tcd `w+m`XBg֞/s0r `Y:47!0@e~vI #<FW? , x5@ 1r>N> n`p@vYU] Z@vRPͭ ` әPBSд`4: (jY Xhu5(d`"@C?P7cPG\^`bhT_pL] ]k^ 2ЀO=y`A(P$pA@\lU ``mK@\E3Q XPn@Gʳ`4Pey>^~븞.AK0&83UpI@vQnpU@cW qp z^VC@3&lT(3#`=[a^~ BA0c ͅVU.P:GO(PK 0Ģhs50e > kYx0{H \ 4FH%lB+]v G_[;#f M|نIm@6 ``b?d_f`osqXjY@^`52`'Ù0N |S0 ĽTBz 539PRP.[L!@x7E1~??:GV^@ԍ5?_ 070Y6`., !x]+ W0d.BF/ bx!~M -M~1]`33)>~-6~ [BDV)""(7 FZ #%@cG,Xٮ`"z [[Ywk_-ll-W J{ *\ȰaC1,8 *V2@a€G1BIɓ(S ($@$  *Q,X*}6`Ph݊8Sp%́h<Aq$M Bx@ކW6"+^̸ǐ#)d:R\RXs=,. p#`)L(A(aBkrpY\SL@`K+qZ@hƘ9ӫ_Ͼ(.3 to'IX=-ՆHP4D2B | | QLЇerPl`"w<`7)و"gOnPY!8K ]\(]hfXEBqL  lDG}R]6x%*6 BZ|:i1ELDACQX׀ tE  kj>\ [,qEb@GFpPl}Q*::j A:xAA)0dЇ&Za۞CRP t/rb01syAAE[-W=`fر:@@A La:DPLQǛ,_@&  TX^Ny@Onq=s@sS佇D?9C 2Ȑ ^hQ& 0BglNxlXIҨ&|QB Lvqqt}ؼ3*:ḻJB[ pc\qZY X "0@ 0G YzG0 bP&! ?҆6 1L"V]:)[r':< NC9 @Sր-L *lA%, "v0T# b `N4 7[@MYB@6 LA"S)-eA Q/ p- m0J&xB;@A+)8 :s2 /fb84! 8@08n Z@WtH т%(apd< .0*<@w D( r1 DTR)Xf, `0󤨃^NCu0:̱Y@ S("JG l%dB;, l\1 @[Z?%0⃎[A,A`&z0x}Mؠ# PA8 MPDI](L ĩ9!&f hGKҚMjW`[䖪 @:\{pB U& XC6tHmS dX L XYBpp.-Cmj5htAK_\ 5 'xJ4KYt RH@;'L [ΰ0gB%`q8.p+0 1bX8 %A`!R"0j8B @ R*P@@H̵ ~g03i9@8cm40gN8Ϲord+(@']-D]9} dž H{`NhOߔpN=u|p) F`f3Ӏ78B88]O'O[ϼ7{v0)' @)!D@!'B>PbD` 1O_Jn&8Pp >J(L_Ұ` j0 O/7I[ә0.?E@' M!!@~Tv׀'W~@)@,E`& u&B p D;`6 |( X6x$CzPG0߰@`(:BʔX0for0/@,K-0 88bH|Kw p 8{Uy _? 1"Ve@M&c'@' +@^A%eЅ^(4XӉ8XxHcbGf\Oxt-ux0CE`2 f1p8']e0=pm@f1HEkpVZ8XHZpp[lpCF1  pѵgЈ!b X&/`A!F@R,4%0@6鈉 hӀE@B9DYFyHJL)[.5%7TYVyXZ{!\ZY\IWT?1W 3Zai)&c'6`)@LU]VYh`-@ f@.h긎: [yyYnSyY9ZSc[pp[VP}HuYR"H0O%c`q`Jytї!ȕvܘ<<) 20@I陠510h;S7y%ڡwq h/ȥv@ 0S|yP>0LP"`D;I+)+Xb&bHhDh&V5y]x MZ~ ©mphIMtKK@VPgq|J/ P@~YYpI—(I\`w'O6ƟUz04Y8 d= +Bګ: rBXu^iۙj3u@W4>&"zA*C:EMcOFpg`^YPKb~J4a-8Kz1+  iY@CUV0a-PY(05w|pYzd3`ȩ  d-V \_Z&<5 k  j1nr+hPu+a v2z|! k Fv0c,/kD#p``zp}]I@+I&u?0ILPrEM _hۥy연aGceKS !b .0AP:=@/?Pah@GEP4ա `[ d: 6_`Op"7 (` jpR{h[J+| Ǜ 'P &1p{ :[^@l,P:\p"8* 'PjyYP0CPP3<=g,j60!`B(ܪ! $,&|<`$&/ 4l8l<=l?K5P[K*O Q /pi>z`K. `3"[G/p@"[0#7p YڻZK#cǀ N$\1

{DlĜj P>0t` \`t`͒V,MH,bV!T j&[X`Y@PPsǫ{o%Gߡ!z-e-8m!ײ #+ ΋L5| ɒΖ<ę I\Ͽrt[A 9T{ \ m E ,p1x cfP Bcl+)7d_;y @Xa^0$9m\BMԌ\HKM,ĘG՟LգiY{.L0-P΢>`Fe*`[[~o}q$[$#@@1PRj&%*}ؤ;[xQZ%P`YB [(m~00\ԍJήԱ ՝\L|w_*SSs߰ +wcU7k LbU@#`Y)[$(m߆ëA@W-01&&JDA3!Pa3@2@?o5ȥFmάN-,7cV pWz5,t$^HC +b./XA 0? _ epy,{&%<a, 7<xu ė)Ef@/,RሎኜG:Oɴ=%h.:c0%{g_tX X{Mp!M'p.MׯOp| <&\~ؾ#P;~E@ @ˡG`-  3葖 *l?N<ɏ#UmW@t7\3P]B9U0xpN&y&+0*n`P{VگWkԮ:G0^0Cp~3~A'ڄ@!0F~pj/`%`0F=利".ϕ' 2KWP,wmE P[[KsHqNLU L!~~ `bb-1-]\\+BXX\bXMMOOd11d__-f6e!5" j)]~$3~,)^MR(" aÓ D1B|"J7`!dkE.`F0x b 1 .A/p`a6РpA1P ,PA pF<\=`ř*ZYCI23AI& ,󣊛/|)0j$Q&U`R@K0Ä&>2tÆ V"8j1L—3ǒ1kLā\2N K * 碆 ^3cLq؀BK |"]0A'HNEeQG4RI'RK/4SM7SO?5TQG%TSOE5UU\\6kT$H` 5VixHh10 lD6I%Y&B@[e0X@(`EGPpF "4-HBJ_0 p!Ԑ_06z ̡rƢU'%N~ ,8a0I/ .Aa ~K FaÑG DI(ĒK0DM8ēO@ EQH)ŔSPIEUXWr1EV8PAK0!`a[yBZ[݁DtIF$e<K0D.D X"@ܠxxB.$&@g$Fa G@> ,Pn-L`@=BHc#` @ j "[`0`ĹML0= @8Hmpp\$S>L@u@8tT*C #V;59l&xt 0}2\ TybDla~!H)b@CiL@o@@ ` &PpC4h 0 u|]@urX: 1촔 Z`;*`;ᾧEͮ.Θ1|2k89grDЖiXk9bT R Xtp~+`+3,`2hj `KE_@GPDF70l! P % @B ˨ADe#*(@AS? 9ȋJp#K@C hY氪 C%k&-Mj@X}p@D&P VBGL2c 8`3 R 8,0C h z -pC `@Ёb4j5TP:A *@:x H#@Ar mP rE~. BS[ )Lbn>5M4ps t0 *N5\1Mꄞѕ,-+p'. D`|CbH@lcjl !jf) PNlS B0M &\BE]&uӠX$ ]0d*f9oZoynA9@app@0Kkeear[NV؆YA`Ё\p D8I~\ e,2ܯb}$~Q@ܣ[`h "?ȀxzpaC  45`4CAO RU꾪{fۼl+glmp{7!1C` qn0b_ Opy> 0@D( @7; ! (ep4%c`p_F-`V &B0~`0 ?0 @07F0P 7 6Є\,@0~56UcU&^hUv^m&V^rF5 7a 3n:` cqh+G;L7pRL`tL.fp3PPW5xhxAB:@ Y2~#~Y7`009 &0=p~QB1~`Fv]eUF^jU^oFV6 AqpP;PG@2&\ E1`X@T+20H8 QDD3chx6,p`Krp3X% (P@XK~aW V ^fUV^kV^pVVvd 1@`>04;@x` P`+@%=ML0hp"&3X!`eyx)Y,(0{%P7j0`8&p?9@pH ,@7 ^ SEVipgǕhw|b)ypQd0ePP y20@:H/'B` `r`3I @,I(2ւB'4aF>p5 7aBj8) G`LJjp*5(KI Wyqwוxw}c9`i,")>@K~#zuR ))PFpQJIJ36Pn "57X`y~@dM`v"_$'T)Xrw~(p Lih@T:Yz^BDI6KR 2HEP-Hn:pӐY[uߺh~>3.)RpA/Ыc`@3_@[g >-FLbڦ4g:J$ fZꪎtwp~3+f%~5 z:1!ac2E`#@%Pb[ 6  KA%{*$nG,wHH*jO\P%_ &`-@(`U ; a&%@`ubpn.`)a;v f ')۶8wpK@J: 5Z`h6b6Yp> Jd ( dpP6 se{*:7mBn`=Ydu2 ``p@0 zv0qB` X0 z'1߻ 0 p _Ksf@8j4+ j[B0X:ʣٮ/;"DP2<#UdնN -\p $| ,$O{$FP#!#!B_6"pd9>q@F2h  Q>Bsr5U] '@Ab|B\O?M P'gp )! +#Y(Zr<DZB : ~02=t׳%̂v/2 9P)3-!jQq:P`C:ʙ\;Vxc"Mp"@BY(_P6`@(ƫ(O<(p9@ Pp= @p;^010&^$A`v$ @`M0df}gjknr=,3 qԵǑLX|#L00CK0)? 05NR )K6E׸D& EП]p_@h X)B!գq| =ݧ}+ڭݣ˽ +[ Ƀ@ K+p| ib0Ec(bA P>!c#@GЊ-`nk/ U]`0@pCffX =Pg ,ݍv:<>@ޝ~ ;&6*= Xp" PdbP>%` `[@(eP5P^:-B ^`  p7 `*5Zf 0tX<难$xQF>bV.aK  pK@-@K0`7@| [`B>]30R pZoN3Ep!$`(`?0=P;xv4 ~=\ hLjNjP3p _0)(]0H0fE@pHGpF  P/Bh7õ ;P.P0n=P.PN=pO@*y0qpSk;9 b- ]]8,A#/2;M#=3#,,<:-:1//(f6e6gG )\M~ ~[BDjM]D&2<.%/??/%.2-D]7cN|HAalf`*[6H'1bh<%C+$dd ELB g$zp3XpfL*tiKP<իXjmm[oQ@V:KfXvA,8E aBD(p@ɣ,R#KAɖ @Y`(5ʐ B܄qu'O<١drSg-0WJAlbb , 'KNuطv歘%2gaD #Q^ RhАB{53@~ \DGS!ݏ@ɕ6}#pTH!BۓPF)RrŒ:0dm8Q `I`Al8nb qp X [lb~)0 iZmHh駠^gjꩨ PhpjiL: L,atbPÙLԐ- $͹aw(NDFA(B[,Q %0b(R)+D,=kN/ l/0A ܢiDj5!lDDlքC9h݆A-&K@D oL7PG-TPDA$Ye|(Y /̠ &`   Q4/0D;B+ +Wل w fz$h664nz 8Irޔ ḑ>-d00 wA0V \SX AxC{aFJҒ(MJWҖ$A/h 8i @@ PJԢ" P  "`XժFX1 X@.mTu}hX}a Y;xͫ^׾kְqP@@d'KZͬFY"8 :R0ghZ{aB ꋭ 7,M.!  @YZ pXB@4  /a]_x2y-2` M@0G;'L [8OE( (dGIx0,P; a/H Ōl- C doNZ0 ̀@ L$ H> bJX͈-aX@xQ)tҠb@1HWVհQm, B P0>XAE` r%P; b`^i uMrgE@UtQ(A2va%@A , \]bB;|R0A&N[ϸ7ahz C ׃wq|}.'a HN`h@ f(60yED ,ta|a`;A ePz/`-LK)dX ox|&3n}kY}1%hD j#IX4O3C?57„)s؂aDQߥW" O/P}UArC \]`X=,zma, =`H`%pL@ ,`AHPFLdN=PqЀ8Xx7D3p"{@TX u_'; :r @)pPp30R2Y!`j?c@ li k|P`PicP~Yc\؅^`b8d<[ Qt|1mqoek`@!>+0[% !V!c`0Vχu &< Y#& c 6&4#WYs G؊XG1usT\*yp u`(YWg2p&0w mmӸ "OVv~`G1;YE=g XH12y1Fh7`Lfxs 0ua`@$L@wUL(.Wn`&h~~yEX~Y^P.`cHsOvT3 CD̐ @sm@e& 40^,PPi})tz Qi+>i)Y &`%omxrpP0P֝GK@u>Z`E+06CPE h;PA@tс t bɜ /?b  C@$ Jn0o0ZQM 0sV @PPh `[@Bc5%)jDv`O` 7_`z>`]7PFm`?}ФF 'G,`}HJs+VNPZR*t@ \v?{*tPeI`;zAJ kR t!zڨSH:oZl_ - ЍL t3mB=|m@@Cb`?`wp0E4ʺӬ[K8d?m03ipR[]8K:9@x QJ4y  l[PefpsW@A&{qw -0QpT! `={( 25 LVT p( yr`>Q kpWm&KʴEbCLЮc<I'oP;@h k`h[N`t@w經#c`#JjJ{ Pi`psbP+TH:S`YPlr}H G K+bU{s౾@eC:f[@-u   xƛ5Xw =`,=l~:ʠ14yfLt~5hGp=`ZP~~) ( PD V.~k~ #`\n4`LfçVk <~0k_e BP 0ed50,, ,8@3]P CI3 FV&q Nru  jips;s+ )@/v9P5<~@9E~@3K. =@pCp3@OЕ7 8PX@^<0@$^@]PF@/v+psS@'p&W ~(L_`s`)0 a 3PjR^AhFPr\<< 004@A=4&P~0Uil{S0~w ;@mtG[5a /=0  `B`,0O&&~ B]cP* `dA |0-7w|@QTwj =Hp"!! -ǧW' J3}~>0.@S6gXt' hE -`v̓ hnWpSP&[ ՞`QL]Ҽ@ͬ -n+FT!\ 0Rq u p|~X7ICPLg?~A C_\@eFPvoz|~POp0ǫLeDZg`m Ig; h?o_ =`fA8;G.%9@/REU 0Ep+1H`P >YkP+kPF`Ѝkl+9O/!\p& b 3A%9$/,F@ahG EYP[?+]\~ K[Rl!c[ ~>b0O0[BD-Z"\&/X]'D"&(1 ;< \ A/p`TKH4(Yi"@-"Ǐ CI)H|lX hxyG 'G@z'9t H]y_ L0BÇ"V*B#2Ĥ۷pʅ 0bA Xb CH.9pL14d-mhqʝf ?+ʣg>~ $hB!J$[QMO ˼O=0@.I;$O\D@V@!/A _9 P5D6`A! Fpv՘VTjGlAUTY[VqXbMTq0Et,⋶`C"(`dlA8Ё@C 6@0e /L@7а4|i~8pA0!CP&14n  )jF0D ~ìB1 B1^ @@jggu^S=ۧӆ(赅f{+,2l`fC 4` 6"!*AC1)Dpf0í.^B;.BԊ8(m-mw/ @KXx5B!(ل ;` ](PC(@) P 1 %`^t*q١V;"&mt-]?1@B:t3p~A~ o!`C@F B`Mi᝴'Z*q|xsl3) n2vdU-d]zvK8[(Xx!4~8F"f+X(@,wn#eX%A^4#$6f `>;m[` Q:ڑ[x $Q+XX,qc F"| 4.Qk]!E@Lss( IIb<%6imQҎ<.kJSYt%aC8Ps-y\B)#Vn0|9P2t&4Yi.ct5_Czɼ!8i7qp2g YMun""?Zx>^ghNƑDFeOӡU0Pw^ܨJQg 'bnJw0ULl Ȭ"O"tAgDgJHbjsT*S:A>C99Ub=&Fնũ`dT*ufNz5.kɳ4AX{%OҘ-hJY<cl:ZTZjm!7gZ’kjWXp%@Mr:Е@@ ?* KHzٛf5 o+䰀\ z|KWLn%+ tUz()VFE0'8a 'L [ΰ7{:(6[t!8|6Anp7A 5B D"`7HN&;PL*[XrW@غBpx5)K@L KX\@ 5ɀ6EFBЈNF;ѐNt ?6xu#`U V7 C@ lCh@'ˑMb'z\X fЎMj[]8 v^'9b8MrNv`@wݞp2(SomOk$ P8D&>qX3ȸ7_/4 `H{ 0YHE j.A1E)aCZ  1@p aX4U< !@ @A=x_AB tȺUއ dP`@i4-0( Ȁ ػ 7r ǥ!b^0p@X .p< `S1C6O4@ ;Џ|4)/( @&Oo~g ؾه=x 8X:Iqy@sv؁ 8LPw&b0284X6x8(E*؃+326Dh>BXNp@hFe11F'"#Pxh1'P6zXo1~0p3 ^8XxH4! X&/@P (8Xx& .lfԸP HЍި0Px긎؎>(0"$_L^/9 ȠX0 02Ј9 `07 PE@ a/0A8* `cA@h365Yp7PCj`0l` j%A+Y`XZ\ٕ^` P<93 gГ9P0^0h PY\P:p&(`~9Y(|"P @@d09`}^T+ pp9w9YyE' "s+x !K~@ƙCǐ E`yy7p G) . ~Y(i ٹ(@9oE ,` (PF&穒X}o N0 b2r >`{\Tn p.3#GhQ[` [(A uz  K 0p Kq{8(&x, tv[  kz`q  tL-`[b UpȚŀ8K.0 }PE_ s\` Xn[ ZnPyV-pLE[p q[ qʩ9G`S0G L:zs`p|L pK 7 pzpwȤ"`[P 0c0c:"-=aު-z y: PWp0 PPP b09P P9(P$?Zx0YPб[c0W@lp)XвLb G栜Q0.2 9=-ڨ[0u !\P_0{pe J6~ p0qJJ.jP G|;p xSy4+ Ibp+ vp oP{ }9,UPW0OU` k )rо+ pyPڬ܀u  ѣ ;PKLnKhFhPKAAOEBPS/img/comdg003.gifSSGIF87aX?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,X H*\ȰÇ#JHŋ3j(_?9rȑ#G9rȑ#G9r1a~8rȑ#G9rȑ#G9rȑc~qȑ#G9rȑ#G9rȑ#DŽȑ#G9rȑ#G9rȑ#G  <0… :|1ĉ+Z1ƍ;z2ȑ$K<2ʕ,[| 3̙4kڼ3Ν<{ 4СDghѢE-Ze~-ZhѢE[hѢE-Ze~-ZhѢE[hѢE-ZhѢE-ZhѢE-ZhѢE-Zhљ+ZhѢEmٯE-Zhі+ZhѢEmٯE-z0~|E_ѢE=b>obE-Zh|>O_|/߿߾|˧߾|/_| H*\ȰÇ#JHŋ3jȱǏ 1˷|_}#o_߾߾/dȐ!C 2dȐ!C c>+o_>~70߿| /|!C d~B 2dȐ!CO`>~'P}/@~/|O? 4xaB 6tbD"E)RH"E)RHb|'_>O|/߿|O߿|߿}G"E)RH1b~(RH"E)RH"E)&/_?~'_>㗏|?}?}O_>}(RH"E)FE)RH"E)RH"E)RH"E)Rد?$XA .dC%NXE5nG!E$YI)U,/_|.cɒ%K,Ydɒ%˕w1K,Ydɒ%K,Y70߿|˧o|˧o|'0|˧|dɒ~dɒ%K,W/߿|o߿}ӷ}/߿| ׏߾/K,Y^K,Ydre|_o`O`>/߾~,Yd_?,Ydɒ%˕ o |`>__/?$XA .dC%NDد?)RH"E)RH"E O߾|o_>?}H"E)R(_?)RH"E)  <0… * <0| ԗ/O_|ӗO_'0?/_|*TP‚8`A&TaC8`A&TaC!F8bE'p "Lp!ÆO@ DPB >`>$XA .d0a>~ H*\ȰÇ#JH"A},Zhq!?}-ZhѢłYhB},ZhѢE-Z|E-.ϢE-ZX0?-Z\EhѢE-ZHP?-Z\OE-Zh`>-ZP?gѢE-Zh>~-Z>-Zhb|,Zhq>~ϢE-Zh"A},Zhq!?}-P 

~ C 2dȐ!C 2dȐB}2dȐ!C ǐ!CO@ D? 4xaB ǐ!C 2d8P? !C 2dȐ!C 2dP>~ 2dȐ!CcȐ!C1d0C 2TC 2dȐ@}2dȐ!C 2dȐ!C 2dxP? 2dȐ!Á1dȐ@}2d!C p`> 2dȐ!CcȐ!C 2dȐ!C 2dȐA}2dȐ!C ǐ!CcȐa~1dȐ@~0? 2dȐ!Á1dȐ!C 2dȐ!C 2d>~ 2dȐ! ~8`A&,ϟB ׯB *0@'p|8`A&TaC9t(_?:tСC:tСA}:}8_> H*\Ȱ!B}:د?:tСC:tР>~@}СC~:tP?ׯC o>?O@ DPB С~9tСC:tСCs~O_?}/>˧ϡC9t>8`A_~'p "}8`A~ /?$XA .d>~ ϟC:tСC:thP? +O`~oo?~:LOCG? 4x߿? 4x?O@ O@'p "Lp!ÆsP`~:tСC:tСC9th0_| /_ aB~:tP?ׯCӧ`> ̧o~O@ DPB СC:tСC:tP? 7П>ǯ_|8? 4x?~&L0aA}&L0_~&}8`|?˗o ,oA4~~ H*\ȰÇ#JH"A},2엯@}O|_>}g!?}-Ϣ|`> Ǐ?$H0_~ ` ۗ | ,O ,X@}8`A&TaC!F8bEYlO_|/_>~˧O`>g!?}-Ϣ|`>ǯ?$X> ϠAO`>o_>}/O_>~ۗO@}3hР4hР~'p "Lp!B(q"C}(RHq"?})*"|`>'p "4_„O`>}__>o߿|K0>~ &د?$XA .dC%NdE)N䧏"EO@ ߿ 0@'p "$_„O`>70|7| ̗o`K0>~ &د?$XA .dC%NdE)N䧏"EQ_~O} H0|/|O`>O~/| ̗0aB}&L8_? H*\ȰÇ#JP?)ROE 1_~( `>'p "_„O߿|O߾ '0߿| _>O߿|%LP ,h „ 2l!Ĉ'2Ǐb|C`>GB}(Bׯ_?0@ H0}/|ӗ/?|߿|_>&L,h „ 2l!Ĉ'RHP? `>,Z4OE0_~o>$ <_> &L0a„ &? 4xaB 6tbD)V$ŃO_|O_|˗?/_>~g1!?}-Ϣ|K}8`A~ H0a„ &L0aB}8`A&TaC!F8bEYׯ@O@,h B%L0a„ &LP ,h „ 2l!Ĉ'2Ǐb| /߿|˗o`˷|QTO~GQ|! @,ho>$X0>~'p "L/? *TPB SPa~*TPB *TPB *TP>~ &70?~/?~˗o`_}'P ,h@~0@8`A˗/? 4߿ H}O@ D`> *TPB P~)TPB *TPB *TP@}*LO} _˗߿~/>? wП>П `>> H8P}O@ DP|.\0… .oB[p… .\p .\>~ ̗/>_>~/|/|ϟ|-\'p "$?}8`A˧o?"D!BC!B!D!BC~'p "Lp!ÆB(q"C}(RHq"?}'p ",?}8`AB"D|"D|/_~_|"D?}8`A&TaC!F8bEYhB~O|8`A80߾? 4xa>!D!B!B /_>_>"DO?$XA .dC%NX>~-Z(,h|gP8`A/@$XA .C +>~/ǐ!C1dh_? 2dȐ!C 2dȐ!C cȐ!C 2OcP_> # ? 4X߿,h „ !CǏ߿|˧ϟ| ǐ!C1dh_? 2dȐ!C 2dȐ!C c`>2d ?} 2o> 2ϟ? 2dx0? />/_|/_~ 2$Cǐ!C 2dȐ!C 2dP? c!C ǐ!CcȐa>1dȐ!Ã1dȐ!C Ǐ!CcȐ!C 2dȐ!C 2TC ԗ/_?/?|ۗO߿O@ 4OB"D(P?"$ϟ?"D!BC!B"D!!D`~8`A&TaC!F8>~ϟ|'0߿|/?Ǐ}ؐ>Gb>QH`>)R8Q?)RH"E)>Ǐ| ̗o__>70ņQP?"EH"ʼnQH"E)RH>~O`/?~/|'P ,h`A~"D!B!D!|C!B"B"D!B? 4xaB 6tbD)V$ńO?O| ̧?~珟ŅYhP?8`A_>'p "Lp|2dȐ!C ǐ~1dȐ!C 2dȐ!C *Ǐ!Ã_|Ǐ_|'0?}/_~ &䧏!C ǐ!|cȐ!CcȐ!C 2Cǐ!C 2dȐ!C 2dP? 2dȐ!Á1dȐ@}2dϟ? 2d`> 2dȐ!Cc`~2dȐ!C 2dȐ!C ǐ!C 2d8> 2C !C !C 2C,h~'p "Lp!ÆB(q"C}(RHq"?})*"|H|(RHq>~"E)RH"EQHD~(RTEG"ŃQHD}(RH"E)RP?)ROE 1?(Rx0?)RE)RH"EG"EHQ>!EG"EH"E)RHC}(RHq"?})*? 4xa H*\/? 2dȐ!Á1dh_? 2dȐ!C 2dȐ!C cȐ!C 2OC  P  2dȐ!Cc`~2dȐ!C 2dȐ!C ǐ!C 2d8> 24П 

~ C 2dȐ!C 2dȐB}2dȐ!C ǐ!C8`AO@ DPB1dȐ!C Ǐ!CcȐ!C 2dȐ!C 2TC 2dȐ@~2d @,hA$XA .$C 2dȐ@}24د? 2dȐ!C 2dȐ!C1dȐ!C 䧏!C 2dȐ!C !C 2dp>~ 2dȐ!C 2dȐ!C 2$XA .dC П <0… "? 4xaB 6tbD)V$`> 4xaB 6T? 4xaB 6tbD H*\ȰB~ H*\ȰÇ#JHŋwŋ/^xŃwňxŋ/^x!|]xŋ/^x|]x1b~.^xŋ/^l/_>/^xŋ/^~/^د/^xŋ˗ŋ/^xŋ˗ŋ#ŋ/^xņwŋ/^xŃwňxŋ/^x!|]xŋ/^x|%ŋ/^xŋ/Z/?? 4xaB 6tbD)V/_>~ hѢE-ZhѢE˗_|,ZhѢE-Zx_|˗E-ZhѢE-ZȐ_|˗ϢE-ZhѢEa|Yha~,ZhѢE-Z_|˗oE-ZhѢE ˗}˷ϢEgѢE-ZhѢw_|hѢE-ZhbA~;08`A&T`~2dȐ!C 2dȐ!C 2dp |O@} H*\ȰÇ#JH"D~3`>'p "Lp~1dȐ!C 2dȐ!C 2dȐ@~3`>'p "Lp!ÆB(q"Ŋ |  <0…ǐ!C 2dȐ!C 2dȐ!C | <0… :|1ĉ+>/8p ,h „ 2l!Ĉ'Rh"ƈW|  <0… :|1ĉ+:/ӗ/_>}hѢE-ZhѢE˗_A$ <0… :|1ĉ+:/?gѢE-ZhѢE-2/?/_}hѢE-Zh@~C/_>~-ZDد?-ZhѢE-/?gѢE-ZhѢE_|,Z_?-ZhѢE-Z/_>ϢE-ZhѢE|Yha~,ZhѢE-Z_|˗ϟE-ZhѢE Bh"~YhѢE-Zh|!/_> H*\ȰÇ#JHbD~C/_>~-ZDد?-ZhѢE-/?gѢE-ZhѢE_|,ZhѢE-ZhѢE_|,ZhѢE-Zh_|˗E-ZhѢE-ZȐ_|˗ϟE-ZhѢE ˗BhѢE-ZhѢE˗B~hѢE-ZhѢA~C/_>~-ZDد?-ZhѢE-/?gѢE-ZhѢE˗ /?$XA .Dد? 2dȐ!C 2dȐ!C 2߾| |1dȐ!C 2dȐ!C 2dȐ!B~C/_>~ 2dȐ~1dȐ!C 2dȐ!C 2dp?$@ <0… :|1ĉ+F/?gѢEhѢE-Zh>?? 4xaB 6tbD)V/_>~ϢEgѢE-Zh"E (?? 4xaB 6tbD)V/_>~ϢE-ZhѢE-ZT`>'p |'p "Lp!ÆB(q"Ŋ|YhѢE-ZhѢE (P/?$XA .dC%NX1"|!/?-ZhѢE-Zhq|w_|,ZhѢE-Zh_|˗EϢE-ZhѢE˧!|YhѢE-Zh |!/?-"ϟE-ZhѢE˗B~hѢE-ZhѢA~C/_>~-ZDد?-ZhѢE- ̷/!|YhѢE-Zh |!/?-"ϟE-ZhѢES/_>-ZhѢE,"/?/_>~ H*\_? 2dȐ!C 2dȐ!C 2dp |1dȐ!C 2dȐ!C 2dȐ!B~C/_>~ H*\ȰÇ#JHŋ3/?5jԨQF|iԨQF5jԨQ?ӧO|̧o>~8`A&TaC!F8b_|,ZhѢE-ZhѢ~'p>}8@}'P}'p "Lp!ÆB(q"Ŋ |Yha~,ZhѢE-Z<؏_|ϟӗ/_|YhѢE-Z_|˗EϢE-ZhѢE˗o?/_>},ZhѢE-Zt/_>~ϢEgѢE-ZhѢ@~"E~ϢE-ZhѢEۗ/>/?-"ϟE-ZhѢEϢEgѢE-ZhA$@ <0…ǐ!C 2dȐ!C 2dȐ@cȐ!Âǐ!C 2dȐ!C 2dȐa} (˗,h „ 2l!Ĉ'Rh~È|0bĈ#F1&O@ /_>~ H*\ȰÇ#JHŋۇ~aĈ#F1bD`>'p|'p "Lp!ÆB(q"Ŋ/BoF ۇ#F1bĈ!|'p?O@ DPBcȐ!C 2dȐ!C 2dp_> 2d8_> 2dȐ!C 2dȐ!C /_|˗C 2d(_? 2dȐ!C 2dȐ!C ǐ!C !C 2dȐ!C 2dȐ!Ãˇ_|2dȐ!CcȐ!C 2dȐ!C 2d0? 2dH0> 2dȐ!C 2dȐ!C /_?ǐ!C  C 2dȐ!C 2dȐ!Å1dȐ!Cǐ!C 2d!b!b!(>/_>~ H*\ȰÇ#JHŋÈ!|È#F1bxП#F1bĈ#FcC#F1bĈDÈ#F1bĈ#FBF1bĈq!@,h „ ˷OB 'p "L @,h „ 2l? 4xaB o_} 6lX_|aÆ 6lذaÆ *O@ DPB O@ DPA$XA .dp!?$XA .dh0װaÆ˧ϟ?}kذaÆ 6lذaÆ kذaÆ "ǯaÆ װaÆ 6D_Æ 6lh0װaCϟ?װaÆ 6lذaÆ װaÆ 6D_Æ &aÆ 6lP 6l`>˗o_ /_|(P> H*\ȰÇ#JDĉ'N$ĉ 7qĉ 7qĉ;/_||П <0… :|1DM8qDM8`>'N8>~'N0˗/>~M<>}? '? 4xaB 6tbD8qĉ8q"|&N8q"A}&N8a> 0@? Ǐ>} _?$8P> H*\ȰÇ#JDĉ'N$ĉ 7qĉ 7qĉ?~'p ߿ H?}'p "Lp!ÆB(a>'N8>~'N$ĉ'N$ĉ'"oA$? O@'? 4xaB 6tbD8qĉ8q"|&N8q"A}&N8a>'*O@'? 4xaB 6tbD8qĉ8q"|&N8q"A}&N8a>'*O@'? 4xaB 6tbD8qĉX0|o|&N8q"A}&N8a>'*O@'? 4xaB 6tbD8qĉX0|o|ӗ/_?o`>/oA}&N8a>'*O@'? 4xaB 6tbD8qĉX0|'0ă-?O~O_}/@ 7qĉ8Q!@,O> H*\ȰÇ#JDĉ'N$Ă_>&o~o`?}/_| '0|˧O|ϟ|_/_~8qDM? o@$XA .dC%"oĉ'ob|/|0| ̷O|o`>o?~/|/߿|>P'NDĉ 8`A O@ DPB >Q"|&N8q"A}& '0|'0C~0| ǯ_?~/|/| /@'0_ϡ>~'N0'p  <0… :|1DM8qDM߿| ̗O`>`> د~?~̗/_>~ /߿|'0߿|/߿|O`>7qĉ8Q!@,O> H*\ȰÇ#JDĉ'N$D'0~s`>߿|8?~ _~} O?}__>O| ̧o?~`A'p "Lp!C5l0!@,O> H*\ȰÇ#JDĉ'N$ĉ 'p}˗/_?o`7p_/߿|˗߿|_|_'0| ? 4xaB a|B$XП}8`A&TaC!F0'NHP O>$߿|8`A&TaC9tСC9Do>~-O@'? 4xaB 6tbD8qĉ_?~'p /?$XA .d>~:ta>O}/_>W? o@$XA .dC%"oĉ'oB0 ߿O@ DPB СCa>_>_ H?}'p "Lp!ÆB(a>ӗ/_?O`>o8П?~'p ?}'P`> H*\Ȱ!B}:tС|"G0~O`?~O@'? 4xaB 6tbD(_>/_?O ?}17q>~ӧ`> ̧o~8P |,h „ 2lP?:t0? O`} '0>~ 'p  <0… :|1DM~O߿|GP_>~O_|/|/0Ǐ?$X_>~W` /> ,X` $,h „ 24_Ä'0?|8`A O@ DPB >Q"|& g0_|/_|_}O`>o?~&/"|Ǐ?$X? o/_|/ӗ_>8`A O@ DPB >Q"|& g0_|׏_ 7| '0߿| 7>~8,h %La˧o`>}߾|/a„ K0a„ &L80 &L8? o@$XA .dC%"o|맯@Ǐ߿|8?}߿|@ H"D!@,O> H*\ȰÇ#JDD_|/?}+O'_/߿|ĂM`>O@ ,B/| 'p?} /B!B"D!B!DH_| !A$XП}8`A&TaC!F0˗~'0߿}+ϟ|/|/|/_~ 7q>  $XAK0a„ &L80 >&П ӷO ,h „ 2l!Ĉ7qĉ '_?~'P>$XA!D@}˧?o__>"4B"D!BC`˗?_7? o@$XA .dC%"oĉ'Ǐ?~'p A8`A !B˧ϟ?}O|˗߿|"DhP?"D!B !|o>~/_7? o@$XA .dC%"oĉ'ǯ~O@? 4x`>"D!B"D8P?"D!B a}o`'0|8`A O@ DPB >Q"|&N8q"A}0 ӷ_? H0a„ &L0aB}&L0a„ /aB'0|70_|'p  <0… :|1DM8qD8 A}O@ D0 &L0a„ 0a„ &Lp`>  | ?} 'P_? H?}'p "Lp!ÆB(a>'N8>̧o~8`A&,ϟB *TP„)TPB OB'P_>˧߿|˷o @,O> H*\ȰÇ#JDĉ'N$/>~M81?/|7?9oĉ7qB$XП}8`A&TaC!F0'NHP'o!?~Ma>M>M8q"|&NTП ӷ,h „ 2l!Ĉ7qĉ 'џ| /_~o"|/} ܗO?}o|o`˧O|'p_>}o_>}kĉ'"oD H?}8`A&TaC!F0'NHP/? >~H0o?~_}O }|o?~/|o߿|o?7qĉ8Q!@,O?$XA .dC%*oĉ'/~o`?}/D-'0|W| 70|˗o߿|'0߿| /߿| P'NDĉ 8`A'p "Lp!ÆB(Qa>'N8>~W0߿|7`> 70| 䧏_| 70| `>/߿|/߿| /,h „ 24_Æ 'p O@ DPB >Q|&N8q"A}"3`/D-'0@}O O`>O`?__OM8q"|&NTП ? 4xaB 6tbD 8qĉ񋘯~O߿|o"|/_|?}˗_>˗ϟ| ϟ|'0߿|_>~_~ 8qDM? ,h „ 2l!Ĉ7qĉ _>뗯@}o߿| _':P'NDĉ 8`'p "Lp!ÆB(Qa>'N8>~˗~'0߿}H0?&Nذ?M8q"|&NTП ? 4xaB 6tbD 8qĉ8q"|&N8q"A}&N8a~'*O@? 4xaB 6tbD 8qĉ8q"|&N8q"A}&N8a>~'*O@? 4xaB 6tbD 8qĉ/_|ӗ/_?O`>9oĉ'oĉ7qBO?'p "Lp!ÆB(qa>'N8>~ȏ?|O?9oĉ'oĉ˧oĄ  <0… :|1ąM8qD%ܗO| 7P߿}뷯~'p_>M8qDM8qb~M?O|8`A&TaC!F0'NHP?_~ /|˷O|8qĉ8qD7qAO?O@ DPB >Qb|&N8q"A}_`ׯ|8qĉ8qąoDϟ˗ĉ'N8qDM8qD!70߿| /_7П/|&N8q"A}&N8!|8Q?(p_|8`A&TaC!F1'NHP?__>뗯@}o߿|8qĉ8qć˷Do_|M8qĉ'Nĉ'N$_B}`| /_~˗|a>'N8>~'N߾|o~˗O_'N8qĉ7qĉ 7qDM8qDM8qD˗/}(П?~˗/߾~'N8qĉ'"| H*\Ȱa|8`A&Th0@},h „ 2l0?$XA .d?0O0O@ DPB >QD8`A&TaC H*< <0… . <0… .ϟ~ӧO>O} <0… :|1ĉ+Z1ƍ;z2C$H? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6ujTSVzkV[vlXcɖ5{mZkٶun\sֵ{o^+w޽iw޽iw޽iw޽iw޽iۻw޽{ݻw޽{o޽{o޽{o޽{o޽{o޽{w޽{ݻw޽{2޽{޽{?$XA .dC%NXE5nG!E ȑ#G9rȑ#G9rH9rȑ#G9rȑ#G)П#G9rȑ#G9rȑ#G9rȑ#G9R|Ȩ0_|/߾"˗OA̗/_>#˷oȑ#G9rȉ| od~_?-w1|߿|F9rȑ#G~|/˧`_| /@߿}/_>߿~ӗ߿|ӗO,hp`~4 |˗/?} ̷_} ԗ/_?_}˗ϟ@~/o_|؏߿|/_~|8`A&TaC!F8bE1f`>|_۷`>˗?}|۷O`o>'0_?_>˷/߿}.b|o_~ۗ߾}㗏|/| _|o|ۗ߾}۷_̗_?_ ׏_}ۧQF5jԨQF#O`>_>o߿~˗/_/߿|_}˷ۗ/ȏ| o߿~8p7p 7p |o߿~/|O`˗߿|O`>/| ̷@_>/|_>$XA .dC%NXE+/|/߿|O@O` }/_|>}/߿ O@ o|(߿|/߿}_@O` }/_|>}/߿ O@ DPB >QD-^Ę}O`>_> ϟ|O|`>ϟ| O`߾Ug0߾|O?~O`'0| _>˧O?~_}G0_'0߿~oF5jԨQF5jL/_>~ /|_׏`˗~/_~'_??˧/_?? 4xa _ӗϟ>_'P__> 7_|˗ϟ?}/_|˗_>}/|ϟ|'p "Lp!ÆB(q"Ŋ/b̨q#lj:vر#|;vرcǎ;vرcG::_ǎ)رcǎ;vرcǎ;*a~:vH1_ǎ;vرcǎ;vرc~uرcǎ;vرcǎ;vرc~uرcǎ;vرcǎ;vرc~uرcǎ;vرcǎ;vرcD8`A&TaC!F8bE1fԸcGA9dI'QTeK/aƔ9fM7qԹgO?:hQG&UiSOF:jUWfպkW_;lYgѦUm[a;;PK3SSPKAAOEBPS/img/comdg002.gifi^GIF87aP@?**?***UU?UUU????**?*******?*******U*U?*U*U*U**?*****?*****?*****?***UU?UUUU*U*?U*U*U*UUUU?UUUUUUUU?UUUUU?UUUUU?UUUUU?UUU?**?***UU?UUU?????**?***UU?UUU?????**?***UU?UUU?ժժ?ժժժ???**?***UU?UUU?????***UUU,P@ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜ2_|Wp߿~ϟ| 7_?hҤI&M4i|O`?}_>󗯟@}`>4iҤI&M4_>o_ g_|˧O`>}/?}ѤI&M4iҤ0~#O}+O`>o_|/M4iI&M˗߿| /| g0>@70߿| H*\ȰÇ#JHŋ3jȱǏ +o ?̧@;o_>~ /| 2dȐ!C 2dȐ!CW0}/_|O`> ̧?~/2dȐ!C 2dȐ!C y0_|7p_|/_>}˗/?ϟ|/|/dȐ!C 2dȐ!C c?B 2dȐ!C 2dȐ!Cz2dȐ!C 2dȐ!C 2dȐ!C 2dȐ!RH!@8`A~'0>'P_~B 2dȐ!C 2dȐ!#o?/?~߿|}o?~/_Ȑ!C 2dȐ!C 2d|'0|G0߾~70߿| ̗o`!C 2dȐ!C 2dȈǯ_>߾_0 <0… :|1ĉ+Z1ƍ;z2b'0|GP?ӷ?} ?~/dȐ!C 2dȐ!C 2O`>W_|O_|O_|˧/_Ȑ!C 2dȐ!C 2d~ r?!C 2dȐ!C 2$G~ b~B 2dȐ!C 2dȐ!Cr_Ȑ!C 2dȐ!C R`>E_H 2dȐ!C 2dȐ!C G1|P~8`A&TaC!F8bE1fԸcG˗߿|˧o|˧O|'0|˧Ϡ|| ܗO?}/?8`A&TaC H*\ȰÇ#JHŋ3N}}Ǐ}| '0_?~g0|__o|Өq>$XA .dP>$XA .dC%NXE'_` /|70| /|/_OƅiԨ"?}5jԨQF5jԨ`o`'p_(? '0߿|7P` '0| H0aA}&L0a„ &LO,h „ 2l!Ĉ'Rh"ƌo߿|O?}?/߿|>3O`'0?}/߿|O`>42ϟE}4jX>5jԨQF5jh0|'P_|ӗO?O_>}/|˗߿| ܗ_O_>}O_|_> gQ?5VOF5jԨQF5̧1"? iTد?iԨ"?}5jԨQFiFid@8`A0a„%L0a~&$_„ &L0a„ O@ DPB >QD-^ĘQFƍƍ%ӷqƍ7nܸqƍ7+菢7 oƍ۸qƍ7nܸqƍ70>O/?}/oƍ۸qD~6nܸqƍ7nܸqC~'0_?'0>~|O`~۸q?۸qD~6nܸqƍ7nܸq| W0߿|/|o`Ϣ>~7n ~8`A&TaC!F8bE1f0|/|7`>߿| H*د [p… .\O,h „ 2l!Ĉ'Rh"ƌ> o`}˷?珟|m8_?۸qD~6nܸqƍ8`A&TaÅ8`A&,/_>/|ӗϟ|ӗ/_?PB OB)TPB *LOB *TPB *TPB *> 4xaB 6L,h „ o| 1dȐB.Ǐ!C 2dp ?} 2dȐ!C 2dȐ!C ǐ!C 2d8P? 2d0_|˗_~2dȐ!Å1dП|1$!CcȐ!C 2dȐ!C 2d0? 2dȐ!Á1dȐ!C 2dȐ!CcP|p`> 䧏!C 2dȐ!C 2dȐa|2dȐ!C ǐ!C 2dȐ!CcP? 7>ӗ/_}'p "O,h „ 2l!Ĉ'R_Ŋ+>ǯbŊ+V_?Wao?Ǐ߿|㷯"D~*VXbŊ+V_Ŋ+>ǯbŃ8`A  <0B[P W0|˗`|-\ ?} .\p… .\p… .$… .\pB}.\?} HO@ DP!~-\… 7П>ǯ_|8? 4x?~8`A&TaC!F8|*VX>~+C~*Vد_~_>_EUXbŊ+V80+V|_Ŋ#wC}*:/_>~/|'0?}+VXbŊWbŊX?}ׯ_+ ̗o_?UXC~*VXbŊ+V_Ŋ+>ǯbŃU|o_~*V(`>O'p "Lp!ÆsСC:tСCϡÃϡ|:ϡCs!}sСCO|'p>~ H*\Ȱ!B~:tСC:tСCsР|_>СÃ9t߾~9ta~o>$?O@ DPB СC:tСC:ϟCO߿|ӗ/_߾|:TCW ? 4h߿ׯ,h „ ۧ`> O@ DPB СC:tСC:ϟC/_oo?~:LCW? 4h߿ׯ,h „O|,Xp Ǐ A $H0A  <0!B~*TPB *TPB *TP|*TH0_|/_ ̧Pƒ)TPaB*Th߾~)TP~O@_~ 8P? $H |#(0,h „SPB *TPB *TPBSP!A}/@~˗ |'p "_„ &$O_„ ׯ_ ׏>} H@}oO@ $`>/} ԗ/_O?"O,h „ 2l!Ĉ'R_ņ߿| O˧?*BǯbŃU|o_~*2O@/߾W` W0_> o?~/}_ ,H>$XA .dC%N80˗|/?} O_|*BǯbŃU|o_~*.0,X_?gРA+/߾~O`> /A ,O,h „ 2l!Ĉ'R_Ŋ+>ǯbŃU|o_~*.0@'p 3h`A} 4hР|/ _? 4x ?} H*\ȰÇ#JHq`>+VPG@},hРׯ_?$X8,د _ ,(0_| />O`>}/_ ,X>$XA .dC%N80+V|_Ŋ߾~Ut`>'p +X`A,X`˗߿|_}'0|_ ,X ?} H*\ȰÇ#JHq`>+VPW!}|` <0… "ϡC:tСC:t80?˗OB9t>~:"ϡCs!}sP?~'p A H? ,8P?$XA .d!?}:tСC:tСÁ9t/@}|_>/_~߾|:$C!B~P?~'p 8`A/a„ &L0a„'p "Lp!ÆB(q"ŁUDo`|'0_}?~/߿|}p_П_D0 ,h B%L0a„ &L>$XA .dC%N80 '| /߿| /߿|70_E-/_˗A 'p  }'p ۧ`> Ǐ?$XР? ,,h „ 2l>:tСC:t|:o`>~'0?}o`>~'>O@ (? 4|O@ O@ ?~@ӧ`> Ǐ?$XР~~~'p`>$XР?~ ߿O@ Dȏ?0 ǯ?$XCР>~"D!B"D8>$XA .dC%N80˧|O_|/_>_|ӗ/_ +`> 4x!A} <>$XP>~'p "د 0a„ &L0aB~8`A&TaC!F8|*VX>~'p ",?} H'p A} <0a~&$_„ &L0a„ O@ DPB >QDXbŇ08`A'p`>~? 4x!|ӷ?"D?!B"D!B <0… :|1ĉWbŊK`>8`A'P ? ? 4x!?}C!B"D>~"D!B"D8>$XA .dC%N80+V|}_| @,h7? 4xaB ǯaÆ 6l 6lذaÆ 6lذaÂ5lذaÆ П| ˷/?}8`AO?8`A&Tϟ p… .\ .\p… .\p… o„p… [8…)o…@뷐`C/a~.o… .\p!?} .\p… .\p… .$… -o… p…[p@~'_~[80_|C/a~.o… .\p!?} .\p… .\p… .$… ԗ/_?/>}/_~˧߿}'p !B"OBϟ?O߿|˗}o_>}O|a~"4B"D!B? 4xaB 6tbD)篢|/˷|o߾ X?}ϟ? _}?~>}/a~*ǯbŊWbŊ+VX|**'0|O?~/|Ud_Ŋ? W0߿|/|#O`U_Ŋ+>䧯bŊ+VXbŁUTO`>ۗ߿|0߿˗߿(? 4x>~"D?"D ?~@O~#0?~ _>$XA!D!B"D@~8`A&TaC!F8|**'0| /_> '0>~?~WAO@ ?~_|_>~˧?/߿?~O@ 4`> 4xaB 6T? 4xaB 6tbD)篢| /_|ӗ/| O_>}˗_EUxП~'0?~ϟ|/_~ ϟ| ?'p "ǯbŃU|ȏ?*Vtد+̗O_Ŋ+VXbŊ+FbŊWA*>ϟ?+:_Ŋ˧bŊ+VXbŊ#WbŊX?}ϟbŊWbŊ+VXbŊXbŇUxП|'0_| /_~bWbŊ+VXbŊXbŇUxП|?8`A;x} H*\ȰÇ#JHE]xA}.^Oņa߾~xb|)wŋ/^xł]xA}.^O@,h }'p '0~O@ DPB ˧/!|:tСC:tСC:,ϟC:t>~:<> 4x@~O@˗o|/_ ,h „ ˗O_|1dȐ!C 2dȐ!C 2dȐ!Â1dȐ!C Ǐ!C 'p " O` ׯ`? 4xaB Ӈp_|-\p… .\p… .\p… p… .\P .LП 

QD-ŋwA$XA H| |3h ~4hРA 4h0_>}O~ H*\ȰÇ#JHE]xA}.^xExb| O| H*\Ȱ#JHE]xA}.^xE]X1_>}'p`>~ H*\ȰÇ#JH H*\ȰB~ H*\ȰÇ#JH`| O H*\ȰÇ#JH H ˗/a„ &$ <0… :|1ĉ˧>? 4xaB 6tbD)VxQ|0bĈ#B1b4Fӗ0_>}1bĈ#F1bĨP_|1bĈa>1Fӗ0_>}1bĈ#F1bĨP_|1bĈ|0bX_?1J̗O_|aĈ#F1bĈB}aĈ#ƃÈc~aП?ϟ?Ӈ#F1bĈ#F ˇ#F ˗/>1F'p~ />$XA .dC%NXES#F%O@ H*\П? 2d8|O|'p "Lp!ÆB(q"Ŋ/Zԗ/|0bĈ1>  <0… :|>? <0… :|1ĉ+ZhQ_| Ӈ#F'p`> H*\ȰÇ O@} /_>} H*\ȰÇ#JHŋˇ_|aĈC <0…cȐ!C'P?/>$XA .dC%NXEC/_|0bĈa?? 4xaB !C ̗/_>}ǐ!C 2dȐ!C 2dȐ!C 2dP_|'P`?$XA .d!}˗/>}=|a~=|a}0_>}>|Ç>|Ç>l/_8? 4xaB 6t0_|>|P`~>|`|˧Ç>|Ç>|Ç g| <0… :|(_?>|h_>{Ç>|Ç>|aC}O H*\ȰÃ{Ç{C˧Ç>|Ç>|Ç W| <0… :4/_>|Ç˧Ç>|Ç>|Ç W?~Ǐ?~>|C{Ç'p "L_|.\? 4xaB 6tbD)V/_| wŋwE]0 <0… * <0… :|1ĉ+Z/_xŋx"~Yŋwŋ/^xK/_/^/_/"ϟE}.^x ?}/^xŋ/^/_xŋx"~Yŋwŋ/^xK/_/^/_/"ϟE}.^x ?}/^xŋ/^/_xŋx"B.wŋxŋ/^x|%ԗ/ŋ/^O ,h „ 2lP?:t?~:tСC:tСC:/_sСC:/_>:t!A}:tСCsСC:tСC:tP`|˗ϡC:tp`|:tA&ϡC:t>:tСC:tСC /_|WP_|:tСCСC!B}:tСCsСC:tСC:tp|@O@ DPB *̗/Ç>د{ÇÇ>|Ç>|`>'p|8`A&TaC ÇA}>/_| {h0Ç{Ç>|Ç>\`>O@}'p "Lp!Æ˗Ç Ã=|(0| {p ?}>|Ç>|Ç 80ӗ/,h „ 2lPa|>|@"Co_?}ۗO|˗?/Ç{Ç>|Ç>d`>'p?}'p "Lp!Æ˗Ç>dÇO|o߿|/߿|/Ç{Ç>|Ç>l0@ (P_| H*\ȰC{Ç|_>70߿| 7|=|8>|Ç>|Æ|>|Ç Ç>~ W_>O__>$X'p "Lp!ÆB(q"Ŋ˗/|.^xb|.^_?0_| O'0| _ xŋ/^x~%ԗ/ŋ/^̗/ŋϢ>~'P ?~?}_'_8`A  <0… :|1ĉ+ZO|.^xb|.^_?xŃ]xŋ/^x|.^xb|.^_?xŃ]xŋ/^x|.^xb|.^П]xA~.^xŋ/^?~O@ ,h „ 2l`|>|C=|Ç {Ç>|Ç>>} O@~O>ǯ,h „ 2lP`|>|C=|Ç {Ç>|Ç6/_|!B˗/_}>|Æ{Ç{P ˗C>lOÇ>|Ç>|P!?}C˗/߾~>||=|C{xP !|6Ç>|Ç>|p_|=||{Ç˗Ç Ã=do`>ۗO} ܗ߿|O}'p  ? 4xaB 6tbD)Vܗ/ ۗ/+Vd/_+:B h0~o?~Ǐ}| /_?~W!?}+VXbŊ+N/˗_Ŋ+*̗/_Ŋ!|W`|_70__櫈+VXbŊ%˷bEWbŊ WbE%/_~ h0| ̗ |/߿/߿8`A <0… :|1ĉ#ǯbňXbEXbE(Ǐ A |O>~?~O`O$H A <0… :|1ĉ!ׯbʼnXbŃO@ DPB 'p> ,h`>˗ϟ?}/_~ӗO|ϟ|:tСC:tССCϟ?:tСC:/!|a|9O`>СC:tСC:t>}9t~,h „ 2l!Ĉ'Ǐb|/_~| o_>}G!?})RH"E)R,O?}Qq_>}"E)RHbC}(6O_>_߾'p ? 4xaB 6tbD)>O|U_|ϟ+VXbE* ǯ"| /߿|O`|W!?}+VXbŊ+>o`|X`|_>UXbŊ+?}*270?~/|0'p ? 4xaB 6tbD)>䧯`|W~ϟ?_Ŋ+VXb~*ǯ"|'__|*:䧯bŊ+VXbŇ/_|Uo_|O~'p "Lp!ÆB_? 'a˗_/|ӗ/_$FOD%J(QDӧ߾|ϟDۗ/_|'p~'p "Lp!ÆB_? 'QD'QD%J(QD k> ԧ?~8~0@O@ <0… :|1C$OD%&OD%J(QD'_?~'p ǯ H~'p "Lp!ÆB(q@}(RHq"?})RH"E)R,OŃ HO@7? 4xaB 6tbDG"EH"E)RHbA~(RDП o ,h „ 2l!ĈXP?%J>%J(QD%JLOD 8`A O@ DPB >a~$OD%&OD%J(QD'Q"C$X_|8`A&TaC!F|د?(QD (QD%J(QĄI? /@$XA .dCO"A}$J(QbB~$J(QD%J(1!?}%2O@7? 4xaB 6tbćHP?%J>%J(QD%JLOD 8`A O@ DPB >? 'QD'QD%J(QD (!@,_ H*\ȰÇ#J8P?)ROE)RH"E G"B$X_|8`A&TaC!F8q>~)R8>)RH"E)䧏"E H~'p "Lp!ÆBП?(QD (QD%J(QĄI? /@$XA .dCO"A} H*\ȰB} H*\ȰÇ#JH!?}˗/?'p  <0… :|1~I,П <`|&L0aB H*\ȰÇ#JH!?}| 8`A O@ DPB >a~$J0_>}%J(QD%J(QąI,o?}_|ۗ/_? H~'p "Lp!ÆB_?%Jd/>%J(QD%J(QB~$G0_|O`|#П o ,h „ 2l!Ĉ(Qb|I(QD%J(QD'`>/|㗏 @,_ H*\ȰÇ#JH|YhѢE-ZhbD~,7_'0|#П o ,h „ 2l!Ĉ'Rh0_>}-ZhѢE-Z> _ 70?'p  <0… :|1C$J0_>} I(QD%J(QDX0_| ԗ_>O_>~ O@7? 4xaB 6tbć(Q"|%OD%J(QD%JOD 8`A O@ DPB >a~$J0_>} 'QD%J(QD%FOD H~'p "Lp!ÆB_?%Jd/>OD%J(QD%JOāO?8`A O@ DPB >a~$J0_>}˗OD%J(QD%J>O|'p  <0… :|1C$J0_>}'P?$XA .dC%NXѢC~*_|˗o|/? H~'p "Lp!ÆB(q"Ŋw`>'p "Lp!ÆB(q"ŊW1_}߿}˗_> O@ <0… :|1ĉ+̗O} ,h „ 2l!Ĉ'Rh!?}˧O`>ϟ| O@ <0… :|1C$J0_>}8p ,h „ 2l!Ĉ'Rh!?} O`>o`| O@ <0… :|1~I(a| O8`A&TaC!F8bE 高??~O~8`~'p "Lp!ÆB_?%Jd//>(QD%J(QD'q?}/?'0~П 7? 4xaB 6tbć(Q"|%̗OD%J(QD%J>'p O@ DPB >b~$J0_>} 'QD%J(QD%FOĆ H`|8`A&TaC!FϟD˧/a|$J(QD%J(QĈI? ,h „ 2l!Ĉ'RH`> O|'p "Lp!ÆB(q"Ŋ!w@$X_>$XA .dC%NX`?O@ DPB >QD-BŁ H`| H*\ȰÇ#JOD 8P ?̗O,h „ 2l!Ĉ'Rh"?}/O@O@ DPB >Qb~$J|OO@ DPB >QD-BŁ H| H*\ȰÇ#JϟDO~ /_>} H*\ȰÇ#JHE]8? ? 4xaB 6tbD(QB  <0… :|1ĉ+ZOŋ8'p "Lp!ÆB(_?%J\/_|˧OD%J(QD%JOD 8'p "Lp!ÆB(џ?%6̗O_|I(QD%J(QD(!@o`> H*\ȰÇ#JH"}%̗OE-ZhѢE-ϟE8O@ DPB >QDS/>-ZhѢE-Z4oE8? <0… :|1D$J(`|$J(QD%J(QD(q!@G?}'p "Lp!ÆB(_?%Jh0_>}%J(QD%J(Q(Q??ӗD%J(QDH@},h „ ˧PB'p "L ?$XA .dP!?$XA &ܗO… ϟ|-\p… .\p… oB}8`A&TaC'p "LР>} H*\Ȱ!B}8`A&T_|.\П?_?}[p… .\p… &…-\p… .o… o… .\p!?} .\p}pƒϟ~p… .\p… .\[p… .\O… .4… .\pB~.\p… _}p… .\p… .\paA}.\p… ӷp… p… .\ .\ } ,h`~˗o?$XA .dC%N|E)N䧏"EH"ʼnQH?~˗O>~Q}˧?)RH"E8P?)ROEG"EHCۧ`>ӷ ?ӧ`>? 4xaB 6tbD7q>~'N8 ?}'N$ĉ'N$Oĉ'ϟ~ۧO>O>} <0… :|1ĉGQ>~)R8>)Ǐ"E'G"E8 A$XA .dC%Ndد?H"ʼnQH>~)R8>)RH"E)RHb~( Ǐ"E'G"QHD~(RH"E)RH"EQE)N䧏"EkO_|ӗ/_? g>(łQH"E)RH"E)Ǐ"E'G"1?O~O}/? G"E)RH"E)RXP?)ROEp~o_/O| '0|˧O|ϟ|ӗ_>/_~(>$XA .dC%NXE]#FӇcC}3` ܗ`?~ '0߿|o߿|_}__>9#F1bĈ#FϢ>~1b8>0|ǯ_?~ /|/| /@ /߿|'0C~0bĈ#F1bĈa~,#FÈ>~ د~?~̗/_>~ /߿|'0ǯ_/߿_>$H>$XA .dC%NXEF1#FCC~ _~}O?}__>O|O߾'0C~0bĈ#F1bĈa~,#FÈQ`|WPO`?}߾}o`//|/|'P_|!?}1bĈ#F1bПaĈ@~0b`>O?$XA .d!?}:tСC:tСC:tСÁ9tСCСCOO@ DPB СC:tСC:tСC:C:t?}:Ǐ>$8p?}8`A&TaC9tСC:tСC:tСC9LCO?}|[ϡC9tx_?~'p ,h „ 2l>:tСC:tСC:th_?|_~@~ cϡC9t}8`A ?}8`A&TaC9tСC:tСC:tСCsP?د߾~O}߾|ӗ/_?}'0߿|ۗOC9<}8`A߿'P>~/> HA;x? 4xaB 6tbD)Vxc~,W1|˷O|}_>?~w>8`A? ˗A$/$H A? 4xaB'p "Lp!ÆB(q"Ŋ/bϟE}*3`/_| '| '0߿| w> H0>}O@?} 7߿} ̧ϟ>ۗO| _G0|˧߾|˧O|˗?3h?} H*\ȰÇ#JHŋ_|맯@Ǐ߿|O@~/߿/߿'p w@ ȏ?$X@wP}߾߾}'0_?ϟ|o߿|o߿}o?~_>4O,h „ 2l!Ĉ'Rh"ƌUϟ|'P_/_|_>'0߿~?.џ>  ˷|!4O,h „ 2l!Ĉ'Rh"ƌY/_~˗|`׏_|߾|'П|]o? ~˗O?/@ӗ/_? _>/˗?O_|˗_|@~8`A&TaC!F8bE1Ϣ>~1b8>0'p !Bp`>"@~8`A&TaC!F8bE1Ϣ>~1b8ۧ`>  <8P?"D"DP`?O@ DPB >QD-^د?aĈ@~ o>$XP?~8`A !B"D!BO@ DPB >QD-^E}0bĈq ?}O@,h B%L0a„ &L>$XA .dC%NXE˘1#F~ H>~'p "D_„ &L0a„ O@ DPB >QD-^ĘQ3b0,h „S/B"̗/_~ 3ϟB'p "Lp!ÆB(q"Ŋ/b>~1b8_>}#B}棘Ob>QwPC~0bĈ#F1bĈa~,#FÈ>~ ܗO}/_~ܗO| 70} ԗO|˧|˧O ?~ È#F1bĈ#FF1#Ɔ-G߾|/A~/_?߾_>߾߾5#F1bFaF ԯ?$X?}$XA .dC%NXEF1O|_~@~,0|#O~3o` |__ _>$8>$XA .dC%NXE]#F'q_7 ܗϢ>~ Է?}/@3o?~+o`_>o?~?kOF1bĈ#F1blF1Ob> o},0_|ӗ/?/_>~|W0@}˗߿|'P_|O_|א>1bĈ#F1bP?1bO|/@~ ww ?} H*\ȰÇ#JHŋF1Ob~o?}_>aT#~Ӈ#F1bĈ#F gQ?1bOD~ _~}Y#FӇ#F1bĈ#F gQ?1bOD~'| o߾,#FÈ#F1bĈ#FF1#ƆaĈ@~0bĈ#F1bĈa~,#FÈ>~1b8>$XA .dC%NXE]#FW1_|ӗ/_?O`>5#FӇ#F1bĈ#F#F高O ?~_?}P?1bOF1bĈ#F1blF1O|o`7_}/>5#FӇ#F1bĈ#F F1/!}|g0_|/_C}0bĈq ?}1bĈ#F0#_? H$XA .d>} 8P߾G_>ϟ|'P_/A <0… "ԧ? 4xaB 6tbD)Vxc~,O@ DPB O@/7_| /_>~۷_> P <0… * <0… :|1ĉ+Zџ?$XA .dC%NXE5nG!E$YI)UdK1eΤYM9u$O'_~П泘`>߿|D)RH"E~O_|˗߿|W0|_|˗?} ܗ/?G0~ӗ@}/_> د +/߿}O_>}/߾|˗߿| />~O |ӗO}/_> _>} ԗ/_'P_>} H*\ȰÇ#JHŋ3:G0|/|߾|#O`|O_?/߾|߾}۷`| ϟ_~ۗ߾}G1_| ̷/_o߾|/߿| _|o|ۗ߾}۷O`̗_?_׏_۷OF5jԨQF5#O`>O`>o߿~˗/_?/߿|/>~˷ۗ/ȏ| /߾ 8poo@~ /߾O`>/߿|˗/_ '0|_o˗߿| Ǐ_o߿~8`A&TaC!F8bE1flo|ۧ|`>/O`>'P?߾|߿__(? 4(_?g_}O߿|/߿| o| '0@ o_>}ۗO߿_o>~߿'p "Lp!ÆB(q"Ŋ/bp> /~/߿|o| _>˧O?~/߿}G0_/߿~߾Ug0߾|O?~O`/_| _>˧O?~/߿}G0_/߿~>5jԨQF5jo_|/_>}˗߿|˗| /_?O_|˗/_߿˧߿|/_>}˗? <0? /?}O~/߿/߿| o|O`|ӗ/_~_| /_>}ӗ?~_|ӗ/_?$XA .dC%NXE5n0_ǎ;vDcǎ;vرcǎ;v(0_Guرb;vرcǎ;vر|cǎuرcǎ;vرcǎ;F_ǎ;vرcǎ;vرcǎ;&_ǎ;vرcǎ;vرcǎ;&_ǎ;vرcǎ;vرcǎ;&? 4xaB 6tbD)VxcF9vdH#I4yeJ+YtfL3iִygN;yhPC5ziRK6uĀ;;PK/ iiPKAAOEBPS/img/olecom.gifBGIF87a,0I8ͻ`(dihlp,tm@0|pH,Ȥrl:ШtJZجvzQAnp+zn|N~6vd ůc̸ۼHވwbbJ.Pp=*Æ7QqǏ C _{\2>B$&Y.fŎ?1nɳѢHӧP3eX]:B\Vg96TʔNG"UkTܵm˷UT/Xap?|_ h ۷leD"޼U;fxuװ0[s "L@˧0 Zg1sݸU'= ]vaTk֬}b^w{ЈGBAƝx&GyW2hEp `\:~}Q`t (~+2(42 oߤdzDbHdcGGb'&YESܥZ5f~ՃՏ`&W<#9BF2D8Er\gJ$juq)蠄~eV8W[jՈVj[ޘ@rڛQ騤ꪪ~ꫭ+^h,믾"엌&S.F[ {Tkfv@ކ+kn+k,/-0, c* ;lgl:'-܁;<j,WU$@.@ |zܰ4X9S\G?\w5KK-f1\s҈=tm`(M vevw7 3>Sڛ 褗ݷh/V :ݺz 75>zԊ_XGg.g(p΋|B/>觯~ԯ~o?߯ϛ YL:'H Z̠7z GHY (L W0 gH0 wCl@ !H\Ǟ '`"/0$ZeXbr4;PqQ"D0bhExcMэKxQfca;|EE6k4\$#!0D"(J!ji$ViHr,'eF9KR`8rPƓULI^nX?V%JCw4_9I(Ɩv)mr ba<ŬU̹Y2$r5ȡm4&(ù>dҙ(db&=U5'!L6*]KS3 [&-{ X%SKWAzjF9Lȕrb9WdSQ\B&WU/c+%qjեjT%)vN每I*GL#TdWu}H+yX@m./Z(|:ntU(9LhyoXN4mh_ѐV#MB[Z~~7"rӠbCMR%LWհgMZָn`3!JMbѲf;ЎMj[qn{ǭ]7 \+&9`M5(@K~;4M;LL*!u7JqT,93-8к<Ј7q 3/9q\8a fӋ-8\SYC.8Qj9} @q^*aoqN]L%xe$plvo]d=v8^qügw9:Ї~q^GO];J⍻7 -c;ɮAX9OGzOzzꩿw|i_{'G9UvO6z{g7EG}}Hwzh}wH~?P`$e+e84xX7nc}yw zgox5K7T9'8룂'7b x-pDGwJy6TLM'Jhަַ׈GՓ]HWÉG8sv@V$NiJȋ]m&gGJhӄGnx]nnP'\8bASxZ`NhEDpDpAxt0(EFhqS CE^r;rr 2B } b Q*u7tTWىK*ӗ} u(|$ugvu&v@vFjHn8)Dwi(|qwwdzvw)NzOIzE1$Oƒ3HÖn9HoIriWipj4v9{xٗNxȅ@'׃@l8ze({ᇙAw{Y89!8h|:(64C~IXVvɷ||P郟ɑczـ~GwshIIȎ0qכSSX|Þ){xF,u(h) mH/iC}ٙ ZǙC8)Hz6)" i#j+ʚ(r9>18p)ٕ 蘓>ڠAZ6ɃqX=*}JiE@9FY9I}؇!:-%Zڥ),ZH9rZs(KyhyiXwdžtyלNwwIcZꉞ|c:u&0J{#kY( )diG6Tz7jjʩbdY|s򨀉Y6B*IYj8;\:꫚ʩ/z Ғ^BЪ}Ө|)h#pYOvx E×YW뚰*Ԯ)D[e⨰B `%inTڰ j;,(kK`#isoָZ`ǔ)C!-{ii^r2X(4q9[~=KhunDtx?KPʳO :aC!E9tꤢIwXuי^ɤpW+a`3nHAz4izYtʤ( #C}{Dęqǹ|`iFם YǔKfm=gyyV+I FK/||0(@:zn( ȣ;;;Qq.7+>p*wvuxzˀK+e;?;]ux۽4dM&p>/˝6]_< ( C%;i  *!%UH;&|+j`|#xg?ױ:\|<97JD @8hI̽KMl$Cb9R]|A8n%cԦ ]6YF-U2r L3RL4T˒| 7Ń<>T:f\?+7vjXٶv畡KOg+|EIɔ'*~j}XoPð\:;q+^+lu#ˁg[t\K͜lF6ے U 25\ \R) Jk,O*ȫ\ \|<7\ ݈|D:X-M]@7M"]I|(I!m#9/}O*-4M7-xl'>@0vof M9Щ*{ ZhLF1-4ǡ0\\}ӏkxz|~@1uA(֪ ׍q=07<4 Om j=XDmˋ`ˈJH:ʮ'i)Y}:궿;YhD^>L'=.~4rk怆Ɵn@B~C>zN܄}t<.__mBr=s.[yߴգtk끪Ɏv!^Akm.RYp[; dNF^^> :n}^N^ntMC܍ިO (dl,tniz[u ޔUI6_cV0[7B=?W!ZQ u-Vma?2DFo]h&j-h~nyg?,1n[珜eXi_}T oAiKϭ픭~ΕPYw{\v~wMUo_s/R ߰S&~7On[/_?>L]ǜ @^*RoDLbO^Mhp~;Ϗ"? "a徵R}g;]@\7ܜj5b2T6OhT:Vh`vw A? RM?!!=="ŽC@FE>,"-/.MϮγ$6FDֽYDXAJ\5V[JLLdLgh,R/Q.T4;qrCeVGc$ \Fd#|A6nb Yl L#"&Ⰷ|Xc6ߌ7V>Oճiઽ~(;3J4ry|oB @Ol ;4Lhq,vֲO,ET{šc芟|4o-Cp‡ ,bu/RL2 3 &KK?1H8u6!`*p8-I!b84CHPFmD&\T=9(`mԷG+(=0om4UPnXdUּW[ZkKL뫤zQe!A][r5ٚYȭs1`Ju-@&.t3Kc=Q uHhDwaF2TRDO(` 8k5ur\# [veeU];-){?nNd`VRqQfU Qws5tVhC%ᔉ=ؘn+ӐhqH9P߳&2чev1?gM ZS @r5\YT e;N;qj)]^!@pW@u?wh=4-Q(GD=}ƤptAb3uQ0F#©>2 ^xHDIpkcN:~ #XIĎ$̃5HprKd)MEbI$Ǽ&Yyp49K?†2)}ݤOX$ֵJ5E ػ%cكKā(Nf9af1:4sJ{DgA3=YM d"8(JS FgA9! 6;`Nr}=iOm{g-q́r2&l)K*f]D\4ceIKKzԧT6 zԁA پՅSU !PiY/0Qsw`r}x MiUc6J׺UhIzml$7RꓞCէIԟރ):AY0 &u\95$K"vD+'"PƳ9%HsM8pc$..;Ҷ5T5ٔiTh,SC ^e2m ۦ;Z[K8trIjZi!O}{6U]D:$acZ ElЙTr8l\jˣ8h2z8i{SJkCbA!$1r`'&m%>̨2=+/ BQ4 @[8Jx9ʄU8YmY@*w~(^ȍrsqZIkgT45^Ψ+UZc,1Ӕ] ^r:[]XG)Ϩ>Yl^''^z%=h˴Mƥy=cMLwB#Wy3WvF;zųFе^2]"h܏E`'̔v FτfxzvfʖҰluxYkF?]MuQ5Uٴa&oÔ }6vz9ʏsh[-kU']ypJfGA^9g._z׉o;ŗu8{] 7דcf)C'n[?kk;ޛE*Гe]l{ԩ3`ꃷ%9a_<|Dilq0*5K 'y콴׾ej}_k{Si6ml('HAӫ{O2YQmaF$a}x{#&{p_F_~U_cz?C3DrjssR>0Ip=T-,p18b?D@ɵ6xj2FA\ ByIc+>{9t)ۭ&ST5!=CB|:1 C54%B˼78 AIs[{7b# 0)sCS!(l9qH*l03,H>L(B4$SDBDz݈99CJ;q@ck ==f<9eԒ{FfcA&'2NĽk 8|kk>k>dsG a@) #C̜cGGY /$1r!\ 5:LH }}t#: @**2 #1HHduУ|^H8qulIB>LJ1Ad$>QI,nIJyI =@<̴O.ʢP=A֣5Fj=ٛƺ==jDIJfPIƭEIBJ,>k<v ?\EWTCn+56E{~)Z§7ӻQLĿ:S˹"F6 "dE{CDkL?4LHl$ -yDzj l -,?NS,NU44DTFLLNGO.ȼ͞|yj+^ό sX#NICN44aܿ zNƄN+ J,|2-|ŊP*>0$DY;TDACPN.ӢIiТM,1?Ds{O%ۜ!@BLm#,ҁCϧTh1%GCDD<EE@R,1#%M$e% MtN(ZŘR=^_` g'3QoKd4TKDeT;7mšƷHKm˩p͖ꔆOUP]73ʶ\*;SݰOաP)PlG|/cKMGN1Y V+USCľ#tNVhUHbDHL<ʿ%|UphșVSVmIscVtV`%WymZ$jMaDwW-WI4,TJv=r@,;XsjThqzs0=_'CXU%*VjC2w'Pt/Z|ٕR{UìOimV%uXp%ږQݠO,K4$?Zэ%LǭHڰ][1ڟc[+8[VMNZ)$(\ \\-\=\M\[D[ɭ}8= \\u=&hCX\ueTS Ν]ŨhܓE]ި\8U>JDvܜ*ϕ q]α۽]ZMU㵱^zЕ>{^x(J ;c^^߁-_IuߺPkRlUm^,5^ݖN_ 柍uL̓(`T%卍`-[Wɫv N`M`YY]˭.`=) ._]K,Լ\FEb<-n,F+ě= XE}&xa%uV݂\*55%#}Q=6%H$cVm (d6HcaaYوA$SPhӈ#Qu㢻llu$[f юf0ۗ!Ϯ٦/-1"%^time$ N~EnZFݖlNmCODNMS=fZJslJmvä,Y B 4Fh04̔o=lnK@:>,G|FSik7 hV ý~2ThbvnMoH Ѱɇ}\ItFL߯n~dǁQoӾ&;:=+c,_r? oBّUmc"ndB9n1$~[^>H2I6f5%7g#sǴSk',k)(YnpEOwm:o'ׅtx:s\9ޚ0s1eXun'|nŶTVs`[2ЎHZtVfggnaJU>_cCWR$ReXfwv^a9Jy?uwvo+gL^uPeo<>U˫ x|wex-Gz/e9Dswvc=7xRoT:M U/C_r7 g^x?t <5sKޞYLi;2P홏 ߢyw3Qԃq_$7[(tMt?;_ך*𥴞-MLr]y7zͨr#p>O LBk |{iew<0Tp.R$t4'Y˯s喍ULa)p@FpQoNzfn&_+D)/|vɮk/qp&^gutcgh(8 gwr!*7cIHYغb\\0; tQ2'4*R+6RG"H'PɜVmV7 a!b"^WZͥ @\ƨ(Hj+L,l*X%gn1r#_Q/s i(KIRL+I- 75l6s^{ݴ<}}: dt b-.`Sk\:I6RCG*P[G}Y$ʔ*W_{ ]\f:lriϜ7] faڄPq5bY K9SbFq4&2YM΍"ފ W`ֆ6A(_(҄d7sn0*KjӯhIkK(DZs^]/?%o&F~292V|3fGVJJGn?ZXD\U_L]k\݀ce5UWa(|)MNu&MhfX!uW^ePn Gi}5V!A8!`5ҳ`h ev6xoK!5Ut$_~s$WNB +jVWU^8J84i"BaH ᇎPrf2 _`6喅y(>fJ&Nnyngۜaډ{|zzOYj:!onVi@9xA]'mWlIU۪^,z{ iP KnG"ocXЫ.̄{ɔݫp:daKso {G;1YbjIze{yN|pD*L1)|c^<9rL:2=H/häT}t?k5WXzϒAѩoWWx9,7랯Syq{- .'rT>`~]p0G5 OP{ZPWKi*!Ұ- 8fi@l(!J١_ff!Bnc/D8pf+U fb$FZZg<9Xa}CƬb4uoρg &eÀYPgW$dQET\@Zz(JQ~ KlB#8NAf#ҝ($*ԍQ{rt ¤L)TҗQ. ]L')جĩQ ˱ iqt55B͞@7%cxvUT+A^!zN]H/Gj%"mrݫ8mx+b+Z0۾J:mō?"jɕu}Kye5yfF׃u2giS͓֞ ,?}2Y0tcԴN[ jC<JXtO3߃>w.{zhVk71q}O8mc2)zO #<0iXG45 ~ n!^*Fu?܎hۘwG-.m~S۪J"/e4oѪ\l32GY=;m.'4W.Z<7Z n]@wU3:yܯ[;Y*iڒ5Sm;ժ5镞_gV圌ݘmq4 _. \uݏ(a6>`E![DMj841MWće!naua ~!EIa"e_a!fUX`e^(MA [ ʡ!"2oe!+qZӁ"m #UbBFpM+q,( ]llZ4!2~!݉5v0!6 7*58B-ɝQ:#؝`;T9~jaB^cET>j Hҭl`MDcH:E[ JGGK1ÖItYA,Od@#^\ݙdRd=dSnXC%VaE/j%K.%~FŤ<e㵚ZV%%PxX$*V%xe+cK"_S6@"^86?$bt[IbrE>-dNzdW&Jy&&Vm%kf]ljB<&>&_#r\ dgsns~rTEZ'Hf'tggB\f'xSPIJeug{gx~I'٤YX0fdf~~{bXhvVpwO6($E'TIh3!3 aۨgORvbTR%au ޞ. ~ghq%&MfDܘѨagwX'QrQ, 2g䒚&$2)WUiqbf>h1 ˆJXYb)і 'Mz'򧐈Wn~ύ))iy>":(`wjiV`XAf$u^if:"P`z*RѤB6dnA饖F"^|L . jId>[rΥQ֙!j2i\*+dXtrk#y$7J%Yhde]W4*k*j6 "Űƅ+^v$.L(A]hLb^]&(*BfVe2,BgkĚ Qžky)( Z$foJzgF=)N kH2z"+&, 2Yr4jS+j6F%.=*-.\,߂."Lꬻۇڮh.~.&o撮l^A.jnndY\(q^.֏^+Xޯ9d:٬Zk^ 7K^/nnr$:G"2f/; c  Oo2n *gp F0>/*گ?OF,ʠnb&pC'f}Kgcq%} q ?H߁[1B [}fl/2#3q-)[JahEgm17&s2KıIY`: v²ݔqI%7쐾 /o#R0!!#N+b2C/rd%k^3/o`҆9_s/921:2#x1s=dBo)?8jN7v'={r@; o3+5D3Ebb9sƮ 2wt.t0K(aVI4߳1L[NǴu5ӳMk @c> ީSG2YijU3G5&grW5XX5YY4 #&VSBZc\75__5``6aa6b'6a)c?6dŨjquu//46Eg`d#$gu6jj6kk6kJAlvkh+%Zo*&'+np7qqW683r?a]{d47v5pCvo7www7u3x7&]wmdy7|Ƿ|7_+U>c }tz3{{7vex 7zz_o_8g?;8~;swOwAKT8x f{~qG*{x[[88wx"yjW/eP7?9GO9W_9go9w99{,wc9l۸VUǹ9׹9繞99::Oy8yp#yzoeW_w;kL:`$9x`:㶦':Ǻ.乩wϪ纮c;+za;{Y?ƅf?;G;۶W_;8g;w{yo;;;Yo;Vu;׻z|?;/;[y˸ /<Ƿ;;7~C9A7o>';?>GO>W_>go>w:臾>闾>ꧾ>뷾뿾9G;PK"l: BBPKAAOEBPS/ch2insta.htmc] Installing and Configuring Oracle COM Automation Feature

2 Installing and Configuring Oracle COM Automation Feature

This chapter provides an overview of the Oracle COM Automation Feature installation and postinstallation configuration tasks.

This chapter contains these topics:

Oracle COM Automation Feature Components

The Oracle COM Automation Feature package is included as part of the Oracle installation. It contains the features and demos that illustrate how to use this product to solve real-world problems.


See Also:

Oracle Database Installation Guide for Microsoft Windows for installation instructions

The COM Automation package includes the following PL/SQL and Java components:

PL/SQL Components

The PL/SQL components for Oracle COM Automation Feature are:

  • Oracle COM Automation Feature PL/SQL (orawpcomVER.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 orawpcomVER.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 Java components for Oracle COM Automation Feature are:

  • The JAR file, orawcom.jar

  • Oracle COM Automation Feature Java (orawcomVER.dll)

  • Oracle COM Automation demonstration programs

  • The grant.sql script file

Oracle COM Automation Java feature orawcomVER.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

Oracle COM Automation Feature requires:

Note that you must have a COM Automation server in the system to use Oracle COM Automation Feature. For example, the COM Automation Feature demos require that you first install the applications that are used in the demonstration programs:

The demonstrations and installations are discussed in "Overview of Oracle COM Automation Feature for PL/SQL Demos" and "Overview of Oracle COM Automation Feature for Java Demos".

Upgrading from Oracle Database 10g Release 2 or Oracle Database 11g Release 1 to Oracle Database 11g Release 2

To upgrade Oracle COM Automation Feature from Oracle Database 10g Release 2 or Oracle Database 11g Release 1 to Oracle Database 11g Release 2, do the following:

  1. Rerun the comwrap.sql script.

  2. Run the grant.sql script.

  3. Reinstall Java classes.

  4. Reinstall demos from the Companion CD.

Configurations for Oracle COM Automation Feature

Configuration procedures differ for PL/SQL and Java as explained in the following sections:

Configuring Oracle COM Automation Feature for PL/SQL

To configure Oracle COM Automation Feature for PL/SQL:

  1. Start SQL*Plus.

  2. Connect to the database as SYSTEM.

    SQL> CONNECT SYSTEM@net_service_name
    Enter password: password
    
  3. Grant the CREATE LIBRARY privilege to the database users who will use Oracle COM Automation Feature. For example:

    SQL> GRANT CREATE LIBRARY TO hr;
    
  4. Connect to the user who will use Oracle COM Automation Feature, and run the comwrap.sql script at the SQL*Plus prompt:

    SQL> CONNECT hr;
    Enter password: password
    SQL> @ORACLE_BASE\ORACLE_HOME\com\comwrap.sql
    

    In the preceding command, ORACLE_BASE\ORACLE_HOME represents the Oracle home directory where Oracle COM Automation Feature is installed.

    You will receive several ORA-04043: object XXXX does not exist messages when you run this script for the first time. These messages are usual.

Configuring Oracle COM Automation Feature for Java

Perform the following to configure Oracle COM Automation Feature for Java:

  1. Connect to the database as SYSTEM using SQL*Plus. For example:

    SQL> CONNECT SYSTEM@net_service_name
    Enter password: password
    
  2. Run the grant.sql script with the name of the user who will use Oracle COM Automation Feature. You may need to capitalize all letters in the user's name. For example:

    SQL> @ORACLE_BASE\ORACLE_HOME\com\java\grant.sql HR
    
  3. Run the loadjava tool at the command prompt as follows:

    loadjava -force -resolve -user hr         ORACLE_BASE\ORACLE_HOME\com\java\orawcom.jar
    Password: password
    

    In the preceding command, hr is the user who uses Oracle COM Automation Feature.


    See Also:

    Oracle Database Java Developer's Guide for further information about the loadjava tool

Configuring the Listener for PL/SQL

This section describes the specific configurations for the listener.ora and tnsnames.ora files when used with Oracle COM Automation Feature for PL/SQL.


Note:

Oracle COM Automation Feature for Java needs no special modifications to the listener.ora and tnsnames.ora files.

Because Oracle COM Automation Feature for PL/SQL relies on listener callouts, you must configure the listener and Oracle Net remote procedure call (RPC) mechanism for the feature to work.

The following are examples of listener.ora and tnsnames.ora files that can be used with interprocess communication (IPC) to invoke external stored procedures.


See Also:

Oracle Database Net Services Administrator's Guide for additional information about configuring the listener.ora and tnsnames.ora files for external procedures

listener.ora Configuration File

LISTENER =
        (ADDRESS_LIST =
        (ADDRESS=
          (PROTOCOL= IPC)
          (KEY= EXTPROC0)
        )
        )
STARTUP_WAIT_TIME_LISTENER = 0
CONNECT_TIMEOUT_LISTENER = 10
TRACE_LEVEL_LISTENER = off
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = ORCL)
    )
    (SID_DESC =
      (SID_NAME = plsextproc)
      (PROGRAM=extproc)
    )
  )
PASSWORDS_LISTENER = (oracle)

tnsnames.ora Configuration File

EXTPROC_CONNECTION_DATA=
  (DESCRIPTION=
    (ADDRESS=
        (PROTOCOL=IPC)
        (KEY=EXTPROC0)
    )
    (CONNECT_DATA=(SID=plsextproc))
    )
  )

Troubleshooting Listener Problems

An "ORA-28575: unable to open RPC connection to external procedure agent" error message indicates one of two possible listener problems.

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, and then Control Panel.

    The Control Panel window appears.

  2. Double-click Services.

    The Services dialog box appears.

  3. Go to OracleHOME_NAMETNSListener in the list and verify that it has a status of Started. If it does not, select it and click Start.

To start Oracle services from the command prompt:

Enter the following command:

C:\> net start service

In the preceding command, service is a specific service name, such as OracleHOME_NAMETNSListener.

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" for information about how to configure these files

Support for DCOM

Oracle COM Automation Feature supports the use of Distributed Component Object Model (DCOM) to access remote Component Object Model (COM) objects over a network.

To authenticate the client's access to the remote computer, DCOM passes the appropriate security credentials to the remote computer. The remote computer validates the security credentials and allows DCOM to proceed.

These security credentials are based on the domain user's privileges associated with either the client's listener service or database service. Table 2-1 indicates the determining service for COM Automation for PL/SQL and Java.

Table 2-1 Services That Determine Security Credentials

COM Automation Feature for...Is Determined by This Service

PL/SQL

Listener

Java

Oracle database service


Configuring the Computer for DCOM

To use DCOM, you must configure security settings on the following:

Configurations for the Computer Running the Database Instance

The configuration for the computer running the database instance requires setting the listener and the database service to the same domain user.

Setting Services to a Domain User

In this procedure for setting a service to a domain user, the service to be set is selected in Step 3.

You must follow this procedure twice, first to set the listener and then to set the database service. The order is unimportant.

To set a service to a domain user:

  1. Choose Start, Settings, and then Control Panel. The Control Panel window appears.

  2. Double-click Services. The Services dialog box appears.

  3. Select the service and click Startup. The service should be either OracleHOME_NAMETNSListener or the database service.

  4. Select the This Account option.

  5. Enter the name or browse for a domain user.

  6. Enter and confirm the password of the selected domain user.

  7. Click OK to save the changes.

Configuring the Computer Containing the Remote Object

Configuring the computer containing the remote object requires using the dcomcnfg.exe tool provided by Microsoft to configure the computer's DCOM security settings.

This tool enables you to set the access permissions, launch permissions, and configuration permissions for a specific COM object or all COM objects on a computer.

Using the dcomcnfg.exe tool, set the following:

  1. Set the DCOM security privileges so that the appropriate service (that is, listener for PL/SQL and database service for Java), operating as a domain user, has sufficient privileges to instantiate and manipulate the remote COM object.

  2. Set the remote COM object to execute with the same privileges as the service.

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.


See Also:

Microsoft documentation for more information about:
  • Using the dcomcnfg.exe tool and the implications of the related permissions

  • Setting up the client and server computers to use DCOM


PK7h]c]PKAAOEBPS/img_text/comdg003.htm} Description of the illustration comdg003.eps

This illustration shows two spaces, the Oracle process space and the external process space.

The Oracle process space includes the Oracle database and database instance, COM Automation Feature, Automation class, and possibly user-written Java stored procedures.

The external process space contains the COM Automation server.

The COM feature communicates by COM or DCOM with a COM Automation server and returns a result to the COM feature, then communicates back to the database.

PKU}PKAAOEBPS/img_text/olecom.htm` Description of the illustration olecom.gif

This illustration shows the Microsoft OLE/COM Object Viewer, opened to the IDispatch interface for the Microsoft Excel Chart.

The registry portion of the Viewer shows the Interface number and the CLSID number.

PKF[e`PKAAOEBPS/img_text/comdg001.htm Description of the illustration comdg001.eps

This illustration shows an Oracle database with the COM feature in the center with incoming and outgoing connections.

Client PCs make incoming connections through Oracle Net to the database. The diagram shows three client PCs, but the number is unimportant.

From the Oracle database, arrrows indicate outgoing connections to the following: Microsoft Office (Word, PowerPoint, and Excel), any COM Automation Server, and MAPI-Compliant Applications).

The APIs provided by Oracle COM Automation Feature are used by the client PCs in connection with the software applications listed.

PK.@PKAAOEBPS/img_text/comdg002.htmi Description of the illustration comdg002.eps

This illustration shows two spaces, the Oracle process space and the external process space.

The Oracle process space includes the Oracle database and database instance, and possibly user-written PL/SQL scripts (that is, stored procedures, functions, or triggers).

The external process space contains the COM feature in which the external procedures reside. The external process space also contains the Oracle listener and external procedure handler.

In the Oracle process space, the PL/SQL script accesses the database, and in the external process space, the script starts the Oracle listener, which activates the external procedure handler.

Once the external procedure handler is activated, it activates the COM feature.

The COM feature communicates with a COM Automation server by COM or DCOM and returns a result to the COM feature. The COM feature then passes the result to the external procedure handler, which then communicates back to the database.

PK"%jniPKAAOEBPS/ch1intr.htm< Introducing Oracle COM Automation Feature

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.


Note:

Oracle Database 11g Release 2 (11.2) is the last database version that supports Oracle COM Automation feature. Oracle Database versions, which are released after Oracle Database 11g Release 2 (11.2), will not support Oracle COM Automation feature. You can continue to use Oracle COM Automation feature with existing Oracle Database versions that are covered under the lifetime support policy of Oracle.

This chapter contains these topics:

Overview of Oracle COM Automation Feature

Oracle COM Automation Feature enables you to use Component Object Model (COM)-based components to customize and enhance the functionality of the Oracle database on Windows operating systems.

You can build your own custom components or use the thousands of prebuilt components that are available from third-party independent software vendors (ISVs).

Oracle COM Automation Feature Functionality

Oracle COM Automation Feature provides a mechanism to manipulate COM objects through either PL/SQL or Java.

  • Oracle COM Automation Feature acts as a generic wrapper around the IDispatch interface.

  • Oracle COM Automation Feature externalizes all methods supported by the IDispatch interface.

  • COM objects expose properties, data attributes, and methods (functions that perform an action) to the developer.

  • The IDispatch interface supports three basic operations for any COM object:

    • Gets the value of an exposed property

    • Sets the value of an exposed property

    • Invokes a method on an object

When an Oracle COM Automation Feature application programming interface (API) is invoked from PL/SQL or Java stored procedures, Oracle COM Automation Feature converts the parameters to the appropriate COM Automation data types and then invokes the corresponding IDispatch API with the converted parameters.


See Also:

Chapter 3, "Oracle COM Automation Feature Core Functionality" for descriptions of the data types and APIs

Oracle COM Automation Feature for PL/SQL

Oracle COM Automation Feature for PL/SQL provides a PL/SQL package and exposes a set of application programming interfaces (APIs) to instantiate COM objects. Developers can call these APIs from PL/SQL subprograms, stored procedures, stored functions, or triggers to manipulate COM objects.

There are no restrictions concerning where these COM objects reside. They can be local to the database or accessed remotely through the Distributed Component Object Model (DCOM).

Oracle COM Automation Feature for Java

Oracle COM Automation Feature for Java provides a set of Java APIs to instantiate COM objects. Developers can call these APIs from Java stored procedures, Java functions, or Java triggers to manipulate COM objects.

Oracle COM Automation Feature for Java does not allow in-process COM Automation servers. Developers can use dllhost to support in-process servers.

Benefits of Oracle COM Automation Feature

Oracle COM Automation Feature is a powerful and enabling infrastructure technology for Oracle developers on Windows. It has the following advantages:

Oracle COM Automation Feature Architecture

Figure 1-1 illustrates the interaction between an Oracle database with Oracle COM Automation Feature, client applications, and server applications.

Figure 1-1 Oracle COM Interaction

Description of Figure 1-1 follows
Description of "Figure 1-1 Oracle COM Interaction"

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).

Oracle 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 functions in the C programming language that reside within a DLL. You can invoke Oracle COM Automation Feature APIs in the same manner in which you call a standard PL/SQL stored procedure or function.

Figure 1-2 shows an Oracle database invoking COM Automation external procedure APIs.

Figure 1-2 COM Automation Feature Architecture for PL/SQL

Description of Figure 1-2 follows
Description of "Figure 1-2 COM Automation Feature Architecture for PL/SQL"

Invoking COM Automation External Procedure APIs

The database server invokes any of the COM Automation external procedure APIs as follows:

  1. The PL/SQL interpreter looks up the path name to the Oracle COM Automation Feature DLL (orawpcomVER.dll) where VER is the release version.

  2. The PL/SQL interpreter sends a message to the listener using Oracle Net to start extproc.exe, if it has not already been started for the current user session.

  3. The PL/SQL interpreter passes the procedure name, the parameters, and the path name of the DLL to extproc.exe.

  4. The extproc.exe file loads the DLL and executes the external procedure. Each of the COM Automation external procedure APIs in turn calls Win32 APIs that instantiate a COM object, set or get properties of a COM object, or invoke a method of a COM object.

  5. The extproc.exe file acts as an intermediary and handles any interaction between Oracle COM Automation Feature and the database server.

Architectural Impact on Availability Issues

The dependence on external procedures by Oracle COM Automation Feature for PL/SQL has implications for the availability of the database server.

You do not jeopardize the availability of the database server by using Oracle COM Automation Feature and custom or third-party COM objects in a production environment. Oracle COM Automation Feature operates outside of the Oracle kernel's address space. This safeguards the Oracle database from COM objects that stop abruptly.

Java Architecture

Oracle COM Automation Feature for Java is implemented by the Java Native Interface (JNI). The key components of this architecture are the Automation class and the Java COM Proxy DLL, orawcomVER.dll, where VER is the release version.

The interface is the Automation class, a Java proxy to the 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, orawcomVER.dll, enables Java functions to invoke their corresponding COM functions.

Figure 1-3 illustrates implementation of Oracle COM Automation Feature for Java.

Figure 1-3 COM Automation Feature Architecture for Java

Description of Figure 1-3 follows
Description of "Figure 1-3 COM Automation Feature Architecture for Java"

Reliability

Oracle COM Automation Feature for Java invokes COM components from the database server. However, these COM components are run outside of the Oracle database process. This design prevents unstable COM components from interfering with the database process.

PK5<<PKAAOEBPS/ch5java.htm@ Oracle COM Automation Java Demos

5 Oracle COM Automation Java Demos

This chapter describes how to use the demonstration program designed for Oracle COM Automation Feature for Java.

This chapter contains these topics:

Overview of Oracle COM Automation Feature for Java Demos

Oracle COM Automation Feature for Java includes an example that demonstrates how to use the feature to build solutions. The demo provides base functionality and can serve as a foundation on which to build more customized, complex applications that use COM Automation. This demo is based on the human resources schema available with the sample schema.

The demo exposes a core set of APIs that enable you to do simple operations using Oracle COM Automation Feature. Each COM Automation server, such as Word and Excel, provides more advanced capabilities than what is offered through the demo APIs. To take advantage of these advanced features, you must design and code your own Java classes.

In this release, COM Automation has provided the Microsoft Word Java Demo, which exchanges data between an Oracle Database instance and Microsoft Word.

Microsoft Word Java Demo

The following sections describe how to install the Microsoft Word Java demo and the APIs that it exposes. This demo is provided as an example of the types of solutions that can be built with Oracle Database and Microsoft Word.

The demo creates a Microsoft Word document containing the names of employees in the database.

The Microsoft Word Java demo is installed in the ORACLE_BASE\ORACLE_HOME\com\java\demos directory and provides the following:

Installing the Microsoft Word Java Demo

Microsoft Word must be installed on the local computer before you install this demo.

To install the demo:

  1. Run the loadjava tool from the command line:

    loadjava -force -resolve -user hr ORACLE_BASE\ORACLE_HOME\com\java\demos\TestWORD.class
    Password: password
    
  2. Start SQL*Plus.

    C:\> sqlplus /NOLOG
    
  3. Connect to the Oracle Database instance as the user who will use the Microsoft Word demo. For example:

    SQL> connect hr
    Enter password: password
    
  4. Run the TestWORD.sql script to create the call specification:

    SQL> @ORACLE_BASE\ORACLE_HOME\com\java\demos\TestWORD.sql
    

    See Also:

    Oracle Database Java Developer's Guide for further information about the loadjava tool

Using the Microsoft Word Java Demo

To use the Word demo:

  1. Set SERVEROUTPUT on at the SQL*Plus prompt:

    SQL> SET SERVEROUTPUT ON
    
  2. Call TestWORD() at the SQL*Plus prompt:

    SQL> CALL TestWORD();
    

    This creates a Microsoft Word document (worddemoj.doc) in the C:\ directory. The document contains data from the EMPLOYEES and JOBS tables. These tables are available in the human resources schema in the sample schema.

  3. Open worddemoj.doc to see its contents.

Creating a Custom Application

The public class TestWORD API as described in "Core Functionality" , provides a wrapper around the Word.Basic COM Automation class as well as some sample code that demonstrates how to use the wrapper. This code was written to be run on the Oracle database server.

To create a custom application that uses this wrapper:

  1. Instantiate an object of this class.

  2. Create the Word.Basic object by calling the CreateWordObject method.

  3. Create a new Microsoft Word document with the FileNew method, or open an existing document with the FileLoad method.

  4. Use the FormatFontSize, InsertText, and InsertNewLine methods to add text and formatting to the document.

  5. Save the document with the FileSaveAs or the FileSave method.

  6. Call the FileClose method when you are finished with the document.

  7. Call the DestroyWordObject method when you are finished with the Word.Basic object.

Core Functionality

The following subsections describe the APIs that the Microsoft Word Java demo exposes. These APIs are primitive and do not expose all the functionalities that Microsoft Word exposes through COM Automation.

TestWORD

This API is the constructor. It does nothing.

Syntax

public TestWORD()

CreateWordObject

Creates the Word.Basic COM object.

Syntax

public void CreateWordObject(java.lang.String servername)
WhereIs
servernamethe server on which to create the COM object. Specify null or the empty string for the local server.

DestroyWordObject

This API destroys the Word.Basic COM object.

Syntax

public void DestroyWordObject()

FileNew

This API creates a new Microsoft WORD document.

Syntax

public void FileNew()

Remarks

This API is a wrapper for the FileNewDefault COM method of the Word.Basic COM object.

FileLoad

This API loads an existing Microsoft WORD document.

Syntax

public void FileLoad(java.lang.String filename)
WhereIs
filenamethe name of the file to load.

Remarks

This API is a wrapper for the FileOpen COM method of the Word.Basic COM object.

FormatFontSize

This API sets the font size.

Syntax

public void FormatFontSize(long fontsize)
WhereIs
fontsizethe new font size.

Remarks

This API is a wrapper for the FormatFont COM method of the Word.Basic COM object.

InsertText

This API inserts text into the Microsoft Word document.

Syntax

public void InsertText(java.lang.String textstr)
WhereIs
textstrthe text to insert.

Remarks

This API is a wrapper for the Insert COM method of the Word.Basic COM object.

InsertNewLine

This API inserts a new line into the Microsoft Word document.

Syntax

public void InsertNewLine()

Remarks

This API is a wrapper for the InsertPara COM method of the Word.Basic COM object.

FileSaveAs

This API saves the Microsoft Word document using a specified name.

Syntax

public void FileSaveAs(java.lang.String filename)
WhereIs
filenamethe name of the file.

Remarks

This API is a wrapper for the FileSaveAs COM method of the Word.Basic COM object.

FileSave

This API saves the Microsoft Word document.

Syntax

public void FileSave()

Remarks

This API is a wrapper for the FileSave COM method of the Word.Basic COM object.

FileClose

This API closes the Microsoft Word document, and exits Microsoft Word.

Syntax

public void FileClose()

Remarks

This API is a wrapper for the FileClose and FileExit COM methods of the Word.Basic COM object.

PK#@@PKAA OEBPS/toc.ncx L Oracle® COM Automation Feature Developer's Guide for Microsoft Windows, 11g Release 2 (11.2) Cover Table of Contents List of Figures List of Tables Oracle COM Automation Feature Developer's Guide, 11g Release 2 (11.2) for Microsoft Windows Preface Introducing Oracle COM Automation Feature Installing and Configuring Oracle COM Automation Feature Oracle COM Automation Feature Core Functionality Oracle COM Automation PL/SQL Demos Oracle COM Automation Java Demos COM Automation Error Messages Glossary Index Copyright PKA縑 PKAAOEBPS/content.opf Oracle® COM Automation Feature Developer's Guide for Microsoft Windows, 11g Release 2 (11.2) en-US E10591-05 Oracle Corporation Oracle Corporation Oracle® COM Automation Feature Developer's Guide for Microsoft Windows, 11g Release 2 (11.2) 2011-01-21T18:09:26Z Provides installation, post-installation configuration, and usage information for Oracle COM Automation Feature. PK<PKAA OEBPS/lof.htmI List of Figures

List of Figures

PK2,8/NIPKAAOEBPS/dcommon/prodbig.gif GIF87a!!!)))111BBBZZZsss{{ZRRcZZ!!1!91)JB9B9)kkcJJB991ssc絽Zcc!!{祽BZc!9B!c{!)c{9{Z{{cZB1)sJk{{Z{kBsZJ91)Z{!{BcsRsBc{9ZZk甽kBkR!BZ9c)JJc{!))BZks{BcR{JsBk9k)Zck!!BZ1k!ZcRBZcZJkBk1Z9c!R!c9kZRZRBZ9{99!R1{99R{1!1)c1J)1B!BJRkk{ƽ絵ތkk絵RRs{{{{JJsssBBkkk!!9ss{{ZZssccJJZZRRccRRZZ))cBBJJ99JJ!!c11991199Z11!c!!))Z!!!1BRck{)!cJBkZRZ,HP)XRÇEZ֬4jJ0 @ "8pYҴESY3CƊ@*U:lY0_0#  5tX1E: C_xޘeKTV%ȣOΏ9??:a"\fSrğjAsKJ:nOzO=}E1-I)3(QEQEQEQEQEQEQE֝Hza<["2"pO#f8M[RL(,?g93QSZ uy"lx4h`O!LŏʨXZvq& c՚]+: ǵ@+J]tQ]~[[eϸ (]6A&>ܫ~+כzmZ^(<57KsHf妬Ϧmnẁ&F!:-`b\/(tF*Bֳ ~V{WxxfCnMvF=;5_,6%S>}cQQjsOO5=)Ot [W9 /{^tyNg#ЄGsֿ1-4ooTZ?K Gc+oyڙoNuh^iSo5{\ܹ3Yos}$.nQ-~n,-zr~-|K4R"8a{]^;I<ȤL5"EԤP7_j>OoK;*U.at*K[fym3ii^#wcC'IIkIp$󿉵|CtĈpW¹l{9>⪦׺*ͯj.LfGߍԁw] |WW18>w.ӯ! VӃ :#1~ +މ=;5c__b@W@ +^]ևՃ7 n&g2I8Lw7uҭ$"&"b eZ":8)D'%{}5{; w]iu;_dLʳ4R-,2H6>½HLKܹR ~foZKZ࿷1[oZ7׫Z7R¢?«'y?A}C_iG5s_~^ J5?œ tp]X/c'r%eܺA|4ծ-Ե+ْe1M38Ǯ `|Kյ OVڅu;"d56, X5kYR<̭CiطXԮ];Oy)OcWj֩}=܅s۸QZ*<~%뺃ȶp f~Bðzb\ݳzW*y{=[ C/Ak oXCkt_s}{'y?AmCjޓ{ WRV7r. g~Q"7&͹+c<=,dJ1V߁=T)TR՜*N4 ^Bڥ%B+=@fE5ka}ędܤFH^i1k\Sgdk> ֤aOM\_\T)8靠㡮3ģR: jj,pk/K!t,=ϯZ6(((((((49 xn_kLk&f9sK`zx{{y8H 8b4>ÇНE|7v(z/]k7IxM}8!ycZRQ pKVr(RPEr?^}'ðh{x+ՀLW154cK@Ng C)rr9+c:׹b Жf*s^ fKS7^} *{zq_@8# pF~ [VPe(nw0MW=3#kȵz晨cy PpG#W:%drMh]3HH<\]ԁ|_W HHҡb}P>k {ZErxMX@8C&qskLۙOnO^sCk7ql2XCw5VG.S~H8=(s1~cV5z %v|U2QF=NoW]ո?<`~׮}=ӬfԵ,=;"~Iy7K#g{ñJ?5$y` zz@-~m7mG宝Gٱ>G&K#]؃y1$$t>wqjstX.b̐{Wej)Dxfc:8)=$y|L`xV8ߙ~E)HkwW$J0uʟk>6Sgp~;4֌W+חc"=|ř9bc5> *rg {~cj1rnI#G|8v4wĿhFb><^ pJLm[Dl1;Vx5IZ:1*p)إ1ZbAK(1ׅ|S&5{^ KG^5r>;X׻K^? s fk^8O/"J)3K]N)iL?5!ƾq:G_=X- i,vi2N3 |03Qas ! 7}kZU781M,->e;@Qz T(GK(ah(((((((Y[×j2F}o־oYYq $+]%$ v^rϭ`nax,ZEuWSܽ,g%~"MrsrY~Ҿ"Fت;8{ѰxYEfP^;WPwqbB:c?zp<7;SBfZ)dϛ; 7s^>}⍱x?Bix^#hf,*P9S{w[]GF?1Z_nG~]kk)9Sc5Ո<<6J-ϛ}xUi>ux#ţc'{ᛲq?Oo?x&mѱ'#^t)ϲbb0 F«kIVmVsv@}kҡ!ˍUTtxO̧]ORb|2yԵk܊{sPIc_?ħ:Ig)=Z~' "\M2VSSMyLsl⺿U~"C7\hz_ Rs$~? TAi<lO*>U}+'f>7_K N s8g1^CeКÿE ;{+Y\ O5|Y{/o+ LVcO;7Zx-Ek&dpzbӱ+TaB0gNy׭ 3^c T\$⫫?F33?t._Q~Nln:U/Ceb1-im WʸQM+VpafR3d׫é|Aү-q*I P7:y&]hX^Fbtpܩ?|Wu󭏤ʫxJ3ߴm"(uqA}j.+?S wV ~ [B&<^U?rϜ_OH\'.;|.%pw/ZZG'1j(#0UT` Wzw}>_*9m>󑓀F?EL3"zpubzΕ$+0܉&3zڶ+jyr1QE ( ( ( ( ( ( ( (UIdC0EZm+]Y6^![ ԯsmܶ捆?+me+ZE29)B[;я*wGxsK7;5w)}gH~.Ɣx?X\ߚ}A@tQ(:ͧ|Iq(CT?v[sKG+*רqҍck <#Ljα5݈`8cXP6T5i.K!xX*p&ќZǓϘ7 *oƽ:wlຈ:Q5yIEA/2*2jAҐe}k%K$N9R2?7ýKMV!{W9\PA+c4w` Wx=Ze\X{}yXI Ү!aOÎ{]Qx)#D@9E:*NJ}b|Z>_k7:d$z >&Vv󃏽WlR:RqJfGإd9Tm(ҝEtO}1O[xxEYt8,3v bFF )ǙrPNE8=O#V*Cc𹾾&l&cmCh<.P{ʦ&ۣY+Gxs~k5$> ӥPquŽўZt~Tl>Q.g> %k#ú:Kn'&{[yWQGqF}AЅ׮/}<;VYZa$wQg!$;_ $NKS}“_{MY|w7G!"\JtRy+贾d|o/;5jz_6fHwk<ѰJ#]kAȎ J =YNu%dxRwwbEQEQEQEQEQEQEQEQEQE'fLQZ(1F)hQ@X1KEQE-Q@ 1KE3h=iPb(((1GjZ(-ʹRPbR@ 1KE7`bڒyS0(-&)P+ ڎԴP11F)h&:LRmQ@Q@Š((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( g\==oNYdp+@jhs2X".]q8mQ\V_ Ehl%d24O@@^2QҬudKhCrnWS0H9h^Zm^LfU7 xܑ8hc-m0g5_񧊼WjvZEf%-(ZfKsnlm?|iUZ)1ѐGS0 Fo!5C_E`G$Vյk̗c>p^O %}e`58(6x.$lc1*Ƽe.m, os:Bٲ rB7V P5;z<qyrdݵ9r+B ?JD,[UJ$m̤<@4Xi}֗/xSa=+bnY"J)Wʅ2&f$i-oQ&eűO9##3ހ; ͜7pIuk[WrW#[l~#/Ic}qlSypNH9LU}_ǩx2DȦQcaZ{=kZG;P!O Cg͓#9Q^gVÚ~tk,^cH61¢ ! 7z"1v 1H\#8*EyHo֞1)QM9t"0: 3ޯLе?i++v6gp(?6}[&WO QC~uFfO ˨X~uH>#Qa3_r3](˙>/#˄Lņ<}Ǒ{zZ^|w]B/ڞ(ϛ' G\r*LjF?k:۾>gd䌌z(/mOxsJ`Ӵ^;wvDm .wnES׼eV6 ԭ!a0st^LӮo$mby}EҸ?WTz*0F* &95xIu0(Q)dPI,r@븂xn⸷9$l]H #?!i{ t{d92TA8rԡK !t'MJP ,дEPڠ n9'9LOMuvן?4#3mt6$cw.|8&(%1YR 6p0=Q\5FúqZƠ)toи(.߼rp ύ7iȲjB#:nHC`I8V?IgZk:kHꧽr~u׊<-}"1Y-.U`U\Lwrkwn<+rXS`gyv$/< Ey>xݝ|AA-!6ǪZio*3 q3dkƒWdž- G\®-s+Ga@RJyEyދx~7o#`ՒItR(R n9#^FzNHN^z.K7UOq*9P z :3{eW4<[Xii;QA,p98+>#j_5zkK6H$v7ż1'tx{֓CqS63IRMm݃ Paa}oryQ$о7#T2V+cj<5jPiO;a !C>7]zO˩oxמ.|QhD7G#d=~f((((((((((ĞlQ|%$ vbZ\#P*C;U1PCFxr%Ino%H&$D 7wb(ľE<% Yt Bڬz?x^]=l&AiK/BgJU(?Q?/?zFscޤýΫiq'_,[d[TLO_J! .vpQr3֬PD|9IukAyoWۺgaʒ S߄o KOF^KA_:@6/_w 6 ,o;8,.໵;&A"6  88 ¬PwibԚ&4bA 6x'Y_-q# X^ {Ux%;XY)8PCa6ݎwMcGz垴ve qI1s=2kEGou YǬ$qjz\$ 4<*V;=B{sciBklpaOT(?nsƓg"ޯtÕ$<>蚏>i:No{<2-wL9RAŠk|tw֏zuErVYH2$X,~"xY߇4/N-'93.Pwd=R;˛8no!Ix G#=jy߉l|QK:G:t hMn%#c=3sSu[M#Ѿ&r7Pzg]~07ui9-Y;im.X{ 200H\|!CX9Qk'Ym`ڱ@D.D8$bqӓP›?L}fq[<^GZ̛zVDo#/VcrQN w³=wG47VDYr`^pk!j4=/| /g7OxaȋT %Y&@IG$Oi#_x mOMe lTip70[$ WIEy_ xY:4'{}aeX3f;T rx>Ɨ~+tM+ĐĉyI}ԅeuJ (U5to Kyayز@`ILt5;n>hz$dIkVbNTd>Ey>%A!ɪ]Ew*BD/,3qWq|xvA-ŭPj;\R rq}r2gg{fq|t_x)Mz4JI2NŤMI$pA/R_ammZkJgqpmແ:LICEy^sY?VtkۈJ!Y"ɑ.v95Q@ߋkxH姈-'I!`b . 2cxe<ˎo~m[xBŌgbB!X3GzEQEQEQEQEQEQEQEQEQEQEzMj~Am7Ja{٦3 N[Džx7\m#]k*La8/ !]H vcX_/|M=]Nx%;> U? ^xCMYM{}-X:+@&s 5eÚퟴ1;uW?_9}OݾO9Qz$]`*m2[n!MgXљG;sLrH.Śg->GsYj ZR R\J|9F Xc=Y=%+:,JEduk>,][v~Ԯ%l$T`[ pToͬnѬVv񴄅 qj'h>W> nnCDKWaQ ωu}^*?<*/+ $#R6f(EދܼQ߷E0`̇i9囡Mpv:~ΞHy4A+Yi[ N8 <ɦ_ԘGgI&ii8׽}^Mx⧈P;!+'LE)HpLr9׺WKJ_;PK-ƃ/;Πv[6p{q0[Wk_Z;l cV&6*9}+ ƀ=rŸ$ lnm$1^^/kOeK]znIP8o|ۂ@"1|C|W7E/._3LE ⇌5{'F7Gq!SgC?_\iRO۷gڼmN~lc7o۩j˩ݾ|וWr_4xNh7z6b<Ȓ$aE8q989Nj&oĻI7wqYͼH錔'~Cc+O|g;vgK/qݳ@CHBHUv%|%m`6@|0/V>(,SA xz < a7_MOLGBAD[MvۍՁ9F xݿ4Lյ"y<2 H:Ot [Yi%XTF>pGR1^?L|Yu 7VwG|'ߖ\7@'v3> ˭Kė6*[YYN,Q/3ߧ ZLu?Q<}v)YI"}~b1_>jׁ׉myt^IcF-BS! ;pT6xv_ZHqmc$VYby-NWm~|Ms=g$s\2GQ}瑑 6"??w=#9ր=~Im]M4-M0g5|c Ce~H߾9=+EK[k;t߷}_<2LzK6[ª;$Hc 5/x;b:9(5Spf6F߽='8P@]գt/b7H88jK_ᦽxTtM2㸵 K q88#Q\[ tmo[M*kܱ$ƹ$Y>䓎I|#gpOt:B;Oʮl$;:+%?iƵ%IJv s=sKt8[$#0/ ,N690A(B~FfG=!u"u۽@'sO@jlj|}\Ao:1AHE$ qt4QY6NK" V i :`UC :8|9uciu$& xp)lQ^gu}OjAi=?VӤX&v$0[w@#(_x~Ӯlyi!Gkӷ MHx,t_&30SCt#@-8umZd7mp\-C:kncO٠K5Do5SkWh9 (ociO?xnݳ +Csχ$$M5RԔgU,'~H0I xRu5ݮfkk]$088v#:J+/z>#֛儼IJ$A&ԫeOx@Q@Q@Q@Q@Q@Q@Q@SJ,9$Ki[n!@\dt'7((( nR}tnԆׁ#*p9$rdrpw񷌮-lkh~'gZekIO}2(((((((((((((hu_UxhKi>D6zRx+E_MմVy5 Z\fh{vv8.#a*76U_Dӿ!?L/?{߿nP4R}֟)dvGT @/Jex |ϴ컇cC״|K׮a>=شˉU1LA-]<yg\ <- w 'nqf|} F47I =E.HҩR,['2H&<^" ?ھo<"/+xwWYhuMgׄl58fEU#BH.7hz_:$MCBA h랙oJM}TԬ4<nkArrуcׄuq5SDvfFgW>`r5m:$:D j26vJڸۍcǮPgM?Mm>&&UvLmp28<+_OG?%?>_'1sᧃ/.xQei=vbКOkY4.fG 8]Cmۜd ?zkZ0Qx.ťH\MV2;7vcwsoWNH$x>x46;4C02I8>'oikkQ2 ΀9/Cfi},K`&imRx_$w| &_^]լ4/R w4[%n7)?y@zr.ykDE~l&v!%٢$۹qmb13w?e]O羅nn3Ҁ9_Ht/x҉($](4O gw/ڦ}ᜃ#F#'յm%Tɻj+8p(ii[&hY;ԋ2eÜJH8zǂ|;`icV;Inv8D Əi2u[ΐyV-^QNϥ,]GS+ID} \H+ ؝_;)'n.%"BI#TP2I'5’yBNSO[!\ *_t  Exr%*_}!#U #4 & ֩3|b]L ]t b+Da&R_2lEٱZ`aC)/яmvUkS r(-iPE Vv_{z GLt\2s!F A#葡JY r|AA,hB}q|B`du }00(䡆<pb,G+oB C0p/x$…– ]7 @2HFc ) @AD \0 LHG',(A` `@SC)_" PH`}Y+_|1.K8pAKMA @?3҄$[JPA)+NH I ,@8G0/@R T,`pF8Ѓ)$^$ DDTDlA@ s;PKPKAAOEBPS/dcommon/darbbook.cssPKPKAA!OEBPS/dcommon/O_signature_clr.JPG"(JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (?O '~MQ$Vz;OlJi8L%\]UFjޙ%ԯS;rA]5ފ<׈]j7Ouyq$z'TQuw7Ŀ KX߁M2=S'TQt?.5w'97;~pq=" ~k?`'9q6 E|yayM^Om'fkC&<5x' ?A?Zx'jß={=SßM gVC.5+Hd֪xc^)Җufz{Cީ|D Vkznq|+Xa+{50rx{|OG.OϞ~f/ xxX[2H )c+#jpUOZYX\=SG ߨC|K@;_߆'e?LT?]:?>w ڔ`D^So~xo[Ӡ3i7B:Q8 Vc-ďoi:FM292~y_*_闱YN\Fr=xZ3鳎OwW_QEzW~c]REeaSM}}Hӏ4&.E]u=gMѠ+mF`rNn$w9gMa꺢nTuhf2Xv>އ a(Û6߭?<=>z'TQuw7Ŀ KX߁M2=S'TQt?.5Kko\.8S$TOX߀Gw?Zx汴X)C7~.i6(Щ=+4{mGӭ¸-]&'t_kV*I<1)4thtIsqpQJ+> \m^[aJ5)ny:4o&QEnyAEPEEss 72,PDۢ׃K W{Wjr+wگ iM/;pd?~&?@;7E4gv8 $l'z'TQuw7Ŀ Gֱ=ɿ&G?. iR(5W*$|?w᫼gkmIbHe/_t>tg%y.l}N5[]+Mk0ĠeHdPrsst'UiC,y8`V%9ZIia|ܪvi מYG,o}+kk{YbyIeb*sAtի82zWoEK5z*o-eo;n(P u-I)4Š(HQEQEQEQEhz(X/Đ?}Bk˩ ݏrk0]4>8XzV? }6$}d^F>nU K ?Bտk_9׾x~w'ߞ  uDŽtL ؈5c-E/"|_Oo.IH쐍=i*Iw5(ںw?t5s.)+tQ2dUt5Vĺ.jZ"@IRrZƅY4ߡ_;}ų(KyQf1Aǵt?sZg+?F5_oQR&Dg߿]6FuRD u>ڿxl7?IT8'shj^=.=J1rj1Wl$얲cPx;E,p$֟ˏkw qg"45(ǛkV/=+ũ)bYl~K#˝J_כ5&\F'I#8/|wʾ_Xj Q:os^T1.M_|TO.;?_  jF?g N 8nA2F%i =qW,G=5OU u8]Rq?wr'˻S+۾.ܼ 87Q^elo/T*?L|ۚ<%<,/v_OKs B5f/29n0=zqQq(ª=VX@*J(э(f5qJN_EVǞQEOuoѕOuoa5}gO?:߂8Wא|cڽ~]N&O( (<]>͠@VQ=^~U ̴m&\խ5i:}|}r~9՝f}_>'vVֲ$~^f30^in{\_.O F8to}?${φ|#x^#^n~w=~k~?'KRtO.㌡h![3Zu*ٷճ(ԟ]z_/W1(ԟ]v~g|Yq<ז0 ; b8֮s,w9\?uEyStKaª@\,)) (!EPEPEPEPEPzѧts{v>C/"N6`d*J2gGӧWqBq_1ZuΓ\X]r?=Ey88Mp&pKtO-"wR2 K^-Z< \c>V0^@O7x2WFjs<׻kZ(<Т(OFw/6$1[:ޯԯ#q~4|,LVPem=@=YLUxӃV}AUbcUB.Ds5*kٸAeG>PJxt͝ b88?*$~@ׯD VkraiJs}Q.20x&mXξ,Z]“A-J#`+-E/"<]\a'tZGy.(|lދ~gMK OZdxDŽU9T6ϯ^<Ϡt5CZ]].t۫S=s`ڳ%8iVK:nqe+#<.T6U>zWoy3^I {F?J~=G}k)K$$;$de8*G Uӟ4Ocºw}|]4=ݣ\x$ʠms?q^ipw\"ȿPs^Z Q_0GڼU.t}ROM[G#]8wٞ ӫ87}Cgw vHȩBM55vof =A_٭`Ygx[6 P,5}>蚊(0(+?>+?> k|TuXq6_ +szk :u_ Z߶Ak_U}Jc2u/1[_»ݸG41-bሬ۴}}Eȹפ_c?5gi @cL\L<68hF_Ih>X4K7UТ sMj =J7CKo>Օ5s:߀t ~ηaٿ?|gdL8+gG%o?x`دOqȱwc¨&TW_V_aI=dpG!wu۞սZ1yL50$(l3(:~'ַo A}a3N*[0ǭ HKQV}G@֜$ 9of$ArNqUOgË05#m?D)^_h//5_/<?4}Jį+GkpG4"$ r| >S4Ђ"S 1%R:ȝ 8;PKPz PKAAOEBPS/dcommon/feedback.gif7GIF89a'%(hp|fdx?AN5:dfeDGHɾTdQc`g*6DC\?ؘ||{;=E6JUՄfeA= >@,4`H.|`a (Q 9:&[|ځ,4p Y&BDb,!2@, $wPA'ܠǃ@CO~/d.`I @8ArHx9H75j L 3B/` P#qD*s 3A:3,H70P,R@ p!(F oԥ D;"0 ,6QBRɄHhI@@VDLCk8@NBBL2&pClA?DAk%$`I2 #Q+l7 "=&dL&PRSLIP)PɼirqМ'N8[_}w;PK-PKAAOEBPS/dcommon/booklist.gifGIF89a1޵֥΄kZ{Jk1Rs!BZ)B),@I9Z͓Ca % Dz8Ȁ0FZЌ0P !x8!eL8aWȠFD(~@p+rMS|ӛR$ v "Z:]ZJJEc{*=AP  BiA ']j4$*   & 9q sMiO?jQ = , YFg4.778c&$c%9;PKː5PKAAOEBPS/dcommon/cpyr.htm1 Oracle Legal Notices

Oracle Legal Notices

Copyright Notice

Copyright © 1994-2012, Oracle and/or its affiliates. All rights reserved.

Trademark Notice

Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.

Intel and Intel Xeon are trademarks or registered trademarks of Intel Corporation. All SPARC trademarks are used under license and are trademarks or registered trademarks of SPARC International, Inc. AMD, Opteron, the AMD logo, and the AMD Opteron logo are trademarks or registered trademarks of Advanced Micro Devices. UNIX is a registered trademark of The Open Group.

License Restrictions Warranty/Consequential Damages Disclaimer

This software and related documentation are provided under a license agreement containing restrictions on use and disclosure and are protected by intellectual property laws. Except as expressly permitted in your license agreement or allowed by law, you may not use, copy, reproduce, translate, broadcast, modify, license, transmit, distribute, exhibit, perform, publish, or display any part, in any form, or by any means. Reverse engineering, disassembly, or decompilation of this software, unless required by law for interoperability, is prohibited.

Warranty Disclaimer

The information contained herein is subject to change without notice and is not warranted to be error-free. If you find any errors, please report them to us in writing.

Restricted Rights Notice

If this is software or related documentation that is delivered to the U.S. Government or anyone licensing it on behalf of the U.S. Government, the following notice is applicable:

U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, the use, duplication, disclosure, modification, and adaptation shall be subject to the restrictions and license terms set forth in the applicable Government contract, and, to the extent applicable by the terms of the Government contract, the additional rights set forth in FAR 52.227-19, Commercial Computer Software License (December 2007). Oracle America, Inc., 500 Oracle Parkway, Redwood City, CA 94065.

Hazardous Applications Notice

This software or hardware is developed for general use in a variety of information management applications. It is not developed or intended for use in any inherently dangerous applications, including applications that may create a risk of personal injury. If you use this software or hardware in dangerous applications, then you shall be responsible to take all appropriate fail-safe, backup, redundancy, and other measures to ensure its safe use. Oracle Corporation and its affiliates disclaim any liability for any damages caused by use of this software or hardware in dangerous applications.

Third-Party Content, Products, and Services Disclaimer

This software or hardware and documentation may provide access to or information on content, products, and services from third parties. Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any kind with respect to third-party content, products, and services. Oracle Corporation and its affiliates will not be responsible for any loss, costs, or damages incurred due to your access to or use of third-party content, products, or services.

Alpha and Beta Draft Documentation Notice

If this document is in prerelease status:

This documentation is in prerelease status and is intended for demonstration and preliminary use only. It may not be specific to the hardware on which you are using the software. Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any kind with respect to this documentation and will not be responsible for any loss, costs, or damages incurred due to the use of this documentation.

Oracle Logo

PKN61PKAAOEBPS/dcommon/masterix.gif.GIF89a1ޜΌscJk1Rs!Bc1J),@IS@0"1 Ѿb$b08PbL,acr B@(fDn Jx11+\%1 p { display: none; } /* Class Selectors */ .ProductTitle { font-family: sans-serif; } .BookTitle { font-family: sans-serif; } .VersionNumber { font-family: sans-serif; } .PrintDate { font-family: sans-serif; font-size: small; } .PartNumber { font-family: sans-serif; font-size: small; } PKeӺ1,PKAAOEBPS/dcommon/larrow.gif#GIF87a絵ƌֵƽ{{ss֜ƔZZ{{{{ZZssZZccJJJJRRBBJJJJ991111))!!{,@pH,Ȥrl:ШtpHc`  өb[.64ꑈ53=Z]'yuLG*)g^!8C?-6(29K"Ĩ0Яl;U+K9^u2,@@ (\Ȱ Ë $P`lj 8x I$4H *(@͉0dа8tA  DсSP v"TUH PhP"Y1bxDǕ̧_=$I /& .)+ 60D)bB~=0#'& *D+l1MG CL1&+D`.1qVG ( "D2QL,p.;u. |r$p+5qBNl<TzB"\9e0u )@D,¹ 2@C~KU 'L6a9 /;<`P!D#Tal6XTYhn[p]݅ 7}B a&AƮe{EɲƮiEp#G}D#xTIzGFǂEc^q}) Y# (tۮNeGL*@/%UB:&k0{ &SdDnBQ^("@q #` @1B4i@ aNȅ@[\B >e007V[N(vpyFe Gb/&|aHZj@""~ӎ)t ? $ EQ.սJ$C,l]A `8A o B C?8cyA @Nz|`:`~7-G|yQ AqA6OzPbZ`>~#8=./edGA2nrBYR@ W h'j4p'!k 00 MT RNF6̙ m` (7%ꑀ;PKl-OJPKAAOEBPS/dcommon/index.gifGIF89a1޵ΥΥ{sc{BZs,@IM" AD B0 3.R~[D"0, ]ШpRNC  /& H&[%7TM/`vS+-+ q D go@" 4o'Uxcxcc&k/ qp zUm(UHDDJBGMԃ;PK(PKAAOEBPS/dcommon/bookbig.gif +GIF89a$!!!)))111999BBBJJJRRRZZZccckkksss{{{skkB991)))!!B11))1!JB9B9!!cZ9ƭƽssk{ZZRccZRRJJJBBB9c!!ν)1)k{s絽ƌkssֽZccJRRBJJ{9BB)11)99!!))11!!k!JZ!)RcJccBcs)1c)JZ!BR!)BZ)99J!Rk9!c11B)Z{)9Bkc1kB9BZ!Z{9Rs)Jkksk9kB1s1Jk9Rƥc{k9s)Z{1k91)s1Rk)Jc1J!))BZ!1k{csc{)19B!)Bcsc{ksc{kZs!RkJkJkքc{9Zks{ck9R)Bks9R9R1J!)Z1B!)c)9)99BR19kksBBJcc{ccBBZ))9kk!!199c11ZBB{9!!R!!Z!!c))!!kR!!s!!BcksRZ1c9B)R91c1)Z!R9B9k1)RcZ{)!1B9JB9B)!)J9B!& Imported from GIF image: bookbig.gif,$!!!)))111999BBBJJJRRRZZZccckkksss{{{skkB991)))!!B11))1!JB9B9!!cZ9ƭƽssk{ZZRccZRRJJJBBB9c!!ν)1)k{s絽ƌkssֽZccJRRBJJ{9BB)11)99!!))11!!k!JZ!)RcJccBcs)1c)JZ!BR!)BZ)99J!Rk9!c11B)Z{)9Bkc1kB9BZ!Z{9Rs)Jkksk9kB1s1Jk9Rƥc{k9s)Z{1k91)s1Rk)Jc1J!))BZ!1k{csc{)19B!)Bcsc{ksc{kZs!RkJkJkքc{9Zks{ck9R)Bks9R9R1J!)Z1B!)c)9)99BR19kksBBJcc{ccBBZ))9kk!!199c11ZBB{9!!R!!Z!!c))!!kR!!s!!BcksRZ1c9B)R91c1)Z!R9B9k1)RcZ{)!1B9JB9B)!)J9BH`\Ȑ:pظа"A6DBH,V@Dڹ'G"v Æ ܥ;n;!;>xAܽ[G.\rQC wr}BŊQ A9ᾑ#5Y0VȒj0l-GqF>ZpM rb ;=.ސW-WѻWo ha!}~ْ ; t 53 :\ 4PcD,0 4*_l0K3-`l.j!c Aa|2L4/1C`@@md;(H*80L0L(h*҇҆o#N84pC (xO@ A)J6rVlF r  fry†$r_pl5xhA+@A=F rGU a 1х4s&H Bdzt x#H%Rr (Ѐ7P`#Rщ'x" #0`@~i `HA'Tk?3!$`-A@1l"P LhʖRG&8A`0DcBH sq@AXB4@&yQhPAppxCQ(rBW00@DP1E?@lP1%T` 0 WB~nQ@;PKGC PKAAOEBPS/dcommon/rarrow.gif/GIF87a絵ƌֵƽ{{ss֜ƔZZ{{{{ZZssZZccJJJJRRBBJJJJ991111))!!{,@pH,Ȥrl:ШLlԸ NCqWEd)#34vwwpN|0yhX!'+-[F 'n5 H $/14w3% C .90" qF 7&E "D mnB|,c96) I @0BW{ᢦdN p!5"D`0 T 0-]ʜ$;PKJV^PKAAOEBPS/dcommon/mix.gifkGIF89aZZZBBBJJJkkk999sss!!!111cccֽ{{{RRR)))猌ƭ{s{sks!,@@pH,B$ 8 t:<8 *'ntPP DQ@rIBJLNPTVEMOQUWfj^!  hhG H  kCúk_a Ǥ^ h`B BeH mm  #F` I lpǎ,p B J\Y!T\(dǏ!Gdˆ R53ټ R;iʲ)G=@-xn.4Y BuU(*BL0PX v`[D! | >!/;xP` (Jj"M6 ;PK枰pkPKAAOEBPS/dcommon/doccd_epub.jsM /* Copyright 2006, 2012, Oracle and/or its affiliates. All rights reserved. Author: Robert Crews Version: 2012.3.17 */ function addLoadEvent(func) { var oldOnload = window.onload; if (typeof(window.onload) != "function") window.onload = func; else window.onload = function() { oldOnload(); func(); } } function compactLists() { var lists = []; var ul = document.getElementsByTagName("ul"); for (var i = 0; i < ul.length; i++) lists.push(ul[i]); var ol = document.getElementsByTagName("ol"); for (var i = 0; i < ol.length; i++) lists.push(ol[i]); for (var i = 0; i < lists.length; i++) { var collapsible = true, c = []; var li = lists[i].getElementsByTagName("li"); for (var j = 0; j < li.length; j++) { var p = li[j].getElementsByTagName("p"); if (p.length > 1) collapsible = false; for (var k = 0; k < p.length; k++) { if ( getTextContent(p[k]).split(" ").length > 12 ) collapsible = false; c.push(p[k]); } } if (collapsible) { for (var j = 0; j < c.length; j++) { c[j].style.margin = "0"; } } } function getTextContent(e) { if (e.textContent) return e.textContent; if (e.innerText) return e.innerText; } } addLoadEvent(compactLists); function processIndex() { try { if (!/\/index.htm(?:|#.*)$/.test(window.location.href)) return false; } catch(e) {} var shortcut = []; lastPrefix = ""; var dd = document.getElementsByTagName("dd"); for (var i = 0; i < dd.length; i++) { if (dd[i].className != 'l1ix') continue; var prefix = getTextContent(dd[i]).substring(0, 2).toUpperCase(); if (!prefix.match(/^([A-Z0-9]{2})/)) continue; if (prefix == lastPrefix) continue; dd[i].id = prefix; var s = document.createElement("a"); s.href = "#" + prefix; s.appendChild(document.createTextNode(prefix)); shortcut.push(s); lastPrefix = prefix; } var h2 = document.getElementsByTagName("h2"); for (var i = 0; i < h2.length; i++) { var nav = document.createElement("div"); nav.style.position = "relative"; nav.style.top = "-1.5ex"; nav.style.left = "1.5em"; nav.style.width = "90%"; while (shortcut[0] && shortcut[0].toString().charAt(shortcut[0].toString().length - 2) == getTextContent(h2[i])) { nav.appendChild(shortcut.shift()); nav.appendChild(document.createTextNode("\u00A0 ")); } h2[i].parentNode.insertBefore(nav, h2[i].nextSibling); } function getTextContent(e) { if (e.textContent) return e.textContent; if (e.innerText) return e.innerText; } } addLoadEvent(processIndex); PKo"nR M PKAAOEBPS/dcommon/toc.gifGIF89a1ΥΥ{c{Z{JkJk1Rk,@IK% 0| eJB,K-1i']Bt9dz0&pZ1o'q(؟dQ=3S SZC8db f&3v2@VPsuk2Gsiw`"IzE%< C !.hC IQ 3o?39T ҍ;PKv I PKAAOEBPS/dcommon/topnav.gifGIF89a1ֽ筽ޭƔkZZk{Bc{,@ ) l)-'KR$&84 SI) XF P8te NRtHPp;Q%Q@'#rR4P fSQ o0MX[) v + `i9gda/&L9i*1$#"%+ ( E' n7Ȇ(,҅(L@(Q$\x 8=6 'נ9tJ&"[Epljt p#ѣHb :f F`A =l|;&9lDP2ncH R `qtp!dȐYH›+?$4mBA9 i@@ ]@ꃤFxAD*^Ŵ#,(ε  $H}F.xf,BD Z;PK1FAPKAAOEBPS/dcommon/bp_layout.css# @charset "utf-8"; /* bp_layout.css Copyright 2007, Oracle and/or its affiliates. All rights reserved. */ body { margin: 0ex; padding: 0ex; } h1 { display: none; } #FOOTER { border-top: #0d4988 solid 10px; background-color: inherit; color: #e4edf3; clear: both; } #FOOTER p { font-size: 80%; margin-top: 0em; margin-left: 1em; } #FOOTER a { background-color: inherit; color: gray; } #LEFTCOLUMN { float: left; width: 50%; } #RIGHTCOLUMN { float: right; width: 50%; clear: right; /* IE hack */ } #LEFTCOLUMN div.portlet { margin-left: 2ex; margin-right: 1ex; } #RIGHTCOLUMN div.portlet { margin-left: 1ex; margin-right: 2ex; } div.portlet { margin: 2ex 1ex; padding-left: 0.5em; padding-right: 0.5em; border: 1px #bcc solid; background-color: #f6f6ff; color: black; } div.portlet h2 { margin-top: 0.5ex; margin-bottom: 0ex; font-size: 110%; } div.portlet p { margin-top: 0ex; } div.portlet ul { list-style-type: none; padding-left: 0em; margin-left: 0em; /* IE Hack */ } div.portlet li { text-align: right; } div.portlet li cite { font-style: normal; float: left; } div.portlet li a { margin: 0px 0.2ex; padding: 0px 0.2ex; font-size: 95%; } #NAME { margin: 0em; padding: 0em; position: relative; top: 0.6ex; left: 10px; width: 80%; } #PRODUCT { font-size: 180%; } #LIBRARY { color: #0b3d73; background: inherit; font-size: 180%; font-family: serif; } #RELEASE { position: absolute; top: 28px; font-size: 80%; font-weight: bold; } #TOOLS { list-style-type: none; position: absolute; top: 1ex; right: 2em; margin: 0em; padding: 0em; background: inherit; color: black; } #TOOLS a { background: inherit; color: black; } #NAV { float: left; width: 96%; margin: 3ex 0em 0ex 0em; padding: 2ex 0em 0ex 4%; /* Avoiding horizontal scroll bars. */ list-style-type: none; background: transparent url(../gifs/nav_bg.gif) repeat-x bottom; } #NAV li { float: left; margin: 0ex 0.1em 0ex 0em; padding: 0ex 0em 0ex 0em; } #NAV li a { display: block; margin: 0em; padding: 3px 0.7em; border-top: 1px solid gray; border-right: 1px solid gray; border-bottom: none; border-left: 1px solid gray; background-color: #a6b3c8; color: #333; } #SUBNAV { float: right; width: 96%; margin: 0ex 0em 0ex 0em; padding: 0.1ex 4% 0.2ex 0em; /* Avoiding horizontal scroll bars. */ list-style-type: none; background-color: #0d4988; color: #e4edf3; } #SUBNAV li { float: right; } #SUBNAV li a { display: block; margin: 0em; padding: 0ex 0.5em; background-color: inherit; color: #e4edf3; } #SIMPLESEARCH { position: absolute; top: 5ex; right: 1em; } #CONTENT { clear: both; } #NAV a:hover, #PORTAL_1 #OVERVIEW a, #PORTAL_2 #OVERVIEW a, #PORTAL_3 #OVERVIEW a, #PORTAL_4 #ADMINISTRATION a, #PORTAL_5 #DEVELOPMENT a, #PORTAL_6 #DEVELOPMENT a, #PORTAL_7 #DEVELOPMENT a, #PORTAL_11 #INSTALLATION a, #PORTAL_15 #ADMINISTRATION a, #PORTAL_16 #ADMINISTRATION a { background-color: #0d4988; color: #e4edf3; padding-bottom: 4px; border-color: gray; } #SUBNAV a:hover, #PORTAL_2 #SEARCH a, #PORTAL_3 #BOOKS a, #PORTAL_6 #WAREHOUSING a, #PORTAL_7 #UNSTRUCTURED a, #PORTAL_15 #INTEGRATION a, #PORTAL_16 #GRID a { position: relative; top: 2px; background-color: white; color: #0a4e89; } PK3( # PKAAOEBPS/dcommon/bookicon.gif:GIF87a!!!)))111999BBBJJJRRRZZZccckkksss{{{ޭ{{ZRRcZZRJJJBB)!!skRB9{sν{skskcZRJ1)!֭ƽ{ZZRccZJJBBB999111)JJ9BB1ZZB!!ﭵBJJ9BB!!))Jk{)1!)BRZJ{BsR!RRJsJ!J{s!JsBkks{RsB{J{c1RBs1ZB{9BJ9JZ!1BJRRs!9R!!9Z9!1)J19JJRk19R1Z)!1B9R1RB!)J!J1R)J119!9J91!9BkksBBJ119BBR!))9!!!JB1JJ!)19BJRZckތ1)1J9B,H*\hp >"p`ƒFF "a"E|ժOC&xCRz OBtX>XE*O>tdqAJ +,WxP!CYpQ HQzDHP)T njJM2ꔀJ2T0d#+I:<жk 'ꤱF AB @@nh Wz' H|-7f\A#yNR5 /PM09u UjćT|q~Yq@&0YZAPa`EzI /$AD Al!AAal 2H@$ PVAB&c*ؠ p @% p-`@b`uBa l&`3Ap8槖X~ vX$Eh`.JhAepA\"Bl, :Hk;PKx[?:PKAAOEBPS/dcommon/conticon.gif^GIF87a!!!)))111999BBBJJJRRRZZZccckkksss{{{ZRR޽{{ssskkkcccZ991ccRZZBBJJZck)19ZcsBJZ19J!k{k)Z1RZs1!B)!J91{k{)J!B!B911)k{cs!1s!9)s!9!B!k)k1c!)Z!R{9BJcckZZcBBJ99B119{{!!)BBRBBZ!))999R99Z!!999c1!9!)19B1)!B9R,  oua\h2SYPa aowwxYi 9SwyyxxyYSd $'^qYȵYvh ч,/?g{н.J5fe{ڶyY#%/}‚e,Z|pAܠ `KYx,ĉ&@iX9|`p ]lR1khٜ'E 6ÅB0J;t X b RP(*MÄ!2cLhPC <0Ⴁ  $4!B 6lHC%<1e H 4p" L`P!/,m*1F`#D0D^!AO@..(``_؅QWK>_*OY0J@pw'tVh;PKp*c^PKAAOEBPS/dcommon/blafdoc.cssL@charset "utf-8"; /* Copyright 2002, 2011, Oracle and/or its affiliates. All rights reserved. Author: Robert Crews Version: 2011.10.7 */ body { font-family: Tahoma, sans-serif; /* line-height: 125%; */ color: black; background-color: white; font-size: small; } * html body { /* http://www.info.com.ph/~etan/w3pantheon/style/modifiedsbmh.html */ font-size: x-small; /* for IE5.x/win */ f\ont-size: small; /* for other IE versions */ } h1 { font-size: 165%; font-weight: bold; border-bottom: 1px solid #ddd; width: 100%; } h2 { font-size: 152%; font-weight: bold; } h3 { font-size: 139%; font-weight: bold; } h4 { font-size: 126%; font-weight: bold; } h5 { font-size: 113%; font-weight: bold; display: inline; } h6 { font-size: 100%; font-weight: bold; font-style: italic; display: inline; } a:link { color: #039; background: inherit; } a:visited { color: #72007C; background: inherit; } a:hover { text-decoration: underline; } a img, img[usemap] { border-style: none; } code, pre, samp, tt { font-family: monospace; font-size: 110%; } caption { text-align: center; font-weight: bold; width: auto; } dt { font-weight: bold; } table { font-size: small; /* for ICEBrowser */ } td { vertical-align: top; } th { font-weight: bold; text-align: left; vertical-align: bottom; } ol ol { list-style-type: lower-alpha; } ol ol ol { list-style-type: lower-roman; } td p:first-child, td pre:first-child { margin-top: 0px; margin-bottom: 0px; } table.table-border { border-collapse: collapse; border-top: 1px solid #ccc; border-left: 1px solid #ccc; } table.table-border th { padding: 0.5ex 0.25em; color: black; background-color: #f7f7ea; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc; } table.table-border td { padding: 0.5ex 0.25em; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc; } span.gui-object, span.gui-object-action { font-weight: bold; } span.gui-object-title { } p.horizontal-rule { width: 100%; border: solid #cc9; border-width: 0px 0px 1px 0px; margin-bottom: 4ex; } div.zz-skip-header { display: none; } td.zz-nav-header-cell { text-align: left; font-size: 95%; width: 99%; color: black; background: inherit; font-weight: normal; vertical-align: top; margin-top: 0ex; padding-top: 0ex; } a.zz-nav-header-link { font-size: 95%; } td.zz-nav-button-cell { white-space: nowrap; text-align: center; width: 1%; vertical-align: top; padding-left: 4px; padding-right: 4px; margin-top: 0ex; padding-top: 0ex; } a.zz-nav-button-link { font-size: 90%; } div.zz-nav-footer-menu { width: 100%; text-align: center; margin-top: 2ex; margin-bottom: 4ex; } p.zz-legal-notice, a.zz-legal-notice-link { font-size: 85%; /* display: none; */ /* Uncomment to hide legal notice */ } /*************************************/ /* Begin DARB Formats */ /*************************************/ .bold, .codeinlinebold, .syntaxinlinebold, .term, .glossterm, .seghead, .glossaryterm, .keyword, .msg, .msgexplankw, .msgactionkw, .notep1, .xreftitlebold { font-weight: bold; } .italic, .codeinlineitalic, .syntaxinlineitalic, .variable, .xreftitleitalic { font-style: italic; } .bolditalic, .codeinlineboldital, .syntaxinlineboldital, .titleinfigure, .titleinexample, .titleintable, .titleinequation, .xreftitleboldital { font-weight: bold; font-style: italic; } .itemizedlisttitle, .orderedlisttitle, .segmentedlisttitle, .variablelisttitle { font-weight: bold; } .bridgehead, .titleinrefsubsect3 { font-weight: bold; } .titleinrefsubsect { font-size: 126%; font-weight: bold; } .titleinrefsubsect2 { font-size: 113%; font-weight: bold; } .subhead1 { display: block; font-size: 139%; font-weight: bold; } .subhead2 { display: block; font-weight: bold; } .subhead3 { font-weight: bold; } .underline { text-decoration: underline; } .superscript { vertical-align: super; } .subscript { vertical-align: sub; } .listofeft { border: none; } .betadraft, .alphabetanotice, .revenuerecognitionnotice { color: #e00; background: inherit; } .betadraftsubtitle { text-align: center; font-weight: bold; color: #e00; background: inherit; } .comment { color: #080; background: inherit; font-weight: bold; } .copyrightlogo { text-align: center; font-size: 85%; } .tocsubheader { list-style-type: none; } table.icons td { padding-left: 6px; padding-right: 6px; } .l1ix dd, dd dl.l2ix, dd dl.l3ix { margin-top: 0ex; margin-bottom: 0ex; } div.infoboxnote, div.infoboxnotewarn, div.infoboxnotealso { margin-top: 4ex; margin-right: 10%; margin-left: 10%; margin-bottom: 4ex; padding: 0.25em; border-top: 1pt solid gray; border-bottom: 1pt solid gray; } p.notep1 { margin-top: 0px; margin-bottom: 0px; } .tahiti-highlight-example { background: #ff9; text-decoration: inherit; } .tahiti-highlight-search { background: #9cf; text-decoration: inherit; } .tahiti-sidebar-heading { font-size: 110%; margin-bottom: 0px; padding-bottom: 0px; } /*************************************/ /* End DARB Formats */ /*************************************/ @media all { /* * * { line-height: 120%; } */ dd { margin-bottom: 2ex; } dl:first-child { margin-top: 2ex; } } @media print { body { font-size: 11pt; padding: 0px !important; } a:link, a:visited { color: black; background: inherit; } code, pre, samp, tt { font-size: 10pt; } #nav, #search_this_book, #comment_form, #comment_announcement, #flipNav, .noprint { display: none !important; } body#left-nav-present { overflow: visible !important; } } PKʍPKAAOEBPS/dcommon/rightnav.gif&GIF89a1ֽ筽ޭƔkZZk{Bc{,@ ) l)- $CҠҀ ! D1 #:aS( c4B0 AC8 ְ9!%MLj Z * ctypJBa H t>#Sb(clhUԂ̗4DztSԙ9ZQҀEPEPEPEPEPEPEPM=iԍP Gii c*yF 1׆@\&o!QY00_rlgV;)DGhCq7~..p&1c:u֫{fI>fJL$}BBP?JRWc<^j+χ5b[hֿ- 5_j?POkeQ^hֿ1L^ H ?Qi?z?+_xɔŪ\썽O]χ>)xxV/s)e6MI7*ߊޛv֗2J,;~E4yi3[nI`Ѱe9@zXF*W +]7QJ$$=&`a۾?]N T䏟'X)Ɣkf:j |>NBWzYx0t!* _KkoTZ?K Gc+UyڹgNuh^iSo5{\ܹ3Yos}.>if FqR5\/TӮ#]HS0DKu{($"2xִ{SBJ8=}Y=.|Tsц2UЫ%.InaegKo z ݎ3ֹxxwM&2S%';+I',kW&-"_¿_ Vq^ܫ6pfT2RV A^6RKetto^[{w\jPZ@ޢN4/XN#\42j\(z'j =~-I#:q[Eh|X:sp* bifp$TspZ-}NM*B-bb&*xUr#*$M|QWY ~p~- fTED6O.#$m+t$˙H"Gk=t9r娮Y? CzE[/*-{c*[w~o_?%ƔxZ:/5𨴟q}/]22p qD\H"K]ZMKR&\C3zĽ[PJm]AS)Ia^km M@dК)fT[ijW*hnu Ͳiw/bkExG£@f?Zu.s0(<`0ֹoxOaDx\zT-^ѧʧ_1+CP/p[w 9~U^[U<[tĽwPv[yzD1W='u$Oeak[^ |Gk2xv#2?¹TkSݕ| rݞ[Vi _Kz*{\c(Ck_܏|?u jVڔ6f t?3nmZ6f%QAjJf9Rq _j7Z-y.pG$Xb]0')[_k;$̭?&"0FOew7 z-cIX岛;$u=\an$ zmrILu uٞ% _1xcUW%dtÀx885Y^gn;}ӭ)場QEQ@Q@Q@Q@Q@Q@!4xPm3w*]b`F_931˜[ן+(> E ly;<;MF-qst+}DH @YKlLmؤciN<|]IU)Lw(8t9FS(=>og<\Z~u_+X1ylsj'eՃ*U3`C!N9Q_WܱhKc93^ua>H ƕGk=8~e#_?{ǀe-[2ٔ7;=&K挑5zsLdx(e8#{1wS+ΝVkXq9>&yஏh$zq^0~/j@:/«Vnce$$uoPp}MC{$-akH@ɫ1O !8R9s5ԦYmϧ'OUṡ5T,!Ԛ+s#1Veo=[)g>#< s)ƽُA^䠮ωFUj(ǩ|N3Jڷ睁ϱuږZYGOTsI<&drav?A^_f׻B$,O__ԿC`it{6>G׈C~&$y؎v1q9Sc1fH[ѽ>,gG'0'@Vw,BO [#>ﱺg5ΒFVD%Yr:O5 Tu+O멃]ی38Ze}R&ѝ_xzc1DXgس;<,_,{ƽY'AS#oF.M#~cBuEx7G+Y)(5q+GCV;qF+CLQ)qEC&6z𿊘z}?&w=+)??&\g{;V??׻xGœdٿ׼-Nc')3K]N)iLTӿCdb7Q^a N sd>Fz[0S^s'Zi 77D}kWus ab~~H(>.fif9,~|Jk;YN3H8Y(t6Q݉k͇_÷Z+2߄&[ +Tr^藺97~c܎=[f1RrBǓ^kEMhxYVm<[џ6| kqbѱ| YA{G8p?\UM7Z66 g1U1igU69 u5Pƪ:VVZC=[@ҹ¨$kSmɳО\vFz~i3^a Osŧυ9Q}_3 όO{/wgoet39 vO2ea;Ύ7$U#?k+Ek&dpzbӱ+TaB0gN{[N7Gי}U7&@?>Fz~E!a@s ?'67XxO*!?qi]֏TQN@tI+\^s8l0)2k!!iW8F$(yOּT.k,/#1:}8uT˾+5=O/`IW G֯b.-<= HOm;~so~hW5+kS8s.zwE| ?4ӿw/K N 9?j(#0UT` Wzw}:_*9m>󑓀F?ELzv=8q:=WgJ`nDr Zе<ֹ](Q@Q@Q@Q@Q@Q@Q@Q@ 'IdC0EYJVcMty_~u+Sw-aO n<[YJgL#6i g5ЖDZ14cʝ!!\/M}/_AYR__>oC? _?7_G#RERW쏞KB}JxGSkǕA pƱơP m]hwB7U$Zq M95"3q1ioATߚ{g.t uu2k=;h#YB= fgS :TdLԃ!44mFK{Hrd^7oz|BVr<{)6AXգV»|>*/hS܏z͆OM=Εq (s|s׊LKQI :9NJ)P+!ʣoAF>+=@I}"x/}۠1aנc¹4emC:>p_xWKX` >R3_S½èųp3޺u3N e یbmͺ<_ mnݮ1Op?Gm)Qb%N585'%Ahs\6yw!"&Ɨ._wk)}GP;Z!#\"< *oƾ\)}N>"լ/~]Lg}pBG X?<zZ#x69S=6) jzx=y9O&>+e!!? ?s~k5Gʏ)?*ce7Ox~k5􇔾Q/e7/Ԑ#3OgNC0] ;_FiRl>Q.g>!%k#ú:Kn'&}?U@\pџPtp)v<{_i}Oվֲ3XIYIx~b<D?(=_JXH=bbi=Oh?_ C_O)}oW쏜? %Ƶ;-RYFi`wۭ{ϖZMtQ$"c_+ԃx1*0b;ԕ݋ESQEQEQEQEQEQEQEQEQEQZ(1F)h1K@XLRE&9P (bf{RӨ&)PEPEPbԴPGKZ(iإbn(:A%S0(-&)P+ ڎԴP11F)h&:LRmQ@Q@Š(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((PKje88PKAAOEBPS/dcommon/help.gif!GIF89a1εֵ֜֜{kZsBc{,@ )sƠTQ$8(4ʔ%ŌCK$A HP`$h8ŒSd+ɡ\ H@%' 6M HO3SJM /:Zi[7 \( R9r ERI%  N=aq   qƦs *q-n/Sqj D XZ;PKއ{&!PKAAOEBPS/ch4plsql.htm Oracle COM Automation PL/SQL Demos

4 Oracle COM Automation PL/SQL Demos

This chapter describes how to use Oracle COM Automation Feature demonstration programs for PL/SQL.

This chapter contains these topics:

Overview of Oracle COM Automation Feature for PL/SQL Demos

Oracle COM Automation Feature for PL/SQL includes examples that demonstrate how to use the feature to build solutions. These demos provide base functionality and can serve as a foundation on which to build more customized, complex applications that use COM Automation. The demos are based on the human resources schema available with the sample schema.

Each demo exposes a core set of APIs that enables you to do simple operations using COM Automation. Each COM Automation server, such as Word and Excel, provides more advanced capabilities than what is offered through the demo APIs. To take advantage of these advanced features, you must design and code your own PL/SQL procedures.

In this release, COM Automation has provided the following demos:

  • Microsoft Word Demo - Exchanges data between Microsoft Word and Oracle Database

  • Microsoft Excel Demo - Exchanges data between Microsoft Excel and Oracle Database

  • Microsoft PowerPoint Demo - Exchanges data between Microsoft PowerPoint and Oracle Database

  • MAPI Demo - Exchanges data between Messaging Application Programming Interface (MAPI) compliant applications and Oracle Database

Microsoft Word Demo

The following sections describe how to install the Microsoft Word demo and the APIs that it exposes. This demo is provided as an example of the types of solutions that can be built with Oracle Database and Microsoft Word.

The demo creates a Microsoft Word document containing the names of employees in the database.

The Microsoft Word demo provides the following:

  • ORDWord, a PL/SQL package that exposes several APIs for manipulating Microsoft Word. This package is created by the wordsol.sql script.

  • worddem.sql, a script that displays the capabilities of exchanging data between Oracle Database and Microsoft Word. It exchanges data from the EMPLOYEES and JOBS tables to a Microsoft Word document. These tables are available in the human resources schema in the sample schema.

Installing the Microsoft Word Demo

Microsoft Word must be installed on the local computer before you install this demo.

To install Microsoft Word demos:

  1. Start SQL*Plus.

    C:\> sqlplus /NOLOG
    
  2. Connect to the Oracle database instance as the user who will use the Microsoft Word demo. For example:

    SQL> connect hr
    Enter password: password
    
  3. Run the wordsol.sql script at the SQL*Plus prompt:

    SQL> @ORACLE_BASE\ORACLE_HOME\com\demos\wordsol.sql;
    

    This script creates the ORDWord package in the current user's schema. You will receive the following error several times when you run this script for the first time:

    ORA-04043: object XXXX does not exist. 
    

    These messages are normal.

Using the Microsoft Word Demo

To use the Microsoft Word demo:

  1. Run the worddem.sql script at the SQL*Plus prompt:

    SQL> @ORACLE_BASE\ORACLE_HOME\com\demos\worddem.sql;
    

    This script creates a Microsoft Word document (worddemo.doc) in the C:\ directory. The document contains data from the EMPLOYEES and JOBS tables. These tables are available in the human resources schema in the sample schema.

  2. Open the worddemo.doc file to see its contents.

Core Functionality

The following subsections describe the APIs that the Microsoft Word demo exposes. These APIs are primitive and do not expose all the functionalities that Microsoft Word exposes through COM Automation.

CreateWordObject

This API 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 function returns 0 when successful, or a nonzero value for HRESULT when an error occurs.

FileNew

This API creates a new Microsoft Word document.

Syntax

FUNCTION FileNew() RETURN BINARY_INTEGER;

Remarks

This function returns 0 when successful, or a nonzero value for HRESULT when an error occurs.

FileLoad

This API loads a document into Microsoft Word.

Syntax

FUNCTION FileLoad(filename VARCHAR2) RETURN BINARY_INTEGER;
WhereIs
filenamethe fully qualified filename of the document.

Remarks

This function returns a 0 when successful or a nonzero HRESULT when an error occurs.

FileSave

This API saves the current Microsoft Word document to disk.

Syntax

FUNCTION FileSave() RETURN BINARY_INTEGER;

Remarks

This function returns 0 when successful, or a nonzero value for HRESULT when an error occurs.

FileSaveAs

This API saves the current Microsoft Word document as a specific file.

Syntax

FUNCTION FileSaveAs(filename VARCHAR2) RETURN BINARY_INTEGER;
WhereIs
filenamethe fully qualified filename of the document.

Remarks

This function returns 0 when successful, or a nonzero value for HRESULT when an error occurs.

FileClose

This API closes the current Microsoft Word document.

Syntax

FUNCTION FileClose() RETURN BINARY_INTEGER;

Remarks

This function returns 0 when successful, or a nonzero value for HRESULT when an error occurs.

InsertText

This API inserts a text string into the current Microsoft Word document.

Syntax

FUNCTION InsertText(textstr VARCHAR2) RETURN BINARY_INTEGER;
WhereIs
textstrthe text that will be inserted into the document.

Remarks

This function returns 0 when successful, or a nonzero value for HRESULT when an error occurs.

InsertNewLine

This API inserts a new line into the current Microsoft Word document.

Syntax

FUNCTION InsertNewLine() RETURN BINARY_INTEGER;

Remarks

This function returns 0 when successful, or a nonzero value for HRESULT when an error occurs.

FormatFontSize

This API sets the font size for the current Microsoft Word document.

Syntax

FUNCTION FormatFontSize(fontsize BINARY_INTEGER) RETURN BINARY_INTEGER;
WhereIs
fontsizethe point size of the font.

Remarks

This function returns 0 when successful, or a nonzero value for HRESULT when an error occurs.

Microsoft Excel Demo

The following sections detail how to install the Microsoft Excel 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 Microsoft Excel.

The Microsoft Excel demo provides the following:

  • ORDExcel, a PL/SQL package that exposes several APIs for manipulating Microsoft Excel. This package is created by the excelsol.sql script.

  • exceldem.sql, a script that displays the capabilities of exchanging data between Oracle database instance and Microsoft Excel. It exchanges data from the EMPLOYEES and JOBS tables in Oracle database instance to a Microsoft Excel spreadsheet and puts it in a graph. These tables are available in the human resources schema in the sample schema.

Installing the Microsoft Excel Demo

Microsoft Excel must be installed on the local computer before you install this demo.

To install the Microsoft Excel demo:

  1. Start SQL*Plus.

    C:\> sqlplus /NOLOG
    
  2. Connect to the Oracle Database instance as the user who will use the Microsoft Excel demo. For example:

    SQL> connect hr
    Enter password: password
    
  3. Run the excelsol.sql script at the SQL*Plus prompt:

    SQL> @ORACLE_BASE\ORACLE_HOME\com\demos\excelsol.sql;
    

    This script creates the ORDExcel package in the schema of the current user. You will receive the following error several times when you run this script for the first time:

    ORA-04043: object XXXX does not exist. 
    

    These messages are normal.

Using the Microsoft Excel Demo

To use the Microsoft Excel demo:

  1. Run the exceldem.sql script at the SQL*Plus prompt:

    SQL> @ORACLE_BASE\ORACLE_HOME\com\demos\exceldem.sql;
    

    This script creates a Microsoft Excel spreadsheet (excelxxxxx.xls) in the C:\ directory. The document contains data from the EMPLOYEES and JOBS tables. These tables are available in the human resources schema in the sample schema.

  2. Open the excelxxxxx.xls file, where xxxxx is a time stamp, to see the content of this file.

Core Functionality

The following subsections describe the APIs that the Microsoft Excel demo exposes. These APIs are primitive and do not expose all the functionalities that Microsoft Excel exposes through COM Automation.

CreateExcelWorkSheet

This API 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 function returns 0 when successful, or a nonzero value for HRESULT when an error occurs.

InsertData

This API inserts any kind of data into a specific cell of the current Excel worksheet.

Syntax

FUNCTION InsertData(range VARCHAR2, data any_PL/SQL_data type, data type VARCHAR2) RETURN BINARY_INTEGER;
WhereIs
rangea string that indicates a specific cell in the current Excel worksheet (for example, 'A1', 'B1').
datathe data that you want to insert into the current Excel worksheet.
data typea string that indicates the data type of the data that you are inserting into Excel. The list of available data types 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

any_PL/SQL_data typeany data type supported by COM Automation Feature.

Remarks

This function returns 0 when successful, or a nonzero value for HRESULT when an error occurs.

InsertChart

This API 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;
WhereIs
xposthe x position in the current worksheet where the chart should be inserted
yposthe y position in the current worksheet where the chart should be inserted
widththe width of the chart
heightthe height of the chart
rangethe range of cells to be graphed
typethe data type of the data to be graphed

Remarks

This function returns 0 when successful, or a nonzero value for HRESULT when an error occurs.

SaveExcelFile

This API saves the current Microsoft Excel workbook as a specific file.

Syntax

FUNCTION SaveExcelFile(filename VARCHAR2) RETURN BINARY_INTEGER;
WhereIs
filenamethe fully qualified file name of the Excel workbook

Remarks

This function returns 0 when successful, or a nonzero value for 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 function returns a 0 when successful or a nonzero HRESULT when an error occurs.

Microsoft PowerPoint Demo

The following sections detail how to install the Microsoft PowerPoint 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 Database instance and Microsoft PowerPoint.

The Microsoft PowerPoint demo provides the following:

  • ORDPPT, a PL/SQL package that exposes several APIs for manipulating Microsoft PowerPoint. This package is created by the pptsol.sql script.

  • pptdem.sql, a script that displays the capabilities of exchanging data between Oracle Database instance and Microsoft PowerPoint. It exchanges data from the EMPLOYEES and JOBS tables in Oracle Database instance to a Microsoft PowerPoint document. These tables are available in the human resources schema in the sample schema.

Installing the Microsoft PowerPoint Demo

Microsoft PowerPoint must be installed on the local computer before installing this demo.

To install the Microsoft PowerPoint demo:

  1. Start SQL*Plus.

    C:> sqlplus /NOLOG
    
  2. Connect to the Oracle Database instance as the user who will use the Microsoft PowerPoint demo. For example:

    SQL> connect hr
    Enter password: password
    
  3. Run the pptsol.sql script at the SQL*Plus prompt:

    SQL> @ORACLE_BASE\ORACLE_HOME\com\demos\pptsol.sql;
    

    This script creates the ORDPPT package in the current user's schema. You will receive the following error several times when you run this script for the first time:

    ORA-04043: object XXXX does not exist. 
    

    These messages are normal.

Using the Microsoft PowerPoint Demo

To run the Microsoft PowerPoint demo:

  1. Run the pptdem.sql script at the SQL*Plus prompt:

    SQL> @ORACLE_BASE\ORACLE_HOME\com\demos\pptdem.sql;
    

    This script creates a Microsoft PowerPoint presentation (pptdemo.ppt) on C:\. The document contains a list of employee names.

  2. Open pptdemo.ppt to see its contents.

Core Functionality

The following subsections describe the APIs that the Microsoft PowerPoint demo exposes. These APIs are primitive and do not expose all the functionalities that Microsoft PowerPoint exposes through COM Automation.

CreatePresentation

This API starts the Microsoft PowerPoint COM Automation server and instantiates the objects for a presentation.

Syntax

FUNCTION CreatePresentation (servername IN VARCHAR2) RETURN BINARY_INTEGER;
WhereIs
servernameMicrosoft Powerpoint COM Automation Server name

Remarks

This function returns 0 when successful, or a nonzero value for HRESULT when an error occurs.

AddSlide

This API inserts a new slide in the PowerPoint presentation.

Syntax

FUNCTION AddSlide (layout IN BINARY_INTEGER) RETURN BINARY_INTEGER;
WhereIs
layoutthe layout of the new slide

Remarks

This function returns 0 when successful, or a nonzero value for HRESULT when an error occurs.

SetTitle

This API specifies the title of the PowerPoint slide.

Syntax

FUNCTION SetTitle (title IN VARCHAR2) RETURN BINARY_INTEGER;
WhereIs
titlePowerpoint slide title

Remarks

This function returns 0 when successful, or a nonzero value for HRESULT when an error occurs.

InsertText

This API 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;
WhereIs
orientationorientation of the text box
leftdistance between the left edge of the text box and the left edge of the slide in pixels
topdistance between the top edge of the text box and the top edge of the slide in pixels
widthwidth of the text box in pixels
heightheight of the text box in pixels
texttext entered in the text box

Remarks

This function returns 0 when successful, or a nonzero value for HRESULT when an error occurs.

PresentationSave

This API saves the current PowerPoint presentation.

Syntax

FUNCTION PresentationSave RETURN BINARY_INTEGER;

Remarks

This function returns 0 when successful, or a nonzero value for HRESULT when an error occurs.

PresentationSaveAs

This API saves the current presentation using the specified name.

Syntax

FUNCTION PresentationSaveAs (filename IN VARCHAR2) RETURN BINARY_INTEGER;
WhereIs
filenamethe fully qualified filename of the presentation.

Remarks

This function returns 0 when successful, or a nonzero value for HRESULT when an error occurs.

PresentationClose

This API closes the current PowerPoint presentation.

Syntax

FUNCTION PresentationClose RETURN BINARY_INTEGER;

Remarks

This function returns 0 when successful, or a nonzero value for HRESULT when an error occurs.

Exit

This API exits the PowerPoint program.

Syntax

FUNCTION Exit RETURN BINARY_INTEGER;

Remarks

This function returns 0 when successful, or a nonzero value for 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 an Oracle Database instance and MAPI-compliant applications.

The MAPI demo provides the following:

  • ORDMAPI, a PL/SQL package that exposes several APIs for manipulating the Extended MAPI client.

  • mapidem.sql, a script that displays the capabilities of exchanging data between Oracle Database instance and the Extended MAPI client.

  • mapi.reg, a registration entry file that updates the registry settings.

Setting Up the Environment to Use the MAPI Demo

You must set up certain related applications to use the MAPI demo.


Note:

The following setup requires Microsoft Outlook 2000 or later. Outlook Express will not work.

To set up the environment for the MAPI demo:

  1. Install Exchange Server and create a new account as follows:

    Select Start, Programs, Microsoft Exchange, and then Active Directory Users and Computers.

    Select your domain and expand the folders. Select users and right-click to create a new user.

  2. Install Microsoft Outlook as follows:

    Select Custom Install. Select Collaboration Data Objects.


    Note:

    During the installation, these are not installed by default.

    Select the Corporate or Workgroup option.

  3. Configure Microsoft Outlook and set connection information as follows:

    Add the account that you created on Exchange Server.

    Enter your incoming and outgoing mail servers, and enter the account name and password.

    Select the connection type (for example, LAN).

  4. Set Microsoft Outlook as the default program for the e-mail, newsgroups, and calendar tools as follows:

    From Internet Explorer, choose Tools, Internet Options, Programs and set the fields.

  5. Patch CDO.DLL as mentioned in the MSDN article, 268272. This patched DLL is part of Microsoft Exchange 5.5. Manually copy the patched DLL to the proper location. The default location for this DLL is:

    C:\Program Files\Common Files\System\Mapi\1033\NT
    
  6. Update the registry settings by double-clicking MAPI.REG from the Windows Explorer. MAPI.REG is located in:

    ORACLE_BASE\ORACLE_HOME\com\demos
    

Preparing to Install MAPI Demo

The MAPI Solution invokes Extended MAPI client on behalf of the Oracle Database server. The Oracle Database service on Windows 2000 and higher, by default, runs as the system user LocalSystem. The MAPI profile for user LocalSystem is not easily configured. Before using the MAPI Solution, change both the Oracle Database service and OracleHOME_NAMETNSListenerservice to start up using a login user account.

To prepare to install the MAPI demo:

  1. Log on to Windows using your local user account or domain user account, for example, DOMAIN-1\hr.

  2. Start the MAPI server (for example, Microsoft Outlook) and configure the MAPI profile for the Windows 2000 and higher user DOMAIN-1\hr. Ensure that you can send out e-mail using this profile.

  3. Go to Windows Control Panel/Services.

  4. Shut down the OracleHOME_NAMETNSListener service.

  5. Select the OracleHOME_NAMETNSListener service and click Startup.

  6. Change the Log On As to This Account and fill in DOMAIN-1\hr.

  7. Enter the password and confirm the password for DOMAIN-1\hr.

  8. Restart the OracleHOME_NAMETNSListener service.

  9. Shut down the Oracle Database service.

  10. Select the Oracle Database service and click Startup.

  11. Change Log On As to This Account and fill in DOMAIN-1\hr.

  12. Enter the password and confirm the password for DOMAIN-1\hr.

  13. Restart the Oracle Database service.

Installing the MAPI Demo

The MAPI application, such as Microsoft Outlook 2000 or later, must be installed on the local computer before you install this demo.

To install the MAPI demo:

  1. Start SQL*Plus.

    C:> sqlplus /NOLOG
    
  2. Connect to the Oracle Database instance as the user who will use the MAPI demo. For example:

    SQL> connect hr
    Enter password: password
    
  3. Run the mapisol.sql script at the SQL*Plus prompt:

    SQL> @ORACLE_BASE\ORACLE_HOME\com\demos\mapisol.sql;
    

    This script creates the ORDMAPI package in the current user's schema. You will receive the following error several times when you run this script for the first time:

    ORA-04043: object XXXX does not exist. 
    

    These messages are normal.

Using the MAPI Demo

To use the MAPI demo:

  1. Open mapidem.sql with a text editor and change the e-mail address hr@us.oracle.com in ORDMapi.AddRecipient to your own e-mail address. If you are not using the default as your profile name, also change the profile name that is indicated in ORDMapi.CreateMAPISession, MS Exchange Settings. Save the changes.

  2. Run the mapidem.sql script at the SQL*Plus prompt:

    SQL> @ORACLE_BASE\ORACLE_HOME\com\demos\mapidem.sql;
    

    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 and do not expose all the functionalities that MAPI exposes through COM Automation.

CreateMAPISession

This API 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;
WhereIs
servernameMAPI server name
profilenamename of the profile present in the MAPI server
passwordpassword to connect to the MAPI server

Remarks

This function returns 0 when successful, or a nonzero value for HRESULT when an error occurs.

NewMessage

This API creates a new message.

Syntax

FUNCTION NewMessage RETURN BINARY_INTEGER;

Remarks

This function returns 0 when successful, or a nonzero value for HRESULT when an error occurs.

AddRecipient

This API 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;
WhereIs
emailaddresse-mail address of the recipient

Remarks

This function returns a 0 when successful or a nonzero HRESULT when an error occurs.

SetSubject

This API specifies the subject of the e-mail message.

Syntax

FUNCTION SetSubject (subject VARCHAR2) RETURN BINARY_INTEGER;
WhereIs
subjectthe subject of the e-mail message

Remarks

This function returns 0 when successful, or a nonzero value for HRESULT when an error occurs.

SetBody

This API inserts the body text of the e-mail message.

Syntax

FUNCTION SetBody (messagetext VARCHAR2) RETURN BINARY_INTEGER;
WhereIs
messagetextthe body of the e-mail message

Remarks

This function returns 0 when successful, or a nonzero value for HRESULT when an error occurs.

SendMessage

This API sends the e-mail message to the specified recipients.

Syntax

FUNCTION SendMessage RETURN BINARY_INTEGER;

Remarks

This function returns 0 when successful, or a nonzero value for HRESULT when an error occurs.

EndMAPISession

This API exits the MAPI session.

Syntax

FUNCTION EndMAPISession RETURN BINARY_INTEGER;

Remarks

This function returns 0 when successful, or a nonzero value for HRESULT when an error occurs.

PKEPKAA OEBPS/toc.htm't Table of Contents

Contents

List of Figures

List of Tables

Title and Copyright Information

Preface

1 Introducing Oracle COM Automation Feature

2 Installing and Configuring Oracle COM Automation Feature

3 Oracle COM Automation Feature Core Functionality

4 Oracle COM Automation PL/SQL Demos

5 Oracle COM Automation Java Demos

A COM Automation Error Messages

Glossary

Index

PKW''PKAA OEBPS/lot.htmM List of Tables PKLRMPK AAoa,mimetypePKAA j]oj:iTunesMetadata.plistPKAAYuMETA-INF/container.xmlPKAA[pTOOEBPS/cover.htmPKAA?@:@OEBPS/appendix.htmPKAAfzYY&IOEBPS/ch3core.htmPKAA)`OEBPS/title.htmPKAA܃6OEBPS/glossary.htmPKAA!ڦ &&WOEBPS/preface.htmPKAA-WWOEBPS/index.htmPKAALnKhFhJOEBPS/img/comdg001.gifPKAA3SS>OEBPS/img/comdg003.gifPKAA/ ii3OEBPS/img/comdg002.gifPKAA"l: BBqOEBPS/img/olecom.gifPKAA7h]c]kOEBPS/ch2insta.htmPKAAU}OEBPS/img_text/comdg003.htmPKAAF[e`OEBPS/img_text/olecom.htmPKAA.@OEBPS/img_text/comdg001.htmPKAA"%jniOEBPS/img_text/comdg002.htmPKAA5<<q!OEBPS/ch1intr.htmPKAA#@@^OEBPS/ch5java.htmPKAAA縑 ̟OEBPS/toc.ncxPKAA<OEBPS/content.opfPKAA2,8/NI OEBPS/lof.htmPKAA_ ~OEBPS/dcommon/prodbig.gifPKAAY@ OEBPS/dcommon/doclib.gifPKAAt__(OEBPS/dcommon/oracle-logo.jpgPKAA'6OEBPS/dcommon/contbig.gifPKAA<OEBPS/dcommon/darbbook.cssPKAAMά""!_<OEBPS/dcommon/O_signature_clr.JPGPKAAPz _OEBPS/dcommon/feedbck2.gifPKAA-`OEBPS/dcommon/feedback.gifPKAAː5gOEBPS/dcommon/booklist.gifPKAAN61ZiOEBPS/dcommon/cpyr.htmPKAA!:3.{OEBPS/dcommon/masterix.gifPKAAeӺ1,O}OEBPS/dcommon/doccd.cssPKAA7 OEBPS/dcommon/larrow.gifPKAA#OEBPS/dcommon/indxicon.gifPKAAS'"WOEBPS/dcommon/leftnav.gifPKAAhu,ŅOEBPS/dcommon/uarrow.gifPKAAl-OJOEBPS/dcommon/oracle.gifPKAA(uOEBPS/dcommon/index.gifPKAAGC OEBPS/dcommon/bookbig.gifPKAAJV^ۜOEBPS/dcommon/rarrow.gifPKAA枰pkOEBPS/dcommon/mix.gifPKAAo"nR M OEBPS/dcommon/doccd_epub.jsPKAAv I DOEBPS/dcommon/toc.gifPKAA r~$OEBPS/dcommon/topnav.gifPKAA1FAOEBPS/dcommon/prodicon.gifPKAA3( # OEBPS/dcommon/bp_layout.cssPKAAx[?:OEBPS/dcommon/bookicon.gifPKAAp*c^OEBPS/dcommon/conticon.gifPKAAʍ,OEBPS/dcommon/blafdoc.cssPKAA+&+OEBPS/dcommon/rightnav.gifPKAAje88OEBPS/dcommon/oracle-small.JPGPKAAއ{&!OEBPS/dcommon/help.gifPKAAEIOEBPS/ch4plsql.htmPKAAW'' [OEBPS/toc.htmPKAALRM &OEBPS/lot.htmPK;;"