我的第一个Autodesk Vault定制程序

我们的Vault开发专家Barbara离开了,我不得不开始学习Vault API了。如果你也刚开始学习Vault,这篇文章也许对有你帮助。Vault客户端主要采用Web Service与Vault服务器通讯,Vault也提供了丰富的API,其中重要的就是各个WebService。Vault提供了.net的API,可以用C#或者VB.net来做定制开发,开发工具自然是Visual Studio了。 Vault 2013开始,Vault API支持.net framework 4.0, 所有这里使用VS2010. 做个最简单的WinForm程序,枚举Vault服务器中的所有文件。

Vault 的SDK会随Vault  Server或者Vault Client安装,在Vault的安装目录\SDK 目录下可以找到Vault SDK的安装文件,安装完毕后可以得到下列目录:

image

首先创建一个WinForm的应用程序,注意对于Vault 2013来说,需要使用.net Framework 4.0 .在上面添加一个listbox和一个button,然后添加引用。这里作为一个独立的应用程序,只需要引用Autodesk.Connectivity.WebServices.dll即可,然后编写代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Autodesk.Connectivity.WebServicesTools;
using
Autodesk.Connectivity.WebServices;


namespace
HelloVault
{
   
public partial class Form1 : Form
    {
       
public
Form1()
        {
            InitializeComponent();
        }

       
private void button1_Click(object sender, EventArgs
e)
        {
           
//用指定的用户名密码,连接到指定服务器的vault
            UserPasswordCredentials cred = new UserPasswordCredentials
                ("Bei9m4jxix", "Vault", "Administrator", ""
);

           
//获取WebService Manager
            using (WebServiceManager mgr = new WebServiceManager
(cred))
            {
               
//有WebServiceManager获取文档服务,还可以获取其他服务
                //然后获取Vault根目录
                Folder
root = mgr.DocumentService.GetFolderRoot();
               
//递归打印Vault服务器中的目录和文件
                PrintFolder(root, mgr);
            }
        }

       
public void PrintFolder(Folder folder, WebServiceManager
mgr)
        {
           
File
[] files = mgr.DocumentService
                .GetLatestFilesByFolderId(folder.Id,
true
);
           
if (files != null
)
            {
               
foreach (var file in
files)
                {
                    //批量更改文件名
                    file.Name +=
"_modi"
;
                    listBox1.Items.Add(folder.FullName +
"\\"
+ file.Name);
                }
            }
           
Folder
[] subFolders = mgr.DocumentService
                .GetFoldersByParentId(folder.Id,
false
);
           
if (subFolders != null
)
            {
               
foreach (var subFolder in subFolders)
                {
                    PrintFolder(subFolder, mgr);
                }
            }

        }
    }
}

代码并不复杂,在编译时会提示'Microsoft.Web.Services3.WebServicesClientProtocol程序集找不到,

Error    1    The type 'Microsoft.Web.Services3.WebServicesClientProtocol' is defined in an assembly that is not referenced. You must add a reference to assembly 'Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.

解决办法即按照提示添加'Microsoft.Web.Services3的引用即可。如果你安装了Vault Client,这个dll在C:\Program Files (x86)\Microsoft WSE\v3.0目录下。如果你没有安装Vault client,你需要自行从微软网站下载WSE3(Web Service Extension)

另外还有错误信息:

Error    1    The type 'System.Web.Services.Protocols.SoapHttpClientProtocol' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. 

需要添加System.Web.Services的引用。


然后编译运行,结果如下:

image

原文地址:https://www.cnblogs.com/junqilian/p/2872461.html