RFC调用SAP接口程序之输入输出结构案例3

      C#通过RFC调用SAP接口系列三,接口程序输入输出结构的调用方法。

using SAP.Middleware.Connector;

 

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_PO");   //调用函数名
        
        try
        {
            var structSAP = companyBapi.GetStructure("pohead");    //表头
            structSAP.SetValue("ZRELEASE", "1");
            structSAP.SetValue("LIFNR", txtCname.Text.Trim());     //"410001"
            structSAP.SetValue("CITY1", "福建");
            structSAP.SetValue("COUNTRY", "CN");
            structSAP.SetValue("ZFORM", "8080");
            structSAP.SetValue("ZOABH", lblBH.Text.Trim());

            IRfcTable tableSAP = companyBapi.GetTable("IT_PO");   //表体
            for (int i = 0; i < gvlist1.Rows.Count; i++)    
            {
                IRfcStructure st = tableSAP.Metadata.LineType.CreateStructure();
                st.SetValue("ESOKZ", "0");
                st.SetValue("BNFPO", gvlist1.Rows[i].Cells[3].Text.Trim());        
                st.SetValue("MENGE", gvlist1.Rows[i].Cells[7].Text.Trim());        
                st.SetValue("MEINS", gvlist1.Rows[i].Cells[6].Text.Trim());          //计算 单位  "EA"
                st.SetValue("EEIND", Convert.ToDateTime(gvlist1.Rows[i].Cells[19].Text.Trim()).ToString("yyyyMMdd"));                           
                tableSAP.Append(st);
            }
            companyBapi.SetValue("pohead", structSAP);
            companyBapi.SetValue("IT_PO", tableSAP);
            companyBapi.Invoke(prd);   //执行函数

            IRfcStructure OPTIONS2 = companyBapi.GetStructure("E_MATNRCOST");      //输出结构

            txtSCI04.Text = OPTIONS2.GetString("MAKTX");
            txtSCI05.Text = OPTIONS2.GetString("WRKST");


            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);
        }

 

posted @ 2019-09-02 09:19  水龙  阅读(1028)  评论(0编辑  收藏  举报