작업: 현재 수준에 존재하지 않는 새 폴더 이름을 확인합니다.
해결 방법:
함수 InitializeWindow의 섹션 FolderWindow에서 사용자 유효성 검사($Prop["_FolderName"].CustomValidation
)를 추가합니다.
function InitializeWindow
{
…
$mWindowName = $dsWindow.Name
Switch (-$mwindowname)
{
"FileWindow"
{
#rules applying for File
}
"FolderWindow"
{
#rules applying for Folder
$Prop["_FolderName"].CustomValidation = { FolderNameCustomValidation }
}
…
함수 “FolderNameCustomValidation” 및 폴더에 대한 관련 검색을 추가합니다.
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}"
을 Text="{WPF:ValidatedBinding Prop[_FolderName].Value}"
로 업데이트합니다. 새 텍스트 상자 정의가 다음과 같습니다.<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" />