.NET 调用 SAP RFC 乱码问题解决方法!

来源:互联网 发布:美洲文明落后知乎 编辑:程序博客网 时间:2024/06/06 08:41

 

根据梦心的文章,我原来的程序只需要加入 CodePage 这句就行了。

SapLogin.codePage = "8400"

 

  以下为转载 梦心的文章:

   上周TW总公司的IT按照董事长的指示,但凡杂项请购单里面内部订单号如果没有开立开发执行单的需做卡控,限制开单。于是TW IT就在系统画面ME51N里面做了用户出口开发,如果系统检测到内部订单没有开发执行单,则提示并不继续往下。因为TW那边的卡控文字说明是繁体的,所以OA调用了RFC申请开立请购单之后就会返回这个错误信息,而且是乱码,如下图:

       

       看到这个乱码我还以为是出了什么异常,因为系统抛出异常类是:RfcCommunicationException,到处找原因,搞得满头包。后面只好到正式环境试着用OA的数据开立请购单试试,结果系统提示开发执行单不存在,这才知道原因所在,因此对这个乱码感到很费劲,于是解决之。

       我们在调用RFC前的配置信息里面可以规定编码,如下红字所示:      

       

复制代码
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, "×××");                    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");                    parms.Add(RfcConfigParameters.Codepage, "8300");                    return parms;                }                else return null;            }            public bool ChangeEventsSupported()            {                return false;            }            public event RfcDestinationManager.ConfigurationChangeHandler ConfigurationChanged;        }
复制代码

 

       这样规定了这个编码为8300(繁体),于是系统正确提示了信息:

       

       关于这个Codepage的代码含义,如下表:       

       

        至此,乱码问题完全解决~