SharePoint 2010外部内容类型创建与SAP集成

在SharePoint 2010中,外部内容类型(External Content Types)是一种可重用的元数据描述,它包含了连接信息和行为(标准化操作)的描述,这些操作应用于外部数据。SharePoint为开发者提供了多种创建外部内容类型并将其集成到平台的方法。例如,SharePoint Designer 2010允许创建和管理存储在支持的外部系统中的外部内容类型。这些外部系统可以是SQL Server、WCF Data Service或.NET Assembly Connector。

本文将向展示如何基于给定的SAP客户数据创建一个名为“Customer”的SharePoint外部内容类型。内容类型的定义将作为一个.NET程序集提供,并且数据将显示在SharePoint的外部列表中。

SAP客户数据将通过函数模块SD_RFC_CUSTOMER_GET检索。一般来说,SAP R/3系统中的函数模块与C#中的public static类方法相似,并且可以通过RFC(远程函数调用)从SAP外部访问。幸运的是,不需要手动编写RFC调用。将使用Theobald Software提供的非常实用的ERPConnect库。该库包括一个LINQ to SAP提供程序和设计器,这使得工作变得更加容易。

创建SAP的.NET Assembly Connector的第一步是使用Visual Studio 2010的SharePoint 2010 Developer Tools创建一个SharePoint项目。这些工具是Visual Studio 2010的一部分。将使用Business Data Connectivity Model项目模板来创建项目:

定义Visual Studio解决方案名称并点击“确定”按钮后,项目向导会询问想要创建哪种类型的SharePoint 2010解决方案。解决方案必须作为farm解决方案部署,而不是作为沙盒解决方案。Visual Studio现在正在创建一个新的SharePoint项目,附带默认的BDC模型(BdcModel1)。也可以创建一个空的SharePoint项目,然后手动添加一个Business Data Connectivity Model项目项。这同样会在Visual Studio解决方案资源管理器中生成一个名为BdcModel1的新节点。该节点包含一些项目文件:BDC模型文件(文件扩展名.bdcm),以及Entity1.csEntityService.cs类文件。

接下来,通过在Visual Studio的“添加新项”对话框中选择LINQ to ERP项来添加一个LINQ to SAP文件,以处理SAP数据访问逻辑。这将向项目中添加一个名为LINQtoERP1.erp的文件。LINQ to SAP提供程序在内部被称为LINQ to ERP。双击LINQtoERP1.erp以打开设计器。现在,将设计器工具箱中的Function对象拖到设计表面上。这将打开SAP连接对话框,因为尚未定义连接数据:

输入SAP连接数据和凭据。点击“测试连接”按钮以测试连接性。如果能够成功连接到SAP系统,点击“确定”按钮以打开函数模块搜索对话框。现在搜索SD_RFC_CUSTOMER_GET,然后选择找到的项目,点击“确定”以打开RFC函数模块/BAPI对话框:

对话框为提供了定义想要在SAP上下文类中使用的名称和参数的选项。上下文类是由LINQ to SAP设计器自动生成的,包括所有定义的SAP对象。这些对象要么是C#(或VB.NET)类方法和/或方法使用的附加对象类。

对于项目,需要通过在“Pass”列中点击复选框来选择导出参数KUNNRNAME1。这两个参数成为在生成的上下文类方法SD_RFC_CUSTOMER_GET中的输入参数。还需要返回给定输入选择的客户列表。因此,在“Tables”标签上选择表参数CUSTOMER_T,并将结构名称更改为Customer。然后,点击对话框上的“确定”按钮,新对象将被添加到设计器表面。

重要提示:必须在LINQ设计器的属性编辑器中将“Create Objects Outside Of Context Class”标志设置为TRUE,否则LINQ to SAP将生成的Customer类作为SAP上下文类的嵌套类。这个特性和标志只在Visual Studio 2010的LINQ to SAP中可用。

LINQ设计器还自动生成了一个名为Customer的类在LINQtoERP1.Designer.cs文件中。这个类将成为BDC模型实体或外部内容类型。但首先,需要调整并重命名Visual Studio默认创建的BDC模型。当前,BDC模型看起来像这样:

BdcModel1节点和文件重命名为CustomerModel。由于已经有一个实体类(Customer),删除文件Entity1.cs并将EntityService.cs文件重命名为CustomerService.cs。接下来,打开CustomerModel文件并重命名设计器对象Entity1。然后,将实体标识符名称从Identifier1更改为KUNNR。也可以使用BDC资源管理器进行重命名。最终调整结果应该如下所示:

在Visual Studio项目中需要做的最后一步是更改CustomerService类中的代码。BDC模型方法ReadItemReadList必须使用自动生成的LINQ to SAP代码实现。首先,看看代码:

如所见,基本上只有几行代码。所有的SAP数据访问逻辑都封装在SAP上下文类中(参见LINQtoERP1.Designer.cs文件)。CustomerService类只是实现了一个静态构造函数来设置ERPConnect许可证密钥,并使用SAP凭据初始化静态变量_sc以及两个BDC模型方法。

ReadItem方法,BCS标准化操作SpecificFinder,是由BCS调用以获取由标识符KUNNR定义的特定项。在这种情况下,只是调用SD_RFC_CUSTOMER_GET上下文方法,并传入标识符(变量id),然后返回从SAP获得的第一个客户对象。

ReadList方法,BCS标准化操作Finder,是由BCS调用以返回所有实体。在这种情况下,只是返回SD_RFC_CUSTOMER_GET上下文方法返回的所有客户对象。返回的结果已经是IEnumerable类型。

最后一步是部署SharePoint解决方案。在Visual Studio解决方案资源管理器中右键单击项目节点,然后选择“部署”。这将在服务器上安装并部署SharePoint解决方案。也可以通过在CustomerService类中设置一个断点并使用F5执行项目来调试代码。

完成了!

现在,启动SharePoint中央管理面板,然后按照链接“管理服务应用程序”,或直接导航到URL:http://<SERVERNAME>/_admin/ServiceApplications.aspx。点击“业务数据连接性服务”以显示所有可用的外部内容类型:

在此页面上,找到了部署的BDC模型,包括客户实体。可以点击名称以检索有关实体的更多详细信息。现在,还有一个问题需要解决。需要设置权限!

标记实体复选框,然后点击功能区菜单栏上的“设置对象权限”。现在,为想允许访问实体的用户定义权限,然后点击“确定”按钮。在上面的屏幕截图中,管理员用户拥有所有可能的权限。

接下来,也是最后一步,将创建一个基于实体的外部列表。为此,打开SharePoint Designer 2010并连接到SharePoint网站。

点击“站点对象”面板上的“外部内容类型”以显示所有内容类型(见上图)。双击客户实体以打开详细信息。SharePoint Designer通过BCS读取所有可用的信息。

为了创建实体的外部列表,点击功能区菜单栏上的“创建列表和表单”(见下面的屏幕截图),并输入CustomerList作为外部列表的名称。

好的,现在完成了!

打开列表,应该得到以下结果:

外部列表显示了实体的所有定义字段,尽管Customer类(由LINQ to SAP自动生成)有超过这四个字段。这意味着只能为实体显示信息的子集。

另一个选择是仅在LINQ to SAP设计器中选择所需的字段。使用LINQ设计器,不仅可以访问SAP函数模块。可以集成其他SAP对象,如表、BW数据立方体、SAP查询或IDOCs。可以从Theobald Software首页下载ERPConnect库的演示版本。

如果点击列KUNNR中客户编号的关联链接(见上面的屏幕截图),SharePoint将打开详细视图:

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485