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