Element sterujący języka XAML o nazwie DSNumSchemeCtrl służy do obsługi schematów numerowania w oknach dialogowych rozwiązania Data Standard w przypadku programu Vault Client oraz dodatków Vault dla programów Inventor i AutoCAD.
Schemat numerowania — interfejs użytkownika

Następujące linie są wymagane w pliku XAML w celu wyświetlenia elementów sterujących interfejsu użytkownika widocznych na powyższej ilustracji.
...
<Label Content="{Binding UIString[LBL10]}" Grid.Column="0" Grid.Row="6" />
<ComboBox Grid.Column="1" Grid.Row="6" Name="NumSchms" SelectedIndex="0" Style="{StaticResource NumSchmStyle}"></ComboBox>
<Label Content="{Binding UIString[LBL31]}" Grid.Column="0" Grid.Row="8"></Label>
<WPF:DSNumSchemeCtrl Grid.Column="1" Grid.Row="8" Name="NUMSCHEME" IsEnabled="{Binding ElementName=NumSchms, Path=IsEnabled}" Scheme="{Binding ElementName=NumSchms, Path=SelectedItem}" GeneratedNumberProperty="_GeneratedNumber" />
...
Ten atrybut służy do określania nazwy schematu numerowania, która ma być wyświetlana w elemencie sterującym. W niniejszym przykładzie ta wartość jest powiązana z elementem wybranym w polu kombi powyżej elementu sterującego. Domyślnie pole kombi zawiera wszystkie aktywne schematy numerowania plików. W sekcji Filtrowanie schematów numerowania w tym temacie opisano, w jaki sposób można filtrować schematy numerowania.
Ten atrybut służy do określania, która właściwość zawiera generowaną liczbę. Po kliknięciu przycisku OK numer każdego elementu sterującego DSNumSchemeCtrl zostanie utworzony i przypisany do określonej właściwości.
W domyślnym przykładzie wartość właściwości _GeneratedNumber oraz rozszerzenie pliku określają nazwę pliku, która zostanie zastosowana w przypadku nowego pliku. W następnej sekcji podano przykłady dotyczące programów Vault Explorer i CAD, w których użyto wygenerowanej liczby, jak również innych wartości właściwości, do utworzenia nazwy nowego pliku („Dostosowywanie nazwy pliku”). Obecnie obsługiwany jest jeden element sterujący DSNumSchemeCtrl na każde okno dialogowe.
W programach Inventor i AutoCAD funkcja programu PowerShell o nazwie OnPostCloseDialog jest wywoływana podczas zamykania okna dialogowego rozwiązania Data Standard.
Funkcja jest wywoływana przed ustawieniem nazwy pliku i przed zaktualizowaniem właściwości iProperties. Umożliwia to dalsze modyfikowanie właściwości przy użyciu kodu, zanim plik zostanie zapisany. Może to być przydatne, gdy użytkownicy nie muszą wybierać schematów numerowania (zobacz przykład w sekcji „Używanie numerowania programu Vault bez wyświetlania elementu sterującego schematu numerowania w oknie dialogowym” dotyczącej programu CAD).
Domyślnie funkcja OnPostCloseDialog w pliku Default.ps1 dla programu CAD nie wykonuje żadnych operacji.
Parametry
Po wywoływaniu funkcji OnPostCloseDialog, w zmiennej $DSParam programu PowerShell jest ustawiana jedna następujących wartości:
Okno dialogowe rozwiązania Data Standard dla programu Vault w trybie „CreateMode” dla pojedynczego pliku.
Okno dialogowe rozwiązania Data Standard dla programu Vault w trybie „EditMode” dla pojedynczego pliku.
Ponadto zmienna $dsWindow.Name zawiera nazwę okna dialogowego. Domyślnie jest to InventorWindow lub AutoCADWindow.
Te zmienne mogą być używane w celu zapewnienia różnych implementacji w różnych scenariuszach.
W zainstalowanym przykładzie w polu kombi Schemat numerowania są wyświetlane wszystkie aktywne schematy numerowania. W pliku XAML pole kombi jest powiązane z funkcją programu PowerShell o nazwie GetNumSchms.

Funkcja GetNumSchms ułatwia określenie, które schematy powinny być widoczne dla użytkownika.
Filtrowanie schematów numerowania w programie Inventor w oparciu o typ pliku
Bez rozwiązania Data Standard użytkownik może zawsze wybierać spośród wszystkich aktywnych schematów numerowania programu Vault. W następującej implementacji funkcji GetNumSchms w przypadku komponentów (IPT, IAM) i rysunków (IDW, IPN i DWG) będą dostępne różne schematy. Aby przykładowy kod zadziałał schematy numerowania rozpoczynające się od „COMP” lub „DRAWING” powinny być zdefiniowane w programie Vault:
C:\ProgramData\Autodesk\Vault 2015 R2\Extensions\DataStandard\CAD\addinVault\Default.ps1
...
function GetNumSchms
{
try
{
$numSchems = $vault.DocumentService.GetNumberingSchemesByType('Activated')
}
catch [System.Exception]
{
#[System.Windows.MessageBox]::Show($error)
}
$fileName = $Prop["DocNumber"].Value
$fileExt = [System.IO.Path]::GetExtension($fileName)
$ret = @()
foreach ($item in $numSchems)
{
if (($fileExt -eq ".iam" -or $fileExt -eq ".ipt") -and $item.Name.StartsWith("COMP"))
{
$ret += $item.Name
}
elseif (($fileExt -eq ".idw" -or $fileExt -eq ".ipn" -or $fileExt -eq ".dwg") -and $item.Name.StartsWith("DRAWING"))
{
$ret += $item.Name
}
}
return $ret
}
...
Załóżmy, że jest dostępny następujący schemat numerowania o nazwie TestScheme.

Chcemy poprzedzić nazwę pliku tekstem ustalanym na podstawie wybranego typu dokumentu:
Po kliknięciu przycisku OK w oknie CreateFileDialog („Nowy plik standardowy...”) funkcja GetNewFileName programu PowerShell jest wywoływana przed dodaniem pliku do programu Vault. W tym miejscu można również zmodyfikować nazwę pliku i dołączyć informacje z innych właściwości.
C:\ProgramData\Autodesk\Vault 2015 R2\Extensions\DataStandard\Vault\addinVault\Default.ps1
...
function GetNewFileName
{
$prefix = ""
if($dsWindow.FindName("NUMSCHEME").IsEnabled -eq $false)
{
$fileName = $dsWindow.FindName("FILENAME").Text
}
else{
$fileName = $Prop["_GeneratedNumber"].Value
if (($Prop["_FileExt"].Value -eq ".ipt") -or ($Prop["_FileExt"].Value -eq ".iam"))
{
$prefix = "ENG-"
}
elseif (($Prop["_FileExt"].Value -eq ".dwg") -or ($Prop["_FileExt"].Value -eq ".idw") -or ($Prop["_FileExt"].Value -eq ".ipn"))
{
$prefix = "ENGDOC-"
}
else
{
$prefix = "OFF-"
}
}
$newfileName = $prefix + $fileName + $Prop["_FileExt"].Value
return $newfileName
}
Za pomocą rozwiązania Data Standard dla programów Inventor i AutoCAD można skonfigurować kombinację wartości właściwości i wygenerowanej liczby używaną w nazwie pliku.
Załóżmy na przykład, że chcemy automatycznie tworzyć unikatowe nazwy plików w formacie: „N-<Tytuł>-####.ipt”, gdzie N- jest zawsze dodawane, <Tytuł> to właściwość Tytuł wprowadzona przez użytkownika, #### jest wygenerowaną automatycznie liczbą, a .ipt to rozszerzenie pliku.
Można to zrobić przez zmodyfikowanie elementu <FileNameDefinition> w plikach Inventor.cfg lub AutoCAD.cfg.
C:\ProgramData\Autodesk\Vault 2015 R2\Extensions\DataStandard\CAD
<?xml version="1.0" encoding="utf-8"?>
<Configuration>
<PathDefinition>{Workspace}\{Prop[Folder].Value}</PathDefinition>
<FileNameDefinition>N-{Prop[Title].Value}-{Prop[DocNumber].Value}</FileNameDefinition>
<PropertyDefinitions>
<PropertyDefinition PropertyName="DocNumber" DataType="Text" InitialValue="{PathAndFileNameHandler.FileName}" />
...
Właściwość DocNumber zawiera wygenerowaną liczbę, ponieważ jest ona zdefiniowany w atrybucie GeneratedNumberProperty="DocNumber" w elemencie sterującym DSNumSchemeCtrl pliku Inventor.xaml.
Po usunięciu elementu sterującego DSNumSchemeCtrl i pola kombi NumSchms z domyślnego pliku File.xaml użytkownik nie może wybierać schematu numerowania.
Rozwiązanie Data Standard dla programu Vault
W następującym przykładzie implementacji funkcji GetNewFileName użyto powyższego schematu numerowania „TestScheme” i wartości wprowadzonej w polu „Tytuł” jako parametru schematu numerowania.
C:\ProgramData\Autodesk\Vault 2015 R2\Extensions\DataStandard\Vault\addinVault\Default.ps1
...
function GetNewFileName
{
$numSchemes = $vault.DocumentService.GetNumberingSchemesByType([Autodesk.Connectivity.WebServices.NumSchmType]::Activated)
$testNumScheme = $numSchemes | Where-Object { $_.Name.Equals("TestScheme") }
$NumGenArgs = @()
$NumGenArgs += $Prop["Title"].Value
$genNum = $vault.DocumentService.GenerateFileNumber($testNumScheme.SchmID, $NumGenArgs)
return $genNum + $Prop["_FileExt"].Value
}
...
Rozwiązanie Data Standard dla programów CAD
W przypadku programów Inventor i AutoCAD implementacja jest podobna do powyższego przykładu. Jednak zamiast zwracania nazwy pliku właściwość „DocNumber” musi zostać wypełniona wygenerowaną liczbą. Ta właściwość jest następnie używana do ustawienia nazwy bieżącego pliku:
C:\ProgramData\Autodesk\Vault 2015 R2\Extensions\DataStandard\CAD\addinVault\Default.ps1
...
function OnPostCloseDialog
{
if ($DSParam -eq "Create")
{
$numSchemes = $vault.DocumentService.GetNumberingSchemesByType([Autodesk.Connectivity.WebServices.NumSchmType]::Activated)
$testNumScheme = $numSchemes | Where-Object { $_.Name.Equals("TestScheme") }
$NumGenArgs = @()
$NumGenArgs += $Prop["Title"].Value
$genNum = $vault.DocumentService.GenerateFileNumber($testNumScheme.SchmID, $NumGenArgs)
$Prop["DocNumber"].Value = $genNum
}
}
...