使用.NET程序集作为Business Data Connectivity数据源(三)

 在这一系列的上一篇文章中,我们在Microsoft Visual Studio 2010中创建了BCS模型,并为我们的Department实体定义了 Finder,Specific Finder和ID Enumerator方法。本文将继续扩展我们的BCS模型,看一看如何为Department实体定义Creator和Updater方法,让用户能够在Department实体中插入/编辑记录。

首先,开始创建我们的Creator方法。

1)右击Department实体的Methods一节,并选择“Add new Method”。

2)为方法起一个名字“AddDepartment”。 

接下来,我们要为该Creator方法创建参数。你需要定义所有希望出现在“新建项目”对话框中的字段,作为Creator方法的输入参数。该方法还需要一个返回参数,而且应为一个结构体,其中包含了该Department实体的标识符类信息。 

 

3)在Department实体中选中AddDepartment方法,然后在BDC Method Details面板中点击“<Add a Parameter>” 

4)本例中我们将创建3个方向为“In”的参数,分别名为“Name”,“GroupName”,“DepartmentId”。 

5)接下来我们需要修改每个参数的type descriptor属性。在BDC Explorer窗口中展开树状视图,找到这些参数的type descriptor。

这些type descriptor的属性设置为:

 

DepartmentID:

Name: DepartmentId

TypeName: System.Int16

Identifier: DepartmentId


GroupName:

Name: GroupName

TypeName: System.String

CreatorField:True


Name:

Name: Name

TypeName: System.String

CreatorField: True

 

 

6) 现在我们需要为AddDepartment方法定义返回参数。该返回参数应为一个描述Department实体的标识符的结构体。

 

打开DepartmentService.cs类,在Service类后面添加下列类: 

public class DepartmentSimple
{
    
public short DepartmentId
    {
        
get;
        
set;
    }
}

 7)在BDC Method Details面板中为AddDepartment方法创建一个方向为"Return"的参数,命名为“returnParameter”

8)打开BDC Explorer窗口,导航到AddDepartment方法的returnParameter参数,修改其type descriptor的属性。

Name:DepartmentSimple

TypeName:BdcModelProject1.BdcModel1.DepartmentSimple,BdcModel1

9)右击该DepartmentSimple类型描述器并选择“Add Type Descriptor” 。设置属性为:

Name:DepartmentId

TypeName:System.Int16

Identifier:DepartmentId

10) 参数和类型描述器定义好后如下图所示: 

11)接下来,我们需要为AddDepartment方法创建一个方法实例。在BDC Method Details面板中,点击AddDepartment方法下的新建方法实例操作。按照下图所示设置其属性: 

12)打开DepartmentService.cs文件,你会看到已经为你生成了一个AddDepartment方法。 用下列代码替换该方法的代码:

public static DepartmentSimple AddDepartment(string Name, string GroupName, short DepartmentId)
{
    
DepartmentDataContext db = new DepartmentDataContext("server=localhost;database=adventureworks;uid=***;pwd=***");
    BdcModelProject1.Department createdEntity = new BdcModelProject1.Department
    {
        DepartmentID = DepartmentId,
        Name = Name,
        GroupName = GroupName,
        ModifiedDate = DateTime.Now
    };
    db.Departments.InsertOnSubmit(createdEntity);
    db.SubmitChanges();
    
DepartmentSimple IdentifiersStruct = new DepartmentSimple
    {
        DepartmentId = DepartmentId,
    };
    
return IdentifiersStruct;
}

13)重新编译该项目并按“Ctrl+F5”键重新部署它。打开你的SharePoint站点并新建一个基于该BCS外部内容类型的外部列表。选择顶部的“项目”功能区,你会发现“新建项目”按钮现在变为可用状态。这样,就说明我们上面定义的Creator方法没问题,否则它是不可用状态。 

14)点击“新建项目”,将会弹出一个表单供我们插入数据。在第5步我们定义了输入参数并且只在Name和GroupName上设置CreatorField=true,因此在该表单中我们仅看到Name和GroupName两个字段。如果你需要添加新的字段,那么你不但需要将其定义为输入参数,还要设置Creator Field 为true。对于Department表,DepartmentId是自增的主键,因此我们没有将其设置为Creator字段,但如果你的主键不是自增的,那么你也需要将其定义为一个Creator字段。

 

单击该表单中的保存按钮。 

15) 结果如下。

 

现在,让我们来为我们的Department实体新建BCS Updater方法。 

 

16)右击该Department实体的Methods一节,并选择“Add new Method”。

17)为新方法起一个名字“UpdateDepartment”。 

我们需要为Updater方法创建输入参数。

 

18)在BDC Method Details面板中,点击UpdateDepartment方法下的添加参数操作,添加一个方向为“In”的参数。 

19)在BDC Explorer窗口中,展开树状视图导航到该参数。选中该参数的type descriptor并修改其属性如下:

Name:Departmet

TypeName:BdcModelProject1.BdcModel1.Department,BdcModel1

 

20)右击Department类型描述器,为其添加两个类型描述器并如下设置属性:

DepartmentID:

Name:DepartmentId

TypeName:System.Int16

Identifier:DepartmentId

UpdaterField:True

 

GroupName:

Name:GroupName

TypeName:System.String

UpdaterField:True 


Name:

Name:Name

TypeName:System.String

UpdaterField:True  

 

注意:在本文中我们使用的Department表,其主键为自增的。为了保证updater方法正确执行,我们需要将上一篇中谈到的Specific Finder方法的返回值中的DepartmentId定义为只读。如下图所示:

21)至此,参数和类型描述器应如下图所示。如果你想要更新更多的字段,先将其添加为类型描述器,再设置其UpdaterField=true即可。

22)我们需要为UpdateDepartment方法创建一个方法实例。在BDC Method Details面板中,点击UpdateDepartment方法下的添加方法实例操作,添加一个方法实例并设置其方法实例类型为Updater。 

23)打开Departmentservice.cs,找到自动生成的UpdateDepartment方法,用下面的代码替换其代码: 

public static void UpdateDepartment(Department parameter)
{
    
DepartmentDataContext db = new DepartmentDataContext("server=localhost;database=adventureworks2000;uid=***;pwd=***");
    BdcModelProject1.Department updatedEntity = (from entity in db.Departments
                                 
where entity.DepartmentID == parameter.DepartmentId
                                
select entity).FirstOrDefault<BdcModelProject1.Department>();
    updatedEntity.Name = parameter.Name;
    updatedEntity.GroupName = parameter.GroupName;
    db.SubmitChanges();
}

24)重新编译该项目,按“Ctrl+F5”键重新部署。打开你的SharePoint站点,由于我们在Department实体中添加了新的方法,因此需要删除前面创建的外部列表,并重新创建。 创建好后,随便选中一条记录,你会看到“编辑项目”按钮变为可用状态。由于我们为BCS模型正确的配置了updater方法,现在我们可以编辑记录了。 

25)点击“编辑项目”,在弹出的表单中你将看到Name和GroupName两个字段,可供我们进行更新。修改一下名称,并点击保存。

26)更新后的结果。

 

希望本文对你有用。在接下来的文章中我们将一起探讨如何用Visual Studio 2010在两个外部内容类型之间创建BCS关联。

 

参考资料

bcs creator and updater methods for dot net assembly 

How to: Add a Creator Method

Designing a Business Data Connectivity Model


posted @ 2010-07-01 07:58  Sunmoonfire  阅读(1971)  评论(0编辑  收藏  举报