【问题标题】:.Net SAP Transaction restart from client.Net SAP Transaction 从客户端重新启动
【发布时间】:2021-11-24 13:17:24
【问题描述】:

我正在使用 .Net NCo 3.0 库,我尝试了一个 tRFC 示例,其中我看到创建了事务 ID 并与 RFC 函数关联,然后调用,在成功事务后,事务 ID 被删除,这里我们为每个tRFC操作维护数据库中的Transaction详细信息,所以,在这种情况下,如果事务失败,我们可以从数据库中获取ID,我们可以重试,我想知道重试机制的代码实现,有SAP服务器关闭的可能性,因此何时以及如何重新启动并确保启动的事务只执行一次,不丢失数据,不重复。

TidStore tidStore = new TidStore("clientTidStore", false);

 static RfcTransaction CreateTransaction(TidStore tidStore, out string data)
        {
            RfcTransaction trans = new RfcTransaction(); // This creates a fresh TID.;
            Console.Write("Please enter some input data: ");
            data = Console.ReadLine();

            FileStream dataFile = new FileStream(trans.Tid.TID, FileMode.Create, FileAccess.ReadWrite);
            byte[] utf8Data = Encoding.UTF8.GetBytes(data);
            dataFile.Write(utf8Data, 0, utf8Data.Length);
            dataFile.Close();
            tidStore.CreateEntry(trans.Tid.TID);
            return trans;
        }

        private void SubmitTransaction(RfcTransaction trans, TidStore tidStore, String data)
        {
            try
            {
                IRfcTable dataTable = stfc_write_to_tcpic.GetTable("TCPICDAT");
                dataTable.Append();
                dataTable.SetValue(0, data);

                // Insert the function module into the transaction:
                trans.AddFunction(stfc_write_to_tcpic);
                stfc_write_to_tcpic = (IRfcFunction)stfc_write_to_tcpic.Clone();
                dataTable = stfc_write_to_tcpic.GetTable("TCPICDAT");
                dataTable.SetValue(0, data + " -- data of the second function module");
                trans.AddFunction(stfc_write_to_tcpic);
                trans.Commit(_ECCsystem);
                tidStore.SetStatus(trans.Tid.TID, TidStatus.Committed, null);

                File.Delete(trans.Tid.TID);
                _ECCsystem.ConfirmTransactionID(trans.Tid);
                tidStore.DeleteEntry(trans.Tid.TID);
            }
            catch (Exception e)
            {
                tidStore.SetStatus(trans.Tid.TID, TidStatus.RolledBack, e.Message);
            }
        }
    }
}
    

【问题讨论】:

  • 您的 SAP 专家非常了解 SAP 的哪个部分? ;-) 如果您查看 NCO 文档,则没有关于“事务管理”的内容。可能是类型为 RfcUnitType.TRANSACTIONAL 的 bgRfc? (基本上,没有任何变化,它仍然是事务性的)最好给你的 SAP 专家发送电子邮件。
  • 嗨@SandraRossi 它不在 NCO 中,但它可能是我们需要以不同方式设计的 SAP 概念。
  • 很遗憾,只有“事务管理”这两个词,而且如果您只使用 SAP 和 NCO 等非常通用的标签,很难找到合适的人来回答您的问题。我添加了标签“saprfc”,让我们看看它是否更适合你......
  • 谢谢@SandraRossi,我还需要有关使用 NCO 的 IDOC、tRFC 客户端和服务器的知识,您是否有任何文档链接和代码参考,我有使用 IDoc 而不是 tRFC 的要求。
  • NCO 文档随 NCO 软件下载一起提供。关于 IDoc,我认为您应该使用 IDoc 启用 RFC 的函数,您可以在 SAP Community 中获得一些帮助以获取函数的名称,或者如果您愿意,可以在这里提出单独的问题。

标签: c# .net saprfc sap-dotnet-connector


【解决方案1】:

您需要创建自己的函数,并设置一个时间间隔来检查哪些 TID 尚未处理。

【讨论】:

    【解决方案2】:

    关于在外部程序端处理和实现SAP事务处理,我认为SAP NetWeaver RFC SDK 7.50 Programming Guide中有一些一般性的解释,很有帮助。 请参阅第 4.3、4.4 和 5.5 章。它比SAP .NET Connector 3.0 Programming Guide 中的解释更详细,也可以很容易地适应 NCo 编程 API。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-06
      • 2012-06-25
      • 2014-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多