65.9K
CodeProject 正在变化。 阅读更多。
Home

如何使用 WCF RIA Services 和 LINQ to SAP 从 Silverlight 4 客户端访问 SAP 业务数据

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.92/5 (12投票s)

2012年4月2日

CPOL

5分钟阅读

viewsIcon

56236

downloadIcon

602

本文介绍了如何使用 WCF RIA Services 和 LINQ to SAP 在 Silverlight 中访问和集成 SAP 客户数据。

引言

Microsoft 的 WCF RIA Services for Silverlight 4 的引入极大地简化了使用 Silverlight 和 ASP.NET 开发 N 层业务应用程序的过程。通过使用这项新技术,我们还可以轻松地在 Silverlight 客户端中访问和集成 SAP 业务数据。

本文展示了如何提供一个 SAP 域服务作为 Web 服务,供 Silverlight 客户端消费。示例应用程序将允许用户查询客户数据。该服务使用 Theobald Software 的 LINQ to SAP 连接到 SAP R/3 系统。

项目设置

设置带有 WCF RIA Services 的新 Silverlight 4 项目的第一步是使用 Visual Studio 模板 Silverlight Navigation Application 创建一个解决方案。

Screenshot-01.png - Click to enlarge image

Visual Studio 2010 然后会要求您创建一个额外的 Web 应用程序来托管 Silverlight 应用程序。重要的是要选中“启用 WCF RIA Services”复选框(见下图)。

SAP2Silverlight/Screenshot-02.png

点击“确定”按钮后,Visual Studio 会生成一个包含两个项目的解决方案:一个 Silverlight 4 项目和一个 ASP.NET 项目。在下一节中,我们将使用 LINQ to SAP 设计器创建 SAP 数据访问层。

LINQ to SAP

LINQ to SAP 提供程序及其 Visual Studio 2010 设计器提供了一种非常方便的方式来直观地设计 SAP 接口。该设计器将自动生成 SAP 数据访问层的代码,类似于 LINQ to SQL。LINQ 提供程序是 Theobald Software 的 .NET 库 ERPConnect.net 的一部分。该公司在其主页上提供演示版本供下载。

下一步是通过打开“添加新项”对话框来创建所需的 LINQ to SAP 文件。

Screenshot-03.png - Click to enlarge image

LINQ to SAP 在内部称为 LINQ to ERP。

点击“添加”按钮将创建一个新的 ERP 文件并打开 LINQ 设计器。现在,从工具箱中拖动“函数”对象并将其放在设计器表面上。如果您到目前为止尚未输入 SAP 连接数据,现在会要求您这样做。

Screenshot-04.png - Click to enlarge image

输入您的 SAP R/3 系统的连接数据,然后单击“确定”按钮。接下来,搜索并选择名为 SD_RFC_CUSTOMER_GET 的 SAP 功能模块。该功能模块提供客户数据列表。

“RFC Function modules”对话框打开,允许您定义必要的参数。

SAP2Silverlight/Screenshot-05.png

在上面的函数对话框中,将方法名称更改为 GetCustomers,并在“Exports”选项卡中勾选 NAME1 参数的“Pass”复选框。还将变量名设置为 namePattern。在“Tables”选项卡中,勾选表参数 CUSTOMER_T 的“Return”复选框,并将表和结构名称设置为 CustomerTableCustomerRow

SAP2Silverlight/Screenshot-06.png

单击“确定”按钮并保存 ERP 文件后,LINQ 设计器将生成一个 SAPContext 类,其中包含一个名为 GetCustomers 的方法,该方法带有一个名为 namePattern 的输入参数。此方法执行 SAP 客户数据的搜索,允许用户输入通配符模式。该方法返回一个客户数据表。

SAP2Silverlight/Screenshot-07.png

在 LINQ 设计器级别(单击 LINQ 设计器表面的空白部分)属性,将“Create Object Outside Of Context Class”设置为 True

Screenshot-08.png - Click to enlarge image

现在,我们终于添加了一个 Customer 类,我们将在稍后的 SAP 域服务中使用它。这个类及其值将由 WCF RIA Services 传输到 Silverlight 客户端。重要的是要为标识符字段设置 Key 属性,否则项目将无法编译。

Screenshot-09.png - Click to enlarge image

就是这样!我们现在已经准备好使用 SAP 数据访问层,并可以在下一节开始添加域服务。

SAP 域服务

下一步是将 SAP 域服务添加到我们的 Web 项目中。域服务是一种特殊的 WCF 服务,是 WCF RIA Services 的核心构造之一。该服务公开了可以从客户端生成的代码调用的操作。在客户端,我们使用域上下文来访问服务器端的域服务。

添加一个新的域服务类,并将其命名为 SAPService

Screenshot-10.png - Click to enlarge image

在即将出现的对话框中,通过单击“确定”按钮创建一个空的域服务类。

SAP2Silverlight/Screenshot-11.png

接下来,我们将 GetCustomers 服务操作添加到 SAP 服务中,并带有一个名称模式参数。然后,该操作返回一个 Customer 对象列表。Query 属性将结果集限制为 200 条。

该操作使用可视化设计的 SAP 数据访问逻辑来检索 SAP 客户数据。首先,将使用连接字符串创建 SAPContext 类的一个实例(请参阅代码中的示例)。有关 SAP 连接字符串的更多详细信息,请参阅 ERPConnect.net 手册。

LINQ to SAP 上下文类包含 GetCustomers 方法,我们将使用给定的 namePattern 参数来调用它。接下来,该操作为 SAP 返回的每个客户记录创建一个 Customer 类的实例。

ERPConnect.net 库的许可证代码在我们的域服务类的构造函数中设置。

Screenshot-12.png - Click to enlarge image

服务器端只需要这些。

在下一节中,我们将实现 Silverlight 客户端。

Silverlight客户端

客户端的实现很简单。主视图包含一个 DataGrid 控件来显示客户数据列表,以及一个包含 TextBoxButton 控件的搜索区域,允许用户输入名称搜索模式。

加载按钮的点击事件处理程序(名为 OnLoadButtonClick)将执行 SAP 服务。访问 Web 服务的样板代码由 WCF RIA Services 在 Silverlight 项目的 Generated_Code 子文件夹中生成。

首先,将创建 SAPContext 的实例。然后,我们将加载 GetCustomersQuery 查询,并通过 WCF RIA Services 在服务器端执行服务操作。如果域服务返回错误,回调匿名方法将标记错误已处理并显示错误消息。

如果服务操作执行成功,结果集将显示在 DataGrid 控件中。

Screenshot-13.png - Click to enlarge image

下一个屏幕截图显示了最终结果。

Screenshot-14.png - Click to enlarge image

就这样。

摘要

本文展示了如何使用 WCF RIA Services 和 LINQ to SAP 等工具轻松地将 SAP 客户数据集成到 Silverlight 客户端中。扩展 SAP 服务以集成各种操作非常简单。

历史

  • 2010 年 11 月 17 日:初始发布
© . All rights reserved.