使用.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

posted @ 2010-06-24 10:52  Sunmoonfire  阅读(1789)  评论(0编辑  收藏  举报