Consider the below code for educational purposes only. Avoid using RFC_READ_TABLE as it’s not released by SAP – see note 382318 – FAQ|Function module RFC_READ_TABLE.

Find below a simple RFC_READ_TABLE call using the SAP .net connector 3.x

ReadTable(“PR1”, “MARA”, “MATNR,MTART,MATKL”, “MTART EQ ‘HAWA’”, rows);

where “PR1” – destination system

“MARA” – string, table to query

“MATNR,xxx” – string, coma separated column names. If empty “”, then all table fields are retrieved.

“MTART EQ ‘HAWA’” – string, WHERE clause in ABAP SQL syntax

rows – output variable, list of strings to hold the result table rows. Columns delimited by “~”

Current limitation: in the below version of the code, the filter can be only upto 72 characters long. If you need longer, I suggest to involve a word wrapping function like this one:

         public bool ReadTable(string dest, string table, string fields, string filter, out List rows) {             string[] field_names = fields.Split(",".ToCharArray());                        RfcDestination destination = RfcDestinationManager.GetDestination(dest);             IRfcFunction readTable;             try {                 readTable = destination.Repository.CreateFunction("BBP_RFC_READ_TABLE");             } catch (RfcBaseException ex) {                 //Log.Error(String.Format("  Error in function module RFC_READ_TABLE ({0})", ex.Message));                 rows = null;                 return false;             }             readTable.SetValue("query_table", table);             readTable.SetValue("delimiter", "~");             IRfcTable t = readTable.GetTable("DATA");             t.Clear();             t = readTable.GetTable("FIELDS");             t.Clear();             if (field_names.Length > 0) {                 t.Append(field_names.Length);                 int i = 0;                 foreach (string n in field_names) {                     t.CurrentIndex = i++;                     t.SetValue(0, n);                 }             }             t = readTable.GetTable("OPTIONS");             t.Clear();             t.Append(1);             t.CurrentIndex = 0;             t.SetValue(0, filter);             //Log.Debug(string.Format("SELECT {0} FROM {1} WHERE {2}",             //    fields, table, filter));             readTable.Invoke(destination);             t = readTable.GetTable("DATA");             int a = t.Count;             rows = new List();             for (int i = 0; i < t.RowCount; i++) {                 t.CurrentIndex = i;                 rows.Add(t.GetString(0));             }             return true;         } 

New NetWeaver Information at

Very Helpfull



User Rating: Be the first one !