範例 - 在 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
}
...

自訂檔名

Data Standard for Vault

假設您具有以下名為 TestScheme 的編號規則。

現在,您希望根據選取的文件類型在檔名前面加上固定的文字:

在「建立檔案」對話方塊 (「新標準檔案」) 中按一下「確定」時,會先呼叫 PowerShell 函數 GetNewFileName,然後再將檔案加入至 Vault。此時,您有機會修改檔名並包括其他性質中的資訊。

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 和 AutoCAD,您可以規劃性質值與所產生號碼的組合,以用於檔名。

例如,假設您要使用「N-<標題>-####.ipt」格式自動建立唯一檔名,其中 N- 永遠會套用、*<標題>* 是使用者輸入的「Title」性質、#### 是自動產生的號碼、*.ipt* 是副檔名。

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