最近需要对接SAP接口,发现几个小问题总结下
1、RFC调用使用WEB程序部署时容易出现错误
IDestinationConfiguration ID = new RFC_SetUp();
RfcDestinationManager.RegisterDestinationConfiguration(ID);
RfcDestination destination = RfcDestinationManager.GetDestination("SAPMS");
RfcRepository repository = destination.Repository;
IRfcFunction rfcFunction = repository.CreateFunction("BAPI_USER_GET_DETAIL");
IIS 部署完成,第一次初始化的时候需要配置ID需要执行 “” RfcDestinationManager.RegisterDestinationConfiguration(ID);“”
第二次访问是就不需要配置注册ID,所以就需要加个判断。
以上问题再CS端直接调用不会产生,只有IIS端部署会出现这种问题。
/// <summary> /// RFC的连接配置 /// </summary> public class RFC_SetUp : IDestinationConfiguration { RFC_Parameters_Model rfc_Parameters = new RFC_Parameters_Model(); public RfcConfigParameters GetParameters(string destinationName) { if (destinationName.Equals("SAPMS")) { RfcConfigParameters rfcParams = new RfcConfigParameters(); rfc_Parameters = Configuration_RFC();//获取连接参数 rfcParams.Add(RfcConfigParameters.AppServerHost, ConfigurationManager.AppSettings["RFC_AppServerHost"]); rfcParams.Add(RfcConfigParameters.SystemNumber, ConfigurationManager.AppSettings["RFC_SystemNumber"]); rfcParams.Add(RfcConfigParameters.User, ConfigurationManager.AppSettings["RFC_User"]); rfcParams.Add(RfcConfigParameters.Password, ConfigurationManager.AppSettings["RFC_Password"]); rfcParams.Add(RfcConfigParameters.Client, ConfigurationManager.AppSettings["RFC_Client"]); rfcParams.Add(RfcConfigParameters.Language, ConfigurationManager.AppSettings["RFC_Language"]); rfcParams.Add(RfcConfigParameters.PoolSize, ConfigurationManager.AppSettings["RFC_PoolSize"]); rfcParams.Add(RfcConfigParameters.MaxPoolSize, ConfigurationManager.AppSettings["RFC_MaxPoolSize"]); rfcParams.Add(RfcConfigParameters.IdleTimeout, ConfigurationManager.AppSettings["RFC_IdleTimeout"]); return rfcParams; } else { return null; } } public bool ChangeEventsSupported() { return false; } public event RfcDestinationManager.ConfigurationChangeHandler ConfigurationChanged; private RFC_Parameters_Model Configuration_RFC() { rfc_Parameters.RFC_AppServerHost = ConfigurationManager.AppSettings["RFC_AppServerHost"]; rfc_Parameters.RFC_SystemNumber = ConfigurationManager.AppSettings["RFC_SystemNumber"]; rfc_Parameters.RFC_User = ConfigurationManager.AppSettings["RFC_User"]; rfc_Parameters.RFC_Password = ConfigurationManager.AppSettings["RFC_Password"]; rfc_Parameters.RFC_Client = ConfigurationManager.AppSettings["RFC_Client"]; rfc_Parameters.RFC_Language = ConfigurationManager.AppSettings["RFC_Language"]; rfc_Parameters.RFC_PoolSize = ConfigurationManager.AppSettings["RFC_PoolSize"]; rfc_Parameters.RFC_MaxPoolSize = ConfigurationManager.AppSettings["RFC_MaxPoolSize"]; rfc_Parameters.RFC_IdleTimeout = ConfigurationManager.AppSettings["RFC_IdleTimeout"]; return rfc_Parameters; } }
/// <summary> /// 连接SAP /// </summary> public class RFC_Connection { IDestinationConfiguration ID; public RfcDestination dest; public RfcRepository repository; /// <summary> /// 测试连接SAP /// </summary> /// <returns></returns> public string ConnSap() { String message = ""; bool result = false; try { IDestinationConfiguration ID = new RFC_SetUp(); if (RfcDestinationManager.TryGetDestination("SAPMS") == null) { RfcDestinationManager.RegisterDestinationConfiguration(ID); } RfcDestination destination = RfcDestinationManager.GetDestination("SAPMS"); RfcRepository repository = destination.Repository; IRfcFunction rfcFunction = repository.CreateFunction("BAPI_USER_GET_DETAIL"); rfcFunction.SetValue("USERNAME", "USER"); rfcFunction.Invoke(destination); message += rfcFunction.GetValue("LOGONDATA").ToString() + " "; message += rfcFunction.GetValue("DEFAULTS").ToString() + " "; message += rfcFunction.GetValue("ADDRESS").ToString() + " "; message += rfcFunction.GetValue("COMPANY").ToString() + " "; message += rfcFunction.GetValue("SNC").ToString() + " "; message += rfcFunction.GetValue("REF_USER").ToString() + " "; message += rfcFunction.GetValue("ALIAS").ToString() + " "; message += rfcFunction.GetValue("UCLASS").ToString() + " "; message += rfcFunction.GetValue("LASTMODIFIED").ToString() + " "; message += rfcFunction.GetValue("ISLOCKED").ToString() + " "; message += rfcFunction.GetValue("IDENTITY").ToString() + " "; message += rfcFunction.GetValue("ADMINDATA").ToString() + " "; message += rfcFunction.GetValue("DESCRIPTION").ToString() + " "; } catch (Exception ex) { message = ex.Message; } finally { if (ID != null) { RfcDestinationManager.RegisterDestinationConfiguration(ID); RfcDestinationManager.UnregisterDestinationConfiguration(ID); } } return message; } }
2、IIS部署需要兼容32位