Tarefa: verifique nomes de pasta novos que não existem no nível atual.
Solução:
Adicione uma validação personalizada $Prop["_FolderName"].CustomValidation
à função InitializeWindow, seção FolderWindow:
function InitializeWindow
{
…
$mWindowName = $dsWindow.Name
Switch (-$mwindowname)
{
"FileWindow"
{
#rules applying for File
}
"FolderWindow"
{
#rules applying for Folder
$Prop["_FolderName"].CustomValidation = { FolderNameCustomValidation }
}
…
Adicione a função "FolderNameCustomValidation" e a pesquisa de pastas relacionada:
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;
}
Text="{WPF:ValidatedBinding Name}"
para Text="{WPF:ValidatedBinding Prop[_FolderName].Value}"
. A nova definição de caixa de texto se parece com isto:<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" />