zoukankan      html  css  js  c++  java
  • 使用.NET程序集作为Business Data Connectivity数据源(一)

    SharePoint 2010中BCS最强的的地方无疑就是能使用.NET程序集作数据源了。这种DLL类库名为程序集系统。 业务数据目录(BDC)可以直接连接SQL Server数据源,但当我们要做的事更复杂(如需要从两个不同的数据源获取数据并混合使用)时,之前的做法是不得不构建一个Web Service层来实现。现在,直接用.NET程序集就可以了,再也不必构建辅助的Web服务。当然,如果你更倾向于WCF服务,也是不错的解决方案。

    Visual Studio 2010内置了一整套BCS建模的工具,包括设计器,代码编写与调试工具。

    接下来,我们就看看如何用Visual Studio 2010构建用于BCS的.NET 程序集。

    1、打开Visual Studio 2010并新建一个项目。选择SharePoint 2010项目类型下的Business Data Connectivity Model模板。

    2、当项目创建出来后,你可以看到在模型设计界面上有一个实体。 

     同时,还可以看到在BdcModel1文件夹下有两个类:Entity1.cs和Entity1Service.cs。我们将不会动这些默认的东西,以便在构建我们自己的自定义BCS实体时作为一个参照。

    3、 这次演练我们还是用到AdventureWorks2000样例数据库。

    4、 我们将创建一个实体映射到数据库里的部门表。从Visual Studio 2010工具箱中拖放一个Entity形状到bcs模型设计界面上。

    5、你会注意到当你创建一个空白的BCS实体时也会同时为你新建一个EntityService.cs文件。 BCS会将所有与该实体相关的C#方法都放在这里。
    重命名我们的实体为——Department

    然后,右键点击该实体的Methods一节 ,添加一个新方法,名为GetDepartments。

    注意到当我们改变实体的名称为Department后,EntityService.cs也自动重命名成DepartmentService.cs。如果你打开DepartmentService.cs就会看到刚过创建的方法也在其中。

    6、现在,我们开始写一点代码,将所需数据取回来。 右击项目,添加一个LINQ 2 SQL类。在打开的LINQ 2 SQL视图里通过服务器资源管理器连接到AdventureWorks2000数据库,并拖放Departments表到设计界面中。

    7、这样,我们就可以用自动生成的LINQ 2 SQL Department类返回我们所需的数据了。 这里,我发现最好还是再在我们的BCS model文件夹下定义一个我们自己的Department类。主要基于以下考虑:

    ——你需要定义所有由BCS返回的栏 。LINQ 2 SQL的类可能会返回一些我们不需要用在BCS模型中的属性。如果你直接使用LINQ 2 SQL的类,其中包含一些没有在BCS模型中定义的类属性,则会引发错误。

    ——这样做还可以实现从两个不同的源获取数据,单表现出来的是一个实体。

    ——况且我感觉使用自己的类型更容易更舒服些:) 这也有助于你将来做单元测试并保持代码的清晰性。

    因此,添加一个新的C#类到BDCModel1文件夹下,命名为Department.cs,并为数据中想要以后用在BCS中的每一个栏添加属性。

    public class Department
    {
        
    public Int16 DepartmentId { getset; }
        
    public string Name { getset; }
        
    public string GroupName { getset; }
    }

     8、接下来,打开DepartmentService.cs文件,将GetDepartments方法声明改为:

    public static IEnumerable<Department> GetDepartments()

    9、编写LINQ 2 SQL代码获取数据,替换

    throw new System.NotImplementedException();

    DepartmentDataContext db = new DepartmentDataContext("server=localhost;database=adventureworks2000;uid=***;pwd=***");
    return from d in db.Departments
           select 
    new Department
           {
               DepartmentId 
    = d.DepartmentID,
               Name 
    = d.Name,
               GroupName 
    = d.GroupName
           };

    10、接下来,我们需要使我们的BCS模型能够识别由我们的方法返回的数据。返回到BCS模型视图,右击Department实体的Identifiers一节。添加一个新的标识符并命名为DepartmentId。在你的实体中选中该标识符时,可以从属性面板看到更多信息。将其类型改为System.Int16。

    11、在为BCS模型描述我们的数据前,我们需要先创建一个返回参数。在BDC方法详细信息面板中,通过parameters下拉框中点击<add a parameter>新建一个。 

    设置该参数的Direction为Return。 

    接下来有一些工作需要在不同的面板间来回移动才能完成。但是,个人认为这是我找到的最符合BCS模型构建思路的方法了。

    12、 下面我们回到BDC Explorer视图。展开树,找到我们的实体和方法。选中我们刚刚添加参数时创建的TypeDescriptor。当选中后,你会发现我们可以在属性面板编辑其属性值。将其属性设置为:

    Name : DepartmentList
    Type Name : System.Collections.Generic.IEnumerable`1[[BdcModelProject1.BdcModel1.Department, BdcModel1]]

    IsCollection : True

    13、右击DepartmentList结点,选择Add Type Descriptor

    14、选中新加的类型描述器,设置其属性值为:

    Name : Department
    Type Name : BdcModelProject1.BdcModel1.Department, BdcModel1

    IsCollection : False 

    15、接下来我们要为需要从Department表中返回的每一栏建一个类型描述器 。右击Department类型描述器并添加以下3个TypeDescriptor:

    Name : DepartmentId
    Type Name : System.Int16
    Identifier : DepartmentId


    Name : Name

    Type Name : System.String


    Name : GroupName

    Type Name : System.String

    这时的BDC Explorer树应该是这个样子: 

    16、然后,我们需要创建一个MethodInstance元素——它为BCS描述了我们的方法是一个什么类型的方法(如(Finder,SpecificFinder等)。

    点击Department实体,查看其BDC Details面板。通过Instance一节中的MethodInstance下拉框选择"Create Finder Instance"。 

    选中刚创建的实例(instance),在属性面板中设置其属性值为:

    Default : True
    Default Display Name : Department List
    Return Parameter Name : parameter

    Return Type Descriptor Name : DepartmentList

    17、在开始部署我们的模型前,先打开DepartmentService.cs 。在进行完前面几个创建BCS模型的步骤后,可能会产生第二个GetDepartments()方法。如果有,只需要把它删了就行了。(具体这个重复的方法是哪一步产生的我也不清楚,等找到后再更新这一块内容吧)

    18、终于我们可以编译我们的项目了。如果没问题,就直接F5运行,过程中会自动将其打成WSP包并部署到SharePoint。

    下图是在我的SharePoint站点里通过业务数据列表Web部件显示出来的我们的BCS外部数据。

    注意:出现“访问已被业务数据连接拒绝”的错误时,请参考微软知识库文章982271。 

    在接下来的一系列文章中,我们将了解到:

    -创建一个SpecificFinder和IdEnumerator方法

    -创建写回和更新数据的方法

    -创建彼此关联的方法 

    等等更多的内容。 

    参考资料

     Business Data Connectivity Model – Finder Method

     BCS Shims – .NET assembly as a data source for Business Connectivity Services

  • 相关阅读:
    不忘初心,方得始终
    【读书笔记】Windows核心编程
    工作心得
    2015年随记
    微信开发的黑魔法
    [cssTopic]浏览器兼容性问题整理 css问题集 ie6常见问题【转】
    获取微信用户openid
    Spring Boot应用开发起步
    一种在Java中跨ClassLoader的方法调用的实现
    H5语义化标签
  • 原文地址:https://www.cnblogs.com/Sunmoonfire/p/1761998.html
Copyright © 2011-2022 走看看