Для поддержки схем нумерации в диалоговых окнах Data Standard для клиента Vault, надстроек Vault для Inventor и AutoCAD используется элемент управления XAML с именем DSNumSchemeCtrl.
Пользовательский интерфейс схем нумерации

В файле XAML должны присутствовать следующие строки, которые указывают на элементы пользовательского интерфейса, показанные на предыдущем изображении.
...
<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" />
...
Используйте этот атрибут, чтобы указать имя схемы нумерации, которая должна отображаться в элементе управления. В примере это значение привязано к выбранной записи в поле со списком над элементом управления. Поле со списком по умолчанию содержит все активированные схемы нумерации файлов. Сведения о фильтрации схем нумерации можно найти в разделе "Фильтрация схем нумерации" этой статьи.
Используйте этот атрибут для определения свойства, которому присвоен созданный номер. При нажатии на кнопку "ОК" для каждого элемента управления DSNumSchemeCtrl создается номер, который присваивается указанному свойству.
В примере по умолчанию значение свойства _GeneratedNumber и расширение файла определяют имя, которое будет использоваться при создании файла. В разделе "Настройка имени файла" приведены примеры для программы Vault Explorer и САПР, использующих созданные номера и некоторые другие значения свойств для определения имени, которое будет использоваться при создании файла. В настоящее время в одном диалоговом окне может использоваться один элемент DSNumSchemeCtrl.
В программах Inventor и AutoCAD функция PowerShell с именем OnPostCloseDialog вызывается при закрытии диалогового окна Data Standard.
Функция вызывается перед присвоением файлу имени и перед обновлением свойств Inventor. Это позволяет коду вносить изменения в свойства до сохранения файла. Это может быть полезно, когда пользователям не требуется выбирать схемы нумерации (см. пример "Использование нумерации Vault без отображения элемента управления схем нумерации в диалоговом окне" для САПР в следующем разделе).
По умолчанию функция OnPostCloseDialog в файле САПР Default.ps1 не выполняет никаких действий.
Параметры
При вызове функции OnPostCloseDialog для переменной PowerShell $DSParam доступны следующие значения.
Диалоговое окно Vault Data Standard в режиме CreateMode для одного файла.
Диалоговое окно Vault Data Standard в режиме EditMode для одного файла.
Кроме того, переменная $dsWindow.Name содержит имя диалогового окна. По умолчанию это InventorWindow или AutoCADWindow.
Эти переменные можно использовать для различных вариантов реализации сценариев.
В этом примере в поле со списком "Схемы нумерации" отображаются все активированные схемы нумерации. В файле XAML поле со списком привязано к функции PowerShell с именем GetNumSchms.

Функция GetNumSchms позволяет с легкостью управлять отображением схем для пользователей.
Фильтрация схем нумерации по типам файлов в Inventor
Пользователи всегда могут выбирать схемы из всех активированных схем нумерации без использования Data Standard. Следующие варианты реализации функции GetNumSchms делают различные схемы доступными для компонентов (IPT, IAM) и чертежей (IDW, IPN и DWG). Чтобы пример кода функционировал, необходимо задать в Vault схемы нумерации, которые начинаются с COMP или DRAWING.
C:\ProgramData\Autodesk\Vault 2016\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
}
...
Предположим, что имеются следующие схемы нумерации с именем TestScheme.

Перед началом имени файла требуется добавить фиксированный текст в зависимости от типа документа:
Нажатие кнопки "ОК" в диалоговом окне создания файла ("Новый файл стандартов...") перед добавлением файла в Vault вызывает функцию PowerShell GetNewFileName. Таким образом можно изменить имя файла и включить информацию из других свойств.
C:\ProgramData\Autodesk\Vault 2016\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
}
С помощью Data Standard для Inventor и AutoCAD можно настроить комбинацию значений свойств и созданный номер для имени файла.
Предположим, что требуется автоматически создавать уникальные имена файлов в формате N-<Title>-####.ipt, где N применяется всегда,<Title> — введенное пользователем свойство Title, #### — автоматически созданный номер, а .ipt — расширение файла.
Это можно сделать, изменив элемент <FileNameDefinition> в файле Inventor.cfg или AutoCAD.cfg.
C:\ProgramData\Autodesk\Vault 2016\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}" />
...
Свойство DocNumber содержит созданный номер, поскольку он определен в атрибуте GeneratedNumberProperty="DocNumber" в элементе управления DSNumSchemeCtrl файла Inventor.xaml.
Удаление DSNumSchemeCtrl и поля со списком NumSchms из файла по умолчанию File.xaml исключает возможность выбора схем нумерации.
Data Standard для Vault
В следующем примере реализации функции GetNewFileName используются схемы нумерации TestScheme (см. выше) и значение свойства Title, введенное в качестве параметра схемы нумерации.
C:\ProgramData\Autodesk\Vault 2016\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
}
...
Data Standard для САПР
Реализация для Inventor и AutoCAD аналогична реализации в примере, приведенном выше. Однако вместо возврата имени файла происходит заполнение свойства DocNumber созданным номером. Это свойство используется для присвоения имени текущему файлу.
C:\ProgramData\Autodesk\Vault 2016\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
}
}
...