Option Explicit

Sub CATMain()

' -----------------------------------------------------------
' Get CAIEngine
Dim CAIEngine As StiEngine
Set CAIEngine = CATIA.GetItem("CAIEngine") 

' -----------------------------------------------------------
' Decide to run without any user interaction
Dim bUI As Boolean
if ( CAIEngine.UseGraphicalUI ) Then
    CAIEngine.UseGraphicalUI = False
    bUI = true
End If

' -----------------------------------------------------------
' Connect to the database (if not already connected)
Dim bConnect As Boolean
bConnect = false
If Not CAIEngine.IsConnected() Then
    CAIEngine.Connect "joe", ""
    bConnect = true
End If

' -----------------------------------------------------------
' Creating new CATPart document
Dim PartDoc As PartDocument
Set PartDoc = CATIA.Documents.Add("Part")

' -----------------------------------------------------------
' Save document in SMARTEAM
Dim PartDocDBItem As StiDBItem
Set PartDocDBItem = CAIEngine.GetStiDBItemFromAnyObject(PartDoc)
CAIEngine.Save PartDocDBItem

' -----------------------------------------------------------
' Once saved, retrieve corresponding SMARTEAM classid & objectid
Dim cid As Integer
Dim oid As Integer
cid = CAIEngine.GetSMARTEAMClassID(PartDocDBItem)
oid = CAIEngine.GetSMARTEAMObjectID(PartDocDBItem)

' -----------------------------------------------------------
' Perform Check-In operation on the document
' (this will close the document from the CATIA session and
' file will be removed from the disk)
CAIEngine.LifeCycleCheckIn PartDocDBItem

' -----------------------------------------------------------
' Create new Product
Dim ProductDoc As ProductDocument
Set ProductDoc = CATIA.Documents.Add("Product")

' -----------------------------------------------------------
' Retrieve checked-in Part document from SMARTEAM database and
' get a local copy in the user work directory
Dim CheckedInPartDBItem As StiDBItem
Set CheckedInPartDBItem = CAIEngine.BuildFileDBItemFromSmarTeamID(oid, cid)

' -----------------------------------------------------------
' Insert the part in the new Product
Dim tPath(1)
tPath(0) = CheckedInPartDBItem.GetDocumentFullPath()
ProductDoc.Product.Products.AddComponentsFromFiles tPath, "All"

' -----------------------------------------------------------
' Save the Product in SMARTEAM
Dim ProductDocDBItem As StiDBItem
Set ProductDocDBItem = CAIEngine.GetStiDBItemFromAnyObject(ProductDoc)
CAIEngine.Save ProductDocDBItem

' -----------------------------------------------------------
' Perform Release operation on the Product document
CAIEngine.LifeCycleRelease ProductDocDBItem

' -----------------------------------------------------------
' Disconnect from the database in case we had to connect at the
' beginning of the script
If bConnect Then
    CAIEngine.Disconnect
End If

' -----------------------------------------------------------
' Reset UseGraphicalUI option
If bUI Then
    CAIEngine.UseGraphicalUI = true
End If

End Sub