Vault-eigenschappen (iProperties) zijn de metadata die gekoppeld is aan bestanden in Vault: onderdeelnummer, beschrijving, materiaal, revisie, leverancier. Via de Vault WebService API kun je deze eigenschappen lezen, aanpassen en in bulk exporteren — zonder dat je de bestanden lokaal hoeft te downloaden.
Eigenschappen vs Vault-properties
Vault synchroniseert de iProperties van Inventor-bestanden automatisch naar Vault-properties bij elke check-in. Je kunt de Vault-properties rechtstreeks lezen via de PropertyService zonder het bestand te openen. Dit maakt batchrapportage extreem snel.
Alle property-definities ophalen
using Autodesk.Connectivity.WebServices;
public void ToonPropertyDefinities(WebServiceManager wsm)
{
var defs = wsm.PropertyService
.GetPropertyDefinitionsByDomainAndEntityClassId("FILE", "FILE");
foreach (var def in defs)
{
Console.WriteLine($"ID={def.Id,-6} Naam={def.DispName,-30} Type={def.Typ}");
}
}
Eigenschappen lezen voor een bestand
public Dictionary LeesProperties(WebServiceManager wsm, File bestand)
{
var propDefs = wsm.PropertyService
.GetPropertyDefinitionsByDomainAndEntityClassId("FILE", "FILE");
// Haal de property-waarden op voor dit bestand
var propDefIds = propDefs.Select(d => d.Id).ToArray();
var props = wsm.PropertyService.GetPropertiesByEntityIds(
"FILE", new[] { bestand.Id }, propDefIds);
var resultaat = new Dictionary();
foreach (var propDef in propDefs)
{
var propWaarde = props.FirstOrDefault(p =>
p.PropDefId == propDef.Id && p.EntityId == bestand.Id);
resultaat[propDef.DispName] = propWaarde?.Val ?? "";
}
return resultaat;
}
// Gebruik:
var props = LeesProperties(conn.WebServiceManager, bestand);
Console.WriteLine($"Onderdeelnummer : {props["Part Number"]}");
Console.WriteLine($"Beschrijving : {props["Description"]}");
Console.WriteLine($"Revisie : {props["Revision Number"]}");
Console.WriteLine($"Materiaal : {props["Material"]}");
Specifieke eigenschap lezen via naam
public object LeesEigenschap(WebServiceManager wsm, File bestand, string eigenschapNaam)
{
var propDefs = wsm.PropertyService
.GetPropertyDefinitionsByDomainAndEntityClassId("FILE", "FILE");
var propDef = propDefs.FirstOrDefault(d =>
d.DispName.Equals(eigenschapNaam, StringComparison.OrdinalIgnoreCase));
if (propDef == null)
throw new Exception($"Eigenschap '{eigenschapNaam}' niet gevonden.");
var props = wsm.PropertyService.GetPropertiesByEntityIds(
"FILE", new[] { bestand.Id }, new[] { propDef.Id });
return props?.FirstOrDefault()?.Val ?? "";
}
Eigenschap schrijven (updaten)
public void StelEigenschapIn(
WebServiceManager wsm,
File bestand,
string eigenschapNaam,
object nieuweWaarde)
{
var propDefs = wsm.PropertyService
.GetPropertyDefinitionsByDomainAndEntityClassId("FILE", "FILE");
var propDef = propDefs.First(d =>
d.DispName.Equals(eigenschapNaam, StringComparison.OrdinalIgnoreCase));
var propWaarden = new PropInstParam[]
{
new PropInstParam
{
PropDefId = propDef.Id,
Val = nieuweWaarde
}
};
wsm.PropertyService.UpdateProperties(
"FILE",
new[] { bestand.Id },
propWaarden);
Console.WriteLine($"'{eigenschapNaam}' bijgewerkt voor {bestand.Name}.");
}
Eigenschappen lezen voor meerdere bestanden tegelijk
Dit is de meest efficiënte aanpak voor batchrapportage: één API-aanroep voor honderden bestanden.
public void BatchLeesEnExporteer(
WebServiceManager wsm,
File[] bestanden,
string csvPad)
{
var propDefs = wsm.PropertyService
.GetPropertyDefinitionsByDomainAndEntityClassId("FILE", "FILE");
// Selecteer de relevante properties
var gewensteNamen = new[] { "Part Number", "Description", "Revision Number", "Material", "Mass" };
var gewensteDefs = propDefs.Where(d => gewensteNamen.Contains(d.DispName)).ToArray();
var defIds = gewensteDefs.Select(d => d.Id).ToArray();
var bestandIds = bestanden.Select(b => b.Id).ToArray();
// Één aanroep voor alle bestanden en alle properties
var allProps = wsm.PropertyService
.GetPropertiesByEntityIds("FILE", bestandIds, defIds);
var regels = new List();
regels.Add(string.Join(",", new[] { "Bestandsnaam" }.Concat(gewensteNamen)));
foreach (var b in bestanden)
{
var waarden = gewensteDefs.Select(def =>
{
var p = allProps?.FirstOrDefault(x => x.PropDefId == def.Id && x.EntityId == b.Id);
return $""{p?.Val?.ToString() ?? ""}"";
});
regels.Add($""{b.Name}"," + string.Join(",", waarden));
}
File.WriteAllLines(csvPad, regels, System.Text.Encoding.UTF8);
Console.WriteLine($"Export klaar: {csvPad} ({bestanden.Length} bestanden)");
}
Bestanden filteren op eigenschapswaarde
// Zoek alle bestanden waarvan het materiaal "Aluminium" is
public File[] FilterOpMateriaal(WebServiceManager wsm, File[] bestanden, string materiaal)
{
var propDefs = wsm.PropertyService
.GetPropertyDefinitionsByDomainAndEntityClassId("FILE", "FILE");
var matDef = propDefs.First(d => d.DispName == "Material");
var ids = bestanden.Select(b => b.Id).ToArray();
var props = wsm.PropertyService
.GetPropertiesByEntityIds("FILE", ids, new[] { matDef.Id });
var matchende = new HashSet(
props.Where(p => p.Val?.ToString()
.Contains(materiaal, StringComparison.OrdinalIgnoreCase) == true)
.Select(p => p.EntityId));
return bestanden.Where(b => matchende.Contains(b.Id)).ToArray();
}
Aangepaste (custom) Vault-eigenschappen toevoegen
Naast de standaard-iProperties kun je ook eigen Vault-properties definiëren. Dit doe je via Vault's beheerdersconsole (Administrator → Vault Settings → Properties). Via de API kun je ze daarna net als gewone properties lezen en schrijven.
Veelgemaakte fouten
GetPropertiesByEntityIds geeft null terug — als geen enkele eigenschap is ingevuld voor de gevraagde bestanden, geeft de service null terug. Controleer altijd op null.
Property-definitie niet gevonden — de namen zijn gelokaliseerd. Op een Nederlandse Vault-installatie kan Part Number anders heten. Dump eerst alle propDefs om de exacte namen te zien.
Schrijven werkt niet zonder check-out — sommige Vault-configuraties vereisen dat een bestand is uitgecheckt voor je properties kunt bijwerken. Controleer de Vault-beveiligingsinstellingen.
Samenvatting
Vault-eigenschappen lezen en schrijven via de PropertyService is snel, schaalbaar en vereist geen lokale download van bestanden. De sleutel is GetPropertiesByEntityIds voor bulklezing en UpdateProperties voor schrijven. Combineer dit met een zoekopdracht om gericht bestanden te vinden en hun metadata in bulk bij te werken.
Comments
No comments yet — be the first!
Leave a comment
Sign in to skip moderation — anonymous comments are reviewed before appearing.