ASP.net 将Table做为参数传入SAP函数

来源:互联网 发布:关于网络文学社的建议 编辑:程序博客网 时间:2024/06/10 02:18
public static DataTable SetTable(string functionName, Hashtable inputParame,string tableName)

    { 

        DataTable dt = null;
        if (functionName == "" || functionName == null)
        {
            dt = null;
        }
        else
        {
            RfcDestination dest = GetRfcDestination();
            RfcRepository rfcrep = dest.Repository;
            IRfcFunction myfun = null;
            myfun = rfcrep.CreateFunction(functionName);
            myfun.Invoke(dest);
            myfun = rfcrep.CreateFunction(functionName);
            if (inputParame.Count > 0)
            {
                foreach (DictionaryEntry de in inputParame)
                {
                    if (de.Key.ToString().Trim() != "IT_BANK")
                    {
                        if (de.Value != null)
                        {
                            IRfcTable t_items = myfun.GetTable(de.Key.ToString().Trim());
                            t_items.Insert();
                            Hashtable htValue = (Hashtable)de.Value;
                            foreach (DictionaryEntry de_item in htValue)
                            {
                                t_items.CurrentRow.SetValue(de_item.Key.ToString().Trim(), de_item.Value.ToString().Trim());
                            }
                            myfun.SetValue(de.Key.ToString().Trim(), t_items);
                        }
                    }
                    else
                    {
                        if (de.Value != null)
                        {
                            IRfcTable t_items = myfun.GetTable(de.Key.ToString().Trim());
                            ArrayList list = (ArrayList)de.Value;
                            for (int i = 0; i < list.Count; i++)
                            {
                                t_items.Insert();
                                IT_Bank it = (IT_Bank)list[i];
                                t_items.CurrentRow.SetValue("BANKS", it.BANKS);
                                t_items.CurrentRow.SetValue("BANKL", it.BANKL);
                                t_items.CurrentRow.SetValue("BANKN", it.BANKN);
                                t_items.CurrentRow.SetValue("KOINH", it.KOINH);
                                t_items.CurrentRow.SetValue("BKREF", it.BKREF);
                                t_items.CurrentRow.SetValue("BKONT", it.BKONT);
                            }
                            myfun.SetValue(de.Key.ToString().Trim(), t_items);
                        }
                    }
                }
            }
            myfun.Invoke(dest);
            IRfcTable myrfcTable = null;
            if (tableName != "" || tableName != null)
            {
                myrfcTable = myfun.GetTable(tableName);//rfc server function 返回值table结构名称
            }
            if (myrfcTable != null)
            {
                dt = new DataTable();
                int liElement = 0;
                for (liElement = 0; liElement < myrfcTable.ElementCount; liElement++)
                {
                    RfcElementMetadata metadata = myrfcTable.GetElementMetadata(liElement);
                    dt.Columns.Add(metadata.Name);//循环创建列
                }
                foreach (IRfcStructure dr in myrfcTable)//循环table结构表
                {
                    DataRow row = dt.NewRow();//创建新行
                    for (liElement = 0; liElement < myrfcTable.ElementCount; liElement++)
                    {
                        RfcElementMetadata metadata = myrfcTable.GetElementMetadata(liElement);
                        row[metadata.Name] = dr.GetString(metadata.Name).Trim();
                    }
                    dt.Rows.Add(row);
                }
            }
        }
        return dt;

    }


inputParame传入的参数包含需要传入SAP的表名及表的数据


0 0