将 Microsoft Office Visio 2003 与 Microsoft SharePoint 产品和技术相结合

Mark Bukovec
Empire Down Development

适用于:
Microsoft® Office Visio® 2003 Standard
Microsoft Office Visio 2003 Professional
Microsoft Office SharePoint® Portal Server 2003
Microsoft Windows® SharePoint Services

摘要: 探索如何将 Microsoft Office Visio 2003 与 Microsoft SharePoint 产品和技术结合在一起,来协助小组成员共享 Visio 文档。SharePoint 站点将 Visio 绘图识别为原生文档类型,并提供菜单项以便无缝地签出文档并将它们签回到服务器。Visio 客户端与 SharePoint 产品和技术相结合,可允许使用共享工作区站点访问文档库。另外,Visio 绘图控件还可以显示在 Web 部件中,供 SharePoint 站点使用。Web 部件可以使用标准接口进行相互通讯。用户可以启用其他 Web 部件与 Visio Web 部件之间的连接,允许动态更新包含在 Visio Web 部件中的绘图。

本页内容

使用 Windows SharePoint Services 共享 Visio 文档 使用 Windows SharePoint Services 共享 Visio 文档
在 Visio 客户端内共享 Visio 文档 在 Visio 客户端内共享 Visio 文档
将 Microsoft Office Visio 2003 ActiveX 控件公开为 Web 部件 将 Microsoft Office Visio 2003 ActiveX 控件公开为 Web 部件
实现 Visio Web 部件的方案 实现 Visio Web 部件的方案
将 Visio 绘图控件包装为 Web 部件 将 Visio 绘图控件包装为 Web 部件
实现 Web 部件基础 实现 Web 部件基础
连接 Web 部件 连接 Web 部件
从 Web 服务获得数据 从 Web 服务获得数据
实现 Visio Web 部件的入门提示 实现 Visio Web 部件的入门提示
小结 小结

使用 Windows SharePoint Services 共享 Visio 文档

Microsoft Windows SharePoint Services 提供与 Visio 文档相结合的工作流,这使得在小组成员之间共享 Visio 文件变得更加简单。在 SharePoint 站点上,您可以从任何文档库中签出 Visio 文件,并使用 Visio 编辑这些文件。例如,您可以在 Shared Documents Web 部件中单击某个 Visio 文档,然后选择 Edit in Microsoft Office Visio,如图 1 所示。

odc_vsvisiointegrationwithsps01

图 1. 从 SharePoint 站点签出 Visio 文档

选择该菜单项以自动签出文件,并将它加载到 Visio 中。在您更改并关闭该文件后,更新后的文件将自动签回到文档库中。请注意,该菜单项不能用于 XML 格式的 Visio 文档。您还可以使用同一菜单手动签入和签出文件。

您可以使用 Visio Documents 集合中的下列方法,以编程方式在文档库中签入或签出 Visio 文件:

  • CanCheckIn。检查服务器以确定是否可以将某个文档签入文档库。

  • CanCheckOut。检查服务器以确定是否可以将某个文档从文档库签出。

  • CheckIn。将文件从本地计算机签入服务器。

  • CheckOut。将文件从服务器签出到本地计算机。

下面的 C# 代码示例演示如何签出文件。代码将打开该文件,检查该文件是否可以签出,如果可以签出,则将其签出。如果文件无法签出,例如另一个用户已签出该文件,则该示例会显示一条错误消息。

private void CheckDocumentOut(string document)
{
    Visio.Documents documents = application.Documents;

    try
    {
        documents.Open(document);

        if (documents.CanCheckOut(document))
            documents.CheckOut(document);
        else
            MessageBox.Show("You are unable to check out this "
                + "document at this time.");
        }
    catch (Exception exception)
    {
        MessageBox.Show(exception.ToString());
    }
}

请注意,该代码假设您具有一个对 Visio Application 对象的引用,从中您可以获得对 Documents 集合的引用。要调用该方法,请将有效的 URL 传入文档,如下所示:

CheckDocumentOut("http://server_name/workspace_name/drawing.vsd")

在 Visio 客户端内共享 Visio 文档

Visio 客户端与 SharePoint 产品和技术相结合,可允许使用共享工作区站点访问文档库。除了提供对其他站点任务的访问以外,共享工作区站点还提供从 Visio 内部到 SharePoint 站点上共享文档的便捷访问。要查看共享工作区站点,请执行以下操作:

  1. 从 Visio 中,单击 Tools 菜单。

  2. 单击 Shared Workspace。将出现 Shared Workspace 任务窗格。

如果您的 Visio 文档已经存储在文档库中,则当您打开该文档时就会显示 Shared Workspace 任务窗格。这就是使用前面介绍的 Edit in Microsoft Office Visio 功能的情况。如果您的 Visio 文档没有存储在文档库中,则可以直接从 Visio 中轻松地添加它。

从 Visio 中将文档添加到工作区

  1. Shared Workspace 任务窗格中,单击 Members 选项卡,如图 2 所示。

    odc_vsvisiointegrationwithsps02

    图 2. 在 Visio 中创建文档工作区

  2. Document Workspace name 框中,键入要用于文档工作区站点的名称。默认情况下,这是该文件的名称。

  3. Location for new workspace list 中,选择新工作区的位置,如果该位置没有出现在列表中,则键入服务器的 URL。例如: http://server_name/site_name/

  4. 单击 Create

Shared Workspace 任务窗格中,您可以访问其他 SharePoint 站点功能:

  • 版本控制 Status 选项卡可让您确保具有最新的版本,并且如果需要最新的版本,则可以从服务器获得更新。

  • 成员列表 Members 选项卡显示与共享工作区站点相关联的小组成员,以及诸如某个成员是空闲还是繁忙、他或她的电子邮件地址之类的信息。

  • 任务列表 Tasks 选项卡可显示分配给您的任务,并且允许您创建其他任务。

  • 文档列表 Documents 选项卡显示共享工作区站点中的文档列表,并允许您添加新文档。

  • 链接列表 Links 选项卡显示对工作区成员有用的超级链接。

  • 文档属性 Document Information 选项卡显示诸如文件创建时间之类的文档属性。

该功能类似于与 SharePoint 产品和技术一起使用的各种 Web 部件所提供的功能。有关详细信息,请参阅 SharePoint 产品和技术帮助文档。

当您将文档添加到共享工作区站点后,就可以从 SharePoint 站点查看诸如名称和标题之类的文档属性。如前所述,尽管您可以通过编程方式签入和签出文件,但是无法通过编程方式修改存储在 SharePoint 站点上的文件的文档属性。

将 Microsoft Office Visio 2003 ActiveX 控件公开为 Web 部件

Web 部件是 Web 部件页的组件,可以方便地加以管理以定义小组工作流。一个 SharePoint 站点是由多个 Web 部件页和 Web 部件组成的。示例 Web 部件中包括 Shared Documents Web 部件,它用于列出文档库中的文件,并提供用于将文件签入和签出文档库的菜单项。

Microsoft Office Visio 2003 ActiveX 控件也称为 Visio 绘图控件,它可以在 Web 部件中呈现。这将允许 Visio 文档出现在 SharePoint 站点的页面上。但是,实现 Visio Web 部件更为吸引人的原因在于,Web 部件可以使用标准接口进行相互通讯。用户可以从菜单中进行选择,以连接可以交换数据的 Web 部件,并且这些 Web 部件可以完全独立于其他部件进行开发。例如,图 3 显示如何从 Excel 电子表格中的数据创建 Visio 流程图。用户可以更改 Web 部件的数据表视图中的值,然后 Visio 绘图会自动进行更新。另外,您还可以更改 Visio 绘图中形状的顺序,随后 Web 部件的数据表视图也会更新。

odc_vsvisiointegrationwithsps03

图 3. Web 部件到 Web 部件的通讯

实现 Visio Web 部件的方案

包含 Visio 绘图控件的 Web 部件可以在 SharePoint 站点的协作活动上下文中提供关系图。Visio 关系图非常适合协作方案,因为它们可以清楚地将数据提供给组,并且可以根据组操作进行动态更新。对于最终用户而言,这些功能提供的增强机制可以更有效地计划、协作和通讯。无论 Web 部件是用于通知小组成员有关项目状态的信息、提供对企业数据的实时访问、重新分配不足的资源、将更改传达到关键业务过程,还是用于使高级管理了解关键里程碑和性能标准,Visio 2003 都扩展了组织从桌面以外的产品投资中收回的价值,并将其作为关键的日常生产工具。最后,将 Visio 和 SharePoint 产品和技术结合使用,可以降低成本并更快地完成业务目标。

以下方案演示了您可以使用 Visio Web 部件实现的解决方案。

用于项目管理的 Visio Web 部件

包装在 Web 部件中的 Visio 绘图控件允许小组成员查看有关项目任务的摘要信息以及 SharePoint 站点的资源。小组成员可以使用 Microsoft Office Project Server 2003 来管理项目计划的复杂详细信息。然后,小组成员可以查看 SharePoint 站点上 Visio Web 部件宿主的 Visio 时间线中出现的相同项目信息。利用某些自定义的解决方案代码,Visio 时间线可以使用 Microsoft Project Data Service 将运行 Project Server 的计算机中包含更改的数据库更新到 Visio 关系图中制作的里程碑。Visio 时间线还可以使用 Microsoft Project Data Service 来显示在运行 Project Server 的计算机的数据库中存储的最新项目信息。两个方向的数据集成允许小组成员查看和更新 SharePoint 站点上动态 Visio 时间线关系图中的 Project 计划的最新摘要信息。

用于业务智能的 Visio Web 部件

因为开发人员可以实现启用 Web 部件到 Web 部件连接的接口,所以 Visio 绘图控件能够以关系图表示来自另一个 Web 部件的数据。例如,Visio Web 部件可以使用在 Web 部件的数据表视图中管理的客户销售数据来显示图表或层次关系图。这允许用户同时管理数据和来自单个 SharePoint 站点的数据的可视化表示。

用于过程管理的 Visio Web 部件

作为 Web 部件的 Visio 绘图控件有助于跟踪 SharePoint 站点上的过程。Microsoft Windows SharePoint Services 可存储文档库中每个文档的元数据。开发人员可以读取与某个文档相关联的元数据(例如状态),并使用该信息在 Visio Web 部件中显示的文档过程工作流关系图中以颜色标记出适当的步骤。通过自定义代码,Web 服务、其他 Web 部件或元数据可以从 SharePoint 站点本身驱动 Visio 过程工作流关系图。

将 Visio 绘图控件包装为 Web 部件

Web 部件是自定义的 ASP.NET 服务器控件。但是,与标准的 ASP.NET 服务器控件不同(开发人员在设计阶段将这些标准控件添加到 Web 窗体页),站点管理员可以在浏览器中将 Web 部件动态地添加到 SharePoint 站点上的 Web 部件页中。

将 Web 部件与 Visio 绘图控件相结合的基本任务就是让 Web 部件在客户端上呈现绘图控件。但是,Web 部件体系结构可允许比在 Web 部件页的控件中显示 Visio 绘图更强大的功能。下面各部分将说明前面所述的过程管理 Web 部件的实现。每个实现步骤都会产生以下功能:

  • 通过实现自定义 ASP .NET 服务器控件的基本接口,Web 部件可以跟踪用户状态,这将确定它是否应该显示 Visio 绘图控件。

  • 通过公开自定义属性,站点管理员可以在运行时创建 Web 部件。

  • 通过实现标准连接接口,Web 部件可以与其他 Web 部件进行通讯。

  • 通过实现扩展程序集,绘图控件 Web 部件中的 Visio 绘图可以从 Web 服务检索数据。

作为 Web 部件,Visio 绘图控件为 Web 服务提供了一个理想的智能客户端。Visio 绘图控件可以作为 Web 服务所提供的数据的视觉显示画面,例如,Microsoft BizTalk Server 中的 Human Workflow Services (HWS)。HWS 提供了客户端应用程序可用来向最终用户提供工作流功能的 Web 服务 API。Visio 绘图控件使企业开发人员能够以图形方式跟踪到最终用户的工作流信息。

图 4 显示了 Web 部件中的一个 Visio 关系图,该 Web 部件可动态更新以反映由 HWS Web 服务管理的工作流。

odc_vsvisiointegrationwithsps04

图 4. 显示 HWS 工作流的 Web 部件

要使用 Visio 绘图控件扩展 Web 部件以显示 HWS Web 服务的跟踪数据,您必须构建一个 HWS 集成组件 — 一个类库,它实际保存将用户事件从 Visio 绘图控件映射到部署在运行 BizTalk Server 的服务器上的 HWS 操作的逻辑。呈现为 Web 部件的 Visio 绘图控件可提供丰富的功能集,以允许用户创建、显示 Visio 工作流关系图,并将其保存到 SharePoint 站点。呈现为 Web 部件的 Visio 绘图控件还允许您将其数据与页面上的其他 Web 部件进行连接。在这种情况下,HWS 集成组件可以增强 Visio 绘图控件的核心绘图功能,以允许用户跟踪和查看某个小组发生的工作流活动。您还可以将功能添加到 HWS 集成组件,以提供自定义的工作流形状和右键单击操作。

与 Visio 绘图控件类似,HWS 类库驻留在客户端计算机上。HWS 集成组件可以与 HWS Web 服务进行通讯。例如,集成组件为 Visio 工作流关系图中的形状定义了自定义右键单击操作,以执行诸如“分配”和“委托”之类的 HWS 操作。有关 HWS 操作的详细信息,请参阅 Microsoft BizTalk Server 2004 Software Development Kit (SDK)

该组件还包含使用 SharePoint 站点的“My Tasks”功能显示自定义形状以表示任务状态,以及通知用户所分配的任务的逻辑。页面上的每个形状都有一个与之关联的 HWS 活动流程 ID,它存储在该形状的自定义用户单元格中。当最终用户使用 Visio 形状的右键单击菜单向工作流添加任务时,HWS 活动流程 ID 会传递到 Web 服务以创建任务、更新任务信息以及分配所有者。HWS Web 服务是一个了解如何从 Web 服务驱动 Visio 视觉画面的很好的例子。

实现 Web 部件基础

Web 部件的基本实现继承自 Microsoft.SharePoint.WebPartPages.WebPart 类,并替代了 RenderWebPart 方法。此外,您的 Web 部件项目必须包含以下内容:

  • 对 Microsoft.SharePoint.dll 程序集的引用。

  • Web 部件类文件和匹配的 .dwp 文件。.dwp 文件是一个引用 Web 部件的程序集、命名空间、类名以及 Web 部件的可选属性设置的 XML 文件。

  • Web 部件的 Manifest.xml 文件包含有描述安装信息的 XML 元素。Manifest.xml 文件是在 Web 部件安装期间由 Stsadm.exe 工具使用的。

有关 Web 部件项目结构的更多详细信息,请参阅 A Developer's Introduction to Web Parts。需要特别关注的是 RenderWebPart 方法,Web 部件利用该方法构造在 Web 部件框架内部呈现的 HTML。编写代码以便在 RenderWebPart 中发出 HTML 的操作包括调用传递到 RenderWebPart 方法的 HtmlTextWriter 对象的方法。下面的 C# 代码示例显示了 RenderWebPart 的基本实现:

protected override void RenderWebPart(HtmlTextWriter output)
{
    if (rowConsumerConnected && !rowConsumerRowSent)
    {
        output.Write("
" +
             "Please select a row in the connected Web Part.
");
        return;
    }
}

该示例将检查 Web 部件类实现的两个自定义成员,以确定该 Web 部件是否已连接到另一个 Web 部件。在本文的后面部分,我们将说明如何设置这些成员,但现在该代码只显示尚未选择任何文档的默认状态。在此例中,会为用户显示一条消息,以指示她选择一个文档。请注意 RenderWebPart 实现如何使用传入的 HtmlTextWriter 对象的 Write 来呈现 XML。

定义自定义 Web 部件属性

Web 部件共享公共属性,例如 TitleHeightAllowClose。当站点管理员添加新的 Web 部件或修改现有部件时,这些属性会显示在框架中。通过将标准的 .NET 属性添加到 Web 部件类实现,开发人员可以将自定义属性添加到 Web 部件中。

Visio Web 部件要求必须将 DocumentLibrary 属性设置为文档库的有效 URL。该文档库指定 Web 部件可以保存绘图的位置。DocumentLibrary 属性由以下 C# 代码示例定义:

[Browsable(true),Category("Miscellaneous"),
DefaultValue(defaultDocumentLibraryProperty),
WebPartStorage(Storage.Personal),
FriendlyName("Row connection drawing path"),
Description(@"Location to store Visio documents.
    Only used when WebPart is a Row Consumer.")]
public string DocumentLibrary
{
    get {
        return documentLibraryProperty;
    }

    set {
        documentLibraryProperty = value;
    }
}

以上代码定义该属性如何出现在属性框架中:定义显示名称、说明以及属性的类别。该属性存储在 Web 部件类实现的自定义成员中,它将在以后 Web 部件连接时进行引用。

与 Web 部件进行通讯

到目前为止,我们已经讨论了如何在 Web 部件中呈现 Visio 绘图控件,以便它可以显示在“Web 部件页”页面上。但是,创建 Visio Web 部件的实际优势在于,它能够与其他组件进行通讯以获得用于更新绘图的数据。通讯可以双向进行:对 Visio 绘图的更新可以修改另一个组件中的数据。

本部分讨论 Visio Web 部件可以从其他组件接收数据的两种不同方法:

  • 通过实现标准的连接接口,一个 Web 部件可以与其他 Web 部件进行通讯。

  • 通过实现扩展程序集,绘图控件 Web 部件中的 Visio 绘图可以从 Web 服务检索数据。

连接 Web 部件

用户可以在运行时快速创建 Web 部件之间的连接。要启用 Web 部件到 Web 部件的通讯,您的 Web 部件必须为页面上每个已连接的 Web 部件替代 WebPart 基类的标准方法。此外,可连接的 Web 部件必须实现其中一个标准连接接口。大多数连接接口都要求您声明事件委托。

在我们的过程管理 Web 部件示例中,用户选择了文档库 Web 部件中的一行。Visio 绘图控件 Web 部件将加载一个与选定文档相关联的工作流关系图。Visio 绘图控件 Web 部件需要响应用户在文档库 Web 部件中的选择。这可以通过在使用文档库 Web 部件所提供的数据的 Visio 绘图控件 Web 部件中实现一个接口来完成。

文档库 Web 部件实现 IRowProvider 接口。在此例中,“行”对应于库中的文档,每行代表一个单独文档。因为文档库 Web 部件作为提供程序连接到另一个 Web 部件,所以单选按钮会出现在文档列表中每一项的左侧列上。在文档库 Web 部件中选择某个文档时,就会发生一个事件。为了处理这种行选择事件,Visio 绘图控件 Web 部件实现了 IRowConsumer 接口。

实现 IRowConsumer 接口的第一步就是将其包含在我们的 Web 部件类定义中,如下所示:

public class VisioWebPart : Microsoft.SharePoint.WebPartPages.WebPart,
    IRowConsumer

实现 IRowConsumer Web 部件的其余工作将涉及声明事件和替代方法。有关该内容的详细信息,请参阅 Microsoft SharePoint Products and Technologies Developer Center。下面的示例显示了所替代的方法实现的子集。

当在文档库 Web 部件中选择某一行时,就会在 Visio Web 部件类中调用 RowReady 方法。RowReady 方法可解析它所接收的事件参数以获得文档 URL,如下面的代码所示:

public void RowReady(object sender, RowReadyEventArgs rowReadyArgs)
{
    if(rowReadyArgs.Rows != null)
    {
        rowConsumerRowSent = true;

        try
        {
            selectedDocumentExtension = (string)rowReadyArgs.Rows[0][0];
            selectedDocumentName = (string)rowReadyArgs.Rows[0][1];
            selectedDocumentModifiedBy = (string)rowReadyArgs.Rows[0][2];
            int selectedDocumentId = (int)rowReadyArgs.Rows[0][3];

            int indexToDelete = selectedDocumentName.LastIndexOf(".");
            string visioDocumentTemplate = selectedDocumentName.Substring(
                0, indexToDelete) + "_" + selectedDocumentId.ToString() +
                ".vsd";

            if (doesDocumentExist(visioDocumentTemplate))
            {
                documentToLoad = 
                    getVisioDocumentUrl(visioDocumentTemplate);
                documentTemplateName = documentToLoad;
            }
            else
            {
                documentToLoad = getDefaultVisioDocumentUrl();
                documentTemplateName = 
                    getVisioDocumentUrl(visioDocumentTemplate);
            }
        }
        catch (Exception)
        {
            // Handle exception (not shown).
        }
    }
}
      

从传递到事件处理程序的 RowReadyEventArgs 中,RowReady 方法可以确定所选择的文档。上面的示例使用该信息来确定相关联的 Visio 工作流关系图的文件名。

另外,请注意 rowConsumerRowSent 成员被设置为 true。与前面一样,该成员作为 RenderWebPart 方法的标志来确定是否在 Web 部件框架中显示 Visio 绘图控件。下面的代码显示 Visio 绘图控件如何呈现到 Web 部件中,同时将控件的 Src 属性设置为由 Web 部件的 RowReady 方法确定的文件名:

output.Write("\n"
    + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n"
    + "\n");

从 Web 服务获得数据

您可以扩展 Web 部件示例,以便绘图控件 Web 部件中的 Visio 绘图可以从 Web 服务检索数据。例如,您可以允许用户右键单击工作流关系图中的过程形状。该右键单击操作将显示一个自定义菜单,以允许您将与该过程形状相关联的任务分配给小组成员。分配和检索资源分配是通过调用 Web 服务来处理的,该服务会公开用于管理资源的方法。理想情况下,该扩展只要求对 Visio Web 部件本身进行最少的更改。

通过创建另一个与该 Web 服务进行通讯的程序集,您可以实现该扩展。该程序集将是一个 COM 组件,它允许 Visio Web 部件使用 OBJECT 标记在 Web 部件页上对其进行实例化,这类似于“连接 Web 部件”部分中所述的实例化 Visio 绘图控件本身的方法。

扩展程序集会公开一个通过使用客户端代码进行调用的 Initialize 方法,例如 ECMAScript(由 European Computer Manufacturers Association 的规范定义)、Microsoft Jscript ® 或 JavaScript,这些代码也会由 Visio Web 部件呈现到页面中。在加载页面时将调用 Initialize 方法,并且会传入对 Visio 绘图控件的引用。

请注意,扩展程序集包含对 Visio 绘图控件的引用,该程序集可以使用 AddAdvise 方法侦听绘图控件上的鼠标事件。这可让程序集确定右键单击形状的时间。该程序集可以调用 Web 服务方法来获得有关与该形状相关联的任务的资源信息。然后,该程序集可以修改绘图,以将形状添加到显示任务分配和每个任务状态的工作流关系图。

有关在 Visio 绘图控件中处理鼠标事件的详细信息,请参阅“Programming with the Microsoft Office 2003 Visio ActiveX Control”。这篇文章还说明了如何使用 AddAdvise 方法指定要侦听的事件。

实现 Visio Web 部件的入门提示

本部分列出了实现 Visio Web 部件的一些提示。这些建议使站点管理员可以更容易地包含您的 Web 部件。它们包括在使用 Web 部件基础结构时的一些技术注意事项。这些提示还使 Visio Web 部件对小组成员更有用。

计划 Web 部件到 Web 部件的通讯

慎重选择要与您的 Visio Web 部件集成的 Web 部件。请不要通过实现您可能不需要的提供者和使用者接口来普及过多的集成。选择要支持的一个或两个其他 Web 部件。

一些 Web 部件已经实现为行的使用者,而不是行的提供者。不要假设每个 Web 部件既是行或列表的使用者又是提供者。

公开自定义 Web 部件属性

考虑在 Web 部件上公开自定义属性,以允许管理员为他的特定 SharePoint 站点配置 Web 部件。有关自定义 Web 部件属性的示例,请参阅“定义自定义 Web 部件属性”。在此例中,DocumentLibrary 属性定义了文档库的 URL。该文档库指定了 Visio Web 部件可以保存绘图的位置。这将允许其他小组方便地配置 Visio Web 部件,而不必为每个 SharePoint 站点修改和重新构建 Web 部件代码。

使用 SharePoint API 签出/签入文件

请不要使用 Visio Documents 集合中的方法(请参阅“使用 Windows SharePoint Services 共享 Visio 文档”)来签入或签出文件。这些方法不能在 Visio 绘图控件的上下文中工作。

相反,请使用 Microsoft SharePoint 产品和技术中包含的 API 在 Web 部件代码中实现这个功能。例如,下面的 C# 代码示例就说明了如何使用 CheckOut 方法从文档库中签出所有文件:

SPSite site = SPControl.GetContextSite(Context);
SPWeb targetWeb = site.AllWebs["Site_Name/Subsite_Name"];

SPFolder docLibFolder = targetWeb.Folders["Shared Documents"];
SPFileCollection docLibFiles = docLibFolder.Files;

for (int i=0; i< } docLibFiles[i].CheckOut(); { i++)>

SPControl 对象作为基本服务器控件,Microsoft.SharePoint.WebControls 命名空间中的其他控件都是从其中派生出来的。该对象允许我们用 SPSite 对象表示 SharePoint 站点,并且从中检索对 Shared Documents 文件夹的引用。然后,我们可以循环访问该文件夹中的每个文件,然后将其签出。

使用 Microsoft.SharePoint.CheckIn 方法将文件签回到服务器中。有关该内容的详细信息,请参阅 Microsoft SharePoint Products and Technologies Developer Center

在所有客户端上安装 Visio 绘图控件

请记住,Visio 绘图控件必须安装在用户的计算机上才能正确显示;否则它将不会初始化。有关详细信息,请参阅“Programming with the Microsoft Office 2003 Visio ActiveX Control”。

在 Web 部件中实现保存、打印或打印预览功能

考虑实现允许用户在 Visio 绘图控件中保存、打印或预览文档的功能。请记住,绘图不只是用于在 Web 站点上进行显示。

例如,您可以创建实现打印预览功能的程序集。在 Visio Web 部件的 RenderWebPart 方法实现中,您可以呈现响应用户单击打印预览按钮的 JScript 代码。下面的示例显示如何实现这一点:

output.Write(@"
    function clickPrintPreview() {
    visioUtilityLib.PrintPreview();
    }");

在此例中,visioUtilityLib 是对实用工具程序集的引用,它是在加载页面时使用 OBJECT 标记进行实例化的。该客户端实例化类似于前面讨论的与 Web 服务进行通讯的扩展程序集。

PrintPreview 方法是以 C# 实现的,如下所示:

public bool PrintPreview()
{
    if (null == drawingControl || null == SharePointUrl)
    {
        return false;
    }

    PrintDocument printDocument = new PrintDocument(); 
    PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog();
    printDocument.PrintController = new PreviewPrintController();
    printDocument.PrintPage += 
        new PrintPageEventHandler(this.PrintPageEventHandler);
    printPreviewDialog.Document = printDocument;
    printPreviewDialog.ShowDialog();

    return true;
}

private void PrintPageEventHandler(object sender, PrintPageEventArgs ev)
{
    if (null == drawingControl)
    {
        return;
    }

    int handlevalue = 
        drawingControl.Document.Application.ActivePage.Picture.Handle;

    Metafile visioMetafile = new Metafile((IntPtr) handlevalue, false);
    ev.Graphics.DrawImage(visioMetafile, 0, 0 );
}

Visio 自动化并不实现其自己的 PrintPreview 方法。上述方法创建了一个新的 PrintDocument 对象,并在 PrintPageEventHandler 方法中处理其 PrintPage 事件。PrintPageEventHandler 方法使用 Visio Page 对象的 Picture 属性将绘图呈现为增强的元文件。

小结

Microsoft Office Visio 2003 在 Visio 用户界面和 Visio 对象模型中提供了与 Microsoft SharePoint 产品和技术的深层结合。共享工作区站点的添加使文档管理对小组成员是透明的。

Visio 绘图控件的引入使开发人员能够创建在 SharePoint 站点中公开 Visio 绘图画面的 Web 部件。此外,通过实现 Microsoft.SharePoint 命名空间的标准接口,Visio Web 部件可以与其他 Web 部件进行通讯,这允许绘图使用另一个 Web 部件中的数据进行动态更新。同样,通讯可以反相进行,使其他 Web 部件能够检测到 Visio 绘图中的更改,并相应地更新它们的数据。创建带有 Visio 绘图控件的 Web 部件可通过提供小组数据的可视化表示,来增强 SharePoint 站点内的协作。

关于作者

Mark Bukovec 是一位自由开发人员和技术作家。以前,Mark 曾在 Microsoft 工作过五年,最近还担任过 COM+ 组的程序经理。您可以通过 empiredown@hotmail.com 与 Mark 联系。

转到原英文页面