使用 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();
}
我知道使用 .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();
}