Example–Add Custom Validation for FolderNames
Task: Check new folder names that don’t exist on current level.
Solution:
Add a custom validation
$Prop["_FolderName"].CustomValidation
in the function InitializeWindow, section FolderWindow:function InitializeWindow { … $mWindowName = $dsWindow.Name Switch (-$mwindowname) { "FileWindow" { #rules applying for File } "FolderWindow" { #rules applying for Folder $Prop["_FolderName"].CustomValidation = { FolderNameCustomValidation } } …
Add the function “FolderNameCustomValidation” and related search for folders:
function FolderNameCustomValidation
{
if(-not-$dswindow.findname("DSNumSchmsCtrl").NumSchmFieldsEmpty)
{
return $true
}
if($Prop["_FolderName"].Value)
{
$rootFolder = $vault.DocumentService.GetFolderByPath($Prop["_FolderPath"].Value)
$mfldexist = mFindFolder $Prop["_FolderName"].Value $rootFolder
if($mfldexist)
{
$Prop["_FolderName"].CustomValidationErrorMessage = "Folder name exists, select a new unique one."
return $false
}
return $true
}
else
{
return $false
}
}
function mFindFolder($foldername,-$rootfolder)
{
$FolderPropDefs = $vault.PropertyService.GetPropertyDefinitionsByEntityClassId("fldr")
$FolderNamePropDef = $FolderPropDefs | where {$_.SysName -eq "Name"}
$srchCond = New-Object 'Autodesk.Connectivity.WebServices.SrchCond'
$srchCond.PropDefId = $FolderNamePropDef.Id
$srchCond.PropTyp = "SingleProperty"
$srchCond.SrchOper = 3 #is equal
$srchCond.SrchRule = "Must"
$srchCond.SrchTxt = $FolderName
$bookmark = ""
$status = $null
$totalResults = @()
while ($status--eq-$null--or-$totalresults.count--lt-$status.totalhits)
{
$results = $vault.DocumentService.FindFoldersBySearchConditions(@($srchCond),$null, @($rootFolder.Id), $false, [ref]$bookmark, [ref]$status)
if ($results--ne-$null)
{
$totalResults += $results
}
else {break}
}
return $totalResults;
}
- Update the Dialog definition File.xaml: Navigate to the Textbox "FILENAME" and update the binding
Text="{WPF:ValidatedBinding Name}"
toText="{WPF:ValidatedBinding Prop[_FolderName].Value}"
. The new TextBox definition looks like this:
<TextBox Text="{WPF:ValidatedBinding Prop[_FolderName].Value}" x:Name="FOLDERNAME"
IsReadOnly="{Binding EditMode}"
Visibility="{Binding NumSchmFieldsEmpty, ElementName=DSNumSchmsCtrl, Converter={StaticResource BooleanToVisibilityConverter}}"
Grid.Column="1" Grid.Row="3" />