将编号方案与 Data Standard 对话框配合使用(仅限 Data Standard for Vault 2015 R2)

注: 仅 Data Standard for Vault 2015 R2 版本中提供针对 Data Standard 对话框的编号方案支持。

名为 DSNumSchemeCtrl 的 XAML 控件用于在 Vault Client、Inventor Vault 附加模块和 AutoCAD Vault 附加模块的 Data Standard 对话框中支持编号方案。

编号方案 UI

XAML 文件中必须有以下行才能显示如上图所示的 UI 控件。

...
        <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 和 CAD 的示例使用生成的编号以及其他一些特性值构建了新文件的文件名(“自定义文件名”)。当前,一个对话框只支持一个 DSNumSchemeCtrl

CAD 中的 PowerShell 函数·OnPostCloseDialog

对于 Inventor 和 AutoCAD,关闭 Data Standard 对话框时将调用名为 OnPostCloseDialog 的 PowerShell 函数。

在设置文件名以及更新 iProperty 之前会调用该函数。此时仍允许代码修改特性(只要文件尚未保存)。这在不需要用户选择编号方案时非常有用(请参见下一节中的 CAD 示例“使用 Vault 编号而不显示对话框中的编号方案控件”)。

默认情况下,CAD Default.ps1 中的函数 OnPostCloseDialog 不会起任何作用。

参数

代码示例

过滤编号方案

在安装的示例中,编号方案组合框中显示了所有激活的编号方案。在 XAML 文件中,该组合框被绑定到名为 GetNumSchms 的 PowerShell 函数。

使用 GetNumSchms 函数,您可以轻松控制应将哪些方案显示给用户。

根据文件类型在 Inventor 中过滤编号方案

    在不使用 Data Standard 的情况下,用户随时可以在所有激活的 Vault 编号方案中进行选择。在以下实施 GetNumSchms 的示例中,有不同的方案可用于零部件(IPT、IAM)和工程图(IDW、IPN 和 DWG)。若要使示例起作用,需要在 Vault 中定义以“COMP”或“DRAWING”开头的编号方案:

    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
    }
    ...

自定义文件名

假设您有以下编号方案,名为 TestScheme。

现在,您想要根据选定的文档类型在文件名前面加上固定的文本。

  • 对于 Inventor 部件和零件,加上“ENG-”(例如,“ENG-A-00004.ipt”)。
  • 对于 AutoCAD/Inventor 图形和 Inventor 表达视图,加上“ENGDOC-”(例如,“ENGDOC-B-00001.idw”)。
  • 对于所有其他文件,加上“OFF-”(例如,“OFF-C-00002.docx”)。

在创建文件对话框(“新建标准文件...”)中单击“确定”时,在将文件添加到 Vault 中之前会调用 PowerShell 函数 GetNewFileName。此时您可以修改文件名并将其他特性中的信息包含在内。

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
}

适用于 CAD 的 Data Standard

使用适用于 Inventor 和 AutoCAD 的 Data Standard,您可以为文件名配置特性值与生成编号的组合。

例如,假设您要自动创建唯一的文件名,格式为“N-<Title>-####.ipt”,其中 N- 是始终应用的内容,<Title> 是用户输入的标题特性,#### 是自动生成的编号,.ipt 是文件扩展名。

为此,只需修改 Inventor.cfg 或 AutoCAD.cfg 文件中的 <FileNameDefinition> 单元即可。

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}" />
...

特性 DocNumber 中包含生成的编号,因为在 Inventor.xaml 文件的 DSNumSchemeCtrl 控件中的属性 GeneratedNumberProperty="DocNumber" 中对其进行了定义。

使用 Vault 编号而不显示对话框中的编号方案控件

通过从默认的 File.xaml 文件中删除 DSNumSchemeCtrlNumSchms 组合框,用户便再也不能选择编号方案。

适用于 Vault 的 Data Standard

    在以下实施 GetNewFileName 的示例中,使用了上面的编号方案“TestScheme”,并将“Title”中输入的值用作该编号方案的参数。

    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
    }
    ...

适用于 CAD 的 Data Standard

    对于 Inventor 和 AutoCAD,实施与上面的示例类似。但不会返回文件名,而是必须在特性“DocNumber”中填写生成的编号。随后,此特性将用于设置当前文件的名称:

    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
        }
    }
    ...