zoukankan      html  css  js  c++  java
  • 使用.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


  • 相关阅读:
    Python入门-函数进阶
    Python入门-初始函数
    Leetcode300. Longest Increasing Subsequence最长上升子序列
    Leetcode139. Word Break单词拆分
    Leetcode279. Perfect Squares完全平方数
    Leetcode319. Bulb Switcher灯泡开关
    Leetcode322. Coin Change零钱兑换
    二叉树三种遍历两种方法(递归和迭代)
    Leetcode145. Binary Tree Postorder Traversal二叉树的后序遍历
    Leetcode515. Find Largest Value in Each Tree Row在每个树行中找最大值
  • 原文地址:https://www.cnblogs.com/Sunmoonfire/p/1767779.html
Copyright © 2011-2022 走看看