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

问题描述

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

然而,问题出现了,SSIS 对字符串有 5000 个字符的限制,这使得这种方法也无济于事。

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

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

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

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

干杯

解决方法

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

使用本文中定义的 sql 构建 XML:

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

如何执行该 SQL 并返回一个字符串:

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