Пример #1
0
        public SapResult <DataTable> GetTable(string tableName, int rowSkips = 0, int rowCount = 0)
        {
            var result = new SapResult <DataTable>();

            try
            {
                using (var conn = new SapConnection(_destinationName))
                {
                    // NOTE: https://www.sapdatasheet.org/abap/func/rfc_read_table.html
                    var rfcFunction = conn.Repository.CreateFunction("RFC_READ_TABLE");
                    rfcFunction.SetValue("QUERY_TABLE", tableName);
                    rfcFunction.SetValue("DELIMITER", DATA_SEPARATOR);
                    rfcFunction.SetValue("ROWSKIPS", rowSkips);
                    rfcFunction.SetValue("ROWCOUNT", rowCount);
                    rfcFunction.Invoke(conn.Destination);

                    var fields = rfcFunction.GetTable("FIELDS");
                    var datas  = rfcFunction.GetTable("DATA");
                    var table  = ToTable(tableName, fields, datas);

                    result.Export = table;
                }
            }
            catch (Exception ex)
            {
                result.AddError(ex);
            }

            return(result);
        }
Пример #2
0
        public static dynamic ExecuteBAPI(InputBAPI Input)
        {
            DataSet resultDataSet;
            Dictionary <String, String> connectionParams = new Dictionary <string, string>();

            String[] connectionStringArray = Input.ConnectionString.Split(';');

            foreach (String configEntry in connectionStringArray)
            {
                connectionParams.Add(configEntry.TrimEnd().TrimStart().Split('=')[0], configEntry.TrimEnd().TrimStart().Split('=')[1]);
            }

            using (var connection = new SapConnection(connectionParams))
            {
                connection.Open();

                var command = new SapCommand(Input.BAPIName, connection);

                foreach (Parameter param in Input.Parameters)
                {
                    command.Parameters.Add(param.Name, param.Value);
                }

                resultDataSet = command.ExecuteDataSet();
            }

            return(JToken.FromObject(resultDataSet));
        }
Пример #3
0
        public SapResult <List <FunctionModel> > GetFunctions(string functionName)
        {
            var result = new SapResult <List <FunctionModel> >();

            try
            {
                using (var conn = new SapConnection(_destinationName))
                {
                    // NOTE: https://www.sapdatasheet.org/abap/func/rfc_function_search.html
                    var rfcFunction = conn.Repository.CreateFunction("RFC_FUNCTION_SEARCH");
                    rfcFunction.SetValue("FUNCNAME", functionName);
                    rfcFunction.SetValue("LANGUAGE", "KO");
                    rfcFunction.Invoke(conn.Destination);

                    var functions = rfcFunction.GetTable("FUNCTIONS");
                    foreach (var function in functions)
                    {
                        result.Export.Add(new FunctionModel
                        {
                            Name        = function.GetString("FUNCNAME"),
                            Group       = function.GetString("GROUPNAME"),
                            Application = function.GetString("APPL"),
                            RemoteHost  = function.GetString("HOST"),
                            ShortText   = function.GetString("STEXT")
                        });
                    }
                }
            }
            catch (Exception ex)
            {
                result.AddError(ex);
            }

            return(result);
        }
Пример #4
0
        public void Ping_NotConnected_ShouldReturnFalse()
        {
            // Arrange
            var connection = new SapConnection(_interopMock.Object, new SapConnectionParameters());

            // Act
            var pingResult = connection.Ping();

            // Assert
            pingResult.Should().BeFalse();
        }
Пример #5
0
        public SapResult <List <ParameterModel> > GetFunctionParameters(string functionName)
        {
            var result = new SapResult <List <ParameterModel> >();

            try
            {
                using (var conn = new SapConnection(_destinationName))
                {
                    var parameters = new List <ParameterModel>();
                    var meta       = conn.Repository.GetFunctionMetadata(functionName);
                    for (int i = 0; i < meta.ParameterCount; i++)
                    {
                        StructureModel structureModel = null;
                        if (meta[i].DataType == RfcDataType.STRUCTURE)
                        {
                            string structureName = meta[i].ValueMetadataAsStructureMetadata.Name;
                            structureModel = LoadStructureMetadata(conn.Repository, structureName);
                        }
                        else if (meta[i].DataType == RfcDataType.TABLE)
                        {
                            string structureName = meta[i].ValueMetadataAsTableMetadata.LineType.Name;
                            structureModel = LoadStructureMetadata(conn.Repository, structureName);
                        }

                        var parameter = new ParameterModel()
                        {
                            Name          = meta[i].Name,
                            DataType      = meta[i].DataType.ToString(),
                            Direction     = meta[i].Direction.ToString(),
                            DefaultValue  = meta[i].DefaultValue,
                            Optional      = meta[i].Optional,
                            Documentation = meta[i].Documentation,
                            Structure     = structureModel
                        };

                        parameters.Add(parameter);
                    }

                    // 정렬순서
                    var sortOrder = new List <string>()
                    {
                        "IMPORT", "EXPORT", "CHANGING", "TABLES"
                    };

                    result.Export = parameters.OrderBy(x => sortOrder.IndexOf(x.Direction)).ToList();
                }
            }
            catch (Exception ex)
            {
                result.AddError(ex);
            }

            return(result);
        }
Пример #6
0
        public static void Run()
        {
            string connStr = "connectionstring";

            using var connection = new SapConnection(connStr);
            connection.Connect();

            using var someFunction = connection.CreateFunction("MySapfunction");
            var result = someFunction.Invoke <SomeFunctionResult>(new
            {
                VBELN = "partnumber",
            });
        }
Пример #7
0
        public void Disconnect_NotConnected_ShouldNotDisconnect()
        {
            // Arrange
            var connection = new SapConnection(_interopMock.Object, new SapConnectionParameters());

            // Act
            connection.Disconnect();

            // Assert
            RfcErrorInfo errorInfo;

            _interopMock.Verify(x => x.CloseConnection(It.IsAny <IntPtr>(), out errorInfo), Times.Never);
        }
Пример #8
0
        public IEnumerable <InputData> SelectBySerial(string ProdNo, object state = null)
        {
            var data = SapConnection.GetData(ProdNo);

            if (data.Count() == 0)
            {
                yield break;
            }

            foreach (var obj in data.SapAdaptWithSameProperties <InputData>())
            {
                yield return(obj);
            }
        }
Пример #9
0
        private SapCommand GetCommand(SapConnection connection)
        {
            var command = new SapCommand(_query.BapiName, connection);
            var parametersDictionary = GetParameters(_query.Parameters);

            if (parametersDictionary.HasItems())
            {
                foreach (var key in parametersDictionary.Keys)
                {
                    command.Parameters.Add(key, parametersDictionary[key]);
                }
            }

            return(command);
        }
Пример #10
0
        public void ReadListRfcTest()
        {
            using (SapConnection baglanti = this.GetConnection())
            {
                var result = baglanti.ExecuteFunction("ZBDT_SD_GRUP_TESLIMAT_BILGI", new
                {
                    I_VBELN_S = "8500016389",
                    I_VBELN_E = "8500016389"
                });
                List <ZTeslimat> teslimat = new List <ZTeslimat>();

                teslimat = result.GetTable <ZTeslimat>("T_LISTE").ToList();

                Assert.Equal(2, teslimat.Count());
            }
        }
    static void Main(string[] args)
    {
        SapConnection con = new SapConnection();

        RfcDestinationManager.RegisterDestinationConfiguration(con);
        RfcDestination dest       = RfcDestinationManager.GetDestination("NSP");
        RfcRepository  repo       = dest.Repository;
        IRfcFunction   fReadTable = repo.CreateFunction("ZSOMA");

        fReadTable.SetValue("I_NRO1", 1);
        fReadTable.SetValue("I_NRO2", 2);
        fReadTable.Invoke(dest);
        var result = fReadTable.GetValue("E_RESULT");

        Console.WriteLine(result.ToString());
        Console.ReadLine();
    }
Пример #12
0
        public void Disconnect_Connected_ShouldDisconnect()
        {
            // Arrange
            var          connection = new SapConnection(_interopMock.Object, new SapConnectionParameters());
            RfcErrorInfo errorInfo;

            _interopMock
            .Setup(x => x.OpenConnection(It.IsAny <RfcConnectionParameter[]>(), It.IsAny <uint>(), out errorInfo))
            .Returns(RfcConnectionHandle);

            connection.Connect();

            // Act
            connection.Disconnect();

            // Assert
            _interopMock.Verify(x => x.CloseConnection(RfcConnectionHandle, out errorInfo), Times.Once);
        }
Пример #13
0
        public void GetAttributes_GettingTheAttributesFails_ShouldThrowException()
        {
            // Arrange
            RfcAttributes rfcAttributes = Fixture.Create <RfcAttributes>();
            RfcErrorInfo  errorInfo;

            _interopMock
            .Setup(x => x.GetConnectionAttributes(It.IsAny <IntPtr>(), out rfcAttributes, out errorInfo))
            .Returns(RfcResultCode.RFC_CLOSED);
            var connection = new SapConnection(_interopMock.Object, new SapConnectionParameters());

            // Act
            Action action = () => connection.GetAttributes();

            // Assert
            action.Should().Throw <SapException>()
            .WithMessage("SAP RFC Error: RFC_CLOSED");
        }
Пример #14
0
        public void Connect_ConnectionFailed_ShouldThrow()
        {
            // Arrange
            var connection = new SapConnection(_interopMock.Object, new SapConnectionParameters());
            var errorInfo  = new RfcErrorInfo {
                Code = RfcResultCode.RFC_TIMEOUT
            };

            _interopMock
            .Setup(x => x.OpenConnection(It.IsAny <RfcConnectionParameter[]>(), It.IsAny <uint>(), out errorInfo));

            // Act
            Action action = () => connection.Connect();

            // Assert
            action.Should().Throw <SapException>()
            .WithMessage("SAP RFC Error: RFC_TIMEOUT");
        }
Пример #15
0
        public void Connect_ConnectionSucceeds_ShouldOpenConnection()
        {
            // Arrange
            var parameters = new SapConnectionParameters {
                AppServerHost = "my-server.com"
            };
            var connection = new SapConnection(_interopMock.Object, parameters);

            // Act
            connection.Connect();

            // Assert
            RfcErrorInfo errorInfo;

            _interopMock.Verify(
                x => x.OpenConnection(It.IsAny <RfcConnectionParameter[]>(), 1, out errorInfo),
                Times.Once);
        }
Пример #16
0
 static void Main(string[] args)
 {
     try
     {
         Console.WriteLine("/************************ rfc .net core support *************************");
         Console.WriteLine("   Author(s):   christ chang");
         Console.WriteLine("   Description: rfc .net core support");
         Console.WriteLine("   github: https://github.com/Nightstars/rfc_demo");
         Console.WriteLine("   thanks: huysentruitw and his work ");
         Console.WriteLine("************************************************************************/");
         //define connect string
         string connectionString = "AppServerHost=192.168.95.20; SystemNumber=00; User=ZBT_RFC; Password=Zbt_rfc123; Client=310; Language=ZH; PoolSize=5; Trace=8;";
         //structure rfc connection
         using var connection = new SapConnection(connectionString);
         //open rfc connection
         connection.Connect();
         //structure call function by rfc target fun
         using var someFunction = connection.CreateFunction("ZMDG_MDATA_INFO");
         //call remote rfc functon with input parameter constructor and get fun result
         rfc_demo.FunctionResult result = someFunction.Invoke <FunctionResult>(new FunctionParameters
         {
             Ibukrs = "1010",
             Iztype = "2",
             Izdata = "20200801",
             Iztime = "00:00:00"
         });
         //print result in console
         foreach (ZMDGS003 item in result.result)
         {
             Console.WriteLine(item.Mdata);
             Console.WriteLine(item.Meinst);
             Console.WriteLine(item.Groes);
             Console.WriteLine(item.Zspm);
             Console.WriteLine(item.Maktx);
             Console.WriteLine(item.Bukrs);
             Console.WriteLine();
         }
         Console.ReadKey();
     }catch (Exception e)
     {
         Console.WriteLine("Oh no: " + e.Message);
         Console.ReadKey();
     }
 }
Пример #17
0
        public ClassRfcReadTable SapReadTable(string query_table, string delimiter, string no_data, string fields, string filter)
        {
            SapLibrary.EnsureLibraryPresent();
            ClassRfcReadTable data = null;
            // System.Console.WriteLine("Starting...");
            var connectionString = ConfigurationManager.AppSettings["ConnectionString"];

            using var conn = new SapConnection(connectionString);
            conn.Connect();
            // Console.WriteLine("SAP Connction was opened...");
            ClassRfcReadTableInput fc = new ClassRfcReadTableInput();

            fc.QueryTable = query_table;
            fc.Delimiter  = delimiter;
            fc.NoData     = no_data;
            string[] af = fields.Split(',');
            fc.Fields = new RFC_DB_FLD[af.Length];
            for (int i = 0; i < af.Length; i++)
            {
                fc.Fields[i]           = new RFC_DB_FLD();
                fc.Fields[i].FieldName = af[i];
            }
            string[] ao = filter.Split(',');
            if (ao != null && ao.Length > 0)
            {
                fc.Options = new RFC_DB_OPT[ao.Length];
            }
            for (int i = 0; i < ao.Length; i++)
            {
                fc.Options[i] = new RFC_DB_OPT();
                if (!string.IsNullOrEmpty(ao[i]))
                {
                    if (ao[i].Length > 72)
                    {
                        throw new Exception("Error by rfc_read_table:; an option string is longer as 72 -> " + ao[i]);
                    }
                    fc.Options[i].Text = ao[i];
                }
            }
            using var func = conn.CreateFunction("RFC_READ_TABLE");
            data           = func.Invoke <ClassRfcReadTable>(fc);
            return(data);
        }
Пример #18
0
        private void btnCreate_Click(object sender, System.EventArgs e)
        {
            string path = CreateFolder(tbPath.Text, tbFunctionName.Text);

            SapParameter parameter = new SapParameter()
            {
                AppServerHost        = tbAppServerHost.Text,
                Client               = tbClient.Text,
                IdleTimeout          = tbIdleTimeout.Text,
                Language             = cbLanguage.SelectedText,
                Name                 = tbName.Text,
                Password             = tbPassword.Text,
                PeakConnectionsLimit = tbPeakConnectionsLimit.Text,
                PoolSize             = tbPoolSize.Text,
                SystemNumber         = tbSystemNumber.Text,
                User                 = tbUser.Text,
                FunctionName         = tbFunctionName.Text
            };



            IRfcFunction function = SapConnection.GetFunction(parameter);

            if (function != null)
            {
                List <SapClassModel> classBuilder = SapConnection.GetAllTablesClass(function);

                foreach (var sapClass in classBuilder)
                {
                    using (var tw = File.AppendText(path + sapClass.ClassName + ".cs"))
                    {
                        tw.WriteLine(sapClass.Builder.ToString());
                        tw.Close();
                    }
                }

                MessageBox.Show(@"Complete", @"Alert", MessageBoxButtons.OK);
            }
            else
            {
                MessageBox.Show(@"Not found function name", @"Alert", MessageBoxButtons.OK);
            }
        }
Пример #19
0
        private Tuple <IEnumerable <T1>, IEnumerable <T2>, IEnumerable <T3>, IEnumerable <T4>, IEnumerable <T5> > ListMultiple <T1, T2, T3, T4, T5>()
        {
            var quantity = this.GetTypeQuantity <T1, T2, T3, T4, T5>();

            this.ValidateQuery <T1, T2, T3, T4, T5>(quantity);

            var items1 = Enumerable.Empty <T1>();
            var items2 = Enumerable.Empty <T2>();
            var items3 = Enumerable.Empty <T3>();
            var items4 = Enumerable.Empty <T4>();
            var items5 = Enumerable.Empty <T5>();

            using (var connection = new SapConnection(GetConnectionConfig()))
            {
                connection.Open();

                var command = this.GetCommand(connection);

                if (quantity >= 1)
                {
                    items1 = this.ExecuteQuery <T1>(command);
                }
                if (quantity >= 2)
                {
                    items2 = this.ExecuteQuery <T2>(command);
                }
                if (quantity >= 3)
                {
                    items3 = this.ExecuteQuery <T3>(command);
                }
                if (quantity >= 4)
                {
                    items4 = this.ExecuteQuery <T4>(command);
                }
                if (quantity >= 5)
                {
                    items5 = this.ExecuteQuery <T5>(command);
                }
            }

            return(new Tuple <IEnumerable <T1>, IEnumerable <T2>, IEnumerable <T3>, IEnumerable <T4>, IEnumerable <T5> >(items1, items2, items3, items4, items5));
        }
Пример #20
0
        public void Ping_Connected_PingTimeout_ShouldReturnFalse()
        {
            // Arrange
            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(RfcResultCode.RFC_TIMEOUT);
            var connection = new SapConnection(_interopMock.Object, new SapConnectionParameters());

            connection.Connect();

            // Act
            var pingResult = connection.Ping();

            // Assert
            pingResult.Should().BeFalse();
        }
Пример #21
0
        public void Dispose_DisconnectionFailed_ShouldNotThrow()
        {
            // Arrange
            var          connection = new SapConnection(_interopMock.Object, new SapConnectionParameters());
            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(RfcResultCode.RFC_CANCELED);

            connection.Connect();

            // Act
            Action action = () => connection.Dispose();

            // Assert
            action.Should().NotThrow();
        }
Пример #22
0
        static void Main(string[] args)
        {
            using (var connection = new SapConnection("DEV"))
            {
                connection.Open();

                var session = new SapSession(connection);

                //var transaction = connection.BeginTransaction();

                var command = new SapCommand("BAPI_GET_PROJECT_DETAILS_TABLE", connection);

                command.Parameters.Add("PROJECT_TYPE","EP");

                session.StartSession();

                var resultDataSet = command.ExecuteDataSet();

                session.EndSession();

                var sapDataReader = command.ExecuteReader("RESULTS");

                
                var i = 0;
                while(sapDataReader.Read())
                {
                    Console.WriteLine("{0} : {1}",i,sapDataReader.Item.GetString(0));
                    i++;
                }

                Console.WriteLine(sapDataReader.RowCount);

                //transaction.Commit();
                //var rfcTables = command.ExecuteRfcTables();

            }

            Console.WriteLine("Done !");
            Console.ReadKey();
        }
Пример #23
0
        public void CreateFunction_ShouldCreateFunction()
        {
            // Arrange
            var          connection = new SapConnection(_interopMock.Object, new SapConnectionParameters());
            RfcErrorInfo errorInfo;

            _interopMock
            .Setup(x => x.OpenConnection(It.IsAny <RfcConnectionParameter[]>(), It.IsAny <uint>(), out errorInfo))
            .Returns(RfcConnectionHandle);
            _interopMock
            .Setup(x => x.GetFunctionDesc(RfcConnectionHandle, "FunctionA", out errorInfo))
            .Returns(FunctionDescriptionHandle);

            connection.Connect();

            // Act
            ISapFunction function = connection.CreateFunction("FunctionA");

            // Assert
            function.Should().NotBeNull();
            _interopMock.Verify(x => x.CreateFunction(FunctionDescriptionHandle, out errorInfo), Times.Once);
        }
Пример #24
0
        public void IsValid_ConnectionHandleInvalid_ShouldReturnFalse()
        {
            // Arrange
            var          connection   = new SapConnection(_interopMock.Object, new SapConnectionParameters());
            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(RfcResultCode.RFC_OK);

            connection.Connect();

            // Arrange
            var isValid = connection.IsValid;

            // Assert
            isValid.Should().BeFalse();
        }
Пример #25
0
        static void Main(string[] args)
        {
            using (var connection = new SapConnection("DEV"))
            {
                connection.Open();

                var session = new SapSession(connection);

                //var transaction = connection.BeginTransaction();

                var command = new SapCommand("BAPI_GET_PROJECT_DETAILS_TABLE", connection);

                command.Parameters.Add("PROJECT_TYPE", "EP");

                session.StartSession();

                var resultDataSet = command.ExecuteDataSet();

                session.EndSession();

                var sapDataReader = command.ExecuteReader("RESULTS");


                var i = 0;
                while (sapDataReader.Read())
                {
                    Console.WriteLine("{0} : {1}", i, sapDataReader.Item.GetString(0));
                    i++;
                }

                Console.WriteLine(sapDataReader.RowCount);

                //transaction.Commit();
                //var rfcTables = command.ExecuteRfcTables();
            }

            Console.WriteLine("Done !");
            Console.ReadKey();
        }
Пример #26
0
        public void GetAttributes_GettingConnectionAttributesSucceeds_ShouldReturnConnectionAttributes()
        {
            // Arrange
            RfcAttributes rfcAttributes = Fixture.Create <RfcAttributes>();

            rfcAttributes.Reserved = null;
            RfcErrorInfo errorInfo;

            _interopMock
            .Setup(x => x.GetConnectionAttributes(It.IsAny <IntPtr>(), out rfcAttributes, out errorInfo))
            .Returns(RfcResultCode.RFC_OK);
            var connection = new SapConnection(_interopMock.Object, new SapConnectionParameters());

            // Act
            SapAttributes attributes = connection.GetAttributes();

            // Assert
            attributes.Should().NotBeNull();
            attributes.Should().BeEquivalentTo(rfcAttributes, config => config
                                               .ComparingByMembers <RfcAttributes>()
                                               .ComparingByMembers <SapAttributes>()
                                               .ExcludingMissingMembers());
        }
Пример #27
0
        public void IsConnected_ConnectedButLibraryReturnsError_ShouldReturnFalse()
        {
            // Arrange
            var          connection = new SapConnection(_interopMock.Object, new SapConnectionParameters());
            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(RfcResultCode.RFC_CLOSED);

            connection.Connect();

            // Act
            bool isConnected = connection.IsValid;

            // Assert
            isConnected.Should().BeFalse();
        }
Пример #28
0
        /// <summary>
        /// Execute SAP RFC-function.
        /// </summary>
        /// <param name="function">Name of the SAP function</param>
        /// <returns>JToken dictionary of export parameter or table values returned by SAP function.</returns>
        public static dynamic ExecuteFunction(ExecuteFunctionInput taskInput)
        {
            var           connectionParams = ConnectionStringToDictionary(taskInput.ConnectionString.Value);
            var           returnvalues     = new JObject();
            FunctionInput input;
            IRfcFunction  sapFunction;

            if (taskInput.InputType == InputType.JSON)
            {
                try
                {
                    input = new FunctionInput(taskInput.InputFunctions);
                }
                catch (Exception e)
                {
                    throw new Exception("Failed to parse input JSON", e);
                }
            }
            else if (taskInput.InputType == InputType.PARAMETERS)
            {
                input = new FunctionInput();
                var structures = new List <Structure>();
                foreach (var s in taskInput.SimpleInput.Functions)
                {
                    structures.Add(new Structure
                    {
                        Name   = s.Name,
                        Fields = s.Fields
                    });
                }
                input.Functions = structures.ToArray();
            }
            else
            {
                throw new Exception("Invalid input type!");
            }

            using (var connection = new SapConnection(connectionParams))
            {
                connection.Open();

                var repo = connection.Destination.Repository;

                using (var session = new SapSession(connection))
                {
                    session.StartSession();

                    foreach (var f in input.Functions)
                    {
                        try
                        {
                            sapFunction = repo.CreateFunction(f.Name);
                        }
                        catch (Exception e)
                        {
                            throw new Exception($"Failed to create function: {e.Message}", e);
                        }

                        try
                        {
                            f.PopulateRfcDataContainer(sapFunction);
                        }
                        catch (Exception e)
                        {
                            throw new Exception($"Failed to populate function input structure: {e.Message}", e);
                        }


                        try
                        {
                            sapFunction.Invoke(connection.Destination);
                        }
                        catch (Exception e)
                        {
                            throw new Exception($"Invoking function failed: {e.Message}", e);
                        }

                        var tables       = GetTableNames(sapFunction);
                        var exportParams = GetExportParameters(sapFunction);

                        var tablesAsJObject = new JObject();

                        foreach (var table in tables)
                        {
                            var rfcTable = sapFunction.GetTable(table);
                            tablesAsJObject.Add(table, JToken.FromObject(RfcTableToDataTable(rfcTable, table)));
                        }

                        foreach (var parameter in exportParams)
                        {
                            tablesAsJObject.Add(parameter.Key, parameter.Value);
                        }

                        returnvalues.Add(f.Name, tablesAsJObject);
                    }

                    session.EndSession();
                }
            }

            return(returnvalues);
        }
Пример #29
0
        private void button1_Click(object sender, EventArgs e)
        {
            SapConnection oSapConnection = new SapConnection();

            txtAux.Text = oSapConnection.test();
        }