Example–Add Custom Validation for FolderNames

Task: Check new folder names that don’t exist on current level.

Solution:

  1. 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 }
    		}
    		…
    
  2. Add the function “FolderNameCustomValidation” and related search for folders:

  3. 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;
    }
    
  4. Update the Dialog definition File.xaml: Navigate to the Textbox "FILENAME" and update the binding Text="{WPF:ValidatedBinding Name}" to Text="{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" />