zoukankan      html  css  js  c++  java
  • .NET连接SAP系统专题:C#(NCO3)调用BAPI的代码(七)

         上面博文可知BAPI_USER_CREATE的一些结构和参数。所以在C#中要调用它就很清楚了要输入哪些参数了。

          1、首先引用dll,然后在程序开头:using SAP.Middleware.Connector;

          2、接下去就是设置登陆参数了,以前相关博文都有说明:

          public class MyBackendConfig : IDestinationConfiguration

            {

                public RfcConfigParameters GetParameters(String destinationName)

                {

                    if ("PRD_000".Equals(destinationName))

                    {

                        RfcConfigParameters parms = new RfcConfigParameters();

                        parms.Add(RfcConfigParameters.AppServerHost, "192.168.1.3");

                        parms.Add(RfcConfigParameters.SystemNumber, "00");

                        parms.Add(RfcConfigParameters.User, "MENGXIN");

                        parms.Add(RfcConfigParameters.Password, "5239898");

                        parms.Add(RfcConfigParameters.Client, "888");

                        parms.Add(RfcConfigParameters.Language, "ZH");

                        parms.Add(RfcConfigParameters.PoolSize, "5");

                        parms.Add(RfcConfigParameters.MaxPoolSize, "10");

                        parms.Add(RfcConfigParameters.IdleTimeout, "60");

                        return parms;

                    }

                    else return null;

                }

                public bool ChangeEventsSupported()

                {

                    return false;

                }

                public event RfcDestinationManager.ConfigurationChangeHandler ConfigurationChanged;

            }

            3、设置一个方法,引用这个登陆参数的类:

            public void nco()

            {

                IDestinationConfiguration ID = new MyBackendConfig();

                RfcDestinationManager.RegisterDestinationConfiguration(ID);

                RfcDestination prd = RfcDestinationManager.GetDestination("PRD_000");

                RfcDestinationManager.UnregisterDestinationConfiguration(ID);

                nco(prd);

            }

            4、然后就是开始了调用代码,以下代码全部放出,然后一行一行说明:

            public void nco(RfcDestination prd)

            {

                //选择要调用的BAPI的名称

                RfcFunctionMetadata BAPI_COMPANYCODE_GETDETAIL_MD = prd.Repository.GetFunctionMetadata("BAPI_USER_CREATE");

                //新建调用该BAPI的一个“实例”

                IRfcFunction function = null;

                function = BAPI_COMPANYCODE_GETDETAIL_MD.CreateFunction();

                //因为用户名称是一个字段,所以直接赋予字符串即可

                function.SetValue("USERNAME", USERID.Text.Trim());

                //接下去是密码。因为密码是一个结构,该结构只有一个栏位,所以这里先获取这个密码结构

                IRfcStructure PWD = function.GetStructure("PASSWORD");

                //设置这个结构中的这个栏位的内容

                PWD.SetValue("BAPIPWD", password.Text.Trim());

                //再把这个结构传进去给作为密码参数

                function.SetValue("PASSWORD", PWD);

                //这个是登陆信息,类型也是一个结构,所以这里获取出这个登录信息的结构出来

                IRfcStructure logo = function.GetStructure("LOGONDATA");

                //以下两个是设置这个登陆结构的一些栏位的值

                logo.SetValue("GLTGV", "20110821");

                logo.SetValue("GLTGB", "99991231");

                //将登陆信息的结构传进去给LOGONDATA

                function.SetValue("LOGONDATA", logo);   //设置参数

                //这个是地址信息,取结构,然后赋值,再将它传进去

                IRfcStructure address = function.GetStructure("ADDRESS");

                address.SetValue("FIRSTNAME", firstname.Text.Trim());

                address.SetValue("LASTNAME", lastname.Text.Trim());

                address.SetValue("DEPARTMENT", "资讯室");

                function.SetValue("ADDRESS", address);   //设置参数

                //以下这个DEFAULTS是账户的默认信息,不是必须要的。我们这里利用它设置登入账户的语言为ZH

                IRfcStructure DEFAULTS = function.GetStructure("DEFAULTS");

                DEFAULTS.SetValue("LANGU", "1");  //语言代码,对应简体中文

                function.SetValue("DEFAULTS", DEFAULTS);

                //以下这个是RETURN,是回传结果的结构。记住,这里跟上面不一样,上面是Structure,这里则是Table!!

                IRfcTable returnStructure = function.GetTable("RETURN");

                function.Invoke(prd);//提交调用BAPI   

                //弹出对话框显示调用结果

                MessageBox.Show(returnStructure.GetString("MESSAGE").ToString());            

                prd = null;

            }

            5、程序运行结果如下:

                      

                6、登陆到SAP,运行SU01,输入IT_XM01,看看结果:

                

                

                

                当然,如果该用户已经存在了你还去调用这个BAPI生成用户,系统会很知趣的提示:

                

                使用IT_XM01登陆系统,一切OK,系统状态如下:

                

               新建的账户一点权限也没有的,此时可以调用其他BAPI对其新增权限!!方法有点不太一样,需要传入一个表格作为参数,下篇博文放出。

  • 相关阅读:
    安卓四核PDA手持PDA智能POS机 打印二维码 分享
    安卓智能POS开单神器-成为零售批发商亲睐的生意帮手-pda销售扫描开单 现场结算打印凭据
    一个神奇的POS -扫描 现场销售 开单打印票据 安卓物联网POS机 手持开单终端机 省时省力 高效准确!!
    浩瀚土石方车辆管理计数器_刷卡计数器手持式土石方车辆计数器系统方案
    浩瀚ocr数字识别扫描枪 进口冻货抄码器 抄码器 牛羊肉 抄码器 抄码抄码枪 扫码器重量累加
    浩瀚抄码器 冻品扫码枪 扫码机识别数字 进口肉抄码器 牛羊抄码器 冻品抄码
    浩瀚牛肉扫码器 牛羊肉抄码 进口牛肉扫码枪 进口牛羊肉扫码机 抄码系统
    多进程
    不定长参数和进程
    面向对象进阶2
  • 原文地址:https://www.cnblogs.com/saper/p/2153841.html
Copyright © 2011-2022 走看看