2

我是 C# 新手。我有 rfc,它以嵌套结构的形式从 SAP 系统返回数据,但是当我使用以下方法获取该数据时:

IrfcTable table = rfc.getTable("exporting_parameter");       // et_customer

它只返回第一个内部结构。例如,我为 rfc 导出的内部表 et_customer包含如下子结构:

gen_data
 bank data
 tax data

它仅在内部返回值gen_data。如何获取全部数据?

4

1 回答 1

2

一些可能会有所帮助的扩展。例如,从 SAP 结构转换为其他更知名的结构。

public static class SapToDataExtensionClass
{

    public static Dictionary<string,string> ToDictionary(this IRfcStructure stru)
    {
        Dictionary<string,string> dict = new Dictionary<string, string>();

        for (int i = 0; i < stru.Metadata.FieldCount; i++)
        {
            dict.Add(stru.Metadata[i].Name , stru.GetString(i) );  
        }

        return dict;
    }
    public static DataTable GetDataTable(this IRfcTable i_Table)
    {

        DataTable dt = new DataTable();

        dt.GetColumnsFromSapTable(i_Table);

        dt.FillRowsFromSapTable(i_Table);

        return dt;

    }


    public static void FillRowsFromSapTable(this DataTable i_DataTable, IRfcTable i_Table)
    {

        foreach (IRfcStructure tableRow in i_Table)
        {

            DataRow dr = i_DataTable.NewRow();

            dr.ItemArray = tableRow.Select(structField => structField.GetValue()).ToArray();

            i_DataTable.Rows.Add(dr);

        }

    }


    public static void GetColumnsFromSapTable(this DataTable i_DataTable, IRfcTable i_SapTable)
    {

        var DataColumnsArr = i_SapTable.Metadata.LineType.CreateStructure().ToList().Select

        (structField => new DataColumn(structField.Metadata.Name)).ToArray();

        i_DataTable.Columns.AddRange(DataColumnsArr);

    }

}
于 2014-06-10T06:29:15.353 回答