I did some testing and this works for me. It takes a partnumber and gives back the Life Cycle State of that item in vault.
Just Write some functionallity to traverse your assy and obtain all partnumbers and then run them through this function 🙂
AddReference "Autodesk.Connectivity.WebServices"
AddReference "Autodesk.DataManagement.Client.Framework.Vault"
AddReference "Connectivity.InventorAddin.EdmAddin"
Imports VDF = Autodesk.DataManagement.Client.Framework
Imports Autodesk.DataManagement.Client.Framework.Vault.Currency.Connections
Imports edm = Connectivity.InventorAddin.EdmAddin
Friend Module ExtensionMethods
Sub New()
End Sub
<System.Runtime.CompilerServices.Extension> _
Friend Function ToSingleArray(Of T)(obj As T) As T()
Return New T() {obj}
End Function
End Module
Sub Main
MsgBox(GetState("100001")) 'Put in the PartNumber (itemnumber)
End Sub
Public Function GetState(PartNumber As String) As String
Dim Connection As VDF.Vault.Currency.Connections.Connection = edm.EdmSecurity.Instance.VaultConnection()
Dim oState As String = String.Empty
If Not Connection Is Nothing Then
Dim item As Autodesk.Connectivity.WebServices.Item = Connection.WebServiceManager.ItemService.GetLatestItemByItemNumber(PartNumber)
Dim lifeCycleDef As Autodesk.Connectivity.WebServices.LfCycDef = Connection.WebServiceManager.LifeCycleService.GetLifeCycleDefinitionsByIds(item.LfCyc.LfCycDefId.ToSingleArray()).First()
Dim stateMap As Dictionary(Of Long, Autodesk.Connectivity.WebServices.LfCycState) = lifeCycleDef.StateArray.ToDictionary(Function(n) n.Id)
oState = stateMap(item.LfCycStateId).DispName
End If
Return oState
End Function