如何:从 XML 导入应用程序定义

业务数据目录现在支持两种类型的 XML 应用程序定义文件:“模型”和“资源”。模型应用程序定义文件包含系统的基本 XML 元数据。资源文件使您能够仅导入或导出任意组合的本地化名称、属性和权限。以下是资源文件的类型:

  • LocalizedNames   包含元数据对象在特定区域设置中的本地化名称。导入此文件时,它的信息将与元数据存储库中的现有元数据合并。如果已存在该区域设置的本地化名称,则会用 LocalizedNames 文件中的信息覆盖它。

  • Properties   包含元数据对象的属性。导入此文件时,它的信息将与元数据存储库中的现有元数据合并。如果某个属性已存在,则会用 Properties 文件中的信息覆盖它的值。

  • Permissions   包含元数据对象的访问控制列表 (ACL)。导入此文件时,它的信息将与元数据存储库中的现有元数据合并。但是,如果已存在某对象的访问控制项 (ACE),则会用 Permissions 文件中的信息覆盖它的值。例如,如果现有的应用程序定义只包含有权访问实体 A 的用户 A,而您导入了只包含有权访问实体 A 的用户 B 的 Permissions 文件,则将会删除实体 A 的旧 ACL,并将为用户 B 创建新的 ACL。

如果导入某应用程序的模型文件,则业务数据目录将覆盖该应用程序的任何现有元数据。但是,如果导入包含任意组合的本地化名称、属性或权限的资源文件,业务数据目录将执行合并操作。它仅将资源文件的内容与该应用程序的现有元数据进行合并。

这在某些情况下非常有用。为了说明这一点,假设已为复杂的企业资源规划 (ERP) 系统导入了一个应用程序定义文件。现在,让我们考虑三种情况:

  • 后端连接信息发生更改。若要更新连接信息,可以创建简单的 Properties 资源文件(它仅包含 LobSystemInstance 对象中已更改的属性)并导入它。业务数据目录将此信息与现有的 LobSystemInstance 属性进行合并,而且,如果某属性已存在,则会用该资源文件中的新信息覆盖它的值。

  • 贵公司开拓了某个新地区的市场,您的应用程序现在必须支持一种新的本地化语言。在这种情况下,可以创建 LocalizedNames 资源文件(它仅包含此新语言的本地化名称)并导入它。之后,业务数据目录将此信息与现有的元数据进行合并,从而轻松解决了此问题。

  • 某特许企业需要在其环境中使用您的应用程序。在这种情况下,该企业可以创建一个 Permissions 资源文件(它仅包含该特许企业中的用户的 ACL)并导入它。业务数据目录会用新信息覆盖现有的 ACL,从而解决了此问题。

导入新的资源文件是一种比更新模型文件更好的方法。如果您通过添加本地化名称或属性来更新模型文件,业务数据目录将删除现有的元数据并用新的信息覆盖它。这种做法不一定恰当,而且可能涉及到额外的测试和工作。例如,如果更新模型文件,业务数据目录会删除所有元数据对象和它们的 ID,因此,在搜索时将需要执行元数据对象的完全爬网。

重要

单个应用程序定义文件可包含任意组合的模型和资源文件。SharePoint 管理中心在“导入和导出”用户界面 (UI) 中支持此做法,而对象模型通过使用位或 (|) 运算符支持此做法。

可以使用管理对象模型从 XML 文件导入元数据。利用它可以自动完成将应用程序定义添加到业务数据目录中的过程。下面的代码示例演示如何使用 LobSystem 对象的 ImportPackage 方法来导入元数据。

备注

可以使用位或运算符 (|) 来传入每个导出和导入操作的多个 PackageContents 值。

示例

下面的代码示例演示如何使用 LOBSystem 对象的 ImportPackage 方法为系统导入元数据。

Prerequisites

  • 确保已经创建一个共享服务提供程序。

  • 从 MSDN 下载中心获取 AdventureWorks2000.XML 文件。

  • 用实际值替换 XML 文件中的 SQL Server 名称和代码示例中的 XML 文件位置。

  • 用您的共享资源提供程序名称替换代码中的常量值 EnterYourSSPNameHere。

  • Project References

运行此示例之前,在控制台应用程序的代码项目中添加下面的项目引用:

  • Microsoft.SharePoint

  • Microsoft.SharePoint.Portal

  • Microsoft.Office.Server

  • System.XML

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using Microsoft.Office.Server.ApplicationRegistry.Administration;
using Microsoft.Office.Server.ApplicationRegistry.Infrastructure;
using WSSAdmin = Microsoft.SharePoint.Administration;
using OSSAdmin = Microsoft.Office.Server.Administration;

namespace Microsoft.SDK.SharePointServer.Samples
{
    class GetStartedAndCreateSystem
    {
        const string yourSSPName ="EnterYourSSPNameHere";
        const string XMLFileLocation = "EnterXMLFileLocationHere";
        
        static void Main(string[] args)
        {
            SetupBDC();
            ImportLobSystemFromXML();
            Console.WriteLine("Press any key to exit...");
            Console.Read();
        }
        static void SetupBDC()
        {
            SqlSessionProvider.Instance().SetSharedResourceProviderToUse(yourSSPName);
        }
        public static void ImportLobSystemFromXML()
        {
            if (File.Exists(XMLFileLocation))
            {
                FileStream xmlStream = new FileStream(XMLFileLocation, FileMode.Open, FileAccess.Read);
                ParseContext parseContext = new ParseContext();
                ApplicationRegistry.Instance.ImportPackage(xmlStream, parseContext, PackageContents.Model | PackageContents.Properties);
            }
            else
            {
                throw new ArgumentException(string.Format("Specified path is invalid [{0}]", XMLFileLocation));
            }
        }
      }
}

See Also

概念

业务数据目录:元数据模型