使用 SSIS 从外部系统将深层数据结构传递给 ABAP SOAP Provider

Passing deep data structures to ABAP SOAP Provider from external system using SSIS

我们需要使用 SSIS 将深层数据结构从外部系统传递到 SAP。由于我的同事告诉我 SSIS 没有任何类似于 ABAP 结构或表的数据类型,我们的第一种方法是将 XML 文件作为字符串传递。

然而问题出现了,SSIS 对字符串有 5000 个字符的限制,因此这种方法也是徒劳的。

然后他建议将 xml 字符串作为“Object”类型传递,因为那里不存在此类限制。

不幸的是,在 ABAP 中,无法使用我可以尝试进行一些转换的通用参数来参数化 RFC 函数模块。而且FM的导入字符串参数不能传Object类型,不知道object对应的字典数据类型是什么,其实我觉得是none。有没有办法解决这个问题?

我想到的最后一个方法是拆分字符串并多次调用 fm 每次存储字符串。但是,有人告诉我在 SSIS 中也不可能拆分字符串。我有点怀疑 SSIS 是否真的有所有这些缺点,因为这些缺点听起来更像是基本功能,但我知道什么......(关于 SSIS,一无所知)

有人知道如何将深层结构传递给 ABAP SOAP Provider 吗?

干杯

在这种情况下使用脚本组件上传字符串xml。

使用 sql 构建 XML,如 post 中所定义:

https://www.sqlshack.com/for-xml-path-clause-in-sql-server/

如何将 SQL 和 return 执行到字符串中:

            string uploadSOAP = "";
            using (OleDbConnection conn = new OleDbConnection([your conn string]))
            {
                string sql = [your XML SQL query];
                using (OleDbCommand cmd = new OleDbCommand(sql, conn))
                {
                    cmd.CommandType = CommandType.Text;
                    conn.Open();
                    uploadSOAP = (string) cmd.ExecuteScaler();
                }
            }

现在如何上传该字符串:

WebClient wc = new WebClient();
//wc.Credentials = new NetworkCredential([username],[password]);
wc.UploadString([url to upload to],uploadSOAP);

要添加的命名空间(在使用部分):

System.Data.OleDb;
System.Net;

备注:

  1. ExecuteScalar() return在 XML 路径的情况下,第 1 行和第 1 列的值是整个 xml 字符串
  2. 字符串数据类型在 C# 中确实没有限制。我在某些地方看到它是 2GB 的数据。如果您变得更大,则可以转换为流,然后使用 uploadData。
  3. 我将插入一段用于添加凭据的注释掉的代码。