演练:使用业务数据在 SharePoint 中创建外部列表

通过业务数据连接 (BDC) 服务,SharePoint 可以显示来自后端服务器应用程序、Web 服务和数据库的业务数据。

本演练演示如何为返回示例数据库中联系人相关信息的 BDC 服务创建模型。 然后,使用此模型在 SharePoint 中创建外部列表。

本演练阐释了以下任务:

  • 创建项目。

  • 向模型中添加实体。

  • 添加 Finder 方法。

  • 添加特定的 Finder 方法。

  • 测试项目。

系统必备

您需要以下组件来完成本演练:

  • 支持的 Microsoft Windows 和 SharePoint 版本。 有关更多信息,请参见开发 SharePoint 解决方案的要求

  • Visual Studio 2010 专业版或 Visual Studio Application Lifecycle Management (ALM) 的某个版本。

  • 对 AdventureWorks 示例数据库的访问权限。 有关如何安装 AdventureWorks 数据库的更多信息,请参见 SQL Server Sample Databases(SQL Server 示例数据库)。

创建项目

首先,创建一个包含 BDC 模型的项目。

创建项目

  1. 启动 Visual Studio 2010。

  2. 打开**“新建项目”对话框,展开要使用的语言下的“SharePoint”节点,然后单击“2010”**。

  3. 在**“模板”窗格中,选择“业务数据连接模型”。 将项目命名为 AdventureWorksContacts,然后单击“确定”**。

    这将显示**“SharePoint 自定义向导”**。 使用此向导可以选择用于调试项目的网站以及解决方案的信任级别。

  4. 单击**“完成”**以接受默认的本地 SharePoint 网站和默认的解决方案信任级别。

向项目添加数据访问类

向项目添加数据访问类

  1. 在**“工具”菜单上,单击“连接到数据库”**。

    **“添加连接”**对话框随即打开。

  2. 添加一个到 SQL Server AdventureWorks 示例数据库的连接。 有关更多信息,请参见添加/修改连接 (Microsoft SQL Server)

  3. 在**“解决方案资源管理器”**中,单击项目节点。

  4. 在**“项目”菜单上,单击“添加新项”**。

  5. 在**“已安装的模板”窗格中,选择“数据”**节点。

  6. 在**“模板”窗格中,选择“LINQ to SQL 类”**。

  7. 在**“名称”框中,键入 AdventureWorks,然后单击“添加”**。

    .dbml 文件会添加到项目中,并打开对象关系设计器(O/R 设计器)。

  8. 在**“视图”菜单上,单击“服务器资源管理器”**。

  9. 在**“服务器资源管理器”中,展开代表 AdventureWorks 示例数据库的节点,然后展开“表”**节点。

  10. 将**“Contact(Person)”**表拖到 O/R 设计器上。

    一个实体类将创建并显示在设计图面上。 该实体类的属性映射到“Contact(Person)”表的列。

从 BDC 模型中删除默认实体

**“业务数据连接模型”**项目向模型中添加一个名为 Entity1 的默认实体。 移除此实体。 然后添加一个新的实体。 以空模型作为入手点可以减少完成本演练所需的步骤数。

从模型中移除默认实体

  1. 在**“解决方案资源管理器”中,展开“BdcModel1”节点,然后双击“BdcModel1.bdcm”**文件。

  2. 业务数据连接模型文件将在 BDC 设计器中打开。

  3. 在该设计器中,右击**“Entity1”,然后单击“删除”**。

  4. 在**“解决方案资源管理器”中,右击 Entity1.vb(在 Visual Basic 中)或 Entity1.cs(在 C# 中),然后单击“删除”**。

  5. 右击 Entity1Service.vb(在 Visual Basic 中)或 Entity1Service.cs(在 C# 中),然后单击**“删除”**。

向模型添加实体

向模型添加实体。 您可以将实体从 Visual Studio 的**“工具箱”**拖到 BDC 设计器上。

向模型添加实体

  1. 在**“视图”菜单上单击“工具箱”**。

  2. 在**“工具箱”“BusinessDataConnectivity”选项卡中,将“实体”**拖到 BDC 设计器上。

    新实体随即显示在该设计器中。 Visual Studio 向名为 EntityService.vb(在 Visual Basic 中)或 EntityService.cs(在 C# 中)的项目中添加一个文件。

  3. 在**“视图”菜单上,单击“属性窗口**”。

  4. 在**“属性”窗口中,将“名称”**设置为“联系人”。

  5. 在设计器中,右击该实体,单击**“添加”,然后单击“标识符”**。

    新标识符随即显示在该实体中。

  6. 在**“属性”**窗口中,将标识符的名称更改为“ContactID”。

  7. 在**“类型名称”下拉列表中,选择“System.Int32”**。

添加特定的 Finder 方法

若要启用 BDC 服务以显示特定联系人,必须添加特定的 Finder 方法。 当用户选择列表中的某一项,并单击功能区中的**“查看项”**按钮时,BDC 服务会调用特定的 Finder 方法。

使用**“BDC 方法详细信息”**窗口可以向联系人实体添加特定的 Finder 方法。 若要返回特定实体,请向该方法添加代码。

添加特定的 Finder 方法

  1. 在 BDC 设计器中,选择**“联系人”**实体。

  2. 在**“视图”菜单上单击“其他窗口”,然后单击“BDC 方法详细信息”**。

  3. 在**“BDC 方法详细信息”窗口的“添加方法”下拉列表中,选择“创建特定的 Finder 方法”**。

    Visual Studio 将以下元素添加到模型中。 这些元素将显示在**“BDC 方法详细信息”**窗口中。

    • 一个名为“ReadItem”的方法。

    • 该方法的输入参数。

    • 该方法的返回参数。

    • 每个参数的类型描述符。

    • 该方法的一个方法实例。

  4. 在**“BDC 方法详细信息”窗口中,单击为“联系人”类型描述符显示的下拉列表,然后单击“编辑”**。

    **“BDC 资源管理器”随即打开。 该“BDC 资源管理器”**提供模型的分层视图。

  5. 在**“属性”窗口中,单击“TypeName”属性旁边出现的下拉列表,再单击“当前项目”选项卡,然后选择“联系人”**。

  6. 在**“BDC 资源管理器”中,右击“联系人”,然后单击“添加类型描述符”**。

    名为**“TypeDescriptor1”的新类型描述符随即显示在“BDC 资源管理器”**中。

  7. 在**“属性”窗口中,将“名称”**属性设置为 ContactID。

  8. 单击**“TypeName”属性旁边的下拉列表,然后选择“Int32”**。

  9. 单击**“Identifier”**属性旁边的下拉列表,然后选择 ContactID。

  10. 重复步骤 6 以为下列每个字段分别创建一个类型描述符。

    名称

    类型名称

    FirstName

    System.String

    LastName

    System.String

    Phone

    System.String

    EmailAddress

    System.String

    EmailPromotion

    System.Int32

    NameStyle

    System.Boolean

    PasswordHash

    System.String

    PasswordSalt

    System.String

  11. 在 BDC 设计器的**“联系人”实体上,双击“ReadItem”**方法。

    联系人服务代码文件随即在代码编辑器中打开。

  12. 在 ContactService 类中,用下面的代码替换 ReadItem 方法。 这段代码执行下列任务:

    • 从 AdventureWorks 数据库的联系人表中检索记录。

    • 将 Contact 实体返回到 BDC 服务。

    提示

    用您的服务器名称替换 ServerName 字段的值。

    Public Shared Function ReadItem(ByVal contactID As Integer) As Contact
        Const ServerName As String = "MySQLServerName"
        Dim dataContext As AdventureWorksDataContext = _
            New AdventureWorksDataContext("Data Source=" & ServerName & _
                ";Initial Catalog=AdventureWorks;Integrated Security=True")
    
        Dim Contact As Contact = _
            (From TempContacts In dataContext.Contacts.AsEnumerable().Take(20) _
            Where TempContacts.ContactID = contactID _
            Select TempContacts).[Single]()
        Return Contact
    End Function
    
    public static Contact ReadItem(int contactID)
    {
        const string ServerName = "MySQLServerName";
        AdventureWorksDataContext dataContext = new AdventureWorksDataContext
              ("Data Source=" + ServerName + ";" +
               "Initial Catalog=AdventureWorks;Integrated Security=True");
    
        Contact Contact =
            (from contacts in dataContext.Contacts.AsEnumerable().Take(20)
             where contacts.ContactID == contactID
             select contacts).Single();
        return Contact;
    }
    

添加 Finder 方法

若要启用 BDC 服务以在列表中显示联系人,必须添加 Finder 方法。 使用**“BDC 方法详细信息”**窗口可以向联系人实体添加 Finder 方法。 若要向 BDC 服务返回实体集合,请向该方法添加代码。

添加 Finder 方法

  1. 在 BDC 设计器中,选择**“联系人”**实体。

  2. 在**“BDC 方法详细信息”窗口中,折叠“ReadList”**节点。

  3. 从**“ReadList”方法下显示的“添加方法”下拉列表中,选择“创建 Finder 方法”**。

    Visual Studio 将添加一个方法、一个返回参数和一个类型描述符。

  4. 在 BDC 设计器的**“联系人”实体上,双击“ReadList”**方法。

    联系人服务代码文件随即在代码编辑器中打开。

  5. 在 ContactService 类中,用以下代码替换 ReadList 方法。 这段代码执行下列任务:

    • 从 AdventureWorks 数据库的联系人表中检索数据。

    • 将联系人实体列表返回到 BDC 服务。

    提示

    用您的服务器名称替换 ServerName 字段的值。

    Public Shared Function ReadList() As IEnumerable(Of Contact)
        Const ServerName As String = "MySQLServerName"
        Dim dataContext As AdventureWorksDataContext = _
            New AdventureWorksDataContext("Data Source=" & ServerName & _
                ";Initial Catalog=AdventureWorks;Integrated Security=True")
    
        Dim Contacts As IEnumerable(Of Contact) = _
            From TempContacts In dataContext.Contacts.Take(20) _
                  Select TempContacts
        Return Contacts
    End Function
    
    public static IEnumerable<Contact> ReadList()
    {
        const string ServerName = "MySQLServerName";
        AdventureWorksDataContext dataContext = new AdventureWorksDataContext
              ("Data Source=" + ServerName + ";" +
               "Initial Catalog=AdventureWorks;Integrated Security=True");
    
        IEnumerable<Contact> Contacts =
            from contacts in dataContext.Contacts.Take(20)
            select contacts;
        return Contacts;
    
    }
    

测试项目

运行项目时,SharePoint 网站将会打开,Visual Studio 将向业务数据连接服务添加您的模型。 在 SharePoint 中创建引用 Contact 实体的外部列表。 AdventureWorks 数据库中联系人的数据随即显示在该列表中。

提示

您可能必须修改 SharePoint 中的安全性设置,然后才能调试解决方案。 有关更多信息,请参见设计业务数据连接模型

测试项目

  1. 按 F5。

    SharePoint 网站将打开。

  2. 在**“网站操作”菜单上,单击“更多选项”**

  3. 在**“创建”页面中,单击“外部列表”,然后单击“创建”**。

  4. 将该自定义列表命名为“联系人”。

  5. 单击**“外部内容类型”**字段旁边的“浏览”按钮。

  6. 在**“外部内容类型选取器”对话框中,选择“AdventureWorksContacts.BdcModel1.Contact”,然后单击“创建”**。

  7. 单击**“创建”**以创建联系人列表。

    SharePoint 随即创建一个外部列表。 AdventureWorks 示例数据库中的联系人随即显示在该列表中。

  8. 若要测试特定的 Finder 方法,请单击该列表中的某一联系人。

  9. 在功能区上,单击**“项”**选项卡。

  10. 在**“项”选项卡中,单击“查看项”**。

    所选联系人的详细信息随即显示在窗体中。

后续步骤

您可以通过以下主题了解有关如何在 SharePoint 中为 BDC 服务设计模型的更多内容:

请参见

概念

BDC 模型设计工具概述

其他资源

设计业务数据连接模型

创建业务数据连接模型

将业务数据集成到 SharePoint 中