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

       .NET连接SAP系统专题:C#调用RFC中文乱码解决办法(十二)_C#

       看到这个乱码我还以为是出了什么异常,因为系统抛出异常类是: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(繁体),于是系统正确提示了信息:

       .NET连接SAP系统专题:C#调用RFC中文乱码解决办法(十二)_C#_02

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

       .NET连接SAP系统专题:C#调用RFC中文乱码解决办法(十二)_C#_03

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

       PS:.NET连接SAP系统专题 就到此结束了。欢迎各位朋友一起交流指正...