2017-07-12 50 views
0

我編寫了一個邏輯應用程序,用於在本地網關上執行本地數據庫中的存儲過程。在SQL Server Management Studio中,我將結果作爲完整的xml對象獲得。邏輯應用程序中的存儲過程輸出拆分的xml對象

但是,當我在Azure邏輯應用程序中執行該存儲過程時,我的同一個xml對象的結果被拆分爲多個json對象,而不是一個帶有完整xml字符串的json對象。

在SQL Server Management Studio中,我在SQL select語句之後有FOR XML RAW, Root('<RootName>')

這是爲什麼,我該如何解決這個問題?

下面是截圖:

enter image description here

回答

0

我通過實現簡單的功能應用到固定輸出解決了類似的問題。

在我的情況下,它是由SQL查詢FOR JSON AUTO生成的JSON,但您應該可以將其應用於XML。下面的文章中提到,

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

我實現一個簡單的功能應用程序來處理該輸出並將其合併成單個JSON有效載荷。

這裏是我的功能的代碼,這是一個通用的網絡掛接函數:

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()); 
    } 

然後,你可以把它添加到你的邏輯應用程序,通過從存儲過程的結果,並使用輸出的下一個活動:

enter image description here

編碼愉快!

+0

是的,我在想一個類似的解決方案,但希望能夠做到這一點沒有這樣的解決方案,但我想這就是我將不得不這樣做。我會用類似的東西來測試,謝謝@Jakub! :) – John

0

Jakub的解決方案的確是解決這個問題的一種方法,但是需要額外的成本(天藍色的函數和邏輯應用動作來調用函數)。

另一種方法是從SQL返回XML作爲base64字符串。這樣你可以在Logic App中使用base64ToString和xml函數。

+0

好吧,現在我可以住。有沒有辦法直接在存儲過程上使用base64ToString?就像在同一個查詢中可以這麼說? 謝謝@StevenVanEycken – John

+0

好吧,我已經嘗試過了,base64tostring仍然變得很長,邏輯應用程序處理。它將編碼的xml分割成與之前的xml一樣多的分割。 – John

+0

嗯,我並不期待這種行爲。我想知道數據操作撰寫和加入是否可以幫助你。我現在沒有時間自己嘗試一下,但本週末將嘗試POC。 –