Back to blog
Bestanden zoeken in Vault met C#
Intermediate

Bestanden zoeken in Vault met C#

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

Bestanden zoeken in Vault is één van de meest basale maar ook meest gevraagde operaties in Vault-automatisering. Je wilt weten waar een specifiek onderdeel staat, welke bestanden een bepaalde lifecyclestatus hebben of welke bestanden recent zijn gewijzigd. In dit artikel leer je hoe je de Vault WebService API gebruikt om krachtige zoekopdrachten te bouwen.

Vault API: hoe het werkt

De Vault .NET API werkt via webservices. Je verbindt via WebServiceManager, die toegang geeft tot alle services: DocumentService, PropertyService, LifeCycleService, enzovoort. Alle communicatie verloopt via SOAP over HTTP naar de Vault-server.

Verbinding maken met Vault

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

// Verbinding opzetten
var settings = new VDF.Vault.Currency.Connections.ServerIdentities();
settings.DataServer = "localhost";
settings.FileServer = "localhost";

var credentials = new VDF.Vault.Currency.Connections.UserPasswordCredentials
{
    UserName = "Administrator",
    Password = "",
    Vault    = "MijnVault"
};

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

var docSvc = conn.WebServiceManager.DocumentService;

Zoeken op bestandsnaam

public File[] ZoekOpNaam(DocumentService docSvc, string naam)
{
    // Zoekconditie: bestandsnaam bevat de opgegeven string
    var cond = new SrchCond
    {
        PropDefId   = 0,          // 0 = systeem-eigenschap bestandsnaam
        PropTyp     = PropertySearchType.AllProperties,
        SrchOper    = 3,          // 3 = contains
        SrchTxt     = naam,
        SrchRule    = SearchRuleType.Must
    };

    string bookmark = string.Empty;
    SrchStatus status;

    var resultaten = docSvc.FindFilesBySearchConditions(
        new[] { cond },
        null,           // geen sorteerkolommen
        null,           // alle mappen
        true,           // inclusief submappen
        true,           // latestOnly
        ref bookmark,
        out status);

    return resultaten ?? Array.Empty();
}

SrchOper waarden

WaardeBetekenis
1Gelijk aan (=)
2Niet gelijk aan (≠)
3Bevat (contains)
4Begint met (starts with)
5Eindigt op (ends with)
6Groter dan (>)
7Kleiner dan (<)
8Groter dan of gelijk aan (≥)
9Kleiner dan of gelijk aan (≤)

Zoeken op een Vault-eigenschap (iProperty)

Om op een Vault-eigenschap te zoeken (zoals Revisie of Onderdeelnummer), heb je eerst de PropDefId nodig. Die zoek je op via de PropertyService:

public long VindPropDefId(WebServiceManager wsm, string propNaam)
{
    var propDefs = wsm.PropertyService.GetPropertyDefinitionsByDomainAndEntityClassId(
        "FILE", "FILE");

    foreach (var def in propDefs)
        if (def.DispName.Equals(propNaam, StringComparison.OrdinalIgnoreCase))
            return def.Id;

    throw new Exception($"Property definitie '{propNaam}' niet gevonden.");
}

// Gebruik:
long propId = VindPropDefId(conn.WebServiceManager, "Revision Number");

var cond = new SrchCond
{
    PropDefId   = propId,
    PropTyp     = PropertySearchType.SingleProperty,
    SrchOper    = 1,       // gelijk aan
    SrchTxt     = "B",     // revisie B zoeken
    SrchRule    = SearchRuleType.Must
};

Meerdere condities combineren (AND-logica)

// Zoek alle bestanden die BEIDE condities vervullen:
// 1. bestandsnaam bevat "steun"
// 2. revisie = "A"
long revId = VindPropDefId(conn.WebServiceManager, "Revision Number");

var condNaam = new SrchCond
{
    PropDefId = 0, PropTyp = PropertySearchType.AllProperties,
    SrchOper  = 3, SrchTxt = "steun",
    SrchRule  = SearchRuleType.Must
};
var condRev = new SrchCond
{
    PropDefId = revId, PropTyp = PropertySearchType.SingleProperty,
    SrchOper  = 1, SrchTxt = "A",
    SrchRule  = SearchRuleType.Must
};

string bookmark = string.Empty;
SrchStatus status;

var resultaten = docSvc.FindFilesBySearchConditions(
    new[] { condNaam, condRev },
    null, null, true, true,
    ref bookmark, out status);

Zoeken op lifecyclestatus

// Zoek alle bestanden met status "Released"
long lcStatId = VindPropDefId(conn.WebServiceManager, "State");

var condStatus = new SrchCond
{
    PropDefId = lcStatId,
    PropTyp   = PropertySearchType.SingleProperty,
    SrchOper  = 1,
    SrchTxt   = "Released",
    SrchRule  = SearchRuleType.Must
};

Zoeken in een specifieke map

// Zoek alleen in de map "/Projecten/PROJ-001"
var map = conn.WebServiceManager.DocumentService
    .GetFolderByPath("$/Projecten/PROJ-001");

var resultaten = docSvc.FindFilesBySearchConditions(
    new[] { cond },
    null,
    new[] { map.Id },  // mapfilter
    true,              // inclusief submappen
    true,
    ref bookmark,
    out status);

Paginering met bookmark

Bij grote resultatensets geeft Vault maximaal 200 resultaten per aanroep terug. Gebruik de bookmark voor paginering:

public List ZoekAlleResultaten(DocumentService docSvc, SrchCond[] conds)
{
    var alle      = new List();
    string bm     = string.Empty;
    SrchStatus st;

    do
    {
        var batch = docSvc.FindFilesBySearchConditions(
            conds, null, null, true, true, ref bm, out st);
        if (batch != null) alle.AddRange(batch);
    }
    while (st.TotalHits > alle.Count);

    return alle;
}

Resultaten verwerken: bestandsinformatie uitlezen

foreach (var bestand in resultaten)
{
    Console.WriteLine($"Naam     : {bestand.Name}");
    Console.WriteLine($"ID       : {bestand.Id}");
    Console.WriteLine($"Master ID: {bestand.MasterId}");
    Console.WriteLine($"Versie   : {bestand.VerNum}");
    Console.WriteLine($"Status   : {bestand.FileLfCyc?.LfCycStateName ?? "n.v.t."}");
    Console.WriteLine($"Pad      : {bestand.FullPath}");
    Console.WriteLine();
}

Veelgemaakte fouten

PropDefId = 0 voor bestandsnaam — voor de bestandsnaam gebruik je PropDefId = 0 en PropTyp = AllProperties. Voor andere eigenschappen moet je de Id opzoeken via PropertyService.

Lege resultatenset vs nullFindFilesBySearchConditions geeft null terug als er geen resultaten zijn, niet een lege array. Controleer altijd op null.

latestOnly vergeten — zet latestOnly = true als je alleen de meest recente versie wilt. Bij false krijg je alle historische versies terug.

Bookmark na elke batch resetten — de bookmark-string wordt door Vault bijgewerkt na elke aanroep. Geef hem mee als ref-parameter en hergebruik hem bij de volgende aanroep.

Samenvatting

Zoeken in Vault via de .NET API draait om SrchCond-objecten: stel de PropDefId, operator en zoektekst in, geef ze mee aan FindFilesBySearchConditions en verwerk de resultaten. Combineer meerdere condities voor complexe zoekopdrachten en gebruik paginering voor grote resultatensets.

Dit is deel 1 van 2.

In Deel 2 behandelen we geavanceerde technieken: OR/NOT-logica met SearchRuleType.May en MustNot, zoeken op datumbereik, bestandsextensie-filters, meerdere mappen tegelijk doorzoeken, het cachen van PropDefId-waarden, iProperties ophalen na een zoekopdracht, en een volledig herbruikbare VaultSearchHelper-klasse.

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.