예제 #1
0
        public void GetFunctionDef(string pSystem, string pFunction)
        {
            destination = SAPDestination.GetDesByName(pSystem);

            IRfcFunction _functionInterface = destination.Repository.CreateFunction("RFC_GET_FUNCTION_INTERFACE");

            _functionInterface.SetValue("FUNCNAME", pFunction);
            try
            {
                _functionInterface.Invoke(destination);

                Params = Get_Params_list(_functionInterface);
            }
            catch (RfcAbapException abapEx)
            {
                throw new SAPException(abapEx.Key + abapEx.Message);
            }
            catch (RfcBaseException rfcbase)
            {
                throw new SAPException(rfcbase.Message);
            }
            catch (Exception ex)
            {
                throw new SAPException(ex.Message);
            }
        }
예제 #2
0
 /// <summary>
 /// check if the function exist in sap
 /// </summary>
 /// <param name="sysName"></param>
 /// <param name="functionName"></param>
 /// <returns></returns>
 public static bool CheckFunction(string sysName, string functionName)
 {
     try
     {
         RfcDestination destination         = SAPDestination.GetDesByName(sysName);
         string         _funame             = functionName;
         IRfcFunction   RFC_FUNCTION_SEARCH = destination.Repository.CreateFunction("RFC_FUNCTION_SEARCH");
         RFC_FUNCTION_SEARCH.SetValue("FUNCNAME", _funame);
         RFC_FUNCTION_SEARCH.Invoke(destination);
         IRfcTable FUNCTIONS = RFC_FUNCTION_SEARCH.GetTable("FUNCTIONS");
         if (FUNCTIONS.RowCount == 1)
         {
             return(true);
         }
         else
         {
             return(false);
         }
     }
     catch (RfcAbapException rfce)
     {
         //return false;
         throw new SAPException(rfce.Key + rfce.Message);
     }
 }
예제 #3
0
        public static void GetFieldList(String system, string prog, string dynum)
        {
            try
            {
                RfcDestination destination = SAPDestination.GetDesByName(system);
                IRfcFunction   function    = destination.Repository.CreateFunction("ZVI_RFC_READ_SCREEN");
                function.SetValue("I_PROG", prog);
                function.SetValue("I_DYNNR", dynum);
                function.Invoke(destination);

                IRfcTable     fields = function.GetTable("ET_FELD");
                IRfcStructure rs37a  = function.GetStructure("E_HEADER");

                Fields    = CScreenField.getScreenFieldAsDt(fields);
                UsedLine  = rs37a.GetInt("BZMX");
                TotalLine = rs37a.GetInt("NOLI");
                TotalCol  = rs37a.GetInt("NOCO");
                UsedCol   = rs37a.GetInt("BZBR");

                ScreenType = rs37a.GetString("TYPE");
                Title      = function.GetString("E_TITLE");
            }
            catch (RfcAbapException rfce)
            {
                throw new SAPException(rfce.Key + rfce.Message);
            }
            catch (Exception e)
            {
                throw new SAPException(e.Message);
            }
        }
예제 #4
0
        //public static rfcdestination getdestination(string sysname)
        //{
        //    return sapdestination.getdesbyname(sysname);
        //}

        /// <summary>
        /// 搜索SAP中所有的RFC函数,如果函数名为空,读取所有的函数列表
        /// 并直接在储到数据库中
        /// </summary>
        /// <param name="sysName"></param>
        /// <param name="functionName"></param>
        /// <returns></returns>
        public static bool GetRFCfunctionListAndSaveToDb(string sysName, string functionName)
        {
            try
            {
                RfcDestination destination         = SAPDestination.GetDesByName(sysName);
                string         _funame             = string.Format("*{0}*", functionName);
                IRfcFunction   RFC_FUNCTION_SEARCH = destination.Repository.CreateFunction("RFC_FUNCTION_SEARCH");
                RFC_FUNCTION_SEARCH.SetValue("FUNCNAME", _funame);
                RFC_FUNCTION_SEARCH.Invoke(destination);
                IRfcTable FUNCTIONS = RFC_FUNCTION_SEARCH.GetTable("FUNCTIONS");
                if (FUNCTIONS.RowCount > 0)
                {
                    //保存结果到数据库。

                    var _table = new SapTable(sysName, "RFC_FUNCTIONS", "RFCFUNC");
                    _table.DbConnectionString = ConfigFileTool.SAPGlobalSettings.GetDefaultDbConnection();
                    _table.NewTable           = true;
                    _table.SaveDataTable(SAPFunction.RfcTableToDataTable(FUNCTIONS));
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (RfcAbapException rfce)
            {
                throw new SAPException(rfce.Key + rfce.Message);
            }
            catch (Exception e)
            {
                throw new SAPException(e.Message);
            }
        }
예제 #5
0
 /// <summary>
 /// 封装RFC函数DDIF_FIELDINFO_GET,传入表名,返回具体信息。
 /// </summary>
 /// <param name="sysName"></param>
 /// <param name="TableName"></param>
 /// <returns></returns>
 public static DataTable DDIF_FIELDINFO_GET(String sysName, String TableName)
 {
     try
     {
         RfcDestination destination         = SAPDestination.GetDesByName(sysName);
         IRfcFunction   RFC_FUNCTION_SEARCH = destination.Repository.CreateFunction("DDIF_FIELDINFO_GET");
         RFC_FUNCTION_SEARCH.SetValue("TABNAME", TableName);
         RFC_FUNCTION_SEARCH.Invoke(destination);
         IRfcTable DFIES_TAB = RFC_FUNCTION_SEARCH.GetTable("DFIES_TAB");
         DataTable dt        = RfcTableToDataTable(DFIES_TAB);
         return(dt);
     }
     catch (RfcAbapException abapException)
     {
         throw new SAPException(abapException.Key + abapException.Message);
     }
     catch (RfcAbapBaseException abapbaseException)
     {
         throw new SAPException(abapbaseException.PlainText + abapbaseException.Message);
     }
     catch (Exception ex)
     {
         throw new SAPException(ex.Message);
     }
 }
예제 #6
0
        /// <summary>
        ///根据函数名,返回函数的元数据,各个参数的名称,类型等。
        /// </summary>
        /// <param name="sysName"></param>
        /// <param name="funame"></param>
        /// <returns></returns>
        public static RfcFunctionMetadata GetRfcFunctionMetadata(string sysName, string funame)
        {
            funame = funame.ToUpper().Trim();
            if (string.IsNullOrEmpty(funame))
            {
                throw new SAPException("请输入函数!!");
            }
            if (!SAPFunction.CheckFunction(sysName, funame))
            {
                throw new SAPException("函数不存在!!");
            }
            RfcFunctionMetadata MetaData = null;

            try
            {
                RfcDestination destination = SAPDestination.GetDesByName(sysName);
                //destination.Repository.ClearAllMetadata();
                MetaData = destination.Repository.GetFunctionMetadata(funame);
            }
            catch (RfcAbapException rfce)
            {
                throw new SAPException(rfce.Key + rfce.Message);
            }
            catch (RfcAbapRuntimeException rfcrunteime)
            {
                throw new SAPException(rfcrunteime.Key + rfcrunteime.Message);
            }
            return(MetaData);
        }
예제 #7
0
        //获取与服务器的连接信息
        public static string GetSever(string sysName)
        {
            string         output      = "";
            RfcDestination destination = SAPDestination.GetDesByName(sysName);

            output = JsonConvert.SerializeObject(destination);
            return(output);
        }
예제 #8
0
 public Query(string sysName)
 {
     this._Name                = "";
     this._UserGroup           = "";
     this._Variant             = "";
     this._Fields              = new QueryFieldCollection();
     this._SelectionParameters = new QuerySelectionParameterCollection();
     this._des = SAPDestination.GetDesByName(sysName);
 }
예제 #9
0
 public Transaction(string sysName)
 {
     this._BatchSteps         = new BatchStepCollection();
     this._TCode              = "";
     this._Type               = TransactionType.Multiple;
     this._Returns            = new BatchReturnCollection();
     this._CustomFunctionName = "";
     this._des     = SAPDestination.GetDesByName(sysName);
     this._sysName = sysName.ToUpper().Trim();
 }
예제 #10
0
 public ABAPCode(string sysName)
 {
     this._sysName   = sysName;
     this._des       = SAPDestination.GetDesByName(sysName);
     this._code      = new List <String>();
     this._result    = new List <String>();
     this._LastError = "";
     if (_des == null)
     {
         throw new SAPException(Messages.Connectionisnotvalid);
     }
 }
예제 #11
0
        public static List <CParams> getFunctionDef(string pSystem, string pFunction)
        {
            var _is_rfc = string.Empty;

            RfcDestination destination = SAPDestination.GetDesByName(pSystem);

            IRfcFunction _functionInterface = destination.Repository.CreateFunction("RFC_GET_FUNCTION_INTERFACE");

            _functionInterface.SetValue("FUNCNAME", pFunction);

            try
            {
                _functionInterface.Invoke(destination);

                int x = _functionInterface.Metadata.TryNameToIndex("REMOTE_CALL");
                if (x == -1)
                {
                    _is_rfc = CheckFunctionMode(pSystem, pFunction);
                }
                else
                {
                    //有些SAP的版本不支持这个传出参数。
                    _is_rfc = _functionInterface.GetString("REMOTE_CALL");
                }


                if (_is_rfc == "R")
                {
                    Is_rfc = true;
                }
                else
                {
                    Is_rfc = false;
                }
                return(get_Params_list(_functionInterface));
            }
            catch (RfcAbapException abapEx)
            {
                throw new SAPException(abapEx.Key + abapEx.Message);
            }
            catch (RfcBaseException rfcbase)
            {
                throw new SAPException(rfcbase.Message);
            }
            catch (Exception ex)
            {
                throw new SAPException(ex.Message);
            }
        }
예제 #12
0
        /// <summary>
        /// 返回表或结构的定义细节。
        /// </summary>
        /// <param name="p_sysName">SAP系统</param>
        /// <param name="p_TableName">表或结构</param>
        /// <returns>结构定义</returns>
        private static DataTable _GetSAPTableDef(String p_sysName, String p_TableName)
        {
            //有时读取的参数是表类型,无法使用函数DDIF_FIELDINFO_GET直接读取到表的定义。
            //首先到表DD40L里查出表类型对应的结构类型。
            var criteria          = String.Format("TYPENAME = '{0}'", p_TableName);
            var readTableFunction = ConfigFileTool.SAPGlobalSettings.GetReadTableFunction();
            var dd40l             = new SAPINT.Utils.ReadTable(p_sysName);

            dd40l.TableName = "DD40L";
            dd40l.RowCount  = 1;
            dd40l.SetCustomFunctionName(readTableFunction);
            dd40l.AddCriteria(criteria);
            dd40l.Run();

            var dd40lt        = dd40l.Result;
            var structureName = string.Empty;

            if (dd40lt.Rows.Count == 1)
            {
                structureName = dd40lt.Rows[0]["ROWTYPE"].ToString();
            }
            if (!string.IsNullOrEmpty(structureName))
            {
                p_TableName = structureName;
            }

            try
            {
                RfcDestination destination         = SAPDestination.GetDesByName(p_sysName);
                IRfcFunction   RFC_FUNCTION_SEARCH = destination.Repository.CreateFunction("DDIF_FIELDINFO_GET");
                RFC_FUNCTION_SEARCH.SetValue("TABNAME", p_TableName);
                RFC_FUNCTION_SEARCH.Invoke(destination);
                IRfcTable DFIES_TAB = RFC_FUNCTION_SEARCH.GetTable("DFIES_TAB");
                DataTable dt        = _Convert_rfctable_to_dt(DFIES_TAB);
                return(dt);
            }
            catch (RfcAbapException abapException)
            {
                throw new SAPException(p_TableName + abapException.Key + abapException.Message);
            }
            catch (RfcAbapBaseException abapbaseException)
            {
                throw new SAPException(abapbaseException.PlainText + abapbaseException.Message);
            }
            catch (Exception ex)
            {
                throw new SAPException(ex.Message);
            }
        }
예제 #13
0
        internal void FillMessageText(string sysName)
        {
            ReadTable      table = new ReadTable(sysName);
            RfcDestination des   = SAPDestination.GetDesByName(sysName);

            table.AddField("TEXT");
            table.AddCriteria("SPRSL = '" + Converts.languageIsotoSap(des.Language) + "' ");
            table.AddCriteria("AND ARBGB = '" + this.MessageID + "' ");
            table.AddCriteria("AND MSGNR = '" + this.MessageNumber + "' ");
            table.TableName = "T100";
            table.RowCount  = 10;
            table.Run();
            DataTable result = table.Result;

            if (result.Rows.Count == 0)
            {
                //this.Message = "Message could not be found";// Messages.Messagecouldnotbefound;
                this.Message = Messages.Messagecouldnotbefound;
            }
            else
            {
                this.Message = result.Rows[0]["TEXT"].ToString().Trim();
                int length = 0;
                length = this.Message.IndexOf("&");
                if (length >= 0)
                {
                    this.Message = this.Message.Substring(0, length).Trim() + " " + this.MessageVariable1 + " " + this.Message.Substring(length + 1).Trim();
                }
                length = this.Message.IndexOf("&");
                if (length >= 0)
                {
                    this.Message = this.Message.Substring(0, length).Trim() + " " + this.MessageVariable2 + " " + this.Message.Substring(length + 1).Trim();
                }
                length = this.Message.IndexOf("&");
                if (length >= 0)
                {
                    this.Message = this.Message.Substring(0, length).Trim() + " " + this.MessageVariable3 + " " + this.Message.Substring(length + 1).Trim();
                }
                length = this.Message.IndexOf("&");
                if (length >= 0)
                {
                    this.Message = this.Message.Substring(0, length).Trim() + " " + this.MessageVariable4 + " " + this.Message.Substring(length + 1).Trim();
                }
                this.Message = this.Message.Trim();
            }
        }
예제 #14
0
        //增加一个连接配置,如果可以登录成功,加到内存中。
        private void addConfig()
        {
            try
            {
                if (!check())
                {
                    return;
                }
                _config               = new SapConfigClass();
                _config.Name          = cbxName.Text.Trim().ToUpper();
                _config.AppServerHost = txtAppServerHost.Text.Trim().ToUpper();
                _config.SAPRouter     = txtRouter.Text.Trim().ToUpper();
                _config.SystemID      = txtSystemId.Text.Trim().ToUpper();
                _config.SystemNumber  = txtSystemNumber.Text.Trim().ToUpper();
                _config.User          = txtUser.Text.Trim().ToUpper();
                _config.Password      = txtPassword.Text.Trim();
                _config.Client        = txtClient.Text.Trim().ToUpper();
                _config.Language      = txtLanguage.Text.Trim().ToUpper();
                // _config.PoolSize = "5";
                // _config.MaxPoolSize = "10";
                // _config.IdleTimeout = "60";

                RfcDestination des = SAPDestination.GetDesByConfig(_config);
                des.Ping();
                SAPLogonConfigList.AddConfig(_config.Name, _config);
            }
            catch (RfcLogonException e)
            {
                var s = e.Message;
                if ("LOGON_FAILURE" == e.Key)
                {
                    s = s + "登陆失败";
                }
                throw new SAPException(e.Key + s);
            }
            catch (RfcAbapRuntimeException e)
            {
                throw new SAPException(e.Key + e.Message);
            }
            catch (RfcAbapException e)
            {
                throw new SAPException(e.Key + e.Message);
            }
        }
예제 #15
0
 //public ReadTable()
 //{
 //    this.fields = new ArrayList();
 //    this.options = new ArrayList();
 //    this._PrimaryKeys = new ReadTableFieldCollection();
 //    this._TableName = "";
 //    this._Fields = new ReadTableFieldCollection();
 //    this._WhereClause = "";
 //    this._Delimiter = "";
 //    this._FunctionName = "";
 //    this.BackgroundRequestID = "";
 //    this.BufferLocation = "";
 //    this._LastPrimaryKey = "";
 //}
 public ReadTable(string sysName)
 {
     this.fields              = new ArrayList();
     this.options             = new ArrayList();
     this._PrimaryKeys        = new ReadTableFieldCollection();
     this._TableName          = "";
     this._Fields             = new ReadTableFieldCollection();
     this._WhereClause        = "";
     this._Delimiter          = "";
     this._FunctionName       = "";
     this.BackgroundRequestID = "";
     this.BufferLocation      = "";
     this._LastPrimaryKey     = "";
     this._des = SAPDestination.GetDesByName(sysName);
     //if (Connection.Codepage.Equals("8000"))
     //{
     //    this._Delimiter = "|";
     //}
     //Connection.Log("ReadTable() Connection.Codepage = " + Connection.Codepage);
 }
예제 #16
0
 //测试使用CustomDestination,运行时修改用户与密码
 public static string login(string usname, string password, string client, string lang)
 {
     try
     {
         //RfcCustomDestination des = SAPDestination.GetDesByName("DM0_800").CreateCustomDestination();
         RfcCustomDestination des = SAPDestination.GetDesByName(ConfigFileTool.SAPGlobalSettings.GetDefaultSapCient()).CreateCustomDestination();
         // SAPBackupConfig config = new SAPBackupConfig();
         //RfcConfigParameters paras =  config.GetParameters("DM0_800");
         des.User     = usname;
         des.Password = password;
         des.Client   = client;
         des.Language = lang;
         IRfcFunction ping = des.Repository.CreateFunction("RFC_PING");
         ping.Invoke(des);
         return("Success");
     }
     catch (RfcAbapException rfce)
     {
         // return "Failed";
         throw new SAPException(rfce.Key + rfce.Message);
     }
 }
예제 #17
0
        public List <String> GetSourceCode(String program)
        {
            if (String.IsNullOrEmpty(program))
            {
                throw new SAPException(String.Format("{0} 不能为空", program));
            }
            try
            {
                var          destination = SAPDestination.GetDesByName(_sysName);
                IRfcFunction function    = destination.Repository.CreateFunction("ZVI_RFC_READ_PROGRAM");
                function.SetValue("I_PROG", program);
                //function.SetValue("I_OBJECT", objectType);
                function.Invoke(destination);
                IRfcTable programlist = function.GetTable("ET_TRDIR");
                if (programlist.RowCount != 1)
                {
                    // throw new SAPException("无法找到程序");
                }

                IRfcTable     source = function.GetTable("ET_PROGRAM");
                List <String> code   = new List <string>();
                for (int i = 0; i < source.RowCount; i++)
                {
                    source.CurrentIndex = i;

                    code.Add(source.GetString("ZEILE"));
                }

                return(code);
            }
            catch (RfcAbapException abapException)
            {
                throw new SAPException(abapException.Key + abapException.Message);
            }
            catch (Exception)
            {
                throw;
            }
        }
예제 #18
0
        /// <summary>
        /// search rfc function in sap system.
        /// </summary>
        /// <param name="sysName"></param>
        /// <param name="functionName"></param>
        /// <param name="functionGroup"></param>
        /// <returns></returns>
        public static DataTable SearchRfcFunctions(string sysName, string functionName, string functionGroup)
        {
            try
            {
                RfcDestination destination = SAPDestination.GetDesByName(sysName);
                //string _funame = string.Format("*{0}*", functionName);
                string       _funame             = functionName;
                IRfcFunction RFC_FUNCTION_SEARCH = destination.Repository.CreateFunction("RFC_FUNCTION_SEARCH");
                RFC_FUNCTION_SEARCH.SetValue("FUNCNAME", _funame);
                RFC_FUNCTION_SEARCH.SetValue("GROUPNAME", functionGroup);
                RFC_FUNCTION_SEARCH.Invoke(destination);
                IRfcTable FUNCTIONS = RFC_FUNCTION_SEARCH.GetTable("FUNCTIONS");

                return(RfcTableToDataTable(FUNCTIONS));
            }
            catch (RfcAbapException rfce)
            {
                throw new SAPException(rfce.Key + rfce.Message);
            }
            catch (Exception e)
            {
                throw new SAPException(e.Message);
            }
        }
예제 #19
0
        /// <summary>
        /// 根据IDOC的IDOC类型,到SAP系统里查找它对应的类型定义
        /// </summary>
        private void GetIdocTypeDefinition()
        {
            if (idoc == null)
            {
                throw new SAPException("IDOC是空值。");
            }
            if (idoc != null)
            {
                if (String.IsNullOrWhiteSpace(this.idocType))
                {
                    throw new SAPException("空白的IDOC类型");
                }
                RfcDestination destination = SAPDestination.GetDesByName(sysName);

                IRfcFunction function = destination.Repository.CreateFunction("IDOCTYPE_READ_COMPLETE");
                function.SetValue("PI_IDOCTYP", this.idocType);
                function.SetValue("PI_CIMTYP", this.cimType);
                function.Invoke(destination);
                IRfcTable rfctable_PT_FIELDS = function.GetTable("PT_FIELDS");

                EDI_IAPI12 _EDI_IAPI12;
                for (int i = 0; i < rfctable_PT_FIELDS.RowCount; i++)
                {
                    _EDI_IAPI12            = new EDI_IAPI12();
                    _EDI_IAPI12.SEGMENTTYP = rfctable_PT_FIELDS[i].GetString("SEGMENTTYP"); // 段类型(30 字符格式)
                    _EDI_IAPI12.FIELDNAME  = rfctable_PT_FIELDS[i].GetString("FIELDNAME");  // 字段名
                    _EDI_IAPI12.INTLEN     = rfctable_PT_FIELDS[i].GetInt("INTLEN");        // 以字节计的内部长度
                    _EDI_IAPI12.EXTLEN     = rfctable_PT_FIELDS[i].GetInt("EXTLEN");        // 输出长度
                    _EDI_IAPI12.FIELD_POS  = rfctable_PT_FIELDS[i].GetInt("FIELD_POS");     // 字段的位置号码
                    _EDI_IAPI12.BYTE_FIRST = rfctable_PT_FIELDS[i].GetInt("BYTE_FIRST");    // 第一个字节的位置
                    _EDI_IAPI12.BYTE_LAST  = rfctable_PT_FIELDS[i].GetInt("BYTE_LAST");     // 最后一个字节的位置
                    _EDI_IAPI12.ROLLNAME   = rfctable_PT_FIELDS[i].GetString("ROLLNAME");   // 数据元素 (语义域)
                    _EDI_IAPI12.DOMNAME    = rfctable_PT_FIELDS[i].GetString("DOMNAME");    // 定义域名
                    _EDI_IAPI12.DATATYPE   = rfctable_PT_FIELDS[i].GetString("DATATYPE");   // ABAP/4 字典: 屏幕绘制器的屏幕数据类型
                    _EDI_IAPI12.DESCRP     = rfctable_PT_FIELDS[i].GetString("DESCRP");     // 对象的简短说明
                    _EDI_IAPI12.ISOCODE    = rfctable_PT_FIELDS[i].GetString("ISOCODE");    // IDoc 开发:字段中的 ISO 代码标识
                    _EDI_IAPI12.VALUETAB   = rfctable_PT_FIELDS[i].GetString("VALUETAB");   // IDoc 段字段的值表
                    _FIELDS.Add(_EDI_IAPI12);
                }

                IRfcTable rfctable_PT_FVALUES = function.GetTable("PT_FVALUES");

                EDI_IAPI14 _EDI_IAPI14;
                for (int i = 0; i < rfctable_PT_FVALUES.RowCount; i++)
                {
                    _EDI_IAPI14            = new EDI_IAPI14();
                    _EDI_IAPI14.STRNAME    = rfctable_PT_FVALUES[i].GetString("STRNAME");    // 内部结构的名称
                    _EDI_IAPI14.FIELDNAME  = rfctable_PT_FVALUES[i].GetString("FIELDNAME");  // 字段名
                    _EDI_IAPI14.FLDVALUE_L = rfctable_PT_FVALUES[i].GetString("FLDVALUE_L"); // 下限值 / 单一值
                    _EDI_IAPI14.FLDVALUE_H = rfctable_PT_FVALUES[i].GetString("FLDVALUE_H"); // 上限值
                    _EDI_IAPI14.DESCRP     = rfctable_PT_FVALUES[i].GetString("DESCRP");     // 说明简要文字
                    _FVALUES.Add(_EDI_IAPI14);
                }

                IRfcTable rfctable_PT_MESSAGES = function.GetTable("PT_MESSAGES");

                EDI_IAPI17 _EDI_IAPI17;
                for (int i = 0; i < rfctable_PT_MESSAGES.RowCount; i++)
                {
                    _EDI_IAPI17          = new EDI_IAPI17();
                    _EDI_IAPI17.MESTYP   = rfctable_PT_MESSAGES[i].GetString("MESTYP");   // 消息类型
                    _EDI_IAPI17.DESCRP   = rfctable_PT_MESSAGES[i].GetString("DESCRP");   // 对象的简短说明
                    _EDI_IAPI17.IDOCTYP  = rfctable_PT_MESSAGES[i].GetString("IDOCTYP");  // 基本类型
                    _EDI_IAPI17.CIMTYP   = rfctable_PT_MESSAGES[i].GetString("CIMTYP");   // 扩展类型
                    _EDI_IAPI17.RELEASED = rfctable_PT_MESSAGES[i].GetString("RELEASED"); // 消息类型分配有效的版本
                    _MESSAGES.Add(_EDI_IAPI17);
                }

                IRfcTable rfctable_PT_SEGMENTS = function.GetTable("PT_SEGMENTS");

                EDI_IAPI11 _EDI_IAPI11;
                for (int i = 0; i < rfctable_PT_SEGMENTS.RowCount; i++)
                {
                    _EDI_IAPI11            = new EDI_IAPI11();
                    _EDI_IAPI11.NR         = rfctable_PT_SEGMENTS[i].GetInt("NR");            // IDoc 类型中段的序列号
                    _EDI_IAPI11.SEGMENTTYP = rfctable_PT_SEGMENTS[i].GetString("SEGMENTTYP"); // 段类型(30 字符格式)
                    _EDI_IAPI11.SEGMENTDEF = rfctable_PT_SEGMENTS[i].GetString("SEGMENTDEF"); // IDoc 开发:段定义
                    _EDI_IAPI11.QUALIFIER  = rfctable_PT_SEGMENTS[i].GetString("QUALIFIER");  // 标记:IDoc 中限定的段
                    _EDI_IAPI11.SEGLEN     = rfctable_PT_SEGMENTS[i].GetInt("SEGLEN");        // 一个字段的长度(位置的数目)
                    _EDI_IAPI11.PARSEG     = rfctable_PT_SEGMENTS[i].GetString("PARSEG");     // 段类型(30 字符格式)
                    _EDI_IAPI11.PARPNO     = rfctable_PT_SEGMENTS[i].GetInt("PARPNO");        // 父代段的序列号
                    _EDI_IAPI11.PARFLG     = rfctable_PT_SEGMENTS[i].GetString("PARFLG");     // 父段标记:段是段组的开始
                    _EDI_IAPI11.MUSTFL     = rfctable_PT_SEGMENTS[i].GetString("MUSTFL");     // 标记:强制条目
                    _EDI_IAPI11.OCCMIN     = rfctable_PT_SEGMENTS[i].GetInt("OCCMIN");        // 序列中段的最小数目
                    _EDI_IAPI11.OCCMAX     = rfctable_PT_SEGMENTS[i].GetDouble("OCCMAX");     // 序列中最大段数目
                    _EDI_IAPI11.HLEVEL     = rfctable_PT_SEGMENTS[i].GetInt("HLEVEL");        // IDoc 类型段的层次水平
                    _EDI_IAPI11.DESCRP     = rfctable_PT_SEGMENTS[i].GetString("DESCRP");     // 对象的简短说明
                    _EDI_IAPI11.GRP_MUSTFL = rfctable_PT_SEGMENTS[i].GetString("GRP_MUSTFL"); // 组标记:强制
                    _EDI_IAPI11.GRP_OCCMIN = rfctable_PT_SEGMENTS[i].GetInt("GRP_OCCMIN");    // 序列中最小组号
                    _EDI_IAPI11.GRP_OCCMAX = rfctable_PT_SEGMENTS[i].GetDouble("GRP_OCCMAX"); // 序列中最大组号
                    _EDI_IAPI11.REFSEGTYP  = rfctable_PT_SEGMENTS[i].GetString("REFSEGTYP");  // 段类型(30 字符格式)
                    _SEGMENTS.Add(_EDI_IAPI11);
                }
            }
        }
예제 #20
0
        /// <summary>
        /// 填充所有的参数调用SAP RFC函数后,填充所有的参数
        /// </summary>
        /// <param name="funame">函数名</param>
        /// <param name="list">输入参数列表</param>
        /// <param name="olist">输出参数列表</param>
        /// <returns></returns>
        private static bool InvokeFunctionFromJson(string sysName, string funame, RfcInputListJson list, out RfcOutputListJson olist)
        {
            try
            {
                if (funame == "" || null == list)
                {
                    olist = null;
                    return(false);
                }
                if (!SAPFunction.CheckFunction(sysName, funame))
                {
                    olist = null;
                    return(false);
                }
                RfcDestination      destination = SAPDestination.GetDesByName(sysName);
                RfcFunctionMetadata MetaData    = destination.Repository.GetFunctionMetadata(funame);
                IRfcFunction        function    = MetaData.CreateFunction();
                //初步序列化后的参数还需要进一步进行格式化,把结构体与表格都转化成SAP格式。
                list.All.Clear();
                list.All.AddRange(list.Import);
                list.All.AddRange(list.Change);
                list.All.AddRange(list.Tables);
                foreach (var item in list.All)
                {
                    if (item.Value == null)
                    {
                        continue;
                    }
                    RfcParameterMetadata p = MetaData[item.Name];
                    if (p == null)
                    {
                        continue;
                    }
                    //尝试把OBJECT反解析成对应的类型
                    if (p.DataType == RfcDataType.STRUCTURE)
                    {
                        Console.WriteLine(item.Value.GetType().ToString());
                        if (item.Value.GetType().ToString() != "Newtonsoft.Json.Linq.JArray" && item.Value.GetType().ToString() != "System.Array")
                        {
                            continue;
                        }
                        if (item.Value.GetType().ToString() != "System.Array")
                        {
                            // continue;
                        }
                        IRfcStructure str = function.GetStructure(item.Name, true);
                        var           arr = JsonConvert.DeserializeObject <List <Dictionary <string, object> > >(item.Value.ToString());
                        if (arr.Count == 1)
                        {
                            //结构使用第一行
                            var o = arr[0];
                            for (int s = 0; s < str.Metadata.FieldCount; s++)
                            {
                                RfcFieldMetadata field = str.Metadata[s];
                                str.SetValue(field.Name, o[field.Name]);
                            }
                        }
                        item.Value = str;
                    }
                    else if (p.DataType == RfcDataType.TABLE)
                    {
                        if (string.IsNullOrEmpty(item.Value.ToString()))
                        {
                            continue;
                        }
                        IRfcTable tbl = function.GetTable(item.Name, true);
                        var       arr = JsonConvert.DeserializeObject <List <Dictionary <string, object> > >(item.Value.ToString());
                        for (int x = 0; x < arr.Count; x++)
                        {
                            IRfcStructure str = tbl.Metadata.LineType.CreateStructure();
                            for (int s = 0; s < tbl.Metadata.LineType.FieldCount; s++)
                            {
                                RfcFieldMetadata field = tbl.Metadata.LineType[s];
                                str.SetValue(field.Name, arr[x][field.Name]);
                            }
                            tbl.Append(str);
                        }
                        item.Value = tbl;
                    }
                }
                //填充所有的参数
                for (int i = 0; i < MetaData.ParameterCount; i++)
                {
                    RfcParameterMetadata pMetadata = MetaData[i];
                    if (list.All.Exists(x => x.Name == pMetadata.Name))
                    {
                        var value = list.All.Find(x => x.Name == pMetadata.Name).Value;
                        if (value != null)
                        {
                            function.SetValue(pMetadata.Name, value);
                        }
                    }
                }
                //远程调用函数
                try
                {
                    function.Invoke(destination);
                }
                catch (RfcAbapException ee)
                {
                    throw new Exception(ee.Key + ee.Message);
                }
                //保留调用结果。
                RfcOutputListJson outlist = new RfcOutputListJson();
                //循环读取结果。把所以的结果都保存到List<object>中。
                for (int i = 0; i < MetaData.ParameterCount; i++)
                {
                    RfcParameterMetadata pMetadata = MetaData[i];
                    //
                    if (pMetadata.Direction == RfcDirection.IMPORT)
                    {
                        continue;
                    }
                    RfcKeyValueJson d = new RfcKeyValueJson();
                    d.Name = pMetadata.Name;
                    if (pMetadata.DataType == RfcDataType.STRUCTURE)
                    {
                        //注意,在这里就算是结构体,也把放到List中,这样可以序列化成数组格式。
                        List <object> tb_list            = new List <object>();
                        IRfcStructure row                = function.GetStructure(pMetadata.Name);
                        Dictionary <string, object> rowd = new Dictionary <string, object>();
                        for (int x = 0; x < row.Metadata.FieldCount; x++)
                        {
                            rowd.Add(row[x].Metadata.Name, row[x].GetValue());
                        }
                        tb_list.Add(rowd);
                        d.Value = tb_list;
                    }
                    else if (pMetadata.DataType == RfcDataType.TABLE)
                    {
                        List <object> tb_list   = new List <object>();
                        IRfcTable     table     = function.GetTable(pMetadata.Name);
                        var           readItems = table.RowCount;
                        if (readItems > 0)
                        {
                            try
                            {
                                //保存结果到数据库。
                                RfcTableMetadata tableMeta = pMetadata.ValueMetadataAsTableMetadata;
                                var _table = new SapTable(sysName, funame + "_" + pMetadata.Name, tableMeta.LineType.Name);
                                _table.DbConnectionString = ConfigFileTool.SAPGlobalSettings.GetDefaultDbConnection();
                                _table.NewTable           = true;
                                _table.SaveDataTable(SAPFunction.RfcTableToDataTable(table));
                                // RfcTableToDb dbhelper = new RfcTableToDb(funame, d.Name, tble);
                                //  dbhelper.saveTable();
                            }
                            catch (Exception ee)
                            {
                                throw new Exception(ee.Message);
                            }
                            // ThreadStart threadStart = new ThreadStart(dbhelper.saveTable);
                            //  Thread thread = new Thread(threadStart);
                            //  thread.Start();
                            //DbHelper.saveRfcTable(funame,ref tble);
                        }
                        //控制100条,数据过多会序列华出错。以后再做改善,
                        if (readItems > 10)
                        {
                            readItems = 10;
                        }
                        for (int rowc = 0; rowc < readItems; rowc++)
                        {
                            IRfcStructure row = table[rowc];
                            Dictionary <string, object> rowd = new Dictionary <string, object>();
                            for (int x = 0; x < row.Metadata.FieldCount; x++)
                            {
                                rowd.Add(row[x].Metadata.Name, row[x].GetValue());
                            }
                            tb_list.Add(rowd);
                        }
                        d.Value = tb_list;
                    }
                    else
                    {
                        d.Value = function.GetValue(pMetadata.Name);
                    }
                    //存放于不同的集合也是为了序列化方便。
                    switch (pMetadata.Direction)
                    {
                    case RfcDirection.CHANGING:
                        outlist.Change.Add(d);
                        break;

                    case RfcDirection.EXPORT:
                        outlist.Export.Add(d);
                        break;

                    case RfcDirection.IMPORT:
                        outlist.Import.Add(d);
                        break;

                    case RfcDirection.TABLES:
                        outlist.Tables.Add(d);
                        break;
                    }
                }
                olist = outlist;
                return(true);
            }
            catch (Exception e)
            {
                throw new SAPException(e.Message);
            }
        }
예제 #21
0
        /// <summary>
        /// 动态调用RFC函数
        /// </summary>
        /// <param name="sysName"></param>
        /// <param name="funame"></param>
        /// <param name="input"></param>
        /// <param name="output"></param>
        /// <returns></returns>
        public static bool InvokeFunction(string sysName, string funame, MetaValueList input, out MetaValueList output)
        {
            try
            {
                RfcFunctionMetadata MetaData = SAPFunctionMeta.GetRfcFunctionMetadata(sysName, funame);
                IRfcFunction        function = MetaData.CreateFunction();
                //初步序列化后的参数还需要进一步进行格式化,把结构体与表格都转化成SAP格式。
                if (input != null)
                {
                    //填充所有的参数
                    List <String> KeyIndex = new List <string>();
                    KeyIndex.AddRange(input.FieldValueList.Keys);
                    KeyIndex.AddRange(input.StructureValueList.Keys);
                    KeyIndex.AddRange(input.TableValueList.Keys);
                    KeyIndex.ForEach(x => x.ToUpper().Trim());
                    for (int i = 0; i < MetaData.ParameterCount; i++)
                    {
                        RfcParameterMetadata pMetadata = MetaData[i];
                        if (pMetadata.Direction == RfcDirection.EXPORT)
                        {
                            continue;
                        }
                        if (!KeyIndex.Contains(pMetadata.Name))
                        {
                            continue;
                        }

                        // Dictionary<String, Object> ParameterList = new Dictionary<string, object>();
                        if (pMetadata.DataType == RfcDataType.STRUCTURE)
                        {
                            if (input.StructureValueList.ContainsKey(pMetadata.Name))
                            {
                                Dictionary <String, String> structure;
                                input.StructureValueList.TryGetValue(pMetadata.Name, out structure);
                                IRfcStructure str = function.GetStructure(pMetadata.Name, true);
                                if (structure != null)
                                {
                                    for (int s = 0; s < str.Metadata.FieldCount; s++)
                                    {
                                        RfcFieldMetadata field = str.Metadata[s];
                                        if (structure.Keys.Contains(field.Name))
                                        {
                                            Object o = Converts.ObjectToRfcValue(structure[field.Name], field.DataType);
                                            str.SetValue(field.Name, o);
                                        }
                                    }
                                }
                            }
                        }
                        else if (pMetadata.DataType == RfcDataType.TABLE)
                        {
                            List <Dictionary <String, String> > tablelist;
                            input.TableValueList.TryGetValue(pMetadata.Name, out tablelist);
                            if (tablelist != null)
                            {
                                IRfcTable table = function.GetTable(pMetadata.Name);
                                for (int j = 0; j < tablelist.Count; j++)
                                {
                                    table.Append();
                                    for (int k = 0; k < table.Metadata.LineType.FieldCount; k++)
                                    {
                                        RfcFieldMetadata field = table.Metadata.LineType[k];
                                        if (tablelist[j].Keys.Contains(field.Name))
                                        {
                                            Object o = Converts.ObjectToRfcValue(tablelist[j][field.Name], field.DataType);
                                            table.SetValue(field.Name, o);
                                        }
                                    }
                                }
                            }
                        }
                        else
                        {
                            String value = "";
                            input.FieldValueList.TryGetValue(pMetadata.Name, out value);
                            Object o = Converts.ObjectToRfcValue(value, pMetadata.DataType);
                            function.SetValue(pMetadata.Name, o);
                        }
                    }
                }
                MetaValueList outputlist = new MetaValueList();

                try
                {
                    RfcDestination destination = SAPDestination.GetDesByName(sysName);

                    function.Invoke(destination);
                }
                catch (RfcAbapException ee)
                {
                    throw new SAPException(ee.Key + ee.Message + ee.PlainText);
                }
                catch (RfcAbapRuntimeException runtimeEx)
                {
                    throw new SAPException(runtimeEx.Key + runtimeEx.Message + runtimeEx.PlainText);
                }


                for (int i = 0; i < MetaData.ParameterCount; i++)
                {
                    RfcParameterMetadata pMetadata = MetaData[i];
                    if (pMetadata.Direction == RfcDirection.IMPORT)
                    {
                        continue;
                    }
                    // outputlist.FieldTypeList.Add(pMetadata.Name, pMetadata.DataType.ToString());
                    if (pMetadata.DataType == RfcDataType.STRUCTURE)
                    {
                        Dictionary <String, String> stru = null;
                        IRfcStructure structure          = function.GetStructure(pMetadata.Name, false);
                        if (structure != null)
                        {
                            stru = new Dictionary <string, string>();
                            for (int s = 0; s < structure.Metadata.FieldCount; s++)
                            {
                                RfcFieldMetadata field  = structure.Metadata[s];
                                Object           result = null;

                                if (field.DataType == RfcDataType.BYTE)
                                {
                                    result = structure.GetString(field.Name);
                                }
                                else
                                {
                                    result = structure.GetValue(field.Name);
                                }

                                result = Converts.RfcToDoNetValue(result, field.DataType).ToString();
                                stru.Add(field.Name, result.ToString());
                            }
                            if (stru != null)
                            {
                                outputlist.StructureValueList.Add(pMetadata.Name, stru);
                            }
                        }
                    }
                    else if (pMetadata.DataType == RfcDataType.TABLE)
                    {
                        List <Dictionary <String, String> > outTableList = null;
                        IRfcTable outTable = function.GetTable(pMetadata.Name, false);
                        if (outTable != null)
                        {
                            outTableList = new List <Dictionary <string, string> >();
                            for (int s = 0; s < outTable.RowCount; s++)
                            {
                                IRfcStructure rfcTableLine      = outTable[s];
                                Dictionary <String, String> row = new Dictionary <string, string>();
                                for (int z = 0; z < rfcTableLine.Metadata.FieldCount; z++)
                                {
                                    RfcFieldMetadata field  = rfcTableLine[z].Metadata;
                                    Object           result = null;

                                    if (field.DataType == RfcDataType.BYTE)
                                    {
                                        result = rfcTableLine.GetString(field.Name);
                                    }
                                    else
                                    {
                                        result = rfcTableLine.GetValue(field.Name);
                                    }
                                    result = Converts.RfcToDoNetValue(result, field.DataType).ToString();
                                    row.Add(field.Name, result.ToString());
                                }
                                outTableList.Add(row);
                            }
                        }
                        outputlist.TableValueList.Add(pMetadata.Name, outTableList);
                    }
                    else
                    {
                        Object result = function.GetValue(pMetadata.Name);
                        result = Converts.RfcToDoNetValue(result, pMetadata.DataType);
                        outputlist.FieldValueList.Add(pMetadata.Name, result.ToString());
                    }
                }
                output = outputlist;
                return(true);
            }
            catch (Exception e)
            {
                output = null;
                throw new SAPException(e.Message);
            }
        }
예제 #22
0
        public List <CD010SINF> SearchProgram(String searchTerm, String classType, String devClass)
        {
            //if (String.IsNullOrEmpty(searchTerm))
            //{
            //    throw new SAPException(String.Format("{0} 不能为空",searchTerm));
            //}
            //SourceCode = new List<string>();
            //ProgramList = new List<string>();

            try
            {
                var          destination = SAPDestination.GetDesByName(_sysName);
                IRfcFunction function    = destination.Repository.CreateFunction("ZVI_RFC_READ_PROGRAM");
                function.SetValue("I_PROG", searchTerm);
                function.SetValue("I_CLASS", classType);
                function.SetValue("I_DEVCLASS", devClass);
                function.Invoke(destination);

                List <CD010SINF> _D010SINF_LIST = new List <CD010SINF>();

                IRfcTable rfctable_D010SINF = function.GetTable("ET_D010SINF");

                // C${rfctable.Name} _C${rfctable.Name};
                for (int i = 0; i < rfctable_D010SINF.RowCount; i++)
                {
                    var _D010SINF = new CD010SINF();
                    _D010SINF.prog   = rfctable_D010SINF[i].GetString("PROG");  // 程序
                    _D010SINF.clas   = rfctable_D010SINF[i].GetString("CLAS");  // 类别
                    _D010SINF.subc   = rfctable_D010SINF[i].GetString("SUBC");  // 程序类型
                    _D010SINF.appl   = rfctable_D010SINF[i].GetString("APPL");  // 应用
                    _D010SINF.cdat   = rfctable_D010SINF[i].GetString("CDAT");  // 创建日期
                    _D010SINF.vern   = rfctable_D010SINF[i].GetString("VERN");  //
                    _D010SINF.rmand  = rfctable_D010SINF[i].GetString("RMAND"); //
                    _D010SINF.rload  = rfctable_D010SINF[i].GetString("RLOAD"); //
                    _D010SINF.unam   = rfctable_D010SINF[i].GetString("UNAM");  //
                    _D010SINF.udat   = rfctable_D010SINF[i].GetString("UDAT");  // 更改日期
                    _D010SINF.utime  = rfctable_D010SINF[i].GetString("UTIME"); //
                    _D010SINF.datalg = rfctable_D010SINF[i].GetInt("DATALG");   // 长度
                    _D010SINF.varcl  = rfctable_D010SINF[i].GetString("VARCL"); //
                    _D010SINF_LIST.Add(_D010SINF);
                }
                //for (int i = 0; i < source.RowCount; i++)
                //{
                //    source.CurrentIndex = i;
                //    SourceCode.Add(source.GetString("ZEILE"));
                //}

                //for (int i = 0; i < programlist.RowCount; i++)
                //{
                //    programlist.CurrentIndex = i;
                //    ProgramList.Add(programlist.GetString("OBJ_NAME"));
                //}
                return(_D010SINF_LIST);
            }
            catch (RfcAbapException abapException)
            {
                throw new SAPException(abapException.Key + abapException.Message);
            }
            catch (Exception)
            {
                throw;
            }
        }
예제 #23
0
        public static RfcOutputListJson GetFunMetaList(string sysName, string funame)
        {
            RfcOutputListJson paralist = new RfcOutputListJson();

            try
            {
                if (string.IsNullOrEmpty(funame))
                {
                    throw new SAPException("请输入函数!!");
                }
                if (!SAPFunction.CheckFunction(sysName, funame))
                {
                    throw new SAPException("函数不存在!!");
                }
                funame = funame.ToUpper();
                RfcDestination destination = SAPDestination.GetDesByName(sysName);
                destination.Repository.ClearAllMetadata();
                RfcFunctionMetadata MetaData = destination.Repository.GetFunctionMetadata(funame);
                IRfcFunction        function = null;
                function = MetaData.CreateFunction();
                //根据参数的方向,分为四种(CHANGING,EXPORT,IMPORT,TABLES);
                for (int i = 0; i < MetaData.ParameterCount; i++)
                {
                    RfcParameterMetadata pMetadata = MetaData[i];
                    paralist.All.Add(pMetadata);
                    switch (pMetadata.Direction)
                    {
                    case RfcDirection.CHANGING:
                        paralist.Change.Add(pMetadata);
                        break;

                    case RfcDirection.EXPORT:
                        paralist.Export.Add(pMetadata);
                        break;

                    case RfcDirection.IMPORT:
                        paralist.Import.Add(pMetadata);
                        break;

                    case RfcDirection.TABLES:
                        paralist.Tables.Add(pMetadata);
                        break;
                    }
                    //参数也可能是结构体,表,ABAP对象
                    //一定要分开TRY,因为有些是没有的
                    if (pMetadata.DataType == RfcDataType.STRUCTURE)
                    {
                        try
                        {
                            //结构体的行项目结构
                            List <object>        elelist   = new List <object>();
                            RfcStructureMetadata strucmeta = pMetadata.ValueMetadataAsStructureMetadata;
                            for (int f = 0; f < strucmeta.FieldCount; f++)
                            {
                                RfcFieldMetadata fieldm = strucmeta[f];
                                elelist.Add(fieldm);
                            }
                            paralist.Objects.Add(pMetadata.Name, elelist);
                        }
                        catch (Exception)
                        {
                            //  throw new SAPException(ee.Message);
                        }
                    }
                    if (pMetadata.DataType == RfcDataType.TABLE)
                    {
                        //表结构的行项目结构
                        List <object>    tbllist = new List <object>();
                        RfcTableMetadata tablem  = pMetadata.ValueMetadataAsTableMetadata;
                        for (int t = 0; t < tablem.LineType.FieldCount; t++)
                        {
                            RfcFieldMetadata fieldm = tablem.LineType[t];
                            tbllist.Add(fieldm);
                        }
                        paralist.Objects.Add(pMetadata.Name, tbllist);
                    }
                    if (pMetadata.DataType == RfcDataType.CLASS)
                    {
                        //abap object 属性
                        List <object>         attlist  = new List <object>();
                        RfcAbapObjectMetadata abapitem = pMetadata.ValueMetadataAsAbapObjectMetadata;
                        for (int o = 0; o < abapitem.AttributeCount; o++)
                        {
                            RfcAttributeMetadata abapobject = abapitem[o];
                            attlist.Add(abapobject);
                        }
                        paralist.Objects.Add(pMetadata.Name, attlist);
                    }
                }
                return(paralist);
            }
            catch (Exception ee)
            {
                throw new SAPException(ee.Message);
            }
        }
예제 #24
0
        public List <CTRDIR> SearchProgram(String searchTerm, String objecType, String devClass, bool reportOnly = true)
        {
            //if (String.IsNullOrEmpty(searchTerm))
            //{
            //    throw new SAPException(String.Format("{0} 不能为空",searchTerm));
            //}
            //SourceCode = new List<string>();
            //ProgramList = new List<string>();

            try
            {
                var          destination = SAPDestination.GetDesByName(_sysName);
                IRfcFunction function    = destination.Repository.CreateFunction("ZVI_RFC_READ_PROGRAM");
                function.SetValue("I_PROG", searchTerm);
                function.SetValue("I_OBJECT", objecType);
                function.SetValue("I_DEVCLASS", devClass);
                if (true == reportOnly)
                {
                    function.SetValue("I_NOT_LIMIT", 'X');
                }
                else
                {
                    function.SetValue("I_NOT_LIMIT", ' ');
                }
                function.Invoke(destination);
                // IRfcTable source = function.GetTable("ET_PROGRAM");
                // IRfcTable programlist = function.GetTable("ET_TADIR");


                // IRfcTable rfctable_TADIR = function.GetTable("ET_TADIR");
                // var dt = SAPINT.Function.SAPFunction.RfcTableToDataTable(rfctable_TADIR);
                List <CTRDIR> _TRDIR_LIST    = new List <CTRDIR>();
                IRfcTable     rfctable_TRDIR = function.GetTable("ET_TRDIR");

                // CTRDIR _CTRDIR;
                for (int i = 0; i < rfctable_TRDIR.RowCount; i++)
                {
                    var _TRDIR = new CTRDIR();
                    _TRDIR.name    = rfctable_TRDIR[i].GetString("NAME");    // Program
                    _TRDIR.sqlx    = rfctable_TRDIR[i].GetString("SQLX");    //
                    _TRDIR.edtx    = rfctable_TRDIR[i].GetString("EDTX");    //
                    _TRDIR.varcl   = rfctable_TRDIR[i].GetString("VARCL");   //
                    _TRDIR.dbapl   = rfctable_TRDIR[i].GetString("DBAPL");   //
                    _TRDIR.dbna    = rfctable_TRDIR[i].GetString("DBNA");    //
                    _TRDIR.clas    = rfctable_TRDIR[i].GetString("CLAS");    // Class
                    _TRDIR.type    = rfctable_TRDIR[i].GetString("TYPE");    // Selection screen version
                    _TRDIR.occurs  = rfctable_TRDIR[i].GetString("OCCURS");  //
                    _TRDIR.subc    = rfctable_TRDIR[i].GetString("SUBC");    // Prog. type
                    _TRDIR.appl    = rfctable_TRDIR[i].GetString("APPL");    // Appl.
                    _TRDIR.secu    = rfctable_TRDIR[i].GetString("SECU");    //
                    _TRDIR.cnam    = rfctable_TRDIR[i].GetString("CNAM");    // Created By
                    _TRDIR.cdat    = rfctable_TRDIR[i].GetString("CDAT");    // Created on
                    _TRDIR.unam    = rfctable_TRDIR[i].GetString("UNAM");    //
                    _TRDIR.udat    = rfctable_TRDIR[i].GetString("UDAT");    // Changed on
                    _TRDIR.vern    = rfctable_TRDIR[i].GetString("VERN");    //
                    _TRDIR.levl    = rfctable_TRDIR[i].GetString("LEVL");    //
                    _TRDIR.rstat   = rfctable_TRDIR[i].GetString("RSTAT");   // Program status
                    _TRDIR.rmand   = rfctable_TRDIR[i].GetString("RMAND");   //
                    _TRDIR.rload   = rfctable_TRDIR[i].GetString("RLOAD");   //
                    _TRDIR.fixpt   = rfctable_TRDIR[i].GetString("FIXPT");   //
                    _TRDIR.sset    = rfctable_TRDIR[i].GetString("SSET");    //
                    _TRDIR.sdate   = rfctable_TRDIR[i].GetString("SDATE");   //
                    _TRDIR.stime   = rfctable_TRDIR[i].GetString("STIME");   //
                    _TRDIR.idate   = rfctable_TRDIR[i].GetString("IDATE");   //
                    _TRDIR.itime   = rfctable_TRDIR[i].GetString("ITIME");   //
                    _TRDIR.ldbname = rfctable_TRDIR[i].GetString("LDBNAME"); // LDB name
                    _TRDIR.uccheck = rfctable_TRDIR[i].GetString("UCCHECK"); // Unicode checks
                    _TRDIR_LIST.Add(_TRDIR);
                }
                List <CD010SINF> _D010SINF_LIST = new List <CD010SINF>();

                IRfcTable rfctable_D010SINF = function.GetTable("ET_D010SINF");

                // C${rfctable.Name} _C${rfctable.Name};
                for (int i = 0; i < rfctable_D010SINF.RowCount; i++)
                {
                    var _D010SINF = new CD010SINF();
                    _D010SINF.prog   = rfctable_D010SINF[i].GetString("PROG");  // 程序
                    _D010SINF.clas   = rfctable_D010SINF[i].GetString("CLAS");  // 类别
                    _D010SINF.subc   = rfctable_D010SINF[i].GetString("SUBC");  // 程序类型
                    _D010SINF.appl   = rfctable_D010SINF[i].GetString("APPL");  // 应用
                    _D010SINF.cdat   = rfctable_D010SINF[i].GetString("CDAT");  // 创建日期
                    _D010SINF.vern   = rfctable_D010SINF[i].GetString("VERN");  //
                    _D010SINF.rmand  = rfctable_D010SINF[i].GetString("RMAND"); //
                    _D010SINF.rload  = rfctable_D010SINF[i].GetString("RLOAD"); //
                    _D010SINF.unam   = rfctable_D010SINF[i].GetString("UNAM");  //
                    _D010SINF.udat   = rfctable_D010SINF[i].GetString("UDAT");  // 更改日期
                    _D010SINF.utime  = rfctable_D010SINF[i].GetString("UTIME"); //
                    _D010SINF.datalg = rfctable_D010SINF[i].GetInt("DATALG");   // 长度
                    _D010SINF.varcl  = rfctable_D010SINF[i].GetString("VARCL"); //
                    _D010SINF_LIST.Add(_D010SINF);
                }
                //for (int i = 0; i < source.RowCount; i++)
                //{
                //    source.CurrentIndex = i;
                //    SourceCode.Add(source.GetString("ZEILE"));
                //}

                //for (int i = 0; i < programlist.RowCount; i++)
                //{
                //    programlist.CurrentIndex = i;
                //    ProgramList.Add(programlist.GetString("OBJ_NAME"));
                //}
                return(_TRDIR_LIST);
            }
            catch (RfcAbapException abapException)
            {
                throw new SAPException(abapException.Key + abapException.Message);
            }
            catch (Exception)
            {
                throw;
            }
        }
예제 #25
0
 // Methods
 public QueryHelper(string sysName)
 {
     this._des = SAPDestination.GetDesByName(sysName);
 }