RFC调用SAP接口程序之输入输出表格案例2

      c#接口调用RFC接口教程系列2,这个使用2.0接口。哈哈,天下武功就是在不断切磋中,锻炼出来的,技术也一样。

       

string str111 = "";     //物料文件號碼
        string str222 = "";     //年度
        IDestinationConfiguration ID = new RfcConfig();
        RfcDestinationManager.RegisterDestinationConfiguration(ID);
        RfcDestination prd = RfcDestinationManager.GetDestination("PRD_000");//正式区000环境
        RfcDestinationManager.UnregisterDestinationConfiguration(ID);
        RfcRepository repo = prd.Repository;
        IRfcFunction companyBapi = repo.CreateFunction("ZM_PURCHASE_GOOD01");   //调用函数名

        try
        {
            IRfcTable tableSAP = companyBapi.GetTable("IT_POGO");   //表体
            for (int i = 0; i < gvlist1.Rows.Count; i++)     //  1 sapdt.Rows.Count
            {
                // TextBox txtnum = (TextBox)gvlist1.Rows[i].FindControl("txtnum");
                HiddenField hfQYA24 = (HiddenField)gvlist1.Rows[i].FindControl("hfQYA24");

                IRfcStructure st = tableSAP.Metadata.LineType.CreateStructure();
                st.SetValue("EBELN", gvlist1.Rows[i].Cells[9].Text.Trim());           // 采购单单号      "3020092357"
                st.SetValue("EBELP", gvlist1.Rows[i].Cells[10].Text.Trim());               // 采购单项目单号码     "10"
                st.SetValue("MENGE", gvlist1.Rows[i].Cells[7].Text.Trim());        //采购单数量  "1"
                st.SetValue("REF_DOC_YR", lblQY23.Text.Trim());                    //sap收货单号
                st.SetValue("REF_DOC", lblQY22.Text.Trim());                       //sap收货年度
                st.SetValue("REF_DOC_IT", hfQYA24.Value);
                tableSAP.Append(st);
            }

            companyBapi.SetValue("I_BWART", "105");
            companyBapi.SetValue("I_BUDAT", DateTime.Now.ToString("yyyyMMdd"));
            companyBapi.SetValue("ZFORM", "800");
            companyBapi.SetValue("ZOABH", model.QY02);    //单号

            companyBapi.SetValue("IT_POGO", tableSAP);
            companyBapi.Invoke(prd);   //执行函数

            str111 = companyBapi.GetString("E_MBLNR");
            str222 = companyBapi.GetString("E_MJAHR");
            IRfcTable OPTIONS = companyBapi.GetTable("RETURN");    //返回表格值
            bool IsFail = false;
            StringBuilder strMsg = new StringBuilder();
            for (int i = 0; i < OPTIONS.RowCount; i++)
            {
                OPTIONS.CurrentIndex = i;
                if (OPTIONS.GetString("TYPE").Equals("E"))
                {
                    IsFail = true;
                    strMsg.Append(OPTIONS.GetString("MESSAGE"));
                    strMsg.Append("<br>");
                }
            }

            if (IsFail)
            {
                SystemTools.displayTips("SAP导入异常!具体明细:" + strMsg.ToString(), 0, lblInfoMsg);
                return;
            }
        }
        catch (RfcAbapException ex)  //此Exception专门用于获取用户自定义的异常信息!!!!
        {
            twMsgbox.AjaxAlert(companyBapi.Metadata.GetAbapException(ex.Key).Documentation);
        }
        catch (RfcAbapRuntimeException ex)   //此Exception专门用于获取RFC执行过程中的运行时异常!!!!
        {
            twMsgbox.AjaxAlert(companyBapi.Metadata.GetAbapException(ex.Key).Documentation);
        }
        catch (RfcBaseException ex)  //此Exception是总Exception类,可以获取所有的异常,如果有多个Catch,则不可以放第一位!!!!
        {
            twMsgbox.AjaxAlert("工单号码不存在或者SAP数据库连接出错!信息如下:" + ex.Message);
        }

 方法二

        DataTable data = new DataTable();
        data = adal.GetList2(model.Q02, model.Q05).Tables[0];

        IDestinationConfiguration ID = new RfcConfig();
        RfcDestinationManager.RegisterDestinationConfiguration(ID);
        RfcDestination prd = RfcDestinationManager.GetDestination("PRD_000");//正式区000环境
        RfcDestinationManager.UnregisterDestinationConfiguration(ID);
        RfcRepository repo = prd.Repository;
        IRfcFunction companyBapi = repo.CreateFunction("ZRFC_QUO_GET_OLD_INFO");   //调用函数名

        try
        {
            IRfcTable tableSap = companyBapi.GetTable("IT_ZSMMINFO");
            for (int i = 0; i < data.Rows.Count; i++)
            {
               
                tableSap.CurrentRow.SetValue("LIFNR", data.Rows[i]["QJ13"].ToString());
                tableSap.CurrentRow.SetValue("MATNR", data.Rows[i]["QJ06"].ToString());
                

            }
            companyBapi.Invoke(prd);   //执行函数
            IRfcTable OPTIONS = companyBapi.GetTable("IT_ZSMMINFO");
            DataTable dt = new DataTable();
           
            dt.Columns.Add("PSTYP", Type.GetType("System.String"));
            dt.Columns.Add("LIFNR", Type.GetType("System.String"));

            for (int i = 0; i < OPTIONS.RowCount; i++)
            {
                OPTIONS.CurrentIndex = i;
                DataRow dr = dt.NewRow();
                int a = dt.Rows.Count;
                dt.Rows.Add(dr);
                dt.Rows[a]["PSTYP"] = OPTIONS.GetString("PSTYP");
                dt.Rows[a]["LIFNR"] = OPTIONS.GetString("LIFNR");
            }

            sapdt = dt;
        }
        catch (RfcAbapException ex)  //此Exception专门用于获取用户自定义的异常信息!!!!
        {
            twMsgbox.AjaxAlert(companyBapi.Metadata.GetAbapException(ex.Key).Documentation);
        }
        catch (RfcAbapRuntimeException ex)   //此Exception专门用于获取RFC执行过程中的运行时异常!!!!
        {
            twMsgbox.AjaxAlert(companyBapi.Metadata.GetAbapException(ex.Key).Documentation);
        }
        catch (RfcBaseException ex)  //此Exception是总Exception类,可以获取所有的异常,如果有多个Catch,则不可以放第一位!!!!
        {
            twMsgbox.AjaxAlert("SAP出错!信息如下:" + ex.Message);
        }

 

posted @ 2019-08-06 09:37  水龙  阅读(871)  评论(0编辑  收藏  举报