Example #1
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));
        }
        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));
        }
Example #3
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();
        }
Example #4
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();
        }
Example #5
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);
        }