示例 - 使用 Data Standard 对话框中的编号方案

利用 Vault 编号规则来强制文件名称,当用户创建新的 Data Standard 文件。

过滤编号方案

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

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

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

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

C:\ProgramData\Autodesk\<Vault 版本>\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
}
...

自定义文件名

适用于 Vault 的 Data Standard

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

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

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

C:\ProgramData\Autodesk\<Vault 版本>\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 for CAD

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

例如,假设您要自动创建唯一的文件名,格式为“N--####.ipt*”,其中 *N- 是始终应用的内容,*

* 是用户输入的标题特性,<em>####</em> 是自动生成的编号,<em>.ipt</em> 是文件扩展名。

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

C:\ProgramData\Autodesk\<Vault 版本>\Extensions\DataStandard\CAD\Inventor.cfg

<?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 组合框,用户便再也不能选择编号方案。

Data Standard for Vault

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

C:\ProgramData\Autodesk\<Vault 版本>\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 for CAD

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

C:\ProgramData\Autodesk\<Vault 版本>\Extensions\DataStandard\CAD\addinVault\Default.ps1

...
function OnPostCloseDialog
{
    if ($Prop["_CreateMode"].Value)
    {
        $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
    }
}
...