static void Main(string[] args) { Parser.Default.ParseArguments <Options>(args).WithParsed <Options>(o => { try { var version = RfcConnection.GetLibVersion(); Console.WriteLine($"currently loaded sapnwrfc library version : Major {version.MajorVersion}, Minor {version.MinorVersion}, patchLevel {version.PatchLevel}"); using (var conn = new RfcConnection(userName: o.UserName, password: o.Password, hostname: o.Hostname, client: o.Client)) { ParameterMapping(); conn.Open(); using (var func = conn.CallRfcFunction("BAPI_COMPANYCODE_GETLIST")) { func.Invoke(); var returnValue = func.GetOutputParameters <BapiCompanyOutputParameters>(); Console.WriteLine(String.Format("|{0,-20}|{1,-10}", "Company Code", "Company Name")); foreach (var row in returnValue.Details) { Console.WriteLine(String.Format("|{0,-20}|{1,-10}", row.CompanyCode, row.Name)); } } } } catch (Exception ex) { Console.WriteLine(ex.Message); throw; } }); }
public void Ping_NotConnected_ShouldReturnFalse() { var connection = new RfcConnection(_interopMock.Object, new RfcConnectionOption()); var pingResult = connection.Ping(); pingResult.Should().BeFalse(); }
public void Disconnect_NotConnected_ShouldNotDisconnect() { var connection = new RfcConnection(_interopMock.Object, new RfcConnectionOption()); connection.Disconnect(); RfcErrorInfo errorInfo; _interopMock.Verify(x => x.CloseConnection(It.IsAny <IntPtr>(), out errorInfo), Times.Never); }
public void SetPool_ShouldSuccess() { var alias = "Test"; var connection = new RfcConnection(_interopMock.Object, RfcConfigurationOption); var rfcConnectionPoolMock = new Mock <IRfcConnectionPool>(); rfcConnectionPoolMock.SetupProperty(p => p.ServerAlias, alias); connection.SetPool(rfcConnectionPoolMock.Object); connection.IsPooled.Should().BeTrue(); }
static void Main(string[] args) { Parser.Default.ParseArguments <Options>(args) .WithParsed <Options>(o => { try { ParameterMapping(); var version = RfcConnection.GetLibVersion(); Console.WriteLine($"currently loaded sapnwrfc library version : Major {version.MajorVersion}, Minor {version.MinorVersion}, patchLevel {version.PatchLevel}"); using (var conn = new RfcConnection(builder => builder .UseConnectionHost(o.Hostname) .UseLogonUserName(o.UserName) .UseLogonPassword(o.Password) .UseLogonClient(o.Client))) { conn.Open(); using (var func = conn.CallRfcFunction("RFC_READ_TABLE")) { var inParams = new RfcParametersInput { QueryTable = "T001", Delimiter = ";", No_Data = "", RowCount = 0, RowSkips = 0 }; func.Invoke(inParams); var result = func.GetOutputParameters <RfcParametersOutput>(); if (result.Data == null) { Console.WriteLine("No Data"); } foreach (var r in result.Data) { Console.WriteLine(r.Wa); } } } } catch (Exception ex) { Console.WriteLine(ex.Message); throw ex; } }); }
static void Main(string[] args) { Parser.Default.ParseArguments <Options>(args) .WithParsed <Options>(o => { try { ParameterMapping(); var version = RfcConnection.GetLibVersion(); Console.WriteLine($"currently loaded sapnwrfc library version : Major {version.MajorVersion}, Minor {version.MinorVersion}, patchLevel {version.PatchLevel}"); using (var conn = new RfcConnection(builder => builder .UseConnectionHost(o.Hostname) .UseLogonUserName(o.UserName) .UseLogonPassword(o.Password) .UseLogonClient(o.Client))) { conn.Open(); using (var func = conn.CallRfcFunction("BAPI_GL_GETGLACCPERIODBALANCES")) { var inParams = new BapiParametersInput { CompanyCode = o.Company, CurrencyType = "10", // document Currency FiscalYear = o.FiscalYear, GlAccount = o.GlAccount }; func.Invoke(inParams); var result = func.GetOutputParameters <BapiParametersOutput>(); Console.WriteLine(String.Format("|{0,-6}|{1,-6}|{2,-10}|{3,-10}", "Company", "Period", "Debit", "Credit")); foreach (var row in result.Detail) { Console.WriteLine(String.Format("|{0,-6}|{1,-6}|{2,-10}|{3,-10}", row.CompanyCode, row.FiscalPeriod, row.TotalCredit.ToString(), row.TotalDebit.ToString() ));; } } } } catch (Exception ex) { Console.WriteLine(ex.Message); throw ex; } }); }
public void Connect_ConnectionSucceeds_ShouldOpenConnection() { var parameters = new RfcConnectionOption { AppServerHost = "my-server.com" }; var connection = new RfcConnection(_interopMock.Object, parameters); connection.Connect(); RfcErrorInfo errorInfo; _interopMock.Verify(x => x.OpenConnection(It.IsAny <RfcConnectionParameter[]>(), 1, out errorInfo), Times.Once); }
public void TestConnectionString() { var connection = new RfcConnection(connectionString: "Server=server_name; lang=en; user=testUser;pwd=secret"); var rfcParms = connection.ConnectionParameters; Assert.Equal(4, rfcParms.Count); Assert.Contains(rfcParms, r => r.Key == "ASHOST" && r.Value == "server_name"); Assert.Contains(rfcParms, r => r.Key == "lang" && r.Value == "en"); Assert.Contains(rfcParms, r => r.Key == "user" && r.Value == "testUser"); Assert.Contains(rfcParms, r => r.Key == "passwd" && r.Value == "secret"); }
public void Connect_ConnectionSucceeds_ShouldOpenConnection() { var alias = RfcConfiguration.DefaultServer; var configuration = RfcConfiguration.RfcServers.First(x => x.Alias == alias); uint counter = GetRfcConnectionOptionPropertyCount(configuration.ConnectionOptions); var connection = new RfcConnection(_interopMock.Object, RfcConfigurationOption); connection.Connect(); RfcErrorInfo errorInfo; _interopMock.Verify(x => x.OpenConnection(It.IsAny <RfcConnectionParameter[]>(), counter, out errorInfo), Times.Once); }
public void Connect_ConnectionFailed_ShouldThrow() { var connection = new RfcConnection(_interopMock.Object, new RfcConnectionOption()); var errorInfo = new RfcErrorInfo { Code = RfcResultCodes.RFC_TIMEOUT }; _interopMock .Setup(x => x.OpenConnection(It.IsAny <RfcConnectionParameter[]>(), It.IsAny <uint>(), out errorInfo)); Action action = () => connection.Connect(); action.Should().Throw <RfcException>().WithMessage("SAP RFC Error: RFC_TIMEOUT"); }
public void CreateFunctionMetaData_ShouldReturnIRfcFunctionMetaData() { var connection = new RfcConnection(_interopMock.Object, RfcConfigurationOption); RfcErrorInfo errorInfo; _interopMock .Setup(x => x.GetFunctionDesc(It.IsAny <IntPtr>(), It.IsAny <string>(), out errorInfo)) .Returns(FunctionDescriptionHandle); var functionName = "TEST"; IRfcFunctionMetaData functionMetaData = connection.CreateFunctionMetaData(functionName); functionMetaData.Should().NotBeNull(); }
public void Disconnect_Connected_ShouldDisconnect() { var connection = new RfcConnection(_interopMock.Object, new RfcConnectionOption()); RfcErrorInfo errorInfo; _interopMock .Setup(x => x.OpenConnection(It.IsAny <RfcConnectionParameter[]>(), It.IsAny <uint>(), out errorInfo)) .Returns(RfcConnectionHandle); connection.Connect(); connection.Disconnect(); _interopMock.Verify(x => x.CloseConnection(RfcConnectionHandle, out errorInfo), Times.Once); }
public void TestConnectionUri() { var connection = new RfcConnection(connectionUri: new Uri($"sap://user=testUser;pass=secret;l=EN;cl=001@A/test_server?rfcsdktrace=ON")); var rfcParms = connection.ConnectionParameters; Assert.Equal(6, rfcParms.Count); Assert.Contains(rfcParms, r => r.Key == "ASHOST" && r.Value == "test_server"); Assert.Contains(rfcParms, r => r.Key == "lang" && r.Value == "EN"); Assert.Contains(rfcParms, r => r.Key == "user" && r.Value == "testUser"); Assert.Contains(rfcParms, r => r.Key == "passwd" && r.Value == "secret"); Assert.Contains(rfcParms, r => r.Key == "client" && r.Value == "001"); Assert.Contains(rfcParms, r => r.Key == "trace" && r.Value == "1"); }
public void Dispose_ShouldDisconnectFunction() { RfcErrorInfo errorInfo; var connection = new RfcConnection(_interopMock.Object, RfcConfigurationOption); _interopMock .Setup(x => x.OpenConnection(It.IsAny <RfcConnectionParameter[]>(), It.IsAny <uint>(), out errorInfo)) .Returns(RfcConnectionHandle); _interopMock.Setup(x => x.CloseConnection(It.IsAny <IntPtr>(), out errorInfo)).Returns(RfcResultCodes.RFC_OK); connection.Connect(); connection.Dispose(); _interopMock.Verify(x => x.CloseConnection(RfcConnectionHandle, out errorInfo), Times.Once); }
static void Main(string[] args) { Parser.Default.ParseArguments <Options>(args) .WithParsed <Options>(o => { try { ParameterMapping(); var version = RfcConnection.GetLibVersion(); Console.WriteLine($"currently loaded sapnwrfc library version : Major {version.MajorVersion}, Minor {version.MinorVersion}, patchLevel {version.PatchLevel}"); using (var conn = new RfcConnection(userName: o.UserName, password: o.Password, hostname: o.Hostname, client: o.Client)) { conn.Open(); using (var func = conn.CallRfcFunction("BAPI_CUSTOMER_GETLIST")) { var inParams = new ListCustomersInputParameters { MaxRows = 10, Range = new IdRange[] { new IdRange() { Sign = "I", Option = "BT", High = "ZZZZZZZZZZ" } } }; func.Invoke(inParams); var returnValue = func.GetOutputParameters <ListCustomersOutputParameters>(); Console.WriteLine(String.Format("|{0,-20}|{1,-10}", "Customer Number", "Customer Name")); foreach (var row in returnValue.Addresses) { Console.WriteLine(String.Format("|{0,-20}|{1,-10}", row.CustomerId, row.Name)); } } } } catch (Exception ex) { Console.WriteLine(ex.Message); throw ex; } }); }
static void Main(string[] args) { Parser.Default.ParseArguments <Options>(args) .WithParsed <Options>(o => { try { ParameterMapping(); var version = RfcConnection.GetLibVersion(); Console.WriteLine($"currently loaded sapnwrfc library version : Major {version.MajorVersion}, Minor {version.MinorVersion}, patchLevel {version.PatchLevel}"); using (var conn = new RfcConnection(builder => builder .UseConnectionHost(o.Hostname) .UseLogonUserName(o.UserName) .UseLogonPassword(o.Password) .UseLogonClient(o.Client))) { conn.Open(); using (var func = conn.CallRfcFunction("BAPI_CUSTOMER_GETDETAIL2")) { var inParams = new CustomerDataInput { Customer = o.Customer }; func.Invoke(inParams); var result = func.GetOutputParameters <CustomerDataOutput>(); Console.WriteLine(String.Format("|{0,-20}|{1,-20}|{2,-20}|{3,-20}", "Customer Number", "Create Date", "Confirm Date", "Confirm Time")); Console.WriteLine(String.Format("|{0,-20}|{1,-20}|{2,-20}|{3,-20}", result.Detail.Customer, result.Detail.CreateDate?.ToString("yyyy-MM-dd") ?? "Not Defined", result.Detail?.ConfirmDate?.ToString("yyyy-MM-dd") ?? "Not Defined", result.Detail?.ConfirmationTime?.ToString() ?? "Not Defined") ); } } } catch (Exception ex) { Console.WriteLine(ex.Message); throw ex; } }); }
public void Dispose_DisconnectionFailed_ShouldNotThrow() { var connection = new RfcConnection(_interopMock.Object, new RfcConnectionOption()); RfcErrorInfo errorInfo; _interopMock .Setup(x => x.OpenConnection(It.IsAny <RfcConnectionParameter[]>(), It.IsAny <uint>(), out errorInfo)) .Returns(RfcConnectionHandle); _interopMock .Setup(x => x.CloseConnection(It.IsAny <IntPtr>(), out errorInfo)) .Returns(RfcResultCodes.RFC_CANCELED); connection.Connect(); Action action = () => connection.Dispose(); action.Should().NotThrow(); }
public void Ping_Connected_PingTimeout_ShouldReturnFalse() { RfcErrorInfo errorInfo; _interopMock .Setup(x => x.OpenConnection(It.IsAny <RfcConnectionParameter[]>(), It.IsAny <uint>(), out errorInfo)) .Returns(RfcConnectionHandle); _interopMock .Setup(x => x.Ping(RfcConnectionHandle, out errorInfo)) .Returns(RfcResultCodes.RFC_TIMEOUT); var connection = new RfcConnection(_interopMock.Object, new RfcConnectionOption()); connection.Connect(); var pingResult = connection.Ping(); pingResult.Should().BeFalse(); }
public void Ping_Connected_SuccessfulPing_ShouldReturnTrue() { RfcErrorInfo errorInfo; _interopMock .Setup(x => x.OpenConnection(It.IsAny <RfcConnectionParameter[]>(), It.IsAny <uint>(), out errorInfo)) .Returns(RfcConnectionHandle); _interopMock .Setup(x => x.Ping(RfcConnectionHandle, out errorInfo)) .Returns(RfcResultCodes.RFC_OK); var connection = new RfcConnection(_interopMock.Object, RfcConfigurationOption); connection.Connect(); var pingResult = connection.Ping(); pingResult.Should().BeTrue(); }
public void CreateTransaction_ShouldReturnIRfcTransaction() { var connection = new RfcConnection(_interopMock.Object, RfcConfigurationOption); RfcErrorInfo errorInfo; string tid; _interopMock .Setup(x => x.GetTransactionId(It.IsAny <IntPtr>(), out tid, out errorInfo)) .Returns(RfcResultCodes.RFC_OK); _interopMock .Setup(x => x.CreateTransaction(It.IsAny <IntPtr>(), It.IsAny <string>(), It.IsAny <string>(), out errorInfo)) .Returns(TransactionHandle); IRfcTransaction transaction = connection.CreateTransaction(); transaction.Should().NotBeNull(); }
static void Main(string[] args) { Parser.Default.ParseArguments <Options>(args) .WithParsed(o => { var version = RfcConnection.GetLibVersion(); Console.WriteLine($"currently loaded sapnwrfc library version : Major {version.MajorVersion}, Minor {version.MinorVersion}, patchLevel {version.PatchLevel}"); /** * Use the connection builder fluent api. */ using (var conn = new RfcConnection(builder => builder .UseConnectionHost(o.Hostname) .UseLogonUserName(o.UserName) .UseLogonPassword(o.Password) .UseLogonClient(o.Client))) { conn.Open(); conn.Ping(); // do something more interesting here... } /** * Use the connection string api. */ using (var conn = new RfcConnection(connectionString: $"Server={o.Hostname}; Uid={o.UserName}; Passwd={o.Password}; Client={o.Client}")) { conn.Open(); conn.Ping(); // do something more interesting here... } /** * Use the connection uri api. */ using (var conn = new RfcConnection(connectionUri: new Uri($"sap://user={ Uri.EscapeDataString(o.UserName) };passwd={ Uri.EscapeDataString(o.Password) };client={o.Client}@A/{o.Hostname}"))) { conn.Open(); conn.Ping(); // do something more interesting here... } }); }
public void IsValid_ConnectionHandleInvalid_ShouldReturnFalse() { var connection = new RfcConnection(_interopMock.Object, new RfcConnectionOption()); int isValidValue = 0; RfcErrorInfo errorInfo; _interopMock .Setup(x => x.OpenConnection(It.IsAny <RfcConnectionParameter[]>(), It.IsAny <uint>(), out errorInfo)) .Returns(RfcConnectionHandle); _interopMock .Setup(x => x.IsConnectionHandleValid(RfcConnectionHandle, out isValidValue, out errorInfo)) .Returns(RfcResultCodes.RFC_OK); connection.Connect(); var isValid = connection.IsValid; isValid.Should().BeFalse(); }
public void IsConnected_Connected_ShouldReturnTrue() { var connection = new RfcConnection(_interopMock.Object, RfcConfigurationOption); RfcErrorInfo errorInfo; _interopMock .Setup(x => x.OpenConnection(It.IsAny <RfcConnectionParameter[]>(), It.IsAny <uint>(), out errorInfo)) .Returns(RfcConnectionHandle); int isValid = 1; _interopMock .Setup(x => x.IsConnectionHandleValid(RfcConnectionHandle, out isValid, out errorInfo)) .Returns(RfcResultCodes.RFC_OK); connection.Connect(); bool isConnected = connection.IsValid; isConnected.Should().BeTrue(); }
public void IsConnected_ConnectedButLibrarySaysWereDisconnected_ShouldReturnFalse() { var connection = new RfcConnection(_interopMock.Object, new RfcConnectionOption()); RfcErrorInfo errorInfo; _interopMock .Setup(x => x.OpenConnection(It.IsAny <RfcConnectionParameter[]>(), It.IsAny <uint>(), out errorInfo)) .Returns(RfcConnectionHandle); int isValid = 0; _interopMock .Setup(x => x.IsConnectionHandleValid(RfcConnectionHandle, out isValid, out errorInfo)) .Returns(RfcResultCodes.RFC_OK); connection.Connect(); bool isConnected = connection.IsValid; isConnected.Should().BeFalse(); }
public void Disconnect_DisconnectionFailed_ShouldThrowException() { // Arrange var connection = new RfcConnection(_interopMock.Object, new RfcConnectionOption()); RfcErrorInfo errorInfo; _interopMock .Setup(x => x.OpenConnection(It.IsAny <RfcConnectionParameter[]>(), It.IsAny <uint>(), out errorInfo)) .Returns(RfcConnectionHandle); _interopMock .Setup(x => x.CloseConnection(It.IsAny <IntPtr>(), out errorInfo)) .Returns(RfcResultCodes.RFC_CANCELED); connection.Connect(); // Act Action action = () => connection.Disconnect(); // Assert action.Should().Throw <RfcException>() .WithMessage("SAP RFC Error: RFC_CANCELED"); }