Introduction
OfficeInside 4 builds on the very basic functionality introduced in Office
Inside 3 in the form of
a "generic" class that can represent any object in the Office Object Model.
This allows the entirety of Office to be accessed.
The root of each of the Office classes is the Application, which
represents Word, Outlook, Excel or Powerpoint. Each of the OfficeInside
classes (oiWord, oiExcel, oiOutlook and oiPowerpoint) have an iApplication
member that represents this object, and allows you to interact with the
Office applications.
From there, a number of child, grandchild, and so on, classes can be accessed to
explore all the methods and properties that the various Office applications have
to offer.
Using the oiObject Class
(recommended reading)
Let's start with an example of accessing the Page Setup properties of a
Worksheet in Excel:
ExcelBook oiExcel ! Instance of the oiExcel class
iSheet oiObject
ipageSetup oiObject
code
ExcelBook.Init()
ExcelBook.iApplication.GetChild('ActiveSheet', iSheet) ! Get the active sheet from oiExcel
iSheet.GetChild('PageSetup', iPageSetup) ! Get the PageSetup for the sheet
centerFooter = 'My Worksheet' ! A string for the center footer contents
iPageSetup.Set('CenterFooter', centerFooter) ! Set the center footer to our string
This simple example demonstrates the fundamentals of the oiObject class.
Starting with the iApplication that the OfficeInside classes provide, the
GetChild method allows any of the child objects to be retrieved. These represent
the elements available in each of the Office applications. For example, in
Excel: Workbook, Worksheet, Cells, Rows etc. are all objects that can be
retrieved. In Outlook items such as Mail, Appointments, Folders and the like are
all objects that can be retrieved and interacted with. ce an object has been
retrieved, the
Get(),
Set() and
CallMethod() methods can be called.
In the example above the
Set() method is used to set a
property called '
CenterFooter' to the passed value (the
centerFooter string).
Now for a slightly more complex example, using Outlook and accessing the
Appointment item, getting and setting it's properties, anding an attendee to an
appointment.
Outlook oiOutlook
Namespace oiObject
Appointment oiObject
Recipients oiObject
Attendee oiObject
ItemID string(_oit:EntryIDSize) ! Standard Entry ID
attendeeList string(1024) ! Semi colon seperated list of attendees
code
ident = 'MAPI'
if Outlook.iApplication.GetChild('GetNamespace', Namespace, ident)
! Get the specific appointment object
if Namespace.GetChild('GetItemFromID', Appointment, ItemID)
Appointment.Set('BusyStatus', oio:Busy) ! Example of setting a property
! Get the Recipients object that is a child of the Appointment
if Appointment.GetChild('Recipients', Recipients)
! The recipients object is now fully accessible, so for example,
! Add a recipient and get the returned object so that it can be modified.
if Recipients.GetChild('Add', Attendee, attendeeName) ! Add to the recpients
Message('Attendee Added.')
Attendee.Set('Type', oio:Required)
else
Message('Failed to add an Attendee.')
end
! Other methods available for the Recpients object include:
! Add(), Item(), Remove() and RemoveAll()
Appointment.Call('Save')
! Refresh the list of attendees (C55 users should call GetProp instead of Get).
Appointment.Get('RequiredAttendees', attendeeList)
Message('Attendees: ' & Clip(attendeeList))
end
else
Message('Could not get the requested appointment, the ID may be invalid.')
end
end
! The objects can be cleaned up directly after use by calling the Kill method:
Namespace.Kill()
Appointment.Kill()
Recipients.Kill()
Attendee.Kill()
(This will be done automatically when the objects go out of scope, but for
procedures that remain open for long periods of time, this can be more
efficient.)
The oiObject class
opens up a whole host of new possibilities, by freeing you from the limitation
of what is built into the base OfficeInside classes. The oiObject class
implements the bulk of the functionality in four classes: oiWord, oiExcel,
oiOutlook and oiPowerpoint. They serve as a good basis for becoming familiar
with the Office Object Model, as well as a good place to start with your own
classes that expand on the built in classes.
A good starting place for what is available is the
Office Developer Reference.
For each of the applications (Word, Excel, Outlook and Powerpoint), see the
Object Model section under Develop Reference.
For example, for MS Word, see the
Word Object Model Reference.
Converting VBA (Macros) to Clarion
Because of the shear size of the Office Object Model it is often difficult to
determine exactly which objects are needed for a particular task. One of the
simplest approaches is to record a macro within the Office application itself. If
you're not sure how to record a macro, check the FAQ section of this doc.
For example in Word we could record a Macro for adding text and an
image to a document. Editing this Macro then displays the VBA code:
Sub quicktest()
'
' quicktest Macro
'
'
Selection.TypeText Text:="Hello World"
Selection.TypeParagraph
Selection.InlineShapes.AddPicture FileName:= _
"C:\Users\Sean\Pictures\bitshift_avatar_exp.png", LinkToFile:=False, _
SaveWithDocument:=True
End Sub
In this case the object being used is the
Selection object. The first
task is the get the
Selection object from the
Document (this isn't done in
the macro above as it is automatically provided).
All objects are a child of the Application object, and each of the
OfficeInside classes has an iApplication property which represents this
object. The GetChild method is used to get each child object. We will
start by getting the Application.ActiveDocument object and then getting
the Selection from the document:
data
Word oiWord
Document oiObject
Selection oiObject
code
Word.iApplication.GetChild('ActiveDocument', Document)
Document.GetChild('Selection', Selection)
In the code snippet above
Word is an oiWord object and both
Document
and
Selection are oiObject objects. Once the required object has been
retrieved from the parents the methods and properties can be accessed. In
the example below we have extended the oiWord class (which derives from
oiWord:
msWord.QuickTest procedure ()
Document oiObject
Selection oiObject
InlineShapes oiObject
code
!First we get a handle to the selection object that hangs off the ActiveDocument class, which is a child of the iApplication class.
if self.iApplication.GetChild('ActiveDocument', Document)
if Document.GetChild('Selection', Selection)
!In the VB macro above, we have the first line, which we will now translate into Clarion code
! Selection.TypeText Text:="Hello World"
!The method name is 'TypeText' and there is one string parameter called 'Text'
Selection.params.AddString('Hello World') !We first add the string parameter (where there are multiple params, this must be done in order)
Selection.CallEx('TypeText') !Now we call the function using CallEx
!In the VB macro above, we have the second line, which we will now translate into Clarion code
! Selection.
TypeParagraph
!The method name is '
TypeParagraph
' and in this case there are no params, so we just call the method
Selection.CallEx('TypeParagraph')
!Now we get a handle to the InlineShapes object that is a child of the Selection class
if Selection.GetChild('InlineShapes', InlineShapes)
InlineShapes.params.AddString('C:\Users\Sean\Pictures\bitshift_avatar_exp.png') !The first parameter for the AddPicture function
InlineShapes.params.AddBool(false) !The second parameter (i.e. the LinkTofile property)
InlineShapes.params.AddBool(true) !The third parameter (i.e. the
SaveWithDocument
property)
inlineShapes.CallEx('AddPicture')
end
end
end
First the Selection.TypeText method is called. Before a method is called
all the parameters required are set, in this case by calling
Selection.params.AddString(). The .params property of the oiObject class
provides parameter handling and type conversion, and allows any number of
parameters to be passed. When the parameter values are stored in variables
of the correct type the Insert method is the primary method that is used
to add parameters:
SomeFunction Function (long longVal, string stringVal, real realVal)
Selection oiObject
code
Selection.params.Insert(longVal)
Selection.params.Insert(stringVal)
Selection.params.Insert(realVal)
In addition to params.
Insert() a number of methods are
provided for explicitly type conversion, passing literal values and for
inserting "Null" values for optional parameters: AddString, AddBString,
AddInt, AddBool, AddNull.
Once the parameters have been set the CallEx method is used to call the
method and pass the parameters. The params.
Free method is
used to clear the parameters so that the next set of parameters can be
added for another method call.
Passing Parameters (oiParams)
The oiObject class provides two forms of parameter passing. The first
is for simple calls which don't take any parameters, or pass a single
integer (long), string or oiObject as a parameter. This uses the simple
Call method:
MyItem.Call('SomeMethod') ! No parameter
MyItem.Call('SomeMethod', stringVal) ! A single parameter
For more complex calls the oiObject.CallEx() method allows any number
of parameters of any types to be passed. It also supports optional
parameters, which can be passes as "Null". The oiObject.params property
allows these parameters to be specified. This property is an instance of
the oiParams class and provides methods for setting the parameters to
pass.
When the parameter values are stored in variables of the correct type
the Insert method is the primary method that is used to add parameters:
SomeFunction Function (long longVal, string stringVal, real realVal)
Selection oiObject
code
Selection.params.Insert(longVal)
Selection.params.Insert(stringVal)
Selection.params.Insert(realVal)
In addition to params.
Insert() a number of methods are
provided for explicit type conversion, passing literal values and for
inserting "Null" values for optional parameters:
AddString
AddString (string sVal, long pType = 0)
Description
Adds the passed string as a parameter. Allows the COM parameter type to
be specified by setting pType to one of the following values:
oiParam:String equate(0) ! string
oiParam:Long equate(1) ! integer (Clarion long)
oiParam:Bool equate(2) ! boolean (Clarion bool)
oiParam:Real equate(3) ! float (Clarion real)
oiParam:Short equate(4) ! Short
oiParam:Const equate(5) ! A Constant (equate).
AddBString
AddBString (string bs)
AddInt
AddInt (long pVal, bool isBool=false)
AddBool
AddBool (long pVal)
AddNull
AddNull ()
Class Methods
Methods provided by the oiObject class, along with examples demonstrating the
typical use of each method.
Construct | The object Constructor |
Destruct | The object Destructor |
Init | Intializes the object as a new object of the selected type |
Kill | Cleans up and clears the object |
IsInitialized | Checks whether the object has been initialized |
GetChild | Retrieves a child object of the current object by name |
GetChildEx | Retrieves a child object and allows parameters to be passed |
GetParent | Returns the Parent of this object |
MoveTo | Moves this object into another oiObject |
AsVariant | Returns the address of a Variant that represents the object |
FromVariant | Creates a new object from a Variant which stores an object |
Get | Retrieves a property of the object |
GetType | Retrieves the type of a property of the object |
GetTypeName | Retrieves a description of the type passed |
Set | Sets a property of the object |
SetString | Set a property and pass a string literal |
SetInt | Set a property and pass a long value |
SetBool | Set a property and pass a Office Boolean value |
Call | Call a method of the object |
CallEx | Call a method of the object |
Construct
Construct ()
Description
The class constructor, called when the object enters scope.
Parameters
None
Return Value
None
Notes
This method should not be called directly. Use the
Init
or
GetChild method to
get a specific object.
See Also
Kill,
Init,
GetChild
Destruct
Destruct ()
Description
The class destructor, handles cleanup when the object is no longer in scope.
The
Kill method can be used to deallocated memory before the object goes to of
scope. Objects can be resused by calling Kill before reusing them.
Parameters
None
Return Value
None
Notes
This method should not be called directly. Use the
Kill method to cause the object to clean up and deallocate memory.
See Also
Kill,
Init,
GetChild
ErrorTrap
ErrorTrap ()
Description
The ErrorTrap method is called when an error occurs. Additional information
is passed to the ErrorTrap method, and it provides centralised error handling.
In addition the method sends debug and error information to the system debug
output if the .debug property of the class is set to True (1) and if the
application was run using one of the OfficeInside debug command line switches
such as /oidebugmax.
Parameters
None
Return Value
None
Notes
This method is a callback method and is
not typically called directly (member of the object will call this method to
trap errors).
See Also
Kill,
Init,
GetChild
Init
Init (string pName, *oiObject iParent, <long itemNumber>), long, proc
Description
Initialises the object and associates it with the Outlook Object Model object
based on the name specified and the parent object passed. Each of the core
OfficeInside objects has an iApplication property, which represents the Office
application associated with that object. This is typically used as the parent
object for retrieving other objects in the Office Object Model heirarchy.
As an alternative to the Init method, the
GetChild method is provided.
Functionaly the two methods are identical, however
GetChild provides
alternative syntax that can improve code legibility. The
GetChild method also
provide additional functionality, allowing string and long parameters. We
recommend using GetChild rather than Init in most cases.
Parameters
Parameter |
Description |
string pName | The name of object to retrieve from the parent. |
*oiObject iParent, | The parent object to get the child from. |
<long itemNumber> | A optional long that identifies which item should be
retrieved. This is typically used when retrieving an item from a collect of
multiple objects (for instance when getting a specific document from a
collection of documents). |
Return Value
Returns True (1) for success and False (0) for failure. In
the event of an error occurring the
ErrorTrap method will be
called with additional information.
Examples
Example |
Appointment oiObject
Recipients oiObject
code
Recipients.Init('Recipients', Appointment)
! Alternative using GetChild to initialise the object:
Appointment.GetChild('Recipients', Recipients)
|
See Also
GetChild
Kill
Kill ()
Description
Cleans up the object and deallocates any memory. This is called automatically
by the destructor when the object is no longer in scope. The Kill method can be
called to clean up before the object is out of scope. It can also be used to
clean up before call the Init or GetChild method to reuse the oiObject object
(see the example below).
Parameters
None
Return Value
Returns True (1) for success and False (0) for failure. In
the event of an error occurring the
ErrorTrap method will be
called with additional information.
Examples
Example |
oItem oiObject
code
Namespace.GetChild('GetItemFromID', oItem, ItemID) ! Get a item from Outlook
! Note: The ItemID passed is an Outlook ID that uniquely identifies and item
! previously added or retrieved.
oItem.Call('Save') ! Call the Save method
Appointment.Set('BusyStatus', oio:Busy) ! Example of setting a property
oItem.Kill() ! Clean up
! The object can now be reused as needed
ExcelBook.iApplication.GetChild('ActiveSheet', oItem) ! Get the active sheet from oiExcel
oItem.Call('Delete') ! Delete the sheet
oItem.Kill() ! Clean up
|
See Also
GetChild ,
Init
GetChild
GetChild (string cName, *oiObject child, <*long itemNumber>), long, proc
GetChild (string cName, *oiObject child, *string identifier), long, proc
Description
Retrieves a child object based on the name specified. The Office Object model
is hierarchical, with the Application object at the root. This allows a child
object to be retrieved from the parent. Once an object is retrieved the methods
and properties can be accessed, along with any child objects that the new object
provides. For example the Documents object is a child of the Word Application
object. The Documents object contains a number of Document children, and each
Document contains child object that represent text , tables, selections and the
like.
Parameters
Parameter |
Description |
string cName | The name of the child object to retrieved. |
*oiObject child, | The object to store the child in. |
<*long itemNumber> | An optional parameter that specifies the position of the
child object in a collection of objects. |
*string identifier | An optional parameter that specifies the identifier of the
child object in a collection of objects. |
Return Value
Returns True (1) for success and False (0) for failure. In
the event of an error occurring the
ErrorTrap method will be
called with additional information.
Examples
Example |
Outlook oiOutlook
Namespace oiObject
Appointment oiObject
Recipients oiObject
code
oiOutlook.Init() ! Initialise the Outlook Object
ident = 'MAPI' ! Get the NameSpace Child
Outlook.iApplication.GetChild('GetNamespace', Namespace, ident)
! Get the specific Appointment child object
Namespace.GetChild('GetItemFromID', Appointment, ItemID)
! Get the Recipients object that is a child of the Appointment
Appointment.GetChild('Recipients', Recipients)
|
See Also
Init,
Kill,
GetParent
GetParent
GetParent (*oiObject iParent), long, proc
Description
Retrieves the parent oiObject, if there is one associated
with the current object.
Parameters
Parameter |
Description |
*oiObject iParent | An oiObject that will hold the parent object. |
Return Value
Returns True (1) for success and False (0) for failure. In
the event of an error occurring the
ErrorTrap method will be
called with additional information.
Examples
Example |
Appointment oiObject
Recipients oiObject
code
Recipients.GetParent(Appointment)
|
See Also
GetChild
FromVariant
FromVariant (*oiVariant vtRet), long
Description
Initializes the object using the passed variant. The
variant contains an COM object. This method is not typically called directly, in
normal use the GetChildEx method
provides the ability to retrieved
Parameters
Parameter |
Description |
vtRet | An oiVariant which contains a COM
object, such as that returned by the Call,
CallEx or Get methods |
Return Value
Returns True (1) for success or False (0)
for failure.
Examples
Example |
Appointment oiObject
varObj like(oiVariant)
code
oItems.pItems.AddInt(1)
! Option1: Get the child object as a Variant and convert it manually
if oItems.CallEx('Item', , varObject) ! Get the item from the Items collection
Appointment.FromVariant(varObject) ! Convert the returned variant to an object
end
! Option 2: Use GetChildEx to convert it internally
oItems.GetChildEx('Item', Appointment)
|
See Also
None
AsVariant
AsVariant (), long
Description
Returns a long that represents the underlying object as a variant. This is
used internally to pass objects as parameters. It is not typically used
directly.
Parameters
None
Return Value
Returns the address of a variant that contains the object if
successful, and zero if a failure occurs..
Examples
Example |
Appointment oiObject
varObj long
code
varObject = Appointment.AsVariant()
|
See Also
None
Get
Get (string propertyName, *long pValue), long, proc
Get (string propertyName, *string pValue), long, proc
Get (string propertyName, *long dateValue, *long timeValue), long, proc
Get (string propertyName, *oiVariant pValue), long, proc
Get (string propertyName, *short pValue), long, proc
Get (string propertyName, *real pValue)
Description
Gets a property from an object using the name of the property.
Note: For Clarion 5.5 users these methods are named GetProp, as the C55
compiler does not allow Get as a method name.
Parameters
Parameter |
Description |
string propertyName | The name of the property to retrieve. |
The following additional parameter options are supported: |
pValue | The variable to receive the specified value. Office
Inside handles the necessary type conversion internally. |
*long dateValue, *long timeValue | When retrieving a date/time,
the object splits the Office date/time into a Clarion date and time and
stores the values in the passed Long variables. |
Return Value
Returns True (1) for success and False (0) for failure. In
the event of an error occuring the
ErrorTrap method will be
called with additional information.
Examples
Example |
Appointment oiObject
NameSpace oiObject
ident string(200) ! Outlook Item Identifier
attendeeList string(4096)
code
ident = 'MAPI'
if Outlook.iApplication.GetChild('GetNamespace', Namespace, ident)
if Namespace.GetChild('GetItemFromID', Appointment, ItemID)
Appointment.Get('RequiredAttendees', attendeeList)
end
end
|
See Also
Set,
Call
GetType
GetType (string propertyName), long
Description
Returns a long that contains the TYPE for the property that matches the
passed propertyName. This can be used to identify the type of a particular
property of an object. Use the
GetTypeName method to convert
the returned integer into
Parameters
Parameter |
Description |
propertyName | The name of the property to fetch the type of. |
Return Value
Returns an integer for the type of the property, or -1 if an
error occurs.
Examples
Example |
Appointment oiObject
varObj long
code
varObject = Appointment.AsVariant()
|
See Also
None
GetType
GetType (string propertyName), long
Description
Returns a long that contains the TYPE for the property that matches the
passed propertyName. This can be used to identify the type of a particular
property of an object. Use the
GetTypeName method to convert
the returned integer into
Parameters
Parameter |
Description |
propertyName | The name of the property to fetch the type of. |
Return Value
Returns an integer for the type of the property, or -1 if an
error occurs.
The following TYPES are defined (Call GetTypeName to
convert the TYPE into a string that contains the type description).
oiVARENUM itemize(0), pre(oi)
VT_EMPTY equate(0)
VT_NULL equate(1)
VT_I2 equate(2)
VT_I4 equate(3)
VT_R4 equate(4)
VT_R8 equate(5)
VT_CY equate(6)
VT_DATE equate(7)
VT_BSTR equate(8)
VT_DISPATCH equate(9)
VT_ERROR equate(10)
VT_BOOL equate(11)
VT_VARIANT equate(12)
VT_UNKNOWN equate(13)
VT_DECIMAL equate(14)
VT_I1 equate(16)
VT_UI1 equate(17)
VT_UI2 equate(18)
VT_UI4 equate(19)
VT_I8 equate(20)
VT_UI8 equate(21)
VT_INT equate(22)
VT_UINT equate(23)
VT_VOID equate(24)
VT_HRESULT equate(25)
VT_PTR equate(26)
VT_oiSafeArray equate(27)
VT_CARRAY equate(28)
VT_USERDEFINED equate(29)
VT_LPSTR equate(30)
VT_LPWSTR equate(31)
VT_RECORD equate(36)
VT_FILETIME equate(64)
VT_BLOB equate
VT_STREAM equate
VT_STORAGE equate
VT_STREAMED_OBJECT equate
VT_STORED_OBJECT equate
VT_BLOB_OBJECT equate
VT_CF equate
VT_CLSID equate
VT_VERSIONED_STREAM equate
VT_BSTR_BLOB equate(0fffh)
VT_VECTOR equate(01000h)
VT_ARRAY equate(02000h)
VT_BYREF equate(04000h)
VT_RESERVED equate(08000h)
VT_ILLEGAL equate(0ffffh)
VT_ILLEGALMASKED equate(0fffh)
VT_TYPEMASK equate(0fffh)
end
Examples
The example below reads the type of the Zoom
property of the Excel PageSetup object. If this is a Boolean value then it
means that zooming is disabled and the Fit To Pages options are being
used. If it is an integer it means that it is enabled. This example
switches the value. Properties with the "dual nature" are fairly uncommon,
however
GetType and
GetTypeName are
still immensely useful for debugging.
Example |
propType long
code
Excel.GetPageSetup()
propType = Excel.PageSetup.GetType('Zoom')
Message('The Zoom property type is ' & Appointment.GetTypeName(propType))
case propType
of oi:VT_BOOL ! If it's currently a Bool it means it is disabled, set it to a Long value to enable it
Excel.Pagesetup.SetInt('Zoom', 96) ! Switch to using a Zoom (96%)
of oi:VT_I4
Excel.Pagesetup.SetBool('Zoom', oi:False)
Excel.Pagesetup.SetInt('FitToPagesWide', 1)
Excel.Pagesetup.SetInt('FitToPagesWide', 1)
end
|
See Also
None
GetTypeName
GetTypeName (long pType), string
Description
Returns a string that contains a description of the TYPE specified by the
pType paramter. Call the GetType method to get the TYPE for a particular
property.
Parameters
Parameter |
Description |
propertyName | The name of the property to fetch the type of. |
Return Value
Returns an integer for the type of the property, or -1 if an
error occurs.
Examples
Example |
Appointment oiObject
varObj long
code
varObject = Appointment.AsVariant()
|
See Also
None
Set
Set (string propertyName, *real pValue), long, proc
Set (string propertyName, *string pValue), long, proc
Set (string propertyName, *long pValue), long, proc
Set (string propertyName, *short pValue), long, proc
Set (string propertyName, long dateValue, long timeValue), long, proc
Set (string propertyName, long pValue), long, proc
Set (string propertyName, *oiObject pObj), long, proc
Description
Sets the value of a property of an object.
Note: For Clarion 5.5 users these methods are named
SetProp, as the C55 compiler does not allow Set as a method name.
Parameters
Parameter |
Description |
string propertyName | The name of the property to set the value for. |
The following additional parameters options are supported: |
pValue | The variable that contains the value to set the property
to, or |
dateValue, timeValue | The Clarion date and time to set the DateTime property to.
The date and time will be automatically converted to the Office DateTime format,
or |
pObj | An oiObject object that represents an object to set the
property to (this is infrequently used and handles the case where a property
being set is itself and object). |
Return Value
Returns True (1) for success and False (0) for failure. In
the event of an error occuring the
ErrorTrap method will be
called with additional information.
Examples
Example |
Appointment oiObject
NameSpace oiObject
ident string(200) ! Outlook Item Identifier
code
ident = 'MAPI'
if Outlook.iApplication.GetChild('GetNamespace', Namespace, ident)
if Namespace.GetChild('GetItemFromID', Appointment, ItemID)
Appointment.Set('BusyStatus', oio:Busy) ! Example of setting a property
end
end
|
See Also
Get,
Call,
SetInt,
SetString,
SetBool
SetInt
SetInt (string propertyName, long pValue), long, proc
Description
Sets the value of a property
of an object and passes an integer by value (allowing
constants or literal values to be passed). Note that for Boolean values the
SetBool method should be called and the Office Boolean value
should be used (
oi:True and
oi:False)
not the Clarion boolean values.
Parameters
Parameter |
Description |
propertyName | The name of the property to set the value for. |
pValue | The value to set the Property to. |
Return Value
Returns True is successful or False if an error occurs.
SetBool
SetBool ((string propertyName, long oiBool), long, proc
Description
Sets the value of a property
of an object where the property is a Boolean type
(msoTristate). The Office Boolean values should be used (
oi:True and
oi:False))
not the Clarion boolean values.
Parameters
Parameter |
Description |
propertyName | The name of the property to set the value for. |
oiBool | The value to set the property to. The
Office Boolean values should be used (oi:True and oi:False))
not the Clarion boolean values. |
Return Value
Returns True is successful or False if an error occurs.
SetString
SetString (string propertyName, string pValue), long, proc
Description
Sets the value of a property
of an object and passes the string by value, allowing
contants, equates and literals to be passed.
Parameters
Parameter |
Description |
propertyName | The name of the property to set the value for. |
pValue | The value to set the Property to. |
Return Value
Returns True is successful or False if an
error occurs.
Call
Call procedure (string methodName), long, proc
Call procedure (string methodName, *long pValue), long, proc
Call procedure (string methodName, *string pValue), long, proc
Call procedure (string methodName, *oiObject pObj), long, proc
Description
Calls a method that belongs to the current object. The
oiObject must be intialised by calling Init, or by passing it to the GetChild
method of the parent, before this functionality can be called.
Parameters
Parameter |
Description |
string methodName | The name of the method to call. |
*long pValue, or *string pValue,
or *oiObject pObj | Optionally a value can be passed to the called method. |
Return Value
Returns True (1) for success and False (0) for failure. In
the event of an error occurring the
ErrorTrap method will be
called with additional information.
Examples
Example |
Appointment oiObject
NameSpace oiObject
ident string(200) ! Outlook Item Identifier
code
ident = 'MAPI'
if Outlook.iApplication.GetChild('GetNamespace', Namespace, ident)
if Namespace.GetChild('GetItemFromID', Appointment, ItemID)
Appointment.Call('Save') ! call the Save method
end
end
|
See Also
CallEx,
Call (multi parameter)
Call
Call (string methodName, *oiObject pObj), long, proc
Description
Calls a method that belongs to the current object. The
oiObject must be intialised by calling Init, or by passing it to the GetChild
method of the parent, before this functionality can be called.
Parameters
Parameter |
Description |
string methodName | The name of the method to call. |
*long pValue, or
*string pValue, or
*oiObject pObj | Optionally a value can be passed to the called method. |
Return Value
Returns True (1) for success and False (0) for failure. In
the event of an error occurring the
ErrorTrap method will be
called with additional information.
Examples
Example |
Appointment oiObject
NameSpace oiObject
ident string(200) ! Outlook Item Identifier
code
ident = 'MAPI'
if Outlook.iApplication.GetChild('GetNamespace', Namespace, ident)
if Namespace.GetChild('GetItemFromID', Appointment, ItemID)
Appointment.Call('Save') ! call the Save method
end
end
|
See Also
CallEx,
Call (multi parameter)
Call
Call (string methodName, *oiParams pParams, long memberType = oi:DISPATCH_METHOD, <*oiVariant
vtRet>), long, proc
Description
Calls a method that belongs to the current object. The
oiObject must be intialised by calling Init, or by passing it to the GetChild
method of the parent, before this functionality can be called. This version of
the call Method allows any number of parameters to be passed using an oiParams
object. This method is not typically used - generally the CallEx method is used
to provide this functionality (the methods are identical in function, this
method simply allows an oiParams object to be passed rather than using the
oiObject.params object).
Parameters
Parameter |
Description |
string methodName | The name of the method to call. |
pParams | An oiParams object which contains all the parameters to
pass. Use the oiParams.Insert and oiParams.Add methods to add parameters to a
call. |
memberType | The type of member being called. By default this is calls a
method of the object, however multiple parameters can also be passed when
getting and setting properties (although this is unusual and seldom used). Can
be one of the following values:
oi:DISPATCH_METHOD - Call a method
oi:DISPATCH_PROPERTYGET - Get a property
oi:DISPATCH_PROPERTYPUT - Put (Set) the value of a property
oi:DISPATCH_PROPERTYPUTREF - Put a property that is a reference |
vtRet [optional] | An optional oiVariant group. If this is passed then the
value returned from the call will be stored in this group. A variant can
represent any type of data, including objects. For methods which return an
object the variant can be passed to an oiObject's FromVariant method to create a
new oiObject which represent that object contained in the variant. |
Return Value
Returns True (1) for success and False (0) for failure. In
the event of an error occurring the
ErrorTrap method will be
called with additional information.
See Also
CallEx
CallEx
CallEx (string methodName, long memberType = oi:DISPATCH_METHOD, <*oiVariant vtRet>), long, proc
Description
Calls a method that belongs to the current object. This
version of the call Method allows any number of parameters to be passed using
the oiObject.params member, which can be used to add any number and type of
parameters to a call.
The oiObject must be intialised by calling Init, or
by passing it to the GetChild method of the parent, before this
functionality can be called.
Parameters
Parameter |
Description |
string methodName | The name of the method to call. |
memberType | The type of member being called. By default this is calls a
method of the object, however multiple parameters can also be passed when
getting and setting properties (although this is unusual and seldom used). Can
be one of the following values:
oi:DISPATCH_METHOD -
Call a method
oi:DISPATCH_PROPERTYGET - Get a property
oi:DISPATCH_PROPERTYPUT - Put (Set) the
value of a property
oi:DISPATCH_PROPERTYPUTREF - Put a
property that is a reference |
vtRet [optional] | An optional oiVariant group. If this is passed then the
value returned from the call will be stored in this group. A variant can
represent any type of data, including objects. For methods which return an
object the variant can be passed to an oiObject's FromVariant method to create a
new oiObject which represent that object contained in the variant. |
Return Value
Returns True (1) for success and False (0) for failure. In
the event of an error occurring the
ErrorTrap method will be
called with additional information.
Examples
The example below calls the Word.Documents.Add
method. It demonstrates getting the Documents object from the Word
application and then calling the Add method, passing four parameters, one
of which is optional. Uses an
oiWord object called Word.
When multiple calls are made using the same .params object call
FreeParams() between each call to clear the values stores.
Example |
! Create a new document. Uses the Word.Documents interface
! to add a new document in Word.
!
! Parameters
! template: The name of the template to be used for the new document.
! If this argument is omitted, the Normal template is used.
! newTemplate: oi:True to open the document as a template. The default value is oi:False.
! documentType: Can be one of the following NewDocumentType constants:
! oiw:NewBlankDocument, oiw:NewEmailMessage, oiw:NewFrameset, or oiw:dNewWebPage.
! The default constant is oiw:NewBlankDocument
! visible: oi:True to open the document in a visible window. If this value is oi:False,
! Microsoft Word opens the document but sets the Visible property of the
! document window to oi:False (hidden). The default value is oi:True.
! Return Value
! Returns True for success of False for failure.
NewDoc Procedure(<string template>, long newTemplate = oi:False, long documentType=oiw:NewBlankDocument, long visible=oi:True)
Documents oiObject
code
if not Word.iApplication.GetChild('Documents', Documents)
return False
end
! Call: Application.Documents.Add(template, newTemplate, documentType, visible)
Documents.params.Free()
if Omitted(2)
Documents.params.AddNull()
else
Documents.params.Insert(template)
end
Documents.params.AddBool(newTemplate)
Documents.params.Insert(documentType)
Documents.params.AddBool(visible)
return Documents.CallEx('Add')
|
See Also
Call
Class Properties
The properties provided by the class. Other than the name property, the class
does not currently provide any properties that can be accessed.
handle | Internal handle to the interface |
parent | Internal handle to the parent interface |
name | The name of this object such as "Cell" or "Range" |
params | oiParams object, used for calls with any number of parameters |
name | string(64)
| The name of this object such as "Cell" or "Range".
This is set by the object after the Init or GetChild method is used to associate
the oiObject with an object in the Office Object Model. It is provided primarily
for debugging and convenience. Setting it directly has no effect. |
How Tos and Examples
Also see the Generics example application, and the example code provided above
for each of the methods.
See the
CallEx
method for additional information and example code.
How To: Pass any number of parameters of any type to a method (or property Get/Set call):
! Inserts the contents of a file into the current document (merging it
! with the document).
! Parameters
! fileName: The name of the file to insert the contents of.
! Notes:
! This calls Selection.InsertFile(fileName, range, confirm, link, attachment)
! The call used in this method merges the file with the current document - i.e.
! it inserts the contents at the end of the current document. The Selection.InsertFile
! method can also be used to insert the contents of a document at a particular
! position (range), as well as it link or attach a document rather than inserting
! it directly.
msWord.InsertFile Procedure(string fileName)
code
if not self.Selection.IsInitialized()
Message('Error, there was no Selection object available. Cannot Insert the file', 'Word File Insertion Error')
return False
end
self.Selection.params.Free()
self.Selection.params.AddString(Clip(fileName))
self.Selection.params.AddNull()
self.Selection.params.AddBool(oi:False)
self.Selection.params.AddBool(oi:False)
self.Selection.params.AddBool(oi:False)
if self.Selection.CallEx('InsertFile') ! Insert the file
return True
else
return False
end
The .params property of each oiObject is an instance of the oiParams
class. This allows any number of parameters to be "inserted" before
calling the CallEx() method to call the method. This approach can also be
used to pass parameters to Get and Set calls by specifying memberType
parameter as a value other than oi:DISPATCH_METHOD, which is the default.
Other support values are:
oi:DISPATCH_PROPERTYGET equate(02h) - Get a property
oi:DISPATCH_PROPERTYPUT equate(04h) - Set a property
oi:DISPATCH_PROPERTYPUTREF equate(08h) - Set a property reference
In addition an oiVariant can be passed to the method using the vtRet
parameter to receive the return value from the call.
How To: Moving Mail Betweeen Folders
The code below demonstrates how to move items between folders. This is
based on the actual code in the
MoveItem method provided by
the
oiOutlook class (of course, using
the
MoveItem method is far simpler is this specific case).
Also note that the oiOutlook object now provides a
GetNameSpace method, so the namespace no longer needs to be
fetched manually, as well as methods to retrieve the Folders collection etc.
This specific example is intended purely to demonstrate the use of the
oiObject class.
Folders oiObject ! The Folders collection
InboxFolder oiObject ! The default Inbox (the source folder in this case)
Items oiObject ! A collection of items in the source folder
DestFolder oiObject ! The destination Folder
MailItem oiObject ! Each item that is processed from the source folder
searchString string(200) ! The search string for matching against a Mail field
destFolderName string(80) ! The name of the destination folder
code
! The root item in Outlook is a "NameSpace", which is identified by the string 'MAPI'
! In these examples the namespace is fetched each time a routine is called, however
! It would be more efficient to fetch it once, and then use it as needed, and only
! call the Kill method when done (or allow the object to do this automatically when
! it goes out of scope).
! Get the default MAPI namespace, and then get the default Inbox
ident = 'MAPI'
if Outlook.iApplication.GetChild('GetNamespace', Namespace, ident)
if InboxFolder.Init('GetDefaultFolder', Namespace, oio:FolderInbox)
! Get the Folders collection that is the parent of the default inbox
if Folders.Init('Folders', InboxFolder) and InboxFolder.GetChild('Items', Items)
destFolderName = 'Test'
if Folders.GetChild('Item', DestFolder, destFolderName)
! Find all mail messages with a specific subject line
searchString = '[Subject]="Test Email From Office Inside"'
if not Items.GetChild('Find', MailItem, searchString)
Message('No matching Mail Items were found.', 'No mail to move')
do Cleanup
exit
end
! Move matching mail items to the DestFolder folder
loop
! Found mail item, move it to the Test folde
MailItem.Call('Move', DestFolder)
MailItem.Kill() ! Clean up for the next item
if not Items.GetChild('FindNext', MailItem)
! Loop until there are no more matching items
break
end
end
end
else
Message('The specified destination folder does not exist')
end
end
end
do MailCleanup
! Cleanup: In this case we clean up explicitly, as these routines take a "once off" approach.
! In actual code the object would typically be used as many times and needed, and the Kill
! method only called if an object needs to be reused for another purpose (getting a different item for example)
! or the object is no longer used. If the Kill method is not explicitly called, then it will be called
! when the object goes out of scope (the procedure that it is declared in exits for example).
MailCleanup routine
NameSpace.Kill()
InboxFolder.Kill()
Folders.Kill()
Items.Kill()
DestFolder.Kill()
MailItem.kill()
How To: Send and Receive for all Accounts.
This example demonstrates using the SyncObject objects
to perform a Send and Receive for all accounts.
i long
SyncCol oiObject
SyncObj oiObject
numAccs long
Outlook oiOulook ! Typically populated by the template
code
if Outlook.GetNameSpace()
if Outlook.pNamespace.GetChild('SyncObjects', SyncCol) ! Get the specific appointment object
SyncCol.GetProperty('Count', numAccs)
loop i = 1 to numAccess
if SyncCol.GetChild('SyncObject', SyncObj, i)
SyncCol.CallMethod('Start')
SyncObj.Kill()
else
break
end
end
else
Message('Could not get the SyncObjects collection from Outlook, cannot send and receive')
end
end
SyncCol.Kill()
FAQ (Frequently Asked Questions)
How do I record a macro in Word
At the time of writing this document, Word 2010, using the View menu:
Select the 'Record Macro' from the ribbon bar:
You will then be able to record what you want to do. At the end of doing the
routine you're wanting to do, select the Stop Recording option from the same
menu and then Click View Macros, and then highlight the macro you just recorded
and click edit. This will take you to the Macro editor and display the VBA
script that you can then use to convert to Clarion code (see
Converting a Macro from VBA to Clarion using
OfficeInside for more detail).