Hello Daniel,
the "HelloWorld" example shows you how to implement an custom command to Vault. To "fire" an own job you have to do several things.
1. Create a command in Vault
Based on the example from the SDK you have to execute a job creation. For this you need the jobservice and the job parameters, here is an example with an optional parameter for the export path (not tested).
Private Sub MakeJob(FileFilterType() As String, DestType As String, JobName As String, Comment As String, Priority As Integer, Context As Autodesk.Connectivity.Explorer.Extensibility.ICommandContext, Optional ExportFilePath As String = "c:\temp")
obj_Jobservice As ACW.JobService
'iterate all selected files and get the file
For Each obj_Select As ISelection In Context.CurrentSelectionSet
If FilterType.Any(Function(n) Strings.LCase(System.IO.Path.GetExtension(obj_Select.Label)).Contains(n)) Then
Dim obj_File As ACW.File = Nothing
If obj_Select.TypeId.SelectionContext <> "FileMaster" Then
obj_File = Context.Application.Connection.WebServiceManager.DocumentService.GetLatestFilesByIds(New Long() {obj_Select.Id}).FirstOrDefault
Else
obj_File = Context.Application.Connection.WebServiceManager.DocumentService.GetLatestFilesByMasterIds(New Long() {obj_Select.Id}).FirstOrDefault
End If
'create parameters for job
Dim obj_JobParam_1 As Autodesk.Connectivity.WebServices.JobParam = New ACW.JobParam
obj_JobParam_1.Name = "FileMasterId"
obj_JobParam_1.Val = obj_File.MasterId
Dim obj_JobParam_2 As Autodesk.Connectivity.WebServices.JobParam = New ACW.JobParam
obj_JobParam_2.Name = "FileName"
obj_JobParam_2.Val = obj_Select.Label
Dim obj_JobParam_3 As Autodesk.Connectivity.WebServices.JobParam = New ACW.JobParam
obj_JobParam_3.Name = "EntityId"
obj_JobParam_3.Val = obj_File.Id
Dim obj_JobParam_4 As Autodesk.Connectivity.WebServices.JobParam = New ACW.JobParam
obj_JobParam_4.Name = "EntityClassId"
obj_JobParam_4.Val = "File"
Dim obj_JobParam_5 As Autodesk.Connectivity.WebServices.JobParam = New ACW.JobParam
obj_JobParam_5.Name = "FileVersionId"
obj_JobParam_5.Val = obj_File.Id
Dim obj_JobParam_6 As Autodesk.Connectivity.WebServices.JobParam = New ACW.JobParam
obj_JobParam_6.Name = "UpdateViewOption"
obj_JobParam_6.Val = "False"
Dim obj_JobParam_7 As Autodesk.Connectivity.WebServices.JobParam = New ACW.JobParam
obj_JobParam_7.Name = "FileId"
obj_JobParam_7.Val = obj_File.Id
Dim obj_JobParam_8 As Autodesk.Connectivity.WebServices.JobParam = New ACW.JobParam
obj_JobParam_8.Name = "ExportFilePath"
obj_JobParam_8.Val = ExportFilePath
Dim obj_JobParam() As ACW.JobParam = {obj_JobParam_1, obj_JobParam_2, obj_JobParam_3, obj_JobParam_4, obj_JobParam_5, obj_JobParam_6, obj_JobParam_7, obj_JobParam_8}
obj_Jobservice = obj_Context.Application.Connection.WebServiceManager.JobService
'try to create a job
Try
obj_Jobservice.AddJob(JobName, Comment & obj_JobParam_2.Val, obj_JobParam, Priority)
Catch ex As Exception
MsgBox(ex.Message)
End Try
Else
MsgBox("Für das Dateiformat '" & Strings.LCase(System.IO.Path.GetExtension(obj_Select.Label)) & "' kann keine " & DestType & " erzeugt werden.", MsgBoxStyle.Information, "Konvertierungsauftrag erstellen")
End If
Next
End Sub
2. Create a job handler
To handle your custom job you have to create a job handler. Take a look into the APIHelp in the SDK Folder "Getting started -> How to create custom jobs". For the inventor addin call you can use the Inventor API help.
In the execution handler for your custom job you can use the parameter "ExportFilePath" as path to save the created step file.
Public Function Execute(context As ACJE.IJobProcessorServices, job As ACJE.IJob) As ACJE.JobOutcome Implements IJobHandler.Execute
'...
'... you have to accuire the needed files from Vault, look into SDK help for that
'... get the Filepath and Filename out of the Vault File object and save to str_FileName and str_FolderName
'...
Dim str_ExportFileName as String = job.Params("ExportFilePath")
Dim obj_InvApp As Inventor.InventorServer = Context.InventorObject
Dim obj_InvDoc As Inventor.Document = Nothing
Try
If obj_InvApp Is Nothing Then
Context.Errors.Add("could not start Inventor server")
Return ACJE.JobOutcome.Failure
End If
'Get Inventor doc
obj_InvDoc = obj_InvApp.Documents.Open(str_FolderName & str_FileName, False)
If obj_InvDoc Is Nothing Then
Context.Errors.Add("Dcould not open Inventor document")
Return ACJE.JobOutcome.Failure
End If
'get Step AddIn
Dim obj_STEPAddin As Inventor.ApplicationAddIn = obj_InvApp.ApplicationAddIns.ItemById("{90AF7F40-0C01-11D5-8E83-0010B541CD80}")
Dim obj_TransContext As Inventor.TranslationContext = obj_InvApp.TransientObjects.CreateTranslationContext
Dim obj_TransOptions As Inventor.NameValueMap = obj_InvApp.TransientObjects.CreateNameValueMap
'create Stepfile
With obj_TransOptions
.Value("ApplicationProtocolType") = 5 'Step 242
.Value("Author") = "JobProzessor"
.Value("Organization") = "Your Company"
.Value("Description") = "Your Descrition"
End With
Try
obj_TransContext.Type = Inventor.IOMechanismEnum.kFileBrowseIOMechanism
Dim obj_Data As Inventor.DataMedium = obj_InvApp.TransientObjects.CreateDataMedium
obj_Data.FileName = str_ExportFileName & System.IO.Path.GetFileNameWithoutExtension(str_FileName) & ".stp"
obj_STEPAddin.SaveCopyAs(obj_InvDoc, obj_TransContext, obj_TransOptions, obj_Data)
Catch Ex as Exception
Return ACJE.JobOutcome.Failure
End Try
Return ACJE.JobOutcome.Success
End Function
This snippet is not tested yet, but I think it should work. You have to do some extra work to collect the needed files from Vault. The SDK help files will guide you for that. Look for "How to Aquire Files".
Hope this will help you a bit.
Regards
Stefan