Waarom Vault automatiseren met C#?
Autodesk Vault is een databeheersysteem — elk bestand, elke revisie en elke eigenschap staat in een gestructureerde database. De Vault SDK stelt deze database beschikbaar via webserviceproxy's die je vanuit C# kunt aanroepen. Dat betekent dat je vrijwel alles kunt automatiseren: bulksgewijze eigenschapsupdates, nachtelijke exports, vrijgaveworkflows, systeemoverschrijdende synchronisatie.
Dit bericht behandelt de grondbeginselen: de SDK instellen, authenticeren, bestanden zoeken en een in-/uitcheck-cyclus uitvoeren.
Vereisten
- Visual Studio 2019 of 2022
- Autodesk Vault Professional 2020 of later (client- én servertoegang)
- Autodesk Vault SDK — te downloaden van het Autodesk Developer Network of te installeren via het Vault-clientinstallatieprogramma (selecteer "SDK" bij optionele onderdelen)
- Basiskennis C#
Stap 1 — Project aanmaken en referenties toevoegen
Maak een Console App (.NET Framework 4.8) aan in Visual Studio. Voeg vervolgens referenties toe aan de Vault SDK-assemblies. Die staan standaard in:
C:\Program Files\Autodesk\Vault 2024 SDK\bin\
Voeg deze DLL's toe:
Autodesk.Connectivity.WebServices.dllAutodesk.Connectivity.WebServicesTools.dllAutodesk.DataManagement.Client.Framework.dllAutodesk.DataManagement.Client.Framework.Vault.dll
Stel Copy Local = True in voor al deze DLL's — anders dan AutoCAD worden Vault SDK-assemblies niet vooraf geladen en moeten ze worden meegeleverd met je applicatie.
Stap 2 — Verbinding maken en authenticeren
Het startpunt van de Vault API is de WebServiceManager, verkregen via UserPasswordCredentials:
using System;
using Autodesk.Connectivity.WebServices;
using Autodesk.Connectivity.WebServicesTools;
namespace VaultAutomatisering
{
class Program
{
static void Main(string[] args)
{
string server = "localhost"; // Vault-servernaam of IP-adres
string vault = "Vault"; // Vault-databasenaam (zichtbaar in titelvenster Vault-client)
string username = "Administrator";
string password = ""; // standaard leeg voor Administrator
UserPasswordCredentials credentials = new UserPasswordCredentials(
server, vault, username, password);
using (WebServiceManager svcMgr = new WebServiceManager(credentials))
{
Console.WriteLine($"Verbonden met vault: {vault} op {server}");
Console.WriteLine($"Aangemeld als: {svcMgr.SecurityService.SecurityHeader.UserId}");
// Alle Vault-bewerkingen staan hier — svcMgr is de gateway
ZoekBestanden(svcMgr);
}
Console.WriteLine("Klaar. Druk op een toets om af te sluiten.");
Console.ReadKey();
}
}
}
Stap 3 — Bestanden zoeken
De meest voorkomende eerste bewerking is bestanden zoeken. De zoek-API van Vault werkt met condities — je bouwt een array van SrchCond-objecten:
static void ZoekBestanden(WebServiceManager svcMgr)
{
// Eigenschapdefinitie "Naam" ophalen om op te zoeken
PropDef[] allProps = svcMgr.PropertyService.GetPropertyDefinitionsByEntityClassId("FILE");
PropDef fileNameProp = Array.Find(allProps, p => p.DispName == "Name");
// Zoekconditie: naam bevat "Bracket"
SrchCond condition = new SrchCond
{
PropDefId = fileNameProp.Id,
PropTyp = PropertySearchType.SingleProperty,
SrchOper = 1, // 1 = bevat
SrchTxt = "Bracket",
SrchRule = SearchRuleType.Must
};
// Vault geeft resultaten in pagina's terug (bladwijzers)
string bookmark = string.Empty;
SrchStatus status;
File[] results = svcMgr.DocumentService.FindFilesBySearchConditions(
new[] { condition },
sortConditions: null,
folderIds: null, // null = zoek in alle mappen
recurseFolders: true,
latestOnly: true,
bookmark: ref bookmark,
searchStatus: out status);
if (results == null || results.Length == 0)
{
Console.WriteLine("Geen bestanden gevonden.");
return;
}
Console.WriteLine($"{results.Length} bestand(en) gevonden:");
foreach (File f in results)
{
Console.WriteLine($" {f.Name} (ver {f.FileRev.Label}) [{f.CheckedOut}]");
}
}
Stap 4 — Uitchecken, eigenschap bijwerken en inchecken
De in-/uitcheckfunctie is de kern van elke Vault-workflow. Hier is een volledig voorbeeld:
static void CheckOutEnBijwerken(WebServiceManager svcMgr, long fileId)
{
// ── 1. Bestand ophalen ───────────────────────────────────────────────
File vaultFile = svcMgr.DocumentService.GetFileById(fileId);
Console.WriteLine($"Bezig met: {vaultFile.Name}");
// ── 2. Uitchecken ────────────────────────────────────────────────────
string downloadMap = @"C:\VaultWerkmap";
System.IO.Directory.CreateDirectory(downloadMap);
FileIteration checkedOut = svcMgr.DocumentServiceExtensions
.CheckoutFile(vaultFile.Id, CheckoutFileOptions.Master, downloadMap);
string lokaalBestand = System.IO.Path.Combine(downloadMap, vaultFile.Name);
Console.WriteLine($"Uitgecheckt naar: {lokaalBestand}");
// ── 3. Aangepaste eigenschap bijwerken ───────────────────────────────
PropDef[] defs = svcMgr.PropertyService.GetPropertyDefinitionsByEntityClassId("FILE");
PropDef descProp = Array.Find(defs, p => p.DispName == "Description");
PropInst newProp = new PropInst
{
EntityId = vaultFile.Id,
PropDefId = descProp.Id,
Val = "Bijgewerkt door automatisering op " + DateTime.Now.ToString("yyyy-MM-dd")
};
svcMgr.PropertyService.UpdateProperties(
"FILE",
new[] { vaultFile.Id },
new[] { newProp });
Console.WriteLine("Eigenschap bijgewerkt.");
// ── 4. Inchecken ─────────────────────────────────────────────────────
ByteArray uploadTick = svcMgr.FilestoreService.AddFile(
checkedOut.MasterRevId.ToString(),
"Ingecheckt door automatisering",
lokaalBestand);
svcMgr.DocumentService.CheckinUploadedFile(
vaultFile.Id,
"Geautomatiseerde eigenschapsupdate",
keepCheckedOut: false,
localLastWrite: System.IO.File.GetLastWriteTime(lokaalBestand),
fileContentsHash: uploadTick,
bom: null);
Console.WriteLine($"Ingecheckt: {vaultFile.Name}");
}
Kernconcepten
WebServiceManager is je enige verbindingsobject. Het stelt afzonderlijke serviceclients beschikbaar voor elk onderdeel van de Vault API. Gebruik het altijd binnen een using-blok zodat de verbinding netjes wordt gesloten.
Eigenschapdefinities vs. instanties — een PropDef beschrijft een eigenschap (naam, type en ID). Een PropInst is de feitelijke waarde op een specifiek bestand. Haal definities eenmalig op en cache ze; lees en schrijf instanties per bestand.
Vault-ID's — elk bestand, elke map, elke gebruiker en elke eigenschap heeft een numeriek ID. Zoekresultaten geven je ID's; de meeste vervolgbewerkingen nemen ID's in plaats van namen. Namen kunnen veranderen, ID's nooit.
Bladwijzers — Vault geeft zoekresultaten in pagina's terug. Als je meer dan een paar honderd resultaten verwacht, loop dan totdat searchStatus.IndetermFnd false is en de bladwijzer stopt met veranderen.
Overzicht van nuttige services
DocumentService— bestanden, mappen, in-/uitchecken, levenscyclusstatusPropertyService— aangepaste eigenschappen, eigenschapdefinitiesFilestoreService— bestanden uploaden en downloaden op laag niveauSecurityService— gebruikers, groepen, machtigingenItemService— items (de stuklijst-/engineeringlaag boven bestanden)RevisionService— revisieschema's en -labels
Wat volgt
Met de verbinding en basisbestandsoperaties werkend behandelen de volgende lessen:
- Bulksgewijze eigenschapsupdates — efficiënt door honderden bestanden lopen
- Levenscyclustransities — bestanden door review- en vrijgavestatus sturen
- Mapstructuurautomatisering — Vault-mappen per project aanmaken en organiseren
- Een Vault Explorer-plugin bouwen met een aangepast contextmenu
De volledige C# voor Vault-cursus is beschikbaar voor Standard- en Full Access-abonnees in de E-Learning-sectie.
Comments
No comments yet — be the first!
Leave a comment
Sign in to skip moderation — anonymous comments are reviewed before appearing.