随着技术的不断进步,企业应用程序的开发过程也变得越来越复杂。为了简化这一过程,微软推出了Silverlight和ASP.NET技术,它们为开发N层商业应用程序提供了极大的便利。本文将介绍如何使用这些技术集成SAP业务数据,并通过WCF RIA Services和LINQ to SAP实现数据访问。
首先,需要创建一个新的Silverlight 4项目,使用Visual Studio模板“Silverlight Navigation Application”。Visual Studio 2010会提示创建一个额外的Web应用程序来托管Silverlight应用程序。在创建过程中,务必勾选“Enable WCF RIA Services”选项。
点击“OK”按钮后,Visual Studio会生成包含两个项目的解决方案:一个Silverlight 4项目和一个ASP.NET项目。接下来,将使用LINQ to SAP设计器创建SAP数据访问层。
LINQ to SAP提供程序及其Visual Studio 2010设计器为设计SAP接口提供了一种非常便捷的方式。设计器会自动生成SAP数据访问层的代码,类似于LINQ to SQL。LINQ提供程序是Theobald Software提供的.NET库ERPConnect.net的一部分。该公司在其主页上提供了演示版本的下载。
接下来,通过打开“添加新项”对话框来创建所需的LINQ to SAP文件。LINQ to SAP在内部被称为LINQ to ERP。
点击“添加”按钮将创建一个新的ERP文件并打开LINQ设计器。现在,从工具箱中拖动“Function”对象并将其放置到设计器表面上。如果尚未输入SAP连接数据,系统会提示输入。
输入SAP R/3系统的连接数据,然后点击“确定”按钮。接下来,搜索并选择名为“SD_RFC_CUSTOMER_GET”的SAP函数模块。该函数模块提供了客户数据列表。
打开的RFC函数模块对话框允许定义必要的参数。在上述函数对话框中,将方法名称更改为“GetCustomers”,并在“导出”选项卡中为“NAME1”参数标记“Pass”复选框。同时将变量名称设置为“namePattern”。在“表”选项卡中,为表参数“CUSTOMER_T”标记“返回”复选框,并将表和结构名称设置为“CustomerTable”和“CustomerRow”。
点击“确定”按钮并保存ERP文件后,LINQ设计器将生成一个名为“SAPContext”的类,其中包含一个名为“GetCustomers”的方法,该方法具有一个名为“namePattern”的输入参数。此方法执行SAP客户数据的搜索,允许用户输入通配符模式。该方法返回客户数据表:
在LINQ设计器级别(点击LINQ设计器表面的空白部分)属性中,必须将“Create Object Outside Of Context Class”设置为“True”:
现在,终于添加了一个“Customer”类,将在稍后的SAP域服务中使用这个类。这个类及其值将通过WCF RIA Services传输到Silverlight客户端。重要的是要为WCF RIA Services设置标识字段上的“Key”属性,否则项目将无法编译。
下一步是向Web项目添加SAP域服务。域服务是WCF服务的特化形式,是WCF RIA Services的核心构建之一。该服务公开了可以从客户端生成的代码调用的操作。在客户端,使用域上下文访问服务器端的域服务。
添加一个新的域服务类并将其命名为“SAPService”:
在接下来的对话框中,通过点击“确定”按钮创建一个空的域服务类:
接下来,向SAP服务添加一个名为“GetCustomers”的服务操作,该操作具有一个名称模式参数。该操作然后返回一个“Customer”对象列表。查询属性将结果集限制为200条记录。
该操作使用可视化设计的SAP数据访问逻辑来检索SAP客户数据。首先,将使用连接字符串(参见代码示例)创建一个“SAPContext”类的实例。有关SAP连接字符串的更多详细信息,请参见ERPConnect.net手册。
LINQ到SAP上下文类包含“GetCustomers”方法,将使用给定的“namePattern”参数调用该方法。接下来,操作为SAP返回的每个客户记录创建一个“Customer”类的实例。
ERPConnect.net库的许可证代码设置在域服务类构造函数中。
服务器端所需的所有内容都在这里了。
客户端的实现非常简单。主页视图包含一个“DataGrid”控件,用于显示客户数据列表,以及一个搜索区域,包含“TextBox”和“Button”控件,允许用户输入名称搜索模式。
加载按钮的点击事件处理程序,称为“OnLoadButtonClick”,将执行SAP服务。访问Web服务的样板代码由WCF RIA Services在Silverlight项目的“Generated_Code”子文件夹中生成。
首先,将创建一个“SAPContext”的实例。然后,加载查询“GetCustomersQuery”并在服务器端使用WCF RIA Services执行服务操作。如果域服务返回错误,回调匿名方法将将错误标记为已处理并显示错误消息。
如果服务操作执行成功,结果集将显示在“DataGrid”控件中。