Page 14: Automation and Data Script

AutomationScreenshot

The Data Script functions of Mobile Data Studio are the same as for the predecessor Pocket PC Creations software, and are accessed via the Data menu of the toolbar when a project is open. The 'PPCC' references are retained to respect the many previous deployments of Data Script in association with Pocket PC Creations.

Mobile Data Studio supports COM/OLE Automation, making its internal object model accessible for Data Script and external applications.  The Object Model is the same for these areas, however the different methods require slightly different set ups: 

Programming Mobile Data Studio from Other Applications (such as Microsoft Access, Microsoft SQL Server, MySQL, Oracle, SAP, Microsoft Visual Basic, etc) 

In order to control and interact with Mobile Data Studio (PPCC, based on predecessor Pocket PC Creations), it must first be running on the PC.  The first step is to retrieve the PPCC Application object.  In VB or VBScript: 

Set oPPCC = CreateObject( "PPCC.Application" )  

It may be helpful to add "PPCC" to the Access, SQL Server (or Excel) or VB project's References, so that the full type information of PPCC is available in the database design area (with the helpful auto-complete, etc). This also allows use of strongly typed variables, e.g. the above would become:  

Dim oPPCC As PPCC.Application

Set oPPCC = CreateObject( "PPCC.Application" )

This is not necessary, but it can be helpful. 

Brief coverage of the Mobile Data Studio Object Model (Application, Project, Database, Session) follows. Examples of Data Script are provided below. If you require a customised Data Script for your integration and automation of Mobile Data Studio, please contact Mobile Technologies who can provide a commercial service.

Application

Once you have retrieved the PPCC.Application object, you can communicate with PPCC and achieve most common (and some uncommon) tasks.  For example, the following VB/VBScript code would iterate through every project open in Mobile Data Studio, and synchronise it:  

-- BEGIN -- 

' Code to synchronise all projects in Mobile Data Studio
Sub SyncPPCC() 

    ' Get the running PPCC application
    Dim oPPCC As PPCC.Application
    Set oPPCC = CreateObject( "PPCC.Application" ) 

    ' Iterate through each project open in the application
    Dim oProject As PPCC.Project 

    For Each oProject In oPPCC.Projects
        ' Synchronise the project
        oProject.Synchronise
    Next

End Sub 

-- END --   

Project

As you can see if you set up the References, the PPCC.Application object contains a Projects property which is a collection of the projects open in Mobile Data Studio. You can reference a project by number, or by filename if desired, eg: 

oPPCC.Projects("C:\Projects\Test.ppc") or oPPCC.Projects(1) 

Additionally, if a project is not yet open in Mobile Data Studio you can open or create a project from file, using: 

oPPCC.Projects.Open("C:\Projects\Test.ppc") 

The PPCC.Project object exposes a number of properties that can be used to edit and access the project. Two key properties are:

  •  Pages - a collection of pages in the project

  •  Database - a PPCC.Database object where sessions are stored

Beneath the Pages property is obviously a lot of project-design specifics, which if desired can be accessed to learn about the structure of a project, modify a project on the fly or even create a project from scratch (possibly based on a database table, etc). 

Database 

The PPCC.Database object is a collection of PPCC.Session objects, which represent sessions stored in the project. It can be enumerated or accessed by index. Also a new session can be created with the Add method.  

Here is an example that takes the first open project, synchronises it with a mobile device, then iterates through each session in its database and displays the contents: 

-- BEGIN -- 

' Code to synchronise a specific project, and read the session results

Sub ShowProjectPPCC() 

    ' Get the running PPCC application
    Dim oPPCC As PPCC.Application
    Set oPPCC = CreateObject( "PPCC.Application" ) 

    ' Get the first loaded project
    Dim oProject As PPCC.Project
    Set oProject = oPPCC.Projects(1) 

    ' Synchronise it
    oProject.Synchronise 

    ' Get the session database
    Dim oDatabase As PPCC.Database
    Set oDatabase = oProject.Database 

    ' Iterate through the sessions in the database

    Dim oSession As PPCC.Session 

    For Each oSession In oDatabase 

    ' Here, something would be done with the session data. For this example, the 
     fields will be listed in a big MsgBox   

        strMessage = ""
        For Each strItem In oSession
            strMessage = strMessage & strItem & vbCrLf
        Next   

        MsgBox strMessage
        Next

    ' Here it may be appropriate to delete the sessions, for example, if they have now 
     been moved into Access

End Sub 

-- END --   

Session

The other object that has been used in this example is the PPCC.Session object, which represents a stored project session (data). The Session object is similar to a dictionary, storing a set of key-value pairs that correspond to the ID names of points in the project. It has some other information properties (Date, LastSaved, Name, UnitID) which reflect where and when the session was created and modified.  

The keys can be accessed by index o.Key(1), as can the values, o.Value(1), up to o.Count. The more common way to look up values however is to index them by their key, for example if the project has a point named "Rank", then you could retrieve the value with o("Rank") or o.Item("Rank"). The session can also be iterated through, in which case it will return key/value pairs in the form "key=value" (strings).  

Sessions also have some methods that can be of use. The Save method commits changes to the session to the database, or adds the session to the database if it is not already in there. (You can tell if a session is in the database via the Archived property). The Clone method makes a copy of the session, with all data intact. The new session is of course not "archived", i.e. not in the database, although you could call its Save method to add it. You can also use the Delete method, which removes a session from the database. This has no effect if the session isn't in the database to begin with.  

 The SendToClient method transmits a session over the TCP/IP wireless network to the specified client.  The SendToLocal method sends the session to a locally connected Windows Mobile device.

Data Script

Programming Mobile Data Studio from Data Script   

(See also: Object Model reference material)

In some cases a more convenient way to program/script Mobile Data Studio for tasks is to write script directly in the Mobile Data Studio Data Script window.  This avoids having to create a separate application in Access, SQL Server or VB, or another development environment. 

The Data Scripting facility allows Mobile Data Studio events to be handled by complex VBScript, to extend the functionality beyond what is offered in the normal processing pathways (which is limited to XML, HTML, ADO, Excel output and XML input). 

The Data Script runs on the Windows server/PC only, and is used to respond to project events relating to the processing of data (sessions).  While a developer can create any Subs or Functions , there are four which have special meaning, and are run automatically by Mobile Data Studio in response to events:

OnIncomingSession is executed when a new project session (data) arrives from a mobile device, either via the ActiveSync cradle or via a wireless TCP/IP connection.  The session is passed as an argument (for more information about the PPCC.Session object, see below).  If this function returns True, normal processing proceeds (as specified in the Data Pathway dialog).  If False, no further processing is performed.

*  OnSourceSession is executed when a new XML input file is detected and processed.  This applies only when XML input is enabled, for example when collaborating with Microsoft BizTalk server.  Once again the session is passed as an argument, and returning True will allow default processing (as configured in XML Input options) to continue.

*  OnIdle is executed every few seconds, and is not passed any arguments.  The script can use this opportunity to perform any tasks it wishes.  A good example would be to query a database, or web data source, and transfer data into Mobile Data Studio project sessions for dispatch to mobile devices.  Any scriptable COM objects can be used to perform these tasks, such as ADO for accessing data sources.

*  OnTelegram is executed when a telegram is received from a mobile device connected via TCP/IP.  Telegrams can be used for real-time communication between the server and wireless mobile clients and are supported by the Telegram Point.

There are several differences between working in the Data Script window and working from an external application. 

Firstly, there is no need to obtain the Application object using GetObject() or other means.  Both the Application and Project objects are provided automatically.  So for example:

' Sync the project:

Project.Synchronise

 ' Or even easier:

Synchronise

Both of the above methods will call the Project object's Synchronise method. Because the project is the default context, there is no need to type "Project." when accessing its members.  

Similarly, when scripting within Mobile Data Studio, objects are often passed as arguments (such as the session object in the OnIncomingSession procedure). 

VBScript is the language used for writing Mobile Data Studio Data Script, thus strong types are not allowed, and there is no need to declare variables.  The following lines could be used in Visual Basic or Access, but are not appropriate in VBScript: 

    Dim oProject As PPCC.Project

    Set oProject = oPPCC.Projects(1) 

Instead it should just be: 

    Set oProject = oPPCC.Projects(1)

The Data Scripting functionality can be used to programmatically store information in a database, using ADO (rather than ODBC).  Data scripting uses the VBScript language.  

Example: Adding Data to a Database  

Function OnIncomingSession (theSession)  

 ' Create database object and open

 Set oDB = CreateObject( "ADODB.Connection" )
 oDB.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Path\Database.mdb" 

 ' Create recordset object and open a table
 Set oRS = CreateObject( "ADODB.Recordset" )
 oRS.Open "SomeTableName", oDB, 3, 3, 2
 

 ' Add a new record

 oRS.AddNew
 oRS("Field1") = theSession("PointName1")
 oRS("Field2") = theSession("PointName2")
 oRS("Field3") = theSession("PointName3")
 oRS("Field4") = theSession("PointName4")

 
oRS.Update 

 ' Close the recordset object
 oRS.Close
 Set oRS = Nothing 

 ' Release the database
 Set oDB = Nothing 

 ' Allow default session processing to continue (change to False to disable

 ' normal processing)

 OnIncomingSession = True 

End Function   

Note: The UnitID, GUID, Finished and Date are a property of the session, rather than a point in the project, for example:

oRS("UnitID") = theSession.UnitID
oRS("GUID") = theSession.GUID 

Note: with image data the header may need to be removed by a 'GetDecodedItem' method; for example oRS("Image1") = theSession.GetDecodedItem("Image1").

Example: Updating a Database

Example for updating a row in a database identified by a customer number:

Function OnIncomingSession (theSession)  
 
 ' This sub demonstrates updating an Access database table row based on the
' supplied session data
 
 ' Create an ADO connection and open the database "C:\Access\Customer.mdb"
 Set oDB = CreateObject( "ADODB.Connection" )
 oDB.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Access\Customer.mdb"
 
 ' Create a SQL string to select the row to update
 sSelect = "SELECT * FROM Table1 WHERE CustomerID=" & theSession("CustomerIDPoint")
 
 ' Open a recordset, and execute the select statement
 Set oRS = CreateObject( "ADODB.Recordset" )
 oRS.Open sSelect, oDB, 3, 3, 1 ' Note the "1" as the last argument
 
 ' Make sure we found an existing row
 If Not OrS.EOF Then
 
  ' Update the database fields matching specified session point ID names 
  oRS("Data11") = theSession("Data11")
  oRS("Data27") = theSession("Data27")
  oRS("Data32") = theSession("Data32")
  oRS("Data46") = theSession("Data46")
 
  ' Commit the update
  oRS.Update
 
 End If
 
 ' Close and release
 oRS.Close
 Set oRS = Nothing
 Set oDB = Nothing
 
End Function

Example: Adding Data to Multiple Tables in a Database

Example for inserting rows of data in two or more tables:
 
Function OnIncomingSession (theSession)  
 
 ' Create database object and open
 
 Set oDB = CreateObject( "ADODB.Connection" )
 oDB.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Path\Database.mdb" 
 
 ' Create a first recordset object and open a table called "NameOfTheFirstTable"
 Set oRS = CreateObject( "ADODB.Recordset" )
 oRS.Open "NameOfTheFirstTable", oDB, 3, 3, 2 
 
 ' Add a new row to the "NameOfTheFirstTable" table
 oRS.AddNew
 oRS("Field1") = theSession("PointName1") ' Add one field
 oRS("Field2") = theSession("PointName2") ' Add another field
 oRS.Update 
 
 ' Close the first recordset object
 oRS.Close
 Set oRS = Nothing 
 
 ' Create a second recordset object and open a table called "NameOfTheSecondTable"
 Set oRS = CreateObject( "ADODB.Recordset" )
 oRS.Open "NameOfTheSecondTable", oDB, 3, 3, 2 
 
 ' Add a new row to the "NameOfTheSecondTable" table
 oRS.AddNew
 oRS("Field3") = theSession("PointName3") ' Here we add some other field
 oRS("Field4") = theSession("PointName4") ' And another
 oRS.Update 
 
 ' Close the second recordset object
 oRS.Close
 Set oRS = Nothing 
 
 ' Release the database
 Set oDB = Nothing 
 
 ' Allow default session processing to continue (change to False to disable
 
 ' normal processing)
 
 OnIncomingSession = True 
 
End Function  

Example: Sending a Telegram

The Telegram point (see Skills tutorial page 6) is the interface for sending and receiving telegrams. Any incoming telegrams for a project are passed to the OnTelegram function in Data Script: 

Function OnTelegram(theTelegram)

End Function 

The argument "theTelegram" is the received telegram, just like in OnIncomingSession with "theSession".  The script code can extract values from the telegram in the usual way: 

MsgBox "The TelegramName is " & theTelegram("TelegramName")

MsgBox "The GUID is " & theTelegram("GUID")

MsgBox "The value of the XYZ point is " & theTelegram("XYZ")

MsgBox "The telegram was sent from unit " & theTelegram.UnitID 

Note the special syntax for UnitID, as UnitID is a property of the telegram, rather than data in the telegram. 

It's also simple for data script to send telegrams to mobile devices.  A telegram is created, then data values are added to it, then it is sent to one or more mobile devices: 

Set t = Project.NewTelegram 

t("TelegramName") = "MyTelegramName"

t("PointName") = "New Point Value" 

t.SendToClient "UnitIDGoesHere"

t.SendToClient "SendingToAnotherUnitID" 

Note how the UnitID of the target mobile device is specified as an argument to the SendToClient method.  This makes it possible to send telegrams upon any event.  However in the common case that a telegram is being sent in response to one that was received, in the OnTelegram function, one would usually send the response telegram back to the same unit that sent the request. 

A full example then: 

Function OnTelegram(theTelegram)

  Set reply = Project.NewTelegram ' Make a new telegram

  reply("TelegramName") = theTelegram("TelegramName") ' Use the same name

  reply("PointName") = "Hello, " & theTelegram("PointName") ' Change a point value

  reply.SendToClient theTelegram.UnitID ' Send the reply to the unit that sent us a telegram

  MsgBox "Replied to the telegram!" ' Show a debugging message box on the server

End Function 

This code snippet will work with a simple project that contains one Telegram point, and a single Edit point named "PointName". 

Telegram to a Text File

Here is some example Data Script that can save some values from a telegram to a text file (many could be saved): 

Function OnTelegram( theTelegram )
 
 Set fso = CreateObject( "Scripting.FileSystemObject" )
 Set file = fso.CreateTextFile( "c:\filename.txt", True )
 
 file.WriteLine "Received a telegram from " & theTelegram.UnitID & ":"
 file.WriteLine "PointName1 = " & theTelegram("PointName1")
 file.WriteLine "PointName2 = " & theTelegram("PointName2")
 
 file.Close
 

End Function

And a specific example using the demonstration Telegram Text Test project (download) and Data Script below.

Function OnTelegram(theTelegram)

'CREATE TEXT FILE RESPONSE

Set fso = CreateObject( "Scripting.FileSystemObject" )

Set file = fso.CreateTextFile("C:\Telegram\" & theTelegram.UnitID & "Telegram.txt", True )

file.WriteLine "From=" & theTelegram.UnitID

file.WriteLine "The GUID is=" & theTelegram( "GUID" )

file.WriteLine "Activity=" & theTelegram("Activity")

file.WriteLine "Type=" & theTelegram("Type")

file.WriteLine "MobileDateTime=" & theTelegram("MobileDateTime")

file.WriteLine "Time=" & Now

file.Close

End Function

Telegram to a Database

Function OnTelegram( theTelegram )

' This code demonstrates updating an existing row in a database when a ' telegram arrives with new information.

' Only respond to a particular TelegramName, "UpdateJob"
' Any other telegrams will be ignored
' (other telegrams could be handled differently, updating different data) If theTelegram("TelegramName") <> "UpdateJob" Then Exit Function

' Create an ADO connection and open the database "C:\Access\Jobs.mdb"
Set db = CreateObject( "ADODB.Connection" ) db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Access\Jobs.mdb"

' Create an SQL string to select the row to update select = "SELECT * FROM Job WHERE JobID=" & theTelegram("JobIDPoint")

' Open a recordset, and execute the select statement Set rs = CreateObject( "ADODB.Recordset" ) rs.Open select, db, 3, 3, 1 ' Note the "1" as the last argument

' Make sure we found an existing row
If Not rs.EOF Then

' Update the "UnitIDAttending" field to match the unit that sent the telegram
rs("AttendingUnitID") = theTelegram.UnitID

' Update several fields in the database with data from the telegram
rs("Data17") = theTelegram("Data17")
rs("Data22") = theTelegram("Data22")
rs("Data36") = theTelegram("Data36")

' Commit the update
rs.Update

End If

' Close up
rs.Close
Set rs = Nothing
Set db = Nothing

' NOTE: We could also send a reply telegram to the unit, supplying it with ' some fresh data from the database.

End Function

Example: Sending a Confirmation Email

Example for sending an email to confirm an order taken in the field using an email test Marketing Report project (download EmailTest.ppc , Data Script below).

' Process incoming sessions from Mobile Devices
Function OnIncomingSession (theSession)

' Check if the user indicated a confirmation was desired
If theSession("EmailCustomer") = "Yes" Then

' Send the confirmation email using Outlook on the
' PC (not recommended).

SendOutlookEmail theSession

' Send the confirmation email using JMail, a free, dedicated
' email sending object often used in ASP websites.
' UNCOMMENT to test

' SendJMailEmail theSession

End If

' Set the return value to true to indicate that normal
' processing should continue
OnIncomingSession = True

End Function

' This sub sends a confirmation email via Outlook Automation,
' which is less preferrable than using a dedicated email object
' such as JMail.
Sub SendOutlookEmail (theSession)

' Get the email address from the session
sEmail = theSession( "Customer.Email1Address" )

' Set up some text to include in the message
sBody = "Dear " & theSession("Customer.CompanyName") & "," & vbCrLf & vbCrLf
sBody = sBody & "Thank you for placing your order with us:" & vbCrLf
sBody = sBody & "Purchase: $" & CCur( theSession( "TotalCostofOrderbeforeTax" ) ) & vbCrLf
sBody = sBody & "Tax: $" & CCur( theSession( "Taxat10percent" ) ) & vbCrLf
sBody = sBody & "Total: $" & CCur( theSession( "TotalCostofOrderIncludingTax" ) ) & vbCrLf & vbCrLf
sBody = sBody & "Regards," & vbCrLf
sBody = sBody & "CreativityCorp Pty Ltd" & vbCrLf

' Create an instance of Outlook
Set oOutlook = CreateObject( "Outlook.Application" )

' Create a new mail message
Set oMail = oOutlook.CreateItem( olMailItem )

' Add a "to" recipiant to the message
Set oRecip = oMail.Recipients.Add( sEmail )
oRecip.Type = olTo
oRecip.Resolve

' Set the subject and message body
oMail.Subject = "Your Marketing Report Order"
oMail.Body = sBody

' Send the email
oMail.Send

' Clear the objects
Set oMail = Nothing
Set oOutlook = Nothing

End Sub

' This sub sends a confirmation email via JMail, which is
' a free, dedicated email sending object often used in ASP
' enabled web sites.
Sub SendJMailEmail (theSession)

' Get the email address from the session
sEmail = theSession( "Customer.Email1Address" )

' Set up some text to include in the message
sBody = "Dear " & theSession("Customer.CompanyName") & "," & vbCrLf & vbCrLf
sBody = sBody & "Thank you for placing your order with us:" & vbCrLf
sBody = sBody & "Purchase: $" & CCur( theSession( "TotalCostofOrderbeforeTax" ) ) & vbCrLf
sBody = sBody & "Tax: $" & CCur( theSession( "Taxat10percent" ) ) & vbCrLf
sBody = sBody & "Total: $" & CCur( theSession( "TotalCostofOrderIncludingTax" ) ) & vbCrLf & vbCrLf
sBody = sBody & "Regards," & vbCrLf
sBody = sBody & "YourCompany Pty Ltd" & vbCrLf

' Create an instance of the JMail object
Set JMail = Server.CreateObject( "JMail.SMTPMail" )

' Add a recipient
JMail.AddRecipient sEmail

' Set the email server
JMail.ServerAddress = "smtp.yourcompany.com"

' Set the return address
JMail.Sender = "sales@yourcompany.com"

' Set the subject and the body
JMail.Subject = "Your Marketing Report Order"
JMail.Body = sBody

' Send the message
JMail.Execute

' Clear the object
Set JMail = Nothing

End Sub

' Process source sessions from XML
Function OnSourceSession (theSession)
OnSourceSession = True ' Default processing
End Function

' Idle processing
Sub OnIdle
' Insert code
End Sub

' Process incoming telegrams
Sub OnTelegram (theTelegram)
' Insert code
End Sub

Example: Outputting a value based on the value of a point

In some projects it is necessary to generate an output in data script based on the value of a point in the project. In this example, when processing via the Data Pathway, either "PASS" or "FAIL" is placed in a "Result" Edit point based on the value of a "ResultMath" Math point.

' Process incoming sessions from mobile devices
Function OnIncomingSession (theSession)
If CStr(theSession("ResultMath")) = "3.0" Then
theSession("Result") = "PASS"
Else
theSession("Result") = "FAIL"
End If
OnIncomingSession = True ' Continue normal processing
End Function

Additional advanced COM functions introduced in Mobile Data Studio 7.3

Advanced COM objects, scripts and protocols have been included in the Data Script functions of Mobile Data Studio 7.3 (and carried into version 8.0) which can be applied in Data management. These advanced functions enable programmers to customise automation of processes; download details of the advanced COM objects, scripts and protocols.

 

Object Model Reference for Programmers

Application Object

Application(Application** ppApplication );

Version( [returns] STRING* pstrVersion );

Projects( [returns] Projects** ppProjects );

DesignImageList( [returns] DWORD* phImageList );

Projects Object

Application( [returns] Application** ppApplication );

Item( VARIANT vIndex, [returns] Project** ppProject );

Count( [returns] LONG* pnCount );

Create( STRING strName, [returns] Project** ppProject );

Open( STRING strName, [returns] Project** ppProject );

Project Object

Application( [returns] Application** ppApplication );

Pages( [returns] Pages** ppPages );

Points( STRING strName, [returns] Point** ppPoint );

Database( [returns] Database** ppDatabase );

Dirty( [returns] BOOLEAN* pbDirty );

Dirty( BOOLEAN bDirty );

Running( [returns] BOOLEAN* pbRunning );

Title( [returns] STRING* pstrValue );

Title( STRING strValue );

Company( [returns] STRING* pstrValue );

Company( STRING strValue );

Author( [returns] STRING* pstrValue );

Author( STRING strValue );

Copyright( [returns] STRING* pstrValue );

Copyright( STRING strValue );

WebURL( [returns] STRING* pstrValue );

WebURL( STRING strValue );

Notes( [returns] STRING* pstrValue );

Notes( STRING strValue );

NewTelegram( [returns] Telegram** ppTelegram );

Synchronise( [returns] BOOLEAN* pbSuccess );

Page Object

Application( [returns] Application** ppApplication );

Project( [returns] Project** ppProject );

Points( [returns] Points** ppPoints );

Unique( [returns] DWORD* pnUnique );

Caption( [returns] STRING* pstrValue );

Caption( STRING strValue );

Text( [returns] STRING* pstrValue );

Text( STRING strValue );

Help( [returns] STRING* pstrValue );

Help( STRING strValue );

Activate();

Refresh();

ShowHelp( [in,optional] STRING strCaption, [in,optional] STRING strHelp );

Point Object

Value( [returns] STRING* pstrValue );

Value( STRING strValue );

Application( [returns] Application** ppApplication );

Project( [returns] Project** ppProject );

Page( [returns] Page** ppPage );

Unique( [returns] DWORD* pnUnique );

TypeName( [returns] STRING* pstrType );

TypeCode( [returns] UINT* pnType );

Custom( [returns] IDispatch** ppCustom);

Name( [returns] STRING* pstrValue );

Name( STRING strValue );

Caption( [returns] STRING* pstrValue );

Caption( STRING strValue );

Help( [returns] STRING* pstrValue );

Help( STRING strValue );

Default( [returns] STRING* pstrValue );

Default( STRING strValue );

Required( [returns] BOOLEAN* pbValue );

Required( BOOLEAN bValue );

Visible( [returns] BOOLEAN* pbValue );

Visible( BOOLEAN bValue );

Results( [returns] BOOLEAN* pbValue );

Results( BOOLEAN bValue );

Bold( [returns] BOOLEAN* pbValue );

Bold( BOOLEAN bValue );

AddDependent( Point* pPoint );

UpdateDependents();

VariantValue( [returns] VARIANT* pvValue );

VariantValue( VARIANT vValue );

SaveSketchImage( VARIANT vValue, BSTR BsFilename );

Pages Object

Application( [returns] Application** ppApplication );

Project( [returns] Project** ppProject );

Item( VARIANT vIndex, [returns] Page** ppPage );

Count( [returns] LONG* pnCount );

Add( INT nIndex, [returns] Page** ppPage );

Remove( UINT nIndex );

Points Object

Application( [returns] Application** ppApplication );

Project( [returns] Project** ppProject );

Page( [returns] Page** ppPage );

Item( VARIANT vIndex, [returns] Point** ppPage );

Count( [returns] LONG* pnCount );

Add( UINT nType, INT nIndex, [returns] Point** ppPoint );

Remove( UINT nIndex );

Database Object

Application( [returns] Application** ppApplication );

Project( [returns] Project** ppProject );

Item( VARIANT vIndex, [returns] Session** ppSession );

Count( [returns] LONG* pnCount );

Add( [returns] Session** ppSession );  

SaveToFile( VARIANT vValue, BSTR strFilename );

LoadFromFile( BSTR strFilename, [returns] VARIANT* pvValue );

Session Object

Application( [returns] Application** ppApplication );

Project( [returns] Project** ppProject );

Item( VARIANT vIndex, [returns] VARIANT* vValue );

Item( VARIANT vIndex, VARIANT vValue );

Count( [returns] LONG* pnCount );

Key( UINT nIndex, [returns] STRING* pstrKey );

Value( UINT nIndex, [returns] STRING* pstrValue );

UnitID( [returns] STRING* pstrUnitID );

Name( [returns] STRING* pstrName );

Date( [returns] DATE* pvDate );

LastSaved( [returns] DATE* pvDate );

Archived( [returns] BOOLEAN* pbArchived );

Archived( BOOLEAN bArchived );

Clone( [returns] Session** ppSession );

Save();

Delete();

SendToClient( STRING strUnitID, [returns] BOOLEAN* pbSuccess );

SendToLocal( [returns] BOOLEAN* pbSuccess );

Telegram Object

Application( [returns] Application** ppApplication );

Project( [returns] Project** ppProject );

Item( VARIANT vIndex, [returns] VARIANT* vValue );

Item( VARIANT vIndex, VARIANT vValue );

Count( [returns] LONG* pnCount );

Key( UINT nIndex, [returns] STRING* pstrKey );

Value( UINT nIndex, [returns] VARIANT* pvValue );

UnitID( [returns] STRING* pstrUnitID );

Clone( [returns] Telegram** ppTelegram );

SendToServer( [returns] BOOLEAN* pbSuccess );

SendToClient( STRING strUnitID, [returns] BOOLEAN* pbSuccess ); 

Previous Page Jump to page: