首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用sap.connector.dll的SAP命令

使用sap.connector.dll的SAP命令
EN

Stack Overflow用户
提问于 2015-05-13 05:52:20
回答 1查看 1.9K关注 0票数 0

想寻求您的帮助,并要求命令使用启动和调用一个rfc功能。我已经下载了文件sap.connector.dll并利用它。我浏览网络,找不到或执行SAP组件。有办法只执行命令吗?

EN

回答 1

Stack Overflow用户

发布于 2015-05-13 06:10:23

你可以试试这个。我正在使用这些DLL,这是SAP连接器附带的

  • rscp4n.dll
  • sapnco.dll
  • sapnco_utils.dll

如果需要使用这些连接细节调用SAP事务,可以尝试以下操作。

代码语言:javascript
复制
public void ExecuteTransaction(string tCode, string input)
        {
            int sub = 0;
            try
            {
                tCode = "YOUR Transaction Code";
                RfcConfigParameters rfc = new RfcConfigParameters();
                rfc.Add(RfcConfigParameters.Name, "BOXName");
                rfc.Add(RfcConfigParameters.AppServerHost, "HOST");
                rfc.Add(RfcConfigParameters.SAPRouter, "YOUR ROUTER STRING");
                rfc.Add(RfcConfigParameters.Client, "CLIENT");
                rfc.Add(RfcConfigParameters.UseSAPGui, "1");
                rfc.Add(RfcConfigParameters.User, "SAP USERNAME");
                rfc.Add(RfcConfigParameters.Password, "PW");
                rfc.Add(RfcConfigParameters.SystemNumber, "SYS NUMBER");
                rfc.Add(RfcConfigParameters.Language, "EN");
                rfc.Add(RfcConfigParameters.PoolSize, "5");

                //rfc.Add(RfcConfigParameters.IdleCheckTime, "0");

                RfcDestination rfcDest = RfcDestinationManager.GetDestination(rfc);
                //rfcDest.Ping();
                RfcRepository rfcRep = rfcDest.Repository;



                IRfcFunction funcArtikel =  rfcRep.CreateFunction("ABAP4_CALL_TRANSACTION");
                //IRfcTable itab = funcArtikel.GetTable("SPAGPA_TAB");
                funcArtikel.SetValue("TCODE", tCode);
                funcArtikel.SetValue("MODE_VAL", "A");
                funcArtikel.SetValue("UPDATE_VAL", "A");
                funcArtikel.SetValue("SKIP_SCREEN", "X");
                //itab.Append();
                //itab.SetValue("PARID", "PARAMETER NAME");
                //itab.SetValue("PARVAL", VALUE);
                //funcArtikel.SetValue("SPAGPA_TAB", itab);
                funcArtikel.Invoke(rfcDest);

            }
            catch (Exception ex)
            {
                lblError.Text = ex.ToString();
                //throw ex;   
            }
        }

在这里,我注释了一些代码,因为它用于从SAP获取一些值(数据集),如果需要的话,可以使用RFC表来实现它们。

不要更改以下代码集。它是RFC calls.You的默认SAP事务,它可以更改您需要的任何TCODE。

代码语言:javascript
复制
 IRfcFunction funcArtikel =  rfcRep.CreateFunction("ABAP4_CALL_TRANSACTION");
                    //IRfcTable itab = funcArtikel.GetTable("SPAGPA_TAB");
                    funcArtikel.SetValue("TCODE", tCode);
                    funcArtikel.SetValue("MODE_VAL", "A");
                    funcArtikel.SetValue("UPDATE_VAL", "A");
                    funcArtikel.SetValue("SKIP_SCREEN", "X");

如果您使用IrfcTable检索一些数据,您可能需要将IRfcTable转换为DataTable,因此您可以使用以下..

代码语言:javascript
复制
public static class IRfcTableExtentions
    {
        /// <summary>
        /// Converts SAP table to .NET DataTable table
        /// </summary>
        /// <param name="sapTable">The SAP table to convert.</param>
        /// <returns></returns>
        public static DataTable ToDataTable(this IRfcTable sapTable, string name)
        {
            DataTable adoTable = new DataTable(name);
            //... Create ADO.Net table.
            for (int liElement = 0; liElement < sapTable.ElementCount; liElement++)
            {
                RfcElementMetadata metadata = sapTable.GetElementMetadata(liElement);
                adoTable.Columns.Add(metadata.Name, GetDataType(metadata.DataType));
            }

            //Transfer rows from SAP Table ADO.Net table.
            foreach (IRfcStructure row in sapTable)
            {
                DataRow ldr = adoTable.NewRow();
                for (int liElement = 0; liElement < sapTable.ElementCount; liElement++)
                {
                    RfcElementMetadata metadata = sapTable.GetElementMetadata(liElement);

                    switch (metadata.DataType)
                    {
                        case RfcDataType.DATE:
                            ldr[metadata.Name] = row.GetString(metadata.Name).Substring(0, 4) + row.GetString(metadata.Name).Substring(5, 2) + row.GetString(metadata.Name).Substring(8, 2);
                            break;
                        case RfcDataType.BCD:
                            ldr[metadata.Name] = row.GetDecimal(metadata.Name);
                            break;
                        case RfcDataType.CHAR:
                            ldr[metadata.Name] = row.GetString(metadata.Name);
                            break;
                        case RfcDataType.STRING:
                            ldr[metadata.Name] = row.GetString(metadata.Name);
                            break;
                        case RfcDataType.INT2:
                            ldr[metadata.Name] = row.GetInt(metadata.Name);
                            break;
                        case RfcDataType.INT4:
                            ldr[metadata.Name] = row.GetInt(metadata.Name);
                            break;
                        case RfcDataType.FLOAT:
                            ldr[metadata.Name] = row.GetDouble(metadata.Name);
                            break;
                        default:
                            ldr[metadata.Name] = row.GetString(metadata.Name);
                            break;
                    }
                }
                adoTable.Rows.Add(ldr);
            }
            return adoTable;
        }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30206689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档