【问题标题】:Stored procedure in logic app outputs splitted xml object逻辑应用中的存储过程输出拆分的 xml 对象
【发布时间】:2017-07-12 11:44:53
【问题描述】:

我编写了一个逻辑应用程序,它使用本地网关在本地数据库中执行存储过程。在 SQL Server Management Studio 中,我得到了一个完整的 xml 对象的结果。

但是当我在 Azure 逻辑应用程序中执行该存储过程时,我的同一个 xml 对象的结果被拆分为多个 json 对象,而不是一个包含完整 xml 字符串的 json 对象。

在 SQL Server Management Studio 中,我在 SQL 选择语句之后有 FOR XML RAW, Root('<RootName>')

为什么会这样,我该如何解决这个问题?

下面是截图:

【问题讨论】:

    标签: sql json xml stored-procedures azure-logic-apps


    【解决方案1】:

    我通过实现简单的 Function App 来修复输出解决了类似的问题。

    在我的例子中,它是由 SQL 查询 FOR JSON AUTO 生成的 JSON,但您应该能够将其应用于 XML。下面的文章提到了

    A large result set splits the long JSON string across multiple rows.

    我实现了一个简单的函数应用程序来处理输出并将其整合到单个 JSON 负载中。

    这是我的函数的代码,它是一个通用 Webhook 函数:

        public static async Task<object> Run(HttpRequestMessage req, TraceWriter log)
        {
            log.Info($"ProcessSentimentJson was triggered!");
    
            string jsonContent = await req.Content.ReadAsStringAsync();
    
            StringBuilder sb = new StringBuilder();
            JArray array = JArray.Parse(jsonContent);
    
            List<string> list = array.Select(p => (string)p["JSON_F52E2B61-18A1-11d1-B105-00805F49916B"]).ToList();
            foreach (var l in list)
                sb.Append(l);
    
            return req.CreateResponse(HttpStatusCode.OK, sb.ToString());
        }
    

    然后您可以将其添加到您的逻辑应用程序中,传递存储过程中的结果并在下一个活动中使用输出:

    编码愉快!

    【讨论】:

    • 是的,我正在考虑一个类似的解决方案,但希望能够在没有这样的解决方案的情况下做到这一点,但我想这就是我必须这样做的方式。我会用类似的东西进行测试,谢谢@Jakub! :)
    【解决方案2】:

    Jakub 的解决方案确实是解决它的一种方法,但需要额外的成本(天蓝色函数和调用函数的逻辑应用操作)。

    另一种方法是从 SQL 返回 XML 作为 base64 字符串。这样您就可以在逻辑应用程序中使用 base64ToString 和 xml 函数。

    【讨论】:

    • 好的,现在我可以忍受了。有没有办法直接在存储过程上使用 base64ToString?如在同一个查询中可以这么说?谢谢@StevenVanEycken
    • 好的,所以我已经尝试过了,base64tostring 对于逻辑应用程序来说仍然很长,无法处理。它将编码的 xml 拆分为与其之前的 xml 一样多。
    • 嗯,我没想到会有这种行为。我想知道 Data Operations Compose & Join 是否对您有所帮助。我目前没有时间亲自尝试,但会在本周末尝试 POC。
    • 嗨@stevenvaneycken,只是想知道你有没有接触过那个POC? :)
    【解决方案3】:

    Azure Function 解决方案效果很好,我只是按照描述的方式对其进行了编码。唯一困难的部分是让参考在 azure 中工作。注意:这适用于任何类型的字符串数据,我使用的是 XML。

    这是我使用的代码:

    #r "Newtonsoft.Json"
    #r "System.Xml.Linq"
    #r "System.Linq"
    
    using System;
    using System.Net;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;
    using System.Text;
    using System.Xml.Linq;
    using System.Linq;
    
    public static async Task<object> Run(HttpRequestMessage req, TraceWriter log)
    {
        log.Info($"Webhook Combine Messages was triggered!");
    
        string jsonContent = await req.Content.ReadAsStringAsync();
    
        StringBuilder sb = new StringBuilder();
        JArray array = JArray.Parse(jsonContent);
    
        List<string> list = array.Select(p => (string)p["XML_F52E2B61-18A1-11d1-B105-00805F49916B"]).ToList();
        foreach (var l in list)
            sb.Append(l);
    
        return req.CreateResponse(HttpStatusCode.OK, sb.ToString());
    }
    

    【讨论】:

      猜你喜欢
      • 2021-08-09
      • 2011-05-28
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 2013-12-05
      • 2011-11-04
      • 2022-06-10
      • 2010-10-02
      相关资源
      最近更新 更多