繁体   English   中英

使用 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 字符串作为“对象”类型传递,因为那里不存在这样的限制。

不幸的是,在 ABAP 中,无法使用通用参数参数化 RFC Function 模块,我可以从那里尝试进行一些转换。 另外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);

要添加的命名空间(在 using 部分中):

System.Data.OleDb;
System.Net;

笔记:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM