使用 SAP 3.0 .NET 连接器调用 SAP transaction/program

Call a SAP transaction/program with the SAP 3.0 .NET Connector

我知道使用 .NCo 3.0 调用 RFC 函数的选项,但是可以直接使用 SAP 连接器调用 transactions/programs 吗? (比如使用SAP中定义的字段作为参数并填充它们,或者使用变体,像这样?)。

This answer 提供了一种我知道的解决方法,并且可以肯定 - 我可以从我的 C# 代码调用 VBScript,但这不是我想要做的。 我还检查了所有带有 sap-connector 标记的 64 个问题,但无论是否可能,都没有直接的答案。

此外,我从 SAP 市场获得的 SAP 文档根本没有提及 transactions/programs。这是否意味着它不是 wanted/possible?

如果是这样,为什么可以使用 macros/pre-recorded VBScript 而不是 .NET-Connector 来实现?还是我做错了什么?

当我尝试使用标准代码调用 program/transaction 时:

SAPHandle.ECCDestinationConfig cfg = new SAPHandle.ECCDestinationConfig();

RfcDestinationManager.RegisterDestinationConfiguration(cfg);

RfcDestination dest = RfcDestinationManager.GetDestination("QP2");

dest.Ping(); //works fine -> Connection is OK

RfcRepository repo = dest.Repository;

IRfcFunction zzmkalzzm23fnc = repo.CreateFunction("ZMZKALZZM23");

它给了我以下(预期的)错误:

metadata for function ZMZKALZZM23 not available: FU_NOT_FOUND: function module ZMZKALZZM23 is not available

CreateFunction,顾名思义,创建一个代理来调用SAP系统中启用远程的功能模块。您不能以这种方式调用事务或程序。我不知道有什么方法可以用 SAP .Net Connector 调用报告。您链接的解决方案使用 SAP Gui,它为 SAP 系统提供 UI 来显示图形元素。 AFAIK,SAP NCo 不提供这样的接口,您不能从 NCo 调用报告。

但是,有些产品允许您执行交易并捕获其输出。我们正在使用产品 Theobald Xtract 提取 SAP ERP 数据用于 BI 目的,但他们也有一个更通用的 .Net 库 (Theobald ERPConnect) 可用,可能能够提供此功能。它不像调用函数和提取强类型数据那么简单,但通过一些过滤,您应该能够获得所需的输出。这些产品并不便宜,但它们确实提供了一组不错的功能,否则您将不得不重新发明自己。

一些示例代码如何调用您最终通过 VBS 脚本调用的事务。 来自 Theobald ERPConnect Knowledgbase:

private void button1_Click(object sender, System.EventArgs e)
{
    // Reset the batch steps
    transaction1.BatchSteps.Clear();

    // fill new steps
    transaction1.ExecutionMode =    ERPConnect.Utils.TransactionDialogMode.ShowOnlyErrors;
    transaction1.TCode = "MMBE";
    transaction1.AddStepSetNewDynpro("RMMMBEST","1000");
    transaction1.AddStepSetOKCode("ONLI");
    transaction1.AddStepSetCursor("MS_WERKS-LOW");
    transaction1.AddStepSetField("MS_MATNR-LOW",textBox1.Text);
    transaction1.AddStepSetField("MS_WERKS-LOW",textBox2.Text);

    // connect to SAP
    r3Connection1.UseGui = true;

   R3Connection r3Connection1= new R3Connection("SAPServer",00,"SAPUser","Password","EN","800");
     r3Connection1.Open(false);
     // Run
     transaction1.Execut e();

}