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


    欢迎回来!希望你已经通过跟随上一次我们介绍的如何在Visual Studio 2010中构建业务数据连接服务模型中的步骤成功创建了你自己的Entity,并已经部署到SharePoint上。

    本次我们将继续扩展我们的BCS模型。我们将在 department实体上创建SpecificFinder和IdEnumerator方法。首先我们来设置SpecificFinder...

    1、右击我们的department实体的Methods一节 ,选择Add new Method。将方法名命名为GetDepartmentById。

    2、打开我们的DepartmentService.cs,你会看到一个新的方法已经为我们创建出来。修改该方法的声明以便其可以接收一个参数,并返回一个Department对象。 

    public static Department GetDepartmentById(Int16 departmentId)

    3、在你的方法里添加如下代码,来替换默认的Not Implemented Exception:

     代码

    DepartmentDataContext db = new DepartmentDataContext

    ("server=localhost;database=adventureworks2000;uid=***;pwd=***");
    var dbDepartment = db.Departments.SingleOrDefault(d => d.DepartmentID == departmentId);
    return new Department
    {
        DepartmentId = dbDepartment.DepartmentID,
        Name = dbDepartment.Name,
        GroupName = dbDepartment.GroupName
    };

    我们需要再多做一点工作,因为我们希望返回我们自己的Department类,而不是由LINQ 2 SQL生成的那个。原因在第一篇中已经说明,个人认为这是一条正确的路。


    4、接下来我们需要修改一下我们的BCS模型。返回到我们的BCS模型页面,并点击GetDepartmentById方法。在BCS方法详细信息面板中选择add a parameter。选中你的新参数,通过属性面板修改其名称为departmentId。然后点击它下面的Type Descriptor,设置如下的值:

    Name : departmentId

    Type Name : System.Int16

    Identifier : DepartmentId

    5、然后我们来创建返回参数。回到BDC方法详细信息面板,在GetDepartmentById方法下选择创建另一个新的参数。

    6、在BDC Explorer中选中新参数 ,修改名称为Department,参数方向为Return。

    7、现在是体现BDC Explorer优越性的时候了。展开我们的Department实体的GetDepartments方法。右击Department类型描述器并选择Copy。接着,右击GetDepartmentById方法的Department参数选Paste。

    这时会弹出对话框询问是否覆盖已有的Type Descriptor——点"yes"。这时你会发现Department类型描述器和所有字段的类型描述器都复制过来了。这样就减少了一些我们的手动创建工作。 

    结果:

    需要注意的是,如果所复制的Type Descriptor带有一些错误,则这些错误也会复制到其他方法。这也就是为什么最好先构建

    Finder方法进行测试无误后,再进行Type Descirptor的复制和粘贴。

    8、现在我们只需要创建一个方法实例就可以了。返回BDC方法详细信息面板,在GetDepartmentById方法下选择Add a Method Instance。设置其属性值为:

    Type : SpecificFinder

    Default : True

    Default Display Name : Single Department

    Return Parameter Name : Department

    Return Type Descriptor : Department


    9、在测试和部署前,我们需要清除我们的DepartmentService.cs类中的多余代码。

    BCS设计器希望你在开始写代码前,先定义你的方法,参数和类型描述器。这也正是为什么在我们编辑完方法的返回对象和输

    入参数后会重新生成一段新的方法声明。我更倾向于先写代码然后构建BCS模型。如果你和我的步骤一样,一定要记住要检查

    Service类,清除没用的方法代码。

    10、清除完后,直接F5编译部署该WSP到SharePoint.

    你可以通过添加并配置一个业务数据项WebPart来测试Specific Finder方法。或者也可以创建一个外表列表并点击某一行弹出查看表单来验证。

    11、我们的Specific Finder BCS方法工作正常!现在让我们返回Visual Studio,来配置我们的IdEnumerator方法。右击我们的Department实体的Methods一节,添加一个名为GetDepartmentIds的方法。

    12、进入DepartmentService.cs类,修改GetDepartmentIds方法的声明为:

    public static IEnumerable<short> GetDepartmentIds()

    13、记住,我们的IdEnumerator方法只支持返回字段中的主键的值。SharePoint会以此来创建索引并进行爬网。该方法的代码很简单:

    DepartmentDataContext db = new DepartmentDataContext

    ("server=localhost;database=adventureworks2000;uid=***;pwd=***");
    return from d in db.Departments
          select d.DepartmentID;

    14、现在开始BCS模型的构建,以便反映出所返回的数据。切回到BCS模型视图。选择GetDepartmentIds方法,在BDC详细信息面板里新建一个参数。

    15、在BDC Explorer里展开树,选中刚刚创建的参数。在属性面板里修改其方向为Return。

    16、选择我们的参数下的parameterTypeDescriptor,设置其值:

    Name : DepartmentIds

    Type Name : System.Collections.Generic.IEnumerable`1[[System.Int16]]

    IsCollection : True

    17、右击树中的DepartmentIds类型描述器结点,选择Add Type Descriptor。设置该类型描述器的属性为:


    Name : DepartmentId

    Type Name : System.Int16

    Identifier : DepartmentId


    18、最后,为我们的方法添加一个MethodInstance。在BDC方法详细信息面板中点击Add a Method Instance。选中该方法实例并设置其属性值:


    Type : IdEnumerator

    Default : True

    Return Parameter Name : parameter

    Return Type Descriptor : DepartmentIds


    记得要清除DepartmentService.cs中我们建模过程中创建的GetDepartmentIds方法。


    19、要将我们的LobSystemInstance做成一个可供SharePoint 2010索引器爬网的应用程序,还需要为其设置一个新属性。这个属性名为ShowInSearchUI。


    在BDC Explorer中展开BCS模型,找到LobSystemInstance结点。


    20、在属性面板里,设置一个custom property,名为ShowInSearchUI,类型为System.String。该属性实际上不需要值,只需要存在就可以了。


    21、就这么多,现在我们可以按F5把我们的模型打包成WSP并部署到SharePoint了。这里我们还有些SharePoint UI里特殊步骤,用于在搜索结果中展现我们的Departments类型的数据。


    22、在原先的BDC(Business Data Catalog)里,你的实体的配置文件页面是自动创建的。而使用上面步骤在BCS中却不会自动创建配置文件页。因此我们需要一步手工操作来进行创建。打开SharePoint 2010管理中心,点击管理服务应用程序。在服务应用程序页中点击Business Data Connectivity Service链接到其管理页面。


    23、在功能区上,点击编辑标签,点击配置按钮。弹出的表单,需要我们输入一个配置文件页宿主URL。正如页面中解释的那样,最好单独创建一个网站来宿主这些配置文件页,但此处我们就直接输入相同的Url,指向我们的SharePoint站点,对于我来说是http://sp2010u。


    点击确定关闭该表单。


    24、现在,我们可以在我们的外部内容类型上创建配置文件页了。鼠标悬停在我们的Department ECT上,在下拉菜单中选择“创建/升级配置文件页”。


    在弹出的对话框中一路点确定。现在我们的配置文件页就创建到23步中指定的宿主网站中了。


    25、接下来我们要检查一下我们的实体是不是可以被爬网。点击Department ECT,检查其中的“可爬网”属性值为“是”。


    26、现在,我们需要将我们的BCS应用程序设置为一个搜索内容源。回到管理服务应用程序页面,点击Search Service Application链接。


    27、在左手的导航菜单中点击“内容源”链接,然后再接下来的页面上点击新建内容源链接。


    28、为新内容源起一个名字,并选择其类型为业务部门数据(Line of Business Data)。点选后界面会刷新,然后显示下面一节来展现外部数据源。选择你要进行爬网的BCS应用系统,这里是BdcModel1

    注意:如果你的应用系统没有出现在这里,那么你需要检查一下ShowInSearchUI有没有被添加到属性集中。(可以使用源代码编辑器打开模型文件,而不是在默认的模型编辑界面。然后找找看LobSystemInstance结点下的属性集里有没有ShowInSearchUI)。

    29、如果你愿意可以设置一下爬网计划。 最后选中“对该内容源启动完全爬网”,并点击确定。

    30、当爬网完成后,我们来检查一下我们的BCS内容源的爬网日志。 

    你应该可以看到有18个成功的条目——每个部门对应一条。 

    31、如果你已经有一个工作组站点作为网站集根站点的话 ,你需要创建一个搜索中心站点。创建好后,进入搜索中心站点,搜索一个关键词“engineering",这时你会看到借助Department ECT我们得到Engineering部门的返回结果。


    32、你可以将该搜索中心挂接到你的工作组网站上。返回工作组站点,然后点击

    网站操作->网站设置-> 搜索设置

    你可以把搜索中心的URL贴到这里,以便使用其结果页。


    Wow——为自己喝彩吧! 作为一个系列,接下来,我们还将介绍创建关联的步骤。

    参考资料

     BCS Model in Visual Studio 2010 – SpecificFinder and IdEnumerator

    Searching External Data in SharePoint 2010 Using Business Connectivity Services

    BDC .NET Assembly Connector: Tame SharePoint Search to search your .NET BDC Entity 

    Search-Specific Properties in BDC Model Files

  • 相关阅读:
    BZOJ3847 : ZCC loves march
    BZOJ3828 : [Poi2014]Criminals
    BZOJ3834 : [Poi2014]Solar Panels
    BZOJ3831 : [Poi2014]Little Bird
    BZOJ3829 : [Poi2014]FarmCraft
    BZOJ2757 : [SCOI2012]Blinker的仰慕者
    BZOJ2707 : [SDOI2012]走迷宫
    给iOS工程增加Daily Build
    给NSString增加Java风格的方法
    象写程序一样写博客:搭建基于github的博客
  • 原文地址:https://www.cnblogs.com/Sunmoonfire/p/1762758.html
Copyright © 2020-2023  润新知