Back to blog
Bestanden inchecken en uitchecken in Vault met C#
Intermediate

Bestanden inchecken en uitchecken in Vault met C#

David De Lombaerde David De Lombaerde · juli 10, 2026 · 15 min read

Check-in en check-out zijn de kernoperaties van Vault: ze zorgen ervoor dat bestanden gecontroleerd worden gewijzigd en dat versiegeschiedenissen correct worden bijgehouden. Via C# kun je deze operaties volledig automatiseren — ideaal voor geautomatiseerde revisieprocessen, batchupdates en CI/CD-integraties.

Concepten: check-out, check-in en undo

Check-out reserveert een bestand voor jou: anderen kunnen het nog lezen maar niet aanpassen. Het bestand wordt gedownload naar een lokaal pad. Check-in laadt de gewijzigde versie terug naar Vault en maakt een nieuwe versie aan. Undo checkout geeft de reservering vrij zonder een nieuwe versie te maken — handig als je toch geen wijzigingen hebt gedaan.

Verbinding opzetten

using Autodesk.Connectivity.WebServices;
using Autodesk.Connectivity.WebServicesTools;
using VDF = Autodesk.DataManagement.Client.Framework;

var conn = VDF.Vault.Library.ConnectionManager.Connect(
    serverIdentities, credentials,
    VDF.Vault.Currency.Connections.AuthenticationFlags.Standard);

var docSvc    = conn.WebServiceManager.DocumentService;
var fileSvc   = conn.WebServiceManager.DocumentServiceExtensions;

Een bestand uitchecken (check-out)

public string CheckOutBestand(
    VDF.Vault.Currency.Connections.Connection conn,
    File vaultBestand,
    string lokaalPad)
{
    // Zorg dat de lokale map bestaat
    Directory.CreateDirectory(lokaalPad);

    string lokaalBestandPad = Path.Combine(
        lokaalPad, vaultBestand.Name);

    // Check-out aanvragen
    var acqSettings = new AcquireFilesSettings(conn)
    {
        DefaultAcquisitionOption = FileAcquisitionOptions.Checkout
    };
    acqSettings.AddFileToAcquire(vaultBestand, FileAcquisitionOptions.Checkout);

    var resultaat = conn.FileManager.AcquireFiles(acqSettings);

    if (resultaat.FileResults.Any(r => r.Status == FileAcquisitionStatus.Success))
    {
        Console.WriteLine($"✓ Uitgecheckt: {vaultBestand.Name}");
        return resultaat.FileResults.First().LocalPath.FullPath;
    }
    else
    {
        var fout = resultaat.FileResults.First().Exception?.Message ?? "onbekende fout";
        throw new Exception($"Check-out mislukt: {fout}");
    }
}

Controleren of een bestand al is uitgecheckt

public bool IsUitgecheckt(File bestand, out string doorWie)
{
    doorWie = bestand.CheckedOut ? bestand.CheckedOutBy?.DisplayName ?? "onbekend" : "";
    return bestand.CheckedOut;
}

// Gebruik:
if (IsUitgecheckt(vaultBestand, out string gebruiker))
    Console.WriteLine($"Uitgecheckt door: {gebruiker}");
else
    Console.WriteLine("Beschikbaar voor check-out.");

Een bestand inchecken (check-in)

public void CheckInBestand(
    VDF.Vault.Currency.Connections.Connection conn,
    File vaultBestand,
    string lokaalBestandPad,
    string commentaar)
{
    var inSettings = new CheckinFileSettings(conn);

    // Commentaar toevoegen
    inSettings.Comment = commentaar;

    // Bestand registreren voor check-in
    inSettings.AddFileToCheckin(
        vaultBestand,
        new FilePathAbsolute(lokaalBestandPad),
        false // keepCheckedOut = false → geef reservering vrij
    );

    var resultaat = conn.FileManager.CheckinFiles(inSettings);

    foreach (var r in resultaat.FileResults)
    {
        if (r.Status == CheckinStatus.Success)
            Console.WriteLine($"✓ Ingecheckt: {r.File.Name} (v{r.File.VerNum})");
        else
            Console.WriteLine($"✗ Mislukt:    {r.File.Name} — {r.Exception?.Message}");
    }
}

Check-out ongedaan maken (undo checkout)

public void OngedaanMakenCheckout(
    VDF.Vault.Currency.Connections.Connection conn,
    File vaultBestand)
{
    // UndoCheckout gooit de lokale wijzigingen weg en bevrijdt de reservering
    conn.WebServiceManager.DocumentService
        .UndoCheckoutFile(vaultBestand.MasterId, out _);

    Console.WriteLine($"Check-out ongedaan gemaakt: {vaultBestand.Name}");
}

Volledig workflow: check-out → wijzig → check-in

public void VoerWorkflowUit(
    VDF.Vault.Currency.Connections.Connection conn,
    string vaultPad,
    string lokaalWerkmap,
    string commentaar)
{
    var docSvc  = conn.WebServiceManager.DocumentService;

    // 1. Bestand zoeken in Vault
    var map     = docSvc.GetFolderByPath(Path.GetDirectoryName(vaultPad).Replace('\', '/'));
    var bestanden = docSvc.GetLatestFilesByFolderId(map.Id, false);
    var bestand = bestanden.FirstOrDefault(f => f.Name == Path.GetFileName(vaultPad));

    if (bestand == null)
        throw new Exception($"Bestand niet gevonden: {vaultPad}");

    // 2. Controleer of al uitgecheckt
    if (bestand.CheckedOut)
        throw new Exception($"Al uitgecheckt door {bestand.CheckedOutBy?.DisplayName}");

    // 3. Uitchecken
    string lokaalPad = CheckOutBestand(conn, bestand, lokaalWerkmap);

    // 4. Bestand aanpassen (hier jouw logica)
    File.AppendAllText(lokaalPad, $"
// Bijgewerkt op {DateTime.Now}");

    // 5. Inchecken
    // Herlaad bestand om actuele versieinfo te hebben
    bestanden = docSvc.GetLatestFilesByFolderId(map.Id, false);
    bestand   = bestanden.First(f => f.Name == Path.GetFileName(vaultPad));

    CheckInBestand(conn, bestand, lokaalPad, commentaar);
}

Meerdere bestanden tegelijk uitchecken

public void BatchCheckOut(
    VDF.Vault.Currency.Connections.Connection conn,
    IEnumerable bestanden,
    string lokaalMap)
{
    var settings = new AcquireFilesSettings(conn)
    {
        DefaultAcquisitionOption = FileAcquisitionOptions.Checkout
    };

    foreach (var b in bestanden)
        settings.AddFileToAcquire(b, FileAcquisitionOptions.Checkout);

    var resultaat = conn.FileManager.AcquireFiles(settings);

    foreach (var r in resultaat.FileResults)
    {
        if (r.Status == FileAcquisitionStatus.Success)
            Console.WriteLine($"✓ {r.File.Name}");
        else
            Console.WriteLine($"✗ {r.File.Name}: {r.Exception?.Message}");
    }
}

Meerdere bestanden tegelijk inchecken

public void BatchCheckIn(
    VDF.Vault.Currency.Connections.Connection conn,
    Dictionary bestandenEnPaden, // Vault-bestand → lokaal pad
    string commentaar)
{
    var settings = new CheckinFileSettings(conn) { Comment = commentaar };

    foreach (var kv in bestandenEnPaden)
        settings.AddFileToCheckin(kv.Key, new FilePathAbsolute(kv.Value), false);

    conn.FileManager.CheckinFiles(settings);
}

Veelgemaakte fouten

Bestand is al uitgecheckt — controleer altijd bestand.CheckedOut voor je een check-out probeert. Gooit anders een fout op de server.

Lokaal bestand bestaat niet meer bij check-in — als het lokale bestand verwijderd of hernoemd is, mislukt de check-in. Gebruik altijd het originele pad dat je bij check-out hebt gekregen.

keepCheckedOut = true vergeten — als je na de check-in de reservering wil behouden (om meteen door te werken), zet keepCheckedOut = true. Standaard wordt de reservering vrijgegeven.

Vault-bestandsobject verouderd — na een check-in verandert het versienummer. Herlaad het bestandsobject via GetLatestFilesByFolderId voor je het opnieuw gebruikt.

Samenvatting

Check-in/check-out automatiseren met de Vault .NET API draait om AcquireFilesSettings voor uitchecken en CheckinFileSettings voor inchecken. Voeg bestanden toe via AddFileToAcquire / AddFileToCheckin, verwerk de resultaten per bestand en behandel fouten per item in de batch. Zo bouw je robuuste, geautomatiseerde Vault-workflows.

Share this article

LinkedIn WhatsApp X

Comments

No comments yet — be the first!

Leave a comment

Sign in to skip moderation — anonymous comments are reviewed before appearing.