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
| Waarde | Betekenis |
|---|---|
| 1 | Gelijk aan (=) |
| 2 | Niet gelijk aan (≠) |
| 3 | Bevat (contains) |
| 4 | Begint met (starts with) |
| 5 | Eindigt op (ends with) |
| 6 | Groter dan (>) |
| 7 | Kleiner dan (<) |
| 8 | Groter dan of gelijk aan (≥) |
| 9 | Kleiner 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 null — FindFilesBySearchConditions 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.
Comments
No comments yet — be the first!
Leave a comment
Sign in to skip moderation — anonymous comments are reviewed before appearing.