MSDN Visual系列:使用BDC操作来控制业务数据

原文:http://msdn2.microsoft.com/en-us/library/bb410048.aspx
 
业务数据目录--BDC(Business Data Catalog)是MOSS中新加的一个功能。它可以将LOB(Line-of-Business)数据组合到SharePoint的其他基本功能中。比如我们可以利用BDC组合业务数据到列表或企业搜索中。为此,我们必须先构建一个XML文件,用于标识数据存储的位置(MS SQL Server数据库或Web服务)以及数据是什么样子的(比如,数据类型是什么,主键是哪个)。
本文将通过创建一个BDC元数据文件定义一个简单的LOB数据实体。在此之前,需要具备下列的环境:

  1. 安装Microsoft SQL Server 2005并部署了AdventureWorks数据库
  2. 拷贝BDC架构文件, Bdcmetadata.xsd和Bdcmetadataresource.xsd, 到Visual Studio 2005的Schema库中。将上面的两个文件从program files/Microsoft Office Servers/12.0/Bin/ 拷到 program files/Microsoft Visual Studio 8/Xml/Schemas/。

下面开始构建BDC元数据文件来定义一个简单的LOB数据实体:

1. 首先,创建一个空的XML文件
 
打开Visual Studio 2005,创建一个 XML文件。右击文档,选属性。在架构(Schemas)属性框上,点省略号,把Bdcmetadata.xsd 架构文件附加到该文档上。

 2.定义一个 LobSystem
添加下面的XML来定义最上层的LobSystem及其参数:

< LobSystem
   
Type ="Database"
   Version
="1.0.0.01"
   Name
="CRM"
   xmlns
="http://schemas.microsoft.com/office/2006/03/BusinessDataCatalog" >
</ LobSystem >

3.定义最上层的安全性相关参数
注意:这是可选的,我们也可以在BDC的管理页面中进行操作。
添加下面的XML到LobSystem元素的末尾(在结束标记</LobSystem>之前)。注意,我们必须更新Principal属性值,以使其指向正确的域名和用户或组名。

< AccessControlList >
   
< AccessControlEntry  Principal ="your domain/you" >
      
< Right  BdcRight ="Execute" />
      
< Right  BdcRight ="Edit" />
      
< Right  BdcRight ="SetPermissions" />
      
< Right  BdcRight ="SelectableInClients" />
   
</ AccessControlEntry >
   
< AccessControlEntry  Principal ="your domain/your BDC users" >  
      
< Right  BdcRight ="Execute" />
      
< Right  BdcRight ="SelectableInClients" />
   
</ AccessControlEntry >
</ AccessControlList >

4.定义一个LOB系统的实例
对于数据库来说,一个系统实例定义了BDC中使用的数据库的连接参数。添加下面的XML,作为LobSystem元素的一个子节点(在AccessControlList元素后)。注意,我们必须用正确的服务器名替换server_name。

< LobSystemInstances >
   
< LobSystemInstance  Name ="CRMDB" >
      
< Properties >
         
< Property  Name ="AuthenticationMode"  Type ="System.String" >
         PassThrough
</ Property >
         
< Property  Name ="DatabaseAccessProvider"  Type ="System.String" >
         SqlServer
</ Property >
         
< Property  Name ="RdbConnection Data Source"  Type ="System.String" >
         
your_server_name </ Property >
         
< Property  Name ="RdbConnection Initial Catalog"  Type ="System.String" >
         AdventureWorks
</ Property >
         
< Property  Name ="RdbConnection Integrated Security"  Type =
         "System.String"
> SSPI </ Property >
      
</ Properties >
   
</ LobSystemInstance >
</ LobSystemInstances >

使用pass-through方式作验证的缺点是操作系统只暴露用户名和密码。因此,如果一个公司使用双因素验证(即用户需要提供用户名,密码以外的其它特定的私有信息),我们就不能使用pass-through方式了。
如果不用考虑上面这些缺点,那么pass-through方式是我们在测试环境下的一个不错的选择。如果您的公司使用双因子验证,并且您还需要连BDC到一个SQL Server数据库,那么您可以使用SSO(Single Sign Sn),对此,这里就不做更深的介绍了。

5.定义一个实体---Customer

一个实体包括一个标题(定义在元素属性中),一个唯一标识(等同于主键),和一些方法(用于定义实体中的字段,并告诉BDC如何将实体数据从LOB系统中取出来)。下面的步骤定义了一个名为Customer的实体。

  1. 在 LobSystemInstances 元素后面为该实体添加XML核心代码。这里包括我们用来定义实体标题的占位符元素,统一标识和一个返回所有Customer的方法。

    注意:一个方法包含一个Properties元素用于定义数据库查询(或Web服务方法),一个Properties 元素定义从查询返回的数据,和一个MethodInstances 元素,标识MOSS中的特定功能。
    < Entities >
       
    < Entity  Name ="Customer" >
          
    < Properties >
             
    <!-- Properties go here -->
          
    </ Properties >
          
    < Identifiers >
             
    <!-- Identifiers go here -->
          
    </ Identifiers >
          
    < Methods >
             
    < Method  Name  ="GetCustomers" >
                
    < Properties >
                   
    <!-- Method Properties go here -->
                
    </ Properties >
                
    < Parameters >
                   
    <!-- Method Parameters go here -->
                
    </ Parameters >
                
    < MethodInstances >
                   
    <!-- Method Instances go here -->
                
    </ MethodInstances >
             
    </ Method >
          
    </ Methods >
       
    </ Entity >
    </ Entities >
  2. 定义GetCustomers方法中的属性。对于数据库,我们的实体属性告诉BDC查询的内容和如何进行查询。为GetCustomers 方法添加下面的XML到Properties 元素内。注意,在我们的T-SQL语句中有一个WHERE子句,包含了参数minCustomerID 和maxCustomerID 的引用,我们必须提前定义出来。同时,还要注意避免出现大于和小于号。
    这里我们不要按顺序写。先把注意力放到方法属性上,不要管更高一层的实体属性。因为这是我们定义查询的地方,它直接决定了实体其他部分的内容。
    < Property  Name ="RdbCommandText"  Type ="System.String" >
       SELECT
          customerID,
          LastName + ', ' + FirstName as Name,
          Phone,
          EmailAddress
       FROM
          Sales.vIndividualCustomer
       WHERE
          (customerID 
    &gt;  @minCustomerID and
           customerID 
    &lt;  @maxCustomerID)
    </ Property >
    < Property  Name ="RdbCommandType"  Type ="System.String" > Text </ Property >  
  3. 回到实体层次,定义属性和标识。用下面的XML替换Properties和Identifiers占位符元素。
    < Properties >
       
    < Property  Name ="Title"  Type ="System.String" > Name </ Property >
    </ Properties >
    < Identifiers >
       
    < Identifier  Name ="CustomerID"  TypeName ="System.Int32" />
    </ Identifiers >
  4. 定义方法参数。添加下面的XML到GetCustomers 方法的Parameters 元素中。这里定义了3个参数。头两个是输入参数,通过CustomerID过滤了列表。第三个参数定义了由SQL查询返回的数据。
    所有这3个参数都包括了一个到前面我们创建的标识的引用。这个标识是实体的非常重要的一个部分。MOSS用它来查询一个特定的元素(因此标识被定义在输入参数中)。它同时还用于输出实体的各种附加功能中(比如应用于Business Data Action中)。没有标识,实体就会严重瘫痪。
    返回参数通常比较复杂。它被定义为一个数据的记录集。这样就告诉了MOSS,将会有多个实体被返回。
    < Parameter  Direction ="In"  Name ="@minCustomerID" >
       
    < TypeDescriptor  TypeName ="System.Int32"  Name ="customerID"  IdentifierName ="CustomerID" >
          
    < DefaultValues >
             
    < DefaultValue  MethodInstanceName ="CustomerFinderInstance"  Type ="System.Int32" >
             0
    </ DefaultValue >
             
    < DefaultValue  MethodInstanceName =
                "CustomerSpecificFinderInstance"
     Type ="System.Int32" >
             0
    </ DefaultValue >
          
    </ DefaultValues >
       
    </ TypeDescriptor >
    </ Parameter >
    < Parameter  Direction ="In"  Name ="@maxCustomerID" >
       
    < TypeDescriptor  TypeName ="System.Int32"  Name ="customerID"  IdentifierName ="CustomerID" >
          
    < DefaultValues >
             
    < DefaultValue  MethodInstanceName ="CustomerFinderInstance"  Type =
             "System.Int32"
    > 9999999 </ DefaultValue >
             
    < DefaultValue  MethodInstanceName =
                "CustomerSpecificFinderInstance"
     Type ="System.Int32" >
                9999999
    </ DefaultValue >
             
    </ DefaultValues >
       
    </ TypeDescriptor >
    </ Parameter >
    < Parameter  Direction ="Return"  Name ="Customers" >
       
    < TypeDescriptor  TypeName ="System.Data.IDataReader, System.Data, Version=2.0.3600.0, 
          Culture=neutral, PublicKeyToken=b77a5c561934e089"
     IsCollection ="true"  
          Name
    ="CustomerDataReader" >
          
    < TypeDescriptors >
             
    < TypeDescriptor  TypeName ="System.Data.IDataRecord, System.Data, 
                Version=2.0.3600.0, Culture=neutral, PublicKeyToken=
                b77a5c561934e089"
     Name ="CustomerDataRecord" >
                
    < TypeDescriptors >
                   
    < TypeDescriptor  TypeName ="System.Int32"  IdentifierName =
                      "CustomerID"
     Name ="customerID"   />
                   
    < TypeDescriptor  TypeName ="System.String"  Name ="Name"   />
                   
    < TypeDescriptor  TypeName ="System.String"  Name ="Phone"   />
                   
    < TypeDescriptor  TypeName ="System.String"  Name ="EmailAddress"   >
                      
    < LocalizedDisplayNames >
                         
    < LocalizedDisplayName  LCID ="1033" > Email Address
                         
    </ LocalizedDisplayName >
                      
    </ LocalizedDisplayNames >
                   
    </ TypeDescriptor >
                
    </ TypeDescriptors >
             
    </ TypeDescriptor >
          
    </ TypeDescriptors >
       
    </ TypeDescriptor >
    </ Parameter >
  5. 定义方法的实例。添加下面的XML到MethodInstances 元素中。MOSS通过Finder 方法获取所有实体的已知实例。而且,MOSS通过finder方法来支持Business Data List WebPart。MOSS通过特定的Finder方法来获取查询特定方法实例的类型。搜索,业务数据操作,筛选,几乎所有其他的BDC功能都会用到该方法。
    一个方法通常只支持0或1个方法的实例。在本例中,我们只有一个方法,可以返回所有的customers或单个customer。当您定义您的实体时,您会发现或许使用两个方法会更容易些,一个GetCustomers 方法和一个GetSingleCustomer 方法。我们在这里只是为了简化XML,所以写的比较简练。
    < MethodInstance 
      
    Name ="CustomerFinderInstance"  
      Type
    ="Finder"  
      ReturnParameterName
    ="Customers"  
      ReturnTypeDescriptorName
    ="CustomerDataReader"   />
    < MethodInstance 
      
    Name ="CustomerSpecificFinderInstance"  
      Type
    ="SpecificFinder"  
      ReturnParameterName
    ="Customers"  
      ReturnTypeDescriptorName
    ="CustomerDataReader" />
  6. 保存文件。

6.将完成的元数据文件上传到SSP(Shared Service Provider)

打开管理中心,点左侧导航栏中的共享服务(通常名为SharedServices1)。在BDC一节中,点导入应用程序定义。点浏览,找到刚刚创建的元数据文件,双击。其他的应用程序定义项都用默认值就好,点导入。

7. 使用业务数据列表部件来显示Customer数据

在一个我们创建好的站点里,在页面中添加一个业务数据列表部件。 打开属性面板,在“类型”中输入Customer然后回车。MOSS会分析该属性,并得到Customer(CRMDB) 实体。 点确定,该实体就会显示在WebPart中了。

  MOSS中的BDC功能允许我们将处于门户以外的LOB数据包括进来,用于列表和企业搜索。BDC需要一个XML元数据文件用于定义到外部数据源的连接参数、各种查询(或Web服务方法调用),以及用于查询或方法调用的所有的输入输出参数。定义一个元数据文件,关键是理解其结构。理解BDC的关键就是理解实体。实体包括:

属性,允许BDC开发人员在实体层次定义特定的元数据,比如默认的显示元素(Title)。
标识,LOB字段的集合,唯一标识该实体。
方法, 包括T-SQL或Web服务方法,用于获取实体数据。实体可以包括多个方法,可以随意包含参数和筛选,可供BDC用户筛选结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值