Beispiel: Hinzufügen von benutzerdefinierter Validierung für Ordnernamen

Aufgabe: Neue Ordnernamen prüfen, die auf der aktuellen Ebene nicht vorhanden sind

Lösung:

  1. Fügen Sie eine benutzerdefinierte Validierung $Prop["_FolderName"].CustomValidation in der Funktion InitializeWindow im Abschnitt FolderWindow hinzu:

    function InitializeWindow
    {
        …
        $mWindowName = $dsWindow.Name
        Switch (-$mwindowname)
        {
            "FileWindow"
            {
                #rules applying for File
            }
            "FolderWindow"
            {
                #rules applying for Folder
                $Prop["_FolderName"].CustomValidation = { FolderNameCustomValidation }
            }
            …
  2. Fügen Sie die Funktion FolderNameCustomValidation und die zugehörige Ordnersuche hinzu:

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;
}
  1. Aktualisieren Sie die Dialogfelddefinition File.xaml: Navigieren Sie zum Textfeld FILENAME, und aktualisieren Sie die Bindung Text="{WPF:ValidatedBinding Name}" in Text="{WPF:ValidatedBinding Prop[_FolderName].Value}". Die neue Textfelddefinition sieht wie folgt aus:
<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" />