Przykład — dodawanie niestandardowej weryfikacji nazw folderów

Zadanie: Sprawdzić, czy nazwy nowych folderów nie istnieją na bieżącym poziomie.

Rozwiązanie:

  1. Dodaj niestandardową weryfikację $Prop["_FolderName"].CustomValidation w sekcji FolderWindow funkcji InitializeWindow:

    function InitializeWindow
    {	
    	…
    	$mWindowName = $dsWindow.Name
    	Switch ( $mWindowName)
    	{
    		"FileWindow"
    		{
    			#rules applying for File
    		}
    		"FolderWindow"
    		{
    			#rules applying for Folder
    			$Prop["_FolderName"].CustomValidation = { FolderNameCustomValidation }
    		}
    		…
    
  2. Dodaj funkcję „FolderNameCustomValidation” i powiązane wyszukiwania folderów:

  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. Zaktualizuj definicję okna dialogowego File.xaml: Przejdź do pola tekstowego „FILENAME” i zmień powiązanie Text="{WPF:ValidatedBinding Name}" na Text="{WPF:ValidatedBinding Prop[_FolderName].Value}". Nowa definicja obiektu pola tekstowego wygląda następująco:
<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" />