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; }
<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" />