Использование схем нумерации в диалоговом окне Data Standard

Для поддержки схем нумерации в диалоговых окнах 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 имеет два обязательных пользовательских атрибута.
  • Scheme

    Используйте этот атрибут, чтобы указать имя схемы нумерации, которая должна отображаться в элементе управления. В примере это значение привязано к выбранной записи в поле со списком над элементом управления. Поле со списком по умолчанию содержит все активированные схемы нумерации файлов. Сведения о фильтрации схем нумерации можно найти в разделе "Фильтрация схем нумерации" этой статьи.

  • GeneratedNumberProperty

    Используйте этот атрибут для определения свойства, которому присвоен созданный номер. При нажатии на кнопку "ОК" для каждого элемента управления DSNumSchemeCtrl создается номер, который присваивается указанному свойству.

    В примере по умолчанию значение свойства _GeneratedNumber и расширение файла определяют имя, которое будет использоваться при создании файла. В разделе "Настройка имени файла" приведены примеры для программы Vault Explorer и САПР, использующих созданные номера и некоторые другие значения свойств для определения имени, которое будет использоваться при создании файла. В настоящее время в одном диалоговом окне может использоваться один элемент DSNumSchemeCtrl.

Функция PowerShell OnPostCloseDialog в САПР

В программах Inventor и AutoCAD функция PowerShell с именем OnPostCloseDialog вызывается при закрытии диалогового окна Data Standard.

Функция вызывается перед присвоением файлу имени и перед обновлением свойств Inventor. Это позволяет коду вносить изменения в свойства до сохранения файла. Это может быть полезно, когда пользователям не требуется выбирать схемы нумерации (см. пример "Использование нумерации Vault без отображения элемента управления схем нумерации в диалоговом окне" для САПР в следующем разделе).

По умолчанию функция OnPostCloseDialog в файле САПР Default.ps1 не выполняет никаких действий.

Параметры

Примеры кода

Фильтрация схем нумерации

В этом примере в поле со списком "Схемы нумерации" отображаются все активированные схемы нумерации. В файле 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.

Перед началом имени файла требуется добавить фиксированный текст в зависимости от типа документа:

  • ENG- для сборок и деталей Inventor (например, ENG-A-00004.ipt);
  • ENGDOC- для чертежей AutoCAD/Inventor и презентаций Inventor (например, ENGDOC-B-00001.idw);
  • OFF- для других файлов (например, OFF-C-00002.docx).

Нажатие кнопки "ОК" в диалоговом окне создания файла ("Новый файл стандартов...") перед добавлением файла в 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 для САПР

С помощью 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.

Использование нумерации Vault без отображения элемента управления схем нумерации в диалоговом окне

Удаление 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
        }
    }
    ...