使用.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对象。
3、在你的方法里添加如下代码,来替换默认的Not Implemented Exception:
代码
("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方法的声明为:
13、记住,我们的IdEnumerator方法只支持返回字段中的主键的值。SharePoint会以此来创建索引并进行爬网。该方法的代码很简单:
("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