逻辑应用程序中的存储过程输出分割的xml对象

时间:2017-07-12 11:44:53

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

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

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

在SQL Server Management Studio中,我在SQL select语句后面有var s = Container.Resolve<SampleClass>(); s.ConnectivitySyncMainLHBackgroundingCode();

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

下面是截图:

enter image description here

3 个答案:

答案 0 :(得分:0)

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

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

  

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

我实现了一个简单的Function App来处理输出并将其合并为单个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());
    }

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

enter image description here

快乐的编码!

答案 1 :(得分:0)

Jakub的解决方案确实是解决它的一种方法,但需要额外的成本(用于调用函数的azure函数和逻辑app动作)。

另一种方法是将SQL作为base64字符串从SQL返回。这样您就可以在Logic App中使用base64ToString和xml函数。

答案 2 :(得分:0)

Azure功能解决方案运行良好,我只是编码它的描述方式。唯一困难的部分是让参考在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());
}