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

连接到SAP系统的Windows Phone 7 Silverlight应用程序示例

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2013年1月9日

CPOL

4分钟阅读

viewsIcon

23714

downloadIcon

570

如何将您的应用程序手机连接到 SAP 系统。

引言

这是我的第一篇文章。 我是为 Windows Phone 应用程序的初学者(像我一样)准备的。 代码演示了如何创建连接到 SAP 系统的 Windows Phone 应用程序,用户可以在其中输入其登录名和密码以打开其 SAP 会话并获取其记录信息。 为此,我将使用 Visual Studio Express 2010 来创建我的 Windows Phone 7 应用程序(请注意,对于 Windows Phone 8 也是一样的,但在这种情况下,您需要 VS Express 2012)。 我还需要 VS 2010 来创建连接到 SAP 系统的 Web 服务,或者我们也可以创建一个简单的服务,例如 WCF。 在下一篇文章中,此层将被 SAP Netweaver Gateway 服务取代。 最后,我需要我的 SAP BAPI。 它们的工作方式类似于功能模块,唯一的区别在于它们是 SAP 业务对象存储库的编程接口 (API)。

背景

对于我的 SAP 连接,我将使用 ERPConnect.net,它是一个 .NET 组件,提供了多个类,用于与 SAP R/3 系统进行客户端和服务器通信,包括 RFC 功能模块、BAPI。 除了用于 RFC 服务器和客户端功能的标准类之外,还有几个特殊类用于执行诸如动态创建和执行 ABAP 代码或控制 SAP GUI 中的 SAP 事务之类的功能。 要使用 ERPConnect,您需要在您的项目中添加一个引用 DLL。 (不要忘记在您的编程类中添加语句 using ERPConnect)。

步骤 1:创建我的 BAPI

我的 SAP 函数将用户的登录名和密码作为参数,并返回一个包含用户名字、姓氏和职位的结构。 这是我的函数

步骤 2:创建 Web 服务

在本文中,我将使用 Web 服务将我的 Windows Phone 应用程序连接到 SAP。 请注意,这并不是我介绍中描述的唯一解决方案。 但是,我们始终需要在 Windows Phone 和 SAP 系统之间有一个中间层,到目前为止,仍然无法直接连接。 那么让我们创建我的 Web 服务:打开 Microsoft Visual Studio 并打开一个新项目,从打开的窗口中选择 C#、Web,然后选择 Web 服务应用程序。 创建新项目后,您将找到项目资源管理器,右键单击并添加一个新类“SAPUser”。 此类将是我们的实体,用于从我们的 Web 服务导出数据。

public class SAPUser
{
    // déclaration des champs.
    private string _nom;
    private string _prenom;
    private string _poste;
    private string _fonction;

     // déclaration des propriétés
    public string Nom
    {
        get { return _nom; }
        set { _nom = value; }
    }
    public string Prenom
    {
        get { return _prenom; }
        set { _prenom = value; }
    }
    public string Poste
    {
        get { return _poste; }
        set { _poste = value; }
    }
    public string Fonction
    {
        get { return _fonction; }
        set { _fonction = value; }
    }
}

在创建我们的 Web 方法之前,我们必须为我们的 ERPConnect 添加一个引用。 在我的示例中,我使用的是 Visual Studio 2010 和 Framework 3.5,因此我需要在我的 Web 服务项目中添加 *ERPConnect35.dll*,如下所示

zp>现在让我们创建我们的 Web 方法,为此打开文件“*Service1.asmx.cs*”,并在服务中添加一个新方法。 此方法将登录 sap 和密码作为参数,并将发送我们的 SAPUser 类的对象。 如下所示,您需要创建一个 R3Connection 对象来打开与 sap 的连接,然后我们在连接上创建一个 RFCFunction 对象,调用我们的 BAPI *Z_GET_USER_INFO*。 然后,我们使用 BAPI 的导入参数填充我们的 RFC 函数对象的导出参数。 这意味着我们将导入值发送到 BAPI。 完成此操作后,我们执行该函数并从结果结构中提取感兴趣的数据。
public class Service1 : System.Web.Services.WebService
{
    [WebMethod]
    public SAPUser GET_SAP_USER(string userName, string passwordUser)
    {
        SAPUser sapUserResult = null;
        R3Connection _con;
        ERPConnect.LIC.SetLic("XXXXXXXXX");
        _con = new R3Connection();
        _con.UserName = userName;
        _con.Language = "FR";
        _con.Client = "100";
        _con.Host = "the name of the SAP Server";
        _con.SystemNumber = 4;
        _con.Password = passwordUser;
        try 
         {  
             //Open a connection to sap server
             _con.Open(false);
             // call the bapi Z_GET_USER_INFO
             RFCFunction func = _con.CreateFunction("Z_GET_USER_INFO");
             //sending the import parameter to the BAPI 
             func.Exports["USER_NAME"].ParamValue = userName;
             func.Execute();
             RFCTable UserParameter = func.Imports["P_USER_INFO"].ToTable();
             if (UserParameter.RowCount > 0)
            {    
                sapUserResult = new SAPUser();
                sapUserResult.Nom = UserParameter.Rows[0]["NOM"].ToString();
                sapUserResult.Prenom = UserParameter.Rows[0]["PRENOM"].ToString();
                sapUserResult.Poste = UserParameter.Rows[0]["POSTE"].ToString();
                sapUserResult.Fonction = UserParameter.Rows[0]["FONCTION"].ToString();
            }
         }
        catch (Exception ex)
        { 
         return null; 
        }
        finally  
        { 
           _con.Close(); 
        }
       return sapUserResult;
    }
}//

步骤 3:创建 Windows Phone 应用程序:  

现在我们需要创建一个 Windows Phone 应用程序来使用我们的 Web 服务。 为此,打开 Microsoft Visual Studio Express 2010 并打开一个新项目。 从打开的窗口中选择 Visual C# ==> "Silverlight for Windows Phone",输入名称 "WPUserSAPConnection"。 完成此操作后,您将找到项目资源管理器。 右键单击并添加我们的 Web 引用(为此,必须发布在步骤 2 中创建的 Web 服务)。 在 Web 引用地址中输入在步骤 2 中创建的 WSDL 地址。

现在让我们创建我们的 Windows Phone 界面。 为此,打开文件“*MainPage.xaml*”,并添加两个区域,用于 SAP 登录名和 SAP 密码。 对于结果,我们需要三个标签:用户名字、姓氏、职位。

打开工具箱并拖动以下控件:   

  1. 按钮 – 将文本属性更改为“登录” 
  2. 两个文本框,用于登录名和密码,请注意,对于密码文本框,类型属性为密码
  3. 四个文本标签 – 1. 名字 2. 姓氏 3. 职位 4. 职位。 

 添加代码后台 

对于我的按钮登录事件点击,这是我的代码。 

private void btnLogin_Click(object sender, RoutedEventArgs e)
{
    SAPService.Service1SoapClient service = new SAPService.Service1SoapClient();
    service.GET_SAP_USERAsync(txtLogin.Text, txtPassword.Password);
    service.GET_SAP_USERCompleted += 
      new EventHandler<SAPService.GET_SAP_USERCompletedEventArgs>(GET_SAP_USERCompleted);
}
private void GET_SAP_USERCompleted(object obj, SAPService.GET_SAP_USERCompletedEventArgs e)
{
    lblFonction.Visibility = System.Windows.Visibility.Visible;
    lblNom.Visibility = System.Windows.Visibility.Visible;
    lblPoste.Visibility = System.Windows.Visibility.Visible;
    lblPrenom.Visibility = System.Windows.Visibility.Visible;
    textBlock3.Visibility = System.Windows.Visibility.Visible;
    textBlock4.Visibility = System.Windows.Visibility.Visible;
    textBlock5.Visibility = System.Windows.Visibility.Visible;
    textBlock6.Visibility = System.Windows.Visibility.Visible;
    lblNom.Text = e.Result.Nom.ToString();
    lblPrenom.Text = e.Result.Prenom;
    lblPoste.Text = e.Result.Poste;
    lblFonction.Text = e.Result.Fonction;
}

测试应用程序

 

结果

© . All rights reserved.